transition from site-mirzaev
							
								
								
									
										33
									
								
								mirzaev/site/account/system/public/css/account.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,33 @@ | ||||
| section#account { | ||||
|     z-index : 10000; | ||||
|     right   : 40px; | ||||
|     bottom  : 40px; | ||||
|     position: absolute; | ||||
|     display : flex; | ||||
| } | ||||
|  | ||||
| section#account>button#login { | ||||
|     width           : 80px; | ||||
|     height          : 80px; | ||||
|     display         : flex; | ||||
|     border-radius   : 100%; | ||||
|     cursor          : pointer; | ||||
|     overflow        : hidden; | ||||
|     background-color: var(--background-inverse); | ||||
| } | ||||
|  | ||||
| section#account>button#login>i.icon.authentication { | ||||
|     width           : 12px; | ||||
|     margin          : auto; | ||||
|     color           : var(--text-inverse); | ||||
|     background-color: unset; | ||||
| } | ||||
|  | ||||
| section#account>button#login:hover>i.icon.authentication { | ||||
|     background-color: var(--grey-dark); | ||||
| } | ||||
|  | ||||
|  | ||||
| section#account>button#login:active>i.icon.authentication { | ||||
|     background-color: unset; | ||||
| } | ||||
							
								
								
									
										52
									
								
								mirzaev/site/account/system/public/css/books.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,52 @@ | ||||
| main>section#books { | ||||
|     display: flex; | ||||
|     flex-flow: row wrap; | ||||
| } | ||||
|  | ||||
| main>section#books>* { | ||||
|     margin-bottom: 20px; | ||||
| } | ||||
|  | ||||
| main>section#books>form.upload { | ||||
|     width: calc(100% / 3 - 20px - 9px * 2); | ||||
|     height: calc(220px - 9px * 2); | ||||
|     margin: 5px; | ||||
|     margin-right: 20px; | ||||
| } | ||||
|  | ||||
| main>section#books>form.upload>p { | ||||
|     font-size: 3rem; | ||||
|     height: 0.3rem; | ||||
|     line-height: 0; | ||||
| } | ||||
|  | ||||
| main>section#books>article.book { | ||||
|     width: calc(100% / 3 - 20px); | ||||
|     margin-right: 20px; | ||||
|     display: flex; | ||||
|     flex-direction: column; | ||||
| } | ||||
|  | ||||
| main>section#books>article.book:nth-child(3) { | ||||
|     width: calc(100% / 3); | ||||
|     margin-right: unset; | ||||
| } | ||||
|  | ||||
| main>section#books>article.book>img { | ||||
|     height: 220px; | ||||
|     object-fit: cover; | ||||
|     object-position: right; | ||||
|     overflow: hidden; | ||||
|     clip-path: polygon(5px calc(100% - 5px), calc(100% - 5px) calc(100% - 5px), calc(100% - 5px) 5px, 5px 5px); | ||||
| } | ||||
|  | ||||
| main>section#books>article.book>h4 { | ||||
|     margin-top: 5px; | ||||
|     margin-bottom: 10px; | ||||
|     height: 50px; | ||||
|     text-align: center; | ||||
| } | ||||
|  | ||||
| main>section#books>article.book>p { | ||||
|     margin: unset; | ||||
| } | ||||
							
								
								
									
										244
									
								
								mirzaev/site/account/system/public/css/graph.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,244 @@ | ||||
| @keyframes node-select { | ||||
|     from { | ||||
|         outline-offset: 0px; | ||||
|     } | ||||
|  | ||||
|     to { | ||||
|         outline       : 2px solid var(--grey-light); | ||||
|         outline-offset: 10px; | ||||
|     } | ||||
| } | ||||
|  | ||||
| @keyframes node-select-revert { | ||||
|     from { | ||||
|         outline       : 2px solid var(--grey-light); | ||||
|         outline-offset: 10px; | ||||
|     } | ||||
|  | ||||
|     to { | ||||
|         outline-offset: 0px; | ||||
|     } | ||||
| } | ||||
|  | ||||
| @keyframes description-select { | ||||
|     from { | ||||
|         outline-offset: 0px; | ||||
|     } | ||||
|  | ||||
|     to { | ||||
|         outline       : 2px solid var(--grey); | ||||
|         outline-offset: 10px; | ||||
|     } | ||||
| } | ||||
|  | ||||
| @keyframes description-select-revert { | ||||
|     from { | ||||
|         outline       : 2px solid var(--grey); | ||||
|         outline-offset: 10px; | ||||
|     } | ||||
|  | ||||
|     to { | ||||
|         outline-offset: 0px; | ||||
|     } | ||||
| } | ||||
|  | ||||
| section.graph { | ||||
|     width     : 100vw; | ||||
|     height    : 100vh; | ||||
|     position  : absolute; | ||||
|     transition: unset; | ||||
| } | ||||
|  | ||||
| section.graph * { | ||||
|     transition: unset; | ||||
| } | ||||
|  | ||||
| section.graph:active { | ||||
|     cursor: move; | ||||
| } | ||||
|  | ||||
| section.graph article.node { | ||||
|     z-index                  : 500; | ||||
|     position                 : absolute; | ||||
|     display                  : flex; | ||||
|     cursor                   : grab; | ||||
|     border-radius            : 100%; | ||||
|     background-color         : var(--node-background); | ||||
| } | ||||
|  | ||||
| section.graph article.node.animated { | ||||
|     animation-duration       : 0.1s; | ||||
|     animation-name           : node-select-revert; | ||||
|     animation-fill-mode      : forwards; | ||||
| } | ||||
|  | ||||
| section.graph article.node.animated:hover { | ||||
|     animation-duration       : 0.1s; | ||||
|     animation-name           : node-select; | ||||
|     animation-fill-mode      : forwards; | ||||
| } | ||||
|  | ||||
| section.graph article.node:active { | ||||
|     cursor          : grabbing; | ||||
|     background-color: var(--node-background-important); | ||||
| } | ||||
|  | ||||
| section.graph article.node>h4.title { | ||||
|     margin    : auto; | ||||
|     text-align: center; | ||||
|     cursor    : pointer; | ||||
| } | ||||
|  | ||||
| section.graph article.node>div.description { | ||||
|     z-index         : 1000; | ||||
|     position        : absolute; | ||||
|     text-align      : justify; | ||||
|     text-align-last : center; | ||||
|     border-radius   : 100%; | ||||
|     overflow        : hidden; | ||||
|     background-color: var(--node-background-completed); | ||||
| } | ||||
|  | ||||
| /* section.graph article.node>div.description.animated { | ||||
|     animation-duration       : 0.1s; | ||||
|     animation-name           : description-select-revert; | ||||
|     animation-fill-mode      : forwards; | ||||
| } | ||||
|  | ||||
| section.graph article.node>div.description.animated:hover { | ||||
|     animation-duration       : 0.1s; | ||||
|     animation-name           : description-select; | ||||
|     animation-fill-mode      : forwards; | ||||
| } */ | ||||
|  | ||||
| section.graph article.node * { | ||||
|     transition: 0.1s ease-in; | ||||
| } | ||||
|  | ||||
| section.graph article.node>div.description>span.wrapper { | ||||
|     width       : 50%; | ||||
|     height      : 100%; | ||||
|     shape-margin: 15px; | ||||
| } | ||||
|  | ||||
| section.graph article.node>div.description>span.left.wrapper { | ||||
|     float        : left; | ||||
|     shape-outside: polygon(100% 0%, 0% 0%, 0% 100%, 100% 100%, 68% 98%, 38% 90%, 10% 72%, 0% 50%, 10% 28%, 20% 20%, 100% 20%); | ||||
| } | ||||
|  | ||||
| section.graph article.node>div.description>span.right.wrapper { | ||||
|     float        : right; | ||||
|     shape-outside: polygon(0% 100%, 100% 100%, 100% 0%, 0% 0%, 0% 20%, 82% 20%, 90% 28%, 100% 50%, 90% 72%, 60% 90%, 32% 98%); | ||||
| } | ||||
|  | ||||
| section.graph article.node>div.description>p { | ||||
|     z-index   : 1500; | ||||
|     position  : relative; | ||||
|     margin    : 0; | ||||
|     opacity   : 0; | ||||
|     word-break: break-all; | ||||
|     color     : var(--text-inverse); | ||||
| } | ||||
|  | ||||
| section.graph article.node>div.description:hover>p { | ||||
|     opacity: 1; | ||||
| } | ||||
|  | ||||
| section.graph article.node>div.description>a.source { | ||||
|     z-index    : 2000; | ||||
|     top        : calc(20% - 1.3em + (1em - 1.3ex)); | ||||
|     left       : 0; | ||||
|     position   : absolute; | ||||
|     font-weight: bold; | ||||
|     font-size  : 1.3em; | ||||
|     opacity    : 0; | ||||
| } | ||||
|  | ||||
| section.graph article.node.white>div.description>a.source { | ||||
|     color: var(--text-inverse); | ||||
| } | ||||
|  | ||||
| section.graph article.node.white>div.description>a.source:active { | ||||
|     color: var(--text-inverse-active); | ||||
| } | ||||
|  | ||||
| section.graph article.node.white>div.description>a.source:hover { | ||||
|     color: var(--text-inverse-hover); | ||||
| } | ||||
|  | ||||
| section.graph article.node.red>div.description>a.source { | ||||
|     color: var(--text-red); | ||||
| } | ||||
|  | ||||
| section.graph article.node.red>div.description>a.source:active { | ||||
|     color: var(--text-red-active); | ||||
| } | ||||
|  | ||||
| section.graph article.node.red>div.description>a.source:hover { | ||||
|     color: var(--text-red-hover); | ||||
| } | ||||
|  | ||||
| section.graph article.node>div.description>a.source.red:active { | ||||
|     color: var(--text-red-active); | ||||
| } | ||||
|  | ||||
| section.graph article.node>div.description:hover>a.source { | ||||
|     opacity: 1; | ||||
| } | ||||
|  | ||||
| section.graph article.node>div.description>a.source:visited ::after { | ||||
|     content         : ''; | ||||
|     width           : 100%; | ||||
|     height          : 100%; | ||||
|     background-color: var(--node-background-completed); | ||||
| } | ||||
|  | ||||
| section.graph article.node>div.description>img.cover { | ||||
|     left          : 0; | ||||
|     top           : 0; | ||||
|     position      : absolute; | ||||
|     width         : 100%; | ||||
|     height        : 100%; | ||||
|     object-fit    : cover; | ||||
|     pointer-events: none; | ||||
|     filter        : unset; | ||||
| } | ||||
|  | ||||
| section.graph article.node>div.description:hover>img.cover { | ||||
|     filter: blur(5px) brightness(0.5); | ||||
| } | ||||
|  | ||||
| section.graph article.node>i.close { | ||||
|     z-index   : -2000; | ||||
|     top       : -10%; | ||||
|     right     : -10%; | ||||
|     position  : absolute; | ||||
|     scale     : 0; | ||||
|     opacity   : 0; | ||||
|     cursor    : pointer; | ||||
|     color     : var(--text); | ||||
|     transition: 0.2s ease-out; | ||||
| } | ||||
|  | ||||
| section.graph article.node>i.close:hover { | ||||
|     scale     : 1.4 !important; | ||||
|     color     : var(--text-hover); | ||||
|     transition: 0.1s ease-in; | ||||
| } | ||||
|  | ||||
| section.graph article.node>i.close:active { | ||||
|     scale     : 1.2 !important; | ||||
|     color     : var(--text-active); | ||||
|     transition: unset; | ||||
| } | ||||
|  | ||||
| section.graph svg.connection { | ||||
|     z-index : -500; | ||||
|     position: absolute; | ||||
|     width   : 100%; | ||||
|     height  : 100%; | ||||
| } | ||||
|  | ||||
| section.graph svg.connection>line { | ||||
|     stroke: var(--connection); | ||||
| } | ||||
							
								
								
									
										31
									
								
								mirzaev/site/account/system/public/css/hotline.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,31 @@ | ||||
| section.hotline { | ||||
|     display: inline-flex; | ||||
|     height : 100%; | ||||
| } | ||||
|  | ||||
| section.hotline * { | ||||
|     transition: unset; | ||||
| } | ||||
|  | ||||
| section.hotline:last-child { | ||||
|     margin-bottom: unset; | ||||
| } | ||||
|  | ||||
| section.hotline>article { | ||||
|     margin-right    : 18px; | ||||
|     width           : 140px; | ||||
|     height          : 190px; | ||||
|     display         : flex; | ||||
|     align-self      : flex-end; | ||||
|     border-radius   : 3px; | ||||
|     background-color: var(--background-light-1); | ||||
|     box-shadow      : 0px -6px 6px rgba(0, 0, 0, 0.3); | ||||
| } | ||||
|  | ||||
| section.hotline>article:last-child { | ||||
|     margin-right: unset; | ||||
| } | ||||
|  | ||||
| section.hotline>article>* { | ||||
|     margin: auto; | ||||
| } | ||||
| @@ -0,0 +1,40 @@ | ||||
| .icon.authentication { | ||||
|     box-sizing                : border-box; | ||||
|     position                  : relative; | ||||
|     display                   : block; | ||||
|     transform                 : scale(var(--ggs, 1)); | ||||
|     width                     : 6px; | ||||
|     height                    : 16px; | ||||
|     border                    : 2px solid; | ||||
|     border-left               : 0; | ||||
|     border-top-right-radius   : 2px; | ||||
|     border-bottom-right-radius: 2px; | ||||
|     margin-right              : -10px | ||||
| } | ||||
|  | ||||
| .icon.authentication::after, | ||||
| .icon.authentication::before { | ||||
|     content   : ""; | ||||
|     display   : block; | ||||
|     box-sizing: border-box; | ||||
|     position  : absolute | ||||
| } | ||||
|  | ||||
| .icon.authentication::after { | ||||
|     border-top  : 2px solid; | ||||
|     border-right: 2px solid; | ||||
|     transform   : rotate(45deg); | ||||
|     width       : 8px; | ||||
|     height      : 8px; | ||||
|     left        : -8px; | ||||
|     bottom      : 2px | ||||
| } | ||||
|  | ||||
| .icon.authentication::before { | ||||
|     border-radius: 3px; | ||||
|     width        : 10px; | ||||
|     height       : 2px; | ||||
|     background   : currentColor; | ||||
|     left         : -11px; | ||||
|     bottom       : 5px | ||||
| } | ||||
							
								
								
									
										29
									
								
								mirzaev/site/account/system/public/css/icon_close.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,29 @@ | ||||
| .icon.close { | ||||
|     box-sizing   : border-box; | ||||
|     position     : relative; | ||||
|     display      : block; | ||||
|     transform    : scale(var(--ggs, 1)); | ||||
|     width        : 22px; | ||||
|     height       : 22px; | ||||
|     border       : 2px solid transparent; | ||||
|     border-radius: 40px | ||||
| } | ||||
|  | ||||
| .icon.close::after, | ||||
| .icon.close::before { | ||||
|     content      : ""; | ||||
|     display      : block; | ||||
|     box-sizing   : border-box; | ||||
|     position     : absolute; | ||||
|     width        : 16px; | ||||
|     height       : 2px; | ||||
|     background   : currentColor; | ||||
|     transform    : rotate(45deg); | ||||
|     border-radius: 5px; | ||||
|     top          : 8px; | ||||
|     left         : 1px | ||||
| } | ||||
|  | ||||
| .icon.close::after { | ||||
|     transform: rotate(-45deg) | ||||
| } | ||||
							
								
								
									
										185
									
								
								mirzaev/site/account/system/public/css/main.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,185 @@ | ||||
| @import url('/fonts/comissioner.ttf'); | ||||
|  | ||||
| @media (prefers-color-scheme: light) { | ||||
|     :root { | ||||
|         --background               : #eee; | ||||
|         --background-inverse       : #221e1e; | ||||
|         --background-inverse-dark  : #120f0f; | ||||
|         --node-background-important: #c3eac3; | ||||
|         --node-background-completed: #b0c0b0; | ||||
|         --node-background          : #bdb; | ||||
|         --connection               : #b2b7b2; | ||||
|         --connection-completed     : #d1d1d1; | ||||
|         --text                     : #131313; | ||||
|         --text-hover               : #292929; | ||||
|         --text-active              : #0c0c0c; | ||||
|         --text-inverse             : #e6e6e6; | ||||
|         --text-inverse-hover       : #fff; | ||||
|         --text-inverse-active      : #d0d0d0; | ||||
|         --text-red                 : #f8a2a2; | ||||
|         --text-red-hover           : #ffbcbc; | ||||
|         --text-red-active          : #e69191; | ||||
|         --link                     : #3c76ff; | ||||
|         --link-hover               : #6594ff; | ||||
|         --link-active              : #3064dd; | ||||
|     } | ||||
| } | ||||
|  | ||||
| @media (prefers-color-scheme: dark) { | ||||
|     :root { | ||||
|         --background-light-3: #403939; | ||||
|         --background-light-2: #322d2d; | ||||
|         --background-light-1: #2b2525; | ||||
|         --background-light  : #252020; | ||||
|         --background        : #221e1e; | ||||
|         --block-background  : ; | ||||
|         --node-background   : #221e1e; | ||||
|         --text              : #e6e6e6; | ||||
|         --text-hover        : #fff; | ||||
|         --text-active       : #d0d0d0; | ||||
|         --text-inverse      : 'dark'; | ||||
|         --red-light-1       : #dc4343; | ||||
|         --red-light         : #bf3737; | ||||
|         --red               : #a43333; | ||||
|         --red-dark          : #8d2a2a; | ||||
|     } | ||||
| } | ||||
|  | ||||
| :root { | ||||
|     --grey-light: #c0c0c0; | ||||
|     --grey      : #858585; | ||||
|     --grey-dark : #565656; | ||||
| } | ||||
|  | ||||
| * { | ||||
|     text-decoration: none; | ||||
|     outline        : none; | ||||
|     border         : none; | ||||
|     color          : var(--text); | ||||
|     font-family    : 'Commissioner', sans-serif; | ||||
|     transition     : 0.1s ease-out; | ||||
| } | ||||
|  | ||||
| .unselectable { | ||||
|     -webkit-touch-callout: none; | ||||
|     -webkit-user-select  : none; | ||||
|     -khtml-user-select   : none; | ||||
|     -moz-user-select     : none; | ||||
|     -ms-user-select      : none; | ||||
|     user-select          : none; | ||||
| } | ||||
|  | ||||
| a { | ||||
|     color: var(--link); | ||||
| } | ||||
|  | ||||
| a:hover { | ||||
|     color: var(--link-hover); | ||||
| } | ||||
|  | ||||
| a:active { | ||||
|     color: var(--link-active); | ||||
| } | ||||
|  | ||||
| body { | ||||
|     height          : 100vh; | ||||
|     margin          : 0; | ||||
|     overflow        : hidden; | ||||
|     background-color: var(--background); | ||||
| } | ||||
|  | ||||
| aside { | ||||
|     z-index    : 500; | ||||
|     grid-column: 1/ 4; | ||||
|     grid-row   : 2; | ||||
|     overflow   : hidden; | ||||
| } | ||||
|  | ||||
| header { | ||||
|     z-index       : 5000; | ||||
|     position      : absolute; | ||||
|     display       : flex; | ||||
|     flex-direction: column; | ||||
|     box-shadow    : 2px 0 5px rgba(0, 0, 0, 0.3); | ||||
| } | ||||
|  | ||||
| header>menu { | ||||
|     margin          : unset; | ||||
|     padding         : 20px; | ||||
|     display         : flex; | ||||
|     flex-direction  : column; | ||||
|     flex-grow       : 1; | ||||
|     background-color: var(--background-light-1); | ||||
| } | ||||
|  | ||||
| header>#account>button#login { | ||||
|     z-index: 1500; | ||||
| } | ||||
|  | ||||
| header>menu a { | ||||
|     margin-bottom: 8px; | ||||
|     display      : flex; | ||||
|     align-items  : center; | ||||
| } | ||||
|  | ||||
| header>menu a:last-child { | ||||
|     margin-bottom: unset; | ||||
| } | ||||
|  | ||||
| header>menu a svg { | ||||
|     margin-right: 8px; | ||||
|     height      : 1.2rem; | ||||
|     position    : relative; | ||||
| } | ||||
|  | ||||
| header>menu a:hover svg { | ||||
|     margin-left : -5px; | ||||
|     margin-right: 13px; | ||||
| } | ||||
|  | ||||
| header>menu a svg path { | ||||
|     fill: var(--text); | ||||
| } | ||||
|  | ||||
| header>section { | ||||
|     background-color: var(--background-light-1); | ||||
| } | ||||
|  | ||||
| header :is(button, a[type="button"]) { | ||||
|     width           : 100%; | ||||
|     height          : 40px; | ||||
|     display         : flex; | ||||
|     justify-content : center; | ||||
|     align-items     : center; | ||||
|     cursor          : pointer; | ||||
|     background-color: var(--red); | ||||
|     transition      : unset; | ||||
| } | ||||
|  | ||||
| header button { | ||||
|     font-weight   : bold; | ||||
|     text-transform: uppercase; | ||||
| } | ||||
|  | ||||
| header :is(button, a[type="button"]):hover { | ||||
|     background-color: var(--red-light); | ||||
| } | ||||
|  | ||||
| header :is(button, a[type="button"]):active { | ||||
|     background-color: var(--red-dark); | ||||
| } | ||||
|  | ||||
| header>nav { | ||||
|     margin-top    : auto; | ||||
|     display       : flex; | ||||
|     flex-direction: column; | ||||
| } | ||||
|  | ||||
| main { | ||||
|     z-index: 1000; | ||||
| } | ||||
|  | ||||
| footer { | ||||
|     z-index : 3000; | ||||
|     position: absolute; | ||||
| } | ||||
							
								
								
									
										33
									
								
								mirzaev/site/account/system/public/css/upload.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,33 @@ | ||||
| form.upload { | ||||
|     width: 100%; | ||||
|     height: 100px; | ||||
|     position: relative; | ||||
|     display: flex; | ||||
|     border: 4px dashed #e5ddd1; | ||||
| } | ||||
|  | ||||
| form.upload:hover { | ||||
|     background-color: #ccc6bd; | ||||
|     border: 4px dashed #fff7ea; | ||||
| } | ||||
|  | ||||
| form.upload>p { | ||||
|     margin: auto; | ||||
|     font-weight: bold; | ||||
|     color: #eee6d9; | ||||
| } | ||||
|  | ||||
| form.upload:hover>p { | ||||
|     color: #fff7ea; | ||||
| } | ||||
|  | ||||
| form.upload>input { | ||||
|     width: 100%; | ||||
|     height: 100%; | ||||
|     position: absolute; | ||||
|     opacity: 0; | ||||
| } | ||||
|  | ||||
| form.upload:hover>input { | ||||
|     cursor: pointer; | ||||
| } | ||||
							
								
								
									
										
											BIN
										
									
								
								mirzaev/site/account/system/public/fonts/commissioner.ttf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										1
									
								
								mirzaev/site/account/system/public/images/botnet.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | ||||
| <svg height="32" width="32" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><path fill="none" d="M0 0h32v32H0z"/><path d="M30 17.349V12h-2v-2h2V2H2v8h2v2H2v8h2v2H2v8h15.349A8.97 8.97 0 0 0 23 32a9.002 9.002 0 0 0 9-9 8.968 8.968 0 0 0-2-5.651zM14.059 22H6v-2h8.522a8.932 8.932 0 0 0-.463 2zM26 12H6v-2h20v2zM4 6h4v2H4V6zm0 10h4v2H4v-2zm4 12H4v-2h4v2zm15 1.883A6.898 6.898 0 0 1 16.115 23 6.898 6.898 0 0 1 23 16.115 6.898 6.898 0 0 1 29.883 23 6.898 6.898 0 0 1 23 29.883z"/><path d="m19 25 2 2 2-2 2 2 2-2-2-2 2-2-2-2-2 2-2-2-2 2 2 2z"/></svg> | ||||
| After Width: | Height: | Size: 552 B | 
							
								
								
									
										1
									
								
								mirzaev/site/account/system/public/images/keylogger.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | ||||
| <svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M0 6c0-1.1.9-2 2-2h16a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V6zm2 0v2h2V6H2zm1 3v2h2V9H3zm-1 3v2h2v-2H2zm3 0v2h10v-2H5zm11 0v2h2v-2h-2zM6 9v2h2V9H6zm3 0v2h2V9H9zm3 0v2h2V9h-2zm3 0v2h2V9h-2zM5 6v2h2V6H5zm3 0v2h2V6H8zm3 0v2h2V6h-2zm3 0v2h4V6h-4z"/></svg> | ||||
| After Width: | Height: | Size: 328 B | 
							
								
								
									
										
											BIN
										
									
								
								mirzaev/site/account/system/public/images/logo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 18 KiB | 
							
								
								
									
										
											BIN
										
									
								
								mirzaev/site/account/system/public/images/logo_compressed.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 5.5 KiB | 
							
								
								
									
										
											BIN
										
									
								
								mirzaev/site/account/system/public/images/logo_red.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 17 KiB | 
| After Width: | Height: | Size: 5.3 KiB | 
							
								
								
									
										
											BIN
										
									
								
								mirzaev/site/account/system/public/images/logo_red_white.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 18 KiB | 
| After Width: | Height: | Size: 5.6 KiB | 
							
								
								
									
										1
									
								
								mirzaev/site/account/system/public/images/minecraft.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | ||||
| <svg viewBox="0 0 256 256" xmlns="http://www.w3.org/2000/svg"><path fill="none" d="M0 0h256v256H0z"/><path d="M224 177.3V78.7a8.1 8.1 0 0 0-4.1-7l-88-49.5a7.8 7.8 0 0 0-7.8 0l-88 49.5a8.1 8.1 0 0 0-4.1 7v98.6a8.1 8.1 0 0 0 4.1 7l88 49.5a7.8 7.8 0 0 0 7.8 0l88-49.5a8.1 8.1 0 0 0 4.1-7Z" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="16"/><path fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="16" d="m222.9 74.6-94 53.4-95.8-53.4M128.9 128l-.9 106.8"/></svg> | ||||
| After Width: | Height: | Size: 537 B | 
							
								
								
									
										1
									
								
								mirzaev/site/account/system/public/images/miner.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | ||||
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m11.136 12.117-.596 2.415c.736.185 3.004.921 3.34-.441.35-1.421-2.009-1.789-2.744-1.974Zm.813-3.297-.54 2.191c.612.154 2.5.784 2.806-.455.318-1.293-1.654-1.581-2.266-1.736ZM12 2a10 10 0 1 0 10 10A10 10 0 0 0 12 2Zm4.358 8.575a1.743 1.743 0 0 1-1.385 1.611 1.933 1.933 0 0 1 .997 2.661c-.586 1.692-1.977 1.835-3.827 1.481l-.449 1.82-1.085-.274.443-1.795c-.28-.07-.568-.145-.864-.227l-.445 1.804-1.084-.273.45-1.824c-.254-.065-.511-.135-.774-.201l-1.412-.356.539-1.256s.8.215.788.199a.394.394 0 0 0 .498-.26l1.217-4.939a.583.583 0 0 0-.505-.638c.016-.011-.789-.198-.789-.198l.29-1.172 1.495.378-.001.006c.225.056.457.11.693.164l.444-1.802 1.085.274-.436 1.766c.291.068.584.135.87.207l.432-1.755 1.085.274-.445 1.802c1.37.477 2.372 1.193 2.175 2.523Z"/></svg> | ||||
| After Width: | Height: | Size: 825 B | 
							
								
								
									
										1
									
								
								mirzaev/site/account/system/public/images/stealer.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 7.4 KiB | 
							
								
								
									
										
											BIN
										
									
								
								mirzaev/site/account/system/public/images/truth.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 397 KiB | 
							
								
								
									
										
											BIN
										
									
								
								mirzaev/site/account/system/public/images/what.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 295 KiB | 
							
								
								
									
										36
									
								
								mirzaev/site/account/system/public/index.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,36 @@ | ||||
| <?php | ||||
|  | ||||
| declare(strict_types=1); | ||||
|  | ||||
| namespace mirzaev\site\account; | ||||
|  | ||||
| use mirzaev\minimal\core; | ||||
| use mirzaev\minimal\router; | ||||
|  | ||||
| ini_set('error_reporting', E_ALL); | ||||
| ini_set('display_errors', 1); | ||||
| ini_set('display_startup_errors', 1); | ||||
|  | ||||
| define('VIEWS', realpath('..' . DIRECTORY_SEPARATOR . 'views')); | ||||
| define('STORAGE', realpath('..' . DIRECTORY_SEPARATOR . 'storage')); | ||||
| define('INDEX', __DIR__); | ||||
|  | ||||
| // Автозагрузка | ||||
| require __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..'  . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php'; | ||||
|  | ||||
| // Инициализация маршрутазитора | ||||
| $router = new router; | ||||
|  | ||||
| // Запись маршрутов | ||||
| $router->write('/', 'index', 'index'); | ||||
| $router->write('/system/hotline', 'hotline', 'index'); | ||||
| $router->write('/system/graph', 'graph', 'index'); | ||||
| $router->write('/account/initialization', 'account', 'initialization', 'PUT'); | ||||
| $router->write('/account/vk/connect', 'account', 'connect'); | ||||
| $router->write('/account/panel', 'account', 'panel'); | ||||
|  | ||||
| // Инициализация ядра | ||||
| $core = new core(namespace: __NAMESPACE__, router: $router); | ||||
|  | ||||
| // Обработка запроса | ||||
| echo $core->start(); | ||||
							
								
								
									
										26
									
								
								mirzaev/site/account/system/public/js/account.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,26 @@ | ||||
| "use strict"; | ||||
|  | ||||
| class account { | ||||
|     static async initialization() { | ||||
|         // Запрос | ||||
|         return fetch('https://auth.mirzaev.sexy/account/initialization', { | ||||
|             method: 'GET' | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     static authentication() { | ||||
|         // Инициализация аккаунта | ||||
|         alert(1); | ||||
|         this.initialization() | ||||
|             .then( | ||||
|                 (response) => { | ||||
|                     alert(2); | ||||
|                 } | ||||
|             ); | ||||
|  | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     static deauthentication() { | ||||
|     } | ||||
| } | ||||
							
								
								
									
										1332
									
								
								mirzaev/site/account/system/public/js/graph.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										668
									
								
								mirzaev/site/account/system/public/js/hotline.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,668 @@ | ||||
| 'use strict'; | ||||
|  | ||||
| /** | ||||
|  * Бегущая строка | ||||
|  * | ||||
|  * @description | ||||
|  * Простой, но мощный класс для создания бегущих строк. Поддерживает | ||||
|  * перемещение мышью и прокрутку колесом, полностью настраивается очень гибок | ||||
|  * для настроек в CSS и подразумевается, что отлично индексируется поисковыми роботами. | ||||
|  * Имеет свой препроцессор, благодаря которому можно создавать бегущие строки | ||||
|  * без программирования - с помощью HTML-аттрибутов, а так же возможность | ||||
|  * изменять параметры (data-hotline-* аттрибуты) на лету. Есть возможность вызывать | ||||
|  * события при выбранных действиях для того, чтобы пользователь имел возможность | ||||
|  * дорабатывать функционал без изучения и изменения моего кода | ||||
|  * | ||||
|  * @example | ||||
|  * сonst hotline = new hotline(); | ||||
|  * hotline.step = '-5'; | ||||
|  * hotline.start(); | ||||
|  * | ||||
|  * @todo | ||||
|  * 1. Бесконечный режим - элементы не удаляются если видны на экране (будут дубликаты) | ||||
|  * | ||||
|  * @copyright WTFPL | ||||
|  * @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy> | ||||
|  */ | ||||
| class hotline { | ||||
|   // Идентификатор | ||||
|   #id = 0; | ||||
|  | ||||
|   // Оболочка (instanceof HTMLElement) | ||||
|   #shell = document.getElementById("hotline"); | ||||
|  | ||||
|   // Инстанция горячей строки | ||||
|   #instance = null; | ||||
|  | ||||
|   // Перемещение | ||||
|   #transfer = true; | ||||
|  | ||||
|   // Движение | ||||
|   #move = true; | ||||
|  | ||||
|   // Наблюдатель | ||||
|   #observer = null; | ||||
|  | ||||
|   // Наблюдатель | ||||
|   #block = new Set(["events"]); | ||||
|  | ||||
|   // Настраиваемые параметры | ||||
|   transfer = null; | ||||
|   move = null; | ||||
|   delay = 10; | ||||
|   step = 1; | ||||
|   hover = true; | ||||
|   movable = true; | ||||
|   sticky = false; | ||||
|   wheel = false; | ||||
|   delta = null; | ||||
|   vertical = false; | ||||
|   observe = false; | ||||
|   events = new Map([ | ||||
|     ["start", false], | ||||
|     ["stop", false], | ||||
|     ["move", false], | ||||
|     ["move.block", false], | ||||
|     ["move.unblock", false], | ||||
|     ["offset", false], | ||||
|     ["transfer.start", true], | ||||
|     ["transfer.end", true], | ||||
|     ["onmousemove", false] | ||||
|   ]); | ||||
|  | ||||
|   constructor(id, shell) { | ||||
|     // Запись идентификатора | ||||
|     if (typeof id === "string" || typeof id === "number") this.#id = id; | ||||
|  | ||||
|     // Запись оболочки | ||||
|     if (shell instanceof HTMLElement) this.#shell = shell; | ||||
|   } | ||||
|  | ||||
|   start() { | ||||
|     if (this.#instance === null) { | ||||
|       // Нет запущенной инстанции бегущей строки | ||||
|  | ||||
|       // Инициализация ссылки на ядро | ||||
|       const _this = this; | ||||
|  | ||||
|       // Запуск движения | ||||
|       this.#instance = setInterval(function () { | ||||
|         if (_this.#shell.childElementCount > 1) { | ||||
|           // Найдено содержимое бегущей строки (2 и более) | ||||
|  | ||||
|           // Инициализация буфера для временных данных | ||||
|           let buffer; | ||||
|  | ||||
|           // Инициализация данных первого элемента в строке | ||||
|           const first = { | ||||
|             element: (buffer = _this.#shell.firstElementChild), | ||||
|             coords: buffer.getBoundingClientRect() | ||||
|           }; | ||||
|  | ||||
|           if (_this.vertical) { | ||||
|             // Вертикальная бегущая строка | ||||
|  | ||||
|             // Инициализация сдвига у первого элемента (движение) | ||||
|             first.offset = isNaN( | ||||
|               (buffer = parseFloat(first.element.style.marginTop)) | ||||
|             ) | ||||
|               ? 0 | ||||
|               : buffer; | ||||
|  | ||||
|             // Инициализация отступа до второго элемента у первого элемента (разделение) | ||||
|             first.separator = isNaN( | ||||
|               (buffer = parseFloat( | ||||
|                 getComputedStyle(first.element).marginBottom | ||||
|               )) | ||||
|             ) | ||||
|               ? 0 | ||||
|               : buffer; | ||||
|  | ||||
|             // Инициализация крайнего с конца ребра первого элемента в строке | ||||
|             first.end = first.coords.y + first.coords.height + first.separator; | ||||
|           } else { | ||||
|             // Горизонтальная бегущая строка | ||||
|  | ||||
|             // Инициализация отступа у первого элемента (движение) | ||||
|             first.offset = isNaN( | ||||
|               (buffer = parseFloat(first.element.style.marginLeft)) | ||||
|             ) | ||||
|               ? 0 | ||||
|               : buffer; | ||||
|  | ||||
|             // Инициализация отступа до второго элемента у первого элемента (разделение) | ||||
|             first.separator = isNaN( | ||||
|               (buffer = parseFloat(getComputedStyle(first.element).marginRight)) | ||||
|             ) | ||||
|               ? 0 | ||||
|               : buffer; | ||||
|  | ||||
|             // Инициализация крайнего с конца ребра первого элемента в строке | ||||
|             first.end = first.coords.x + first.coords.width + first.separator; | ||||
|           } | ||||
|  | ||||
|           if ( | ||||
|             (_this.vertical && | ||||
|               Math.round(first.end) < _this.#shell.offsetTop) || | ||||
|             (!_this.vertical && Math.round(first.end) < _this.#shell.offsetLeft) | ||||
|           ) { | ||||
|             // Элемент (вместе с отступом до второго элемента) вышел из области видимости (строки) | ||||
|  | ||||
|             if ( | ||||
|               (_this.transfer === null && _this.#transfer) || | ||||
|               _this.transfer === true | ||||
|             ) { | ||||
|               // Перенос разрешен | ||||
|  | ||||
|               if (_this.vertical) { | ||||
|                 // Вертикальная бегущая строка | ||||
|  | ||||
|                 // Удаление отступов (движения) | ||||
|                 first.element.style.marginTop = null; | ||||
|               } else { | ||||
|                 // Горизонтальная бегущая строка | ||||
|  | ||||
|                 // Удаление отступов (движения) | ||||
|                 first.element.style.marginLeft = null; | ||||
|               } | ||||
|  | ||||
|               // Копирование первого элемента в конец строки | ||||
|               _this.#shell.appendChild(first.element); | ||||
|  | ||||
|               if (_this.events.get("transfer.end")) { | ||||
|                 // Запрошен вызов события: "перемещение в конец" | ||||
|  | ||||
|                 // Вызов события: "перемещение в конец" | ||||
|                 document.dispatchEvent( | ||||
|                   new CustomEvent(`hotline.${_this.#id}.transfer.end`, { | ||||
|                     detail: { | ||||
|                       element: first.element, | ||||
|                       offset: -( | ||||
|                         (_this.vertical | ||||
|                           ? first.coords.height | ||||
|                           : first.coords.width) + first.separator | ||||
|                       ) | ||||
|                     } | ||||
|                   }) | ||||
|                 ); | ||||
|               } | ||||
|             } | ||||
|           } else if ( | ||||
|             (_this.vertical && | ||||
|               Math.round(first.coords.y) > _this.#shell.offsetTop) || | ||||
|             (!_this.vertical && | ||||
|               Math.round(first.coords.x) > _this.#shell.offsetLeft) | ||||
|           ) { | ||||
|             // Передняя (движущая) граница первого элемента вышла из области видимости | ||||
|  | ||||
|             if ( | ||||
|               (_this.transfer === null && _this.#transfer) || | ||||
|               _this.transfer === true | ||||
|             ) { | ||||
|               // Перенос разрешен | ||||
|  | ||||
|               // Инициализация отступа у последнего элемента (разделение) | ||||
|               const separator = | ||||
|                 (buffer = isNaN( | ||||
|                   (buffer = parseFloat( | ||||
|                     getComputedStyle(_this.#shell.lastElementChild)[ | ||||
|                     _this.vertical ? "marginBottom" : "marginRight" | ||||
|                     ] | ||||
|                   )) | ||||
|                 ) | ||||
|                   ? 0 | ||||
|                   : buffer) === 0 | ||||
|                   ? first.separator | ||||
|                   : buffer; | ||||
|  | ||||
|               // Инициализация координат первого элемента в строке | ||||
|               const coords = _this.#shell.lastElementChild.getBoundingClientRect(); | ||||
|  | ||||
|               if (_this.vertical) { | ||||
|                 // Вертикальная бегущая строка | ||||
|  | ||||
|                 // Удаление отступов (движения) | ||||
|                 _this.#shell.lastElementChild.style.marginTop = | ||||
|                   -coords.height - separator + "px"; | ||||
|               } else { | ||||
|                 // Горизонтальная бегущая строка | ||||
|  | ||||
|                 // Удаление отступов (движения) | ||||
|                 _this.#shell.lastElementChild.style.marginLeft = | ||||
|                   -coords.width - separator + "px"; | ||||
|               } | ||||
|  | ||||
|               // Копирование последнего элемента в начало строки | ||||
|               _this.#shell.insertBefore( | ||||
|                 _this.#shell.lastElementChild, | ||||
|                 first.element | ||||
|               ); | ||||
|  | ||||
|               // Удаление отступов у второго элемента в строке (движения) | ||||
|               _this.#shell.children[1].style[ | ||||
|                 _this.vertical ? "marginTop" : "marginLeft" | ||||
|               ] = null; | ||||
|  | ||||
|               if (_this.events.get("transfer.start")) { | ||||
|                 // Запрошен вызов события: "перемещение в начало" | ||||
|  | ||||
|                 // Вызов события: "перемещение в начало" | ||||
|                 document.dispatchEvent( | ||||
|                   new CustomEvent(`hotline.${_this.#id}.transfer.start`, { | ||||
|                     detail: { | ||||
|                       element: _this.#shell.lastElementChild, | ||||
|                       offset: | ||||
|                         (_this.vertical ? coords.height : coords.width) + | ||||
|                         separator | ||||
|                     } | ||||
|                   }) | ||||
|                 ); | ||||
|               } | ||||
|             } | ||||
|           } else { | ||||
|             // Элемент в области видимости | ||||
|  | ||||
|             if ((_this.move === null && _this.#move) || _this.move === true) { | ||||
|               // Движение разрешено | ||||
|  | ||||
|               // Запись новых координат сдвига | ||||
|               const offset = first.offset + _this.step; | ||||
|  | ||||
|               // Запись сдвига (движение) | ||||
|               _this.offset(offset); | ||||
|  | ||||
|               if (_this.events.get("move")) { | ||||
|                 // Запрошен вызов события: "движение" | ||||
|  | ||||
|                 // Вызов события: "движение" | ||||
|                 document.dispatchEvent( | ||||
|                   new CustomEvent(`hotline.${_this.#id}.move`, { | ||||
|                     detail: { | ||||
|                       from: first.offset, | ||||
|                       to: offset | ||||
|                     } | ||||
|                   }) | ||||
|                 ); | ||||
|               } | ||||
|             } | ||||
|           } | ||||
|         } | ||||
|       }, _this.delay); | ||||
|  | ||||
|       if (this.hover) { | ||||
|         // Запрошена возможность останавливать бегущую строку | ||||
|  | ||||
|         // Инициализация сдвига | ||||
|         let offset = 0; | ||||
|  | ||||
|         // Инициализация слушателя события при перемещении элемента в бегущей строке | ||||
|         const listener = function (e) { | ||||
|           // Увеличение сдвига | ||||
|           offset += e.detail.offset ?? 0; | ||||
|         }; | ||||
|  | ||||
|         // Инициализация обработчика наведения курсора (остановка движения) | ||||
|         this.#shell.onmouseover = function (e) { | ||||
|           // Курсор наведён на бегущую строку | ||||
|  | ||||
|           // Блокировка движения | ||||
|           _this.#move = false; | ||||
|  | ||||
|           if (_this.events.get("move.block")) { | ||||
|             // Запрошен вызов события: "блокировка движения" | ||||
|  | ||||
|             // Вызов события: "блокировка движения" | ||||
|             document.dispatchEvent( | ||||
|               new CustomEvent(`hotline.${_this.#id}.move.block`) | ||||
|             ); | ||||
|           } | ||||
|  | ||||
|           if (_this.movable) { | ||||
|             // Запрошена возможность двигать бегущую строку | ||||
|  | ||||
|             _this.#shell.onmousedown = function (onmousedown) { | ||||
|               // Курсор активирован | ||||
|  | ||||
|               // Инициализация слушателей события перемещения элемента в бегущей строке | ||||
|               document.addEventListener( | ||||
|                 `hotline.${_this.#id}.transfer.start`, | ||||
|                 listener | ||||
|               ); | ||||
|               document.addEventListener( | ||||
|                 `hotline.${_this.#id}.transfer.end`, | ||||
|                 listener | ||||
|               ); | ||||
|  | ||||
|               // Инициализация буфера для временных данных | ||||
|               let buffer; | ||||
|  | ||||
|               // Инициализация данных первого элемента в строке | ||||
|               const first = { | ||||
|                 offset: isNaN( | ||||
|                   (buffer = parseFloat( | ||||
|                     _this.vertical | ||||
|                       ? _this.#shell.firstElementChild.style.marginTop | ||||
|                       : _this.#shell.firstElementChild.style.marginLeft | ||||
|                   )) | ||||
|                 ) | ||||
|                   ? 0 | ||||
|                   : buffer | ||||
|               }; | ||||
|  | ||||
|               document.onmousemove = function (onmousemove) { | ||||
|                 // Курсор движется | ||||
|  | ||||
|                 if (_this.vertical) { | ||||
|                   // Вертикальная бегущая строка | ||||
|  | ||||
|                   // Инициализация буфера местоположения | ||||
|                   const from = _this.#shell.firstElementChild.style.marginTop; | ||||
|                   const to = onmousemove.pageY - (onmousedown.pageY + offset - first.offset); | ||||
|  | ||||
|                   // Движение | ||||
|                   _this.#shell.firstElementChild.style.marginTop = to + | ||||
|                     "px"; | ||||
|  | ||||
|                   if (_this.events.get("onmousemove")) { | ||||
|                     // Запрошен вызов события: "перемещение мышью" | ||||
|  | ||||
|                     // Вызов события: "перемещение мышью" | ||||
|                     document.dispatchEvent( | ||||
|                       new CustomEvent(`hotline.${_this.#id}.onmousemove`, { | ||||
|                         detail: { from, to } | ||||
|                       }) | ||||
|                     ); | ||||
|                   } | ||||
|                 } else { | ||||
|                   // Горизонтальная бегущая строка | ||||
|  | ||||
|                   // Инициализация буфера местоположения | ||||
|                   const from = _this.#shell.firstElementChild.style.marginLeft; | ||||
|                   const to = onmousemove.pageX - (onmousedown.pageX + offset - first.offset); | ||||
|  | ||||
|                   // Движение | ||||
|                   _this.#shell.firstElementChild.style.marginLeft = to + "px"; | ||||
|  | ||||
|                   if (_this.events.get("onmousemove")) { | ||||
|                     // Запрошен вызов события: "перемещение мышью" | ||||
|  | ||||
|                     // Вызов события: "перемещение мышью" | ||||
|                     document.dispatchEvent( | ||||
|                       new CustomEvent(`hotline.${_this.#id}.onmousemove`, { | ||||
|                         detail: { from, to } | ||||
|                       }) | ||||
|                     ); | ||||
|                   } | ||||
|                 } | ||||
|  | ||||
|                 // Запись курсора | ||||
|                 _this.#shell.style.cursor = "grabbing"; | ||||
|               }; | ||||
|             }; | ||||
|  | ||||
|             // Перещапись событий браузера (чтобы не дёргалось) | ||||
|             _this.#shell.ondragstart = null; | ||||
|  | ||||
|             _this.#shell.onmouseup = function () { | ||||
|               // Курсор деактивирован | ||||
|  | ||||
|               // Остановка обработки движения | ||||
|               document.onmousemove = null; | ||||
|  | ||||
|               // Сброс сдвига | ||||
|               offset = 0; | ||||
|  | ||||
|               document.removeEventListener( | ||||
|                 `hotline.${_this.#id}.transfer.start`, | ||||
|                 listener | ||||
|               ); | ||||
|               document.removeEventListener( | ||||
|                 `hotline.${_this.#id}.transfer.end`, | ||||
|                 listener | ||||
|               ); | ||||
|  | ||||
|               // Восстановление курсора | ||||
|               _this.#shell.style.cursor = null; | ||||
|             }; | ||||
|           } | ||||
|         }; | ||||
|  | ||||
|         // Инициализация обработчика отведения курсора (остановка движения) | ||||
|         this.#shell.onmouseleave = function (onmouseleave) { | ||||
|           // Курсор отведён от бегущей строки | ||||
|  | ||||
|           if (!_this.sticky) { | ||||
|             // Отключено прилипание | ||||
|  | ||||
|             // Остановка обработки движения | ||||
|             document.onmousemove = null; | ||||
|  | ||||
|             document.removeEventListener( | ||||
|               `hotline.${_this.#id}.transfer.start`, | ||||
|               listener | ||||
|             ); | ||||
|             document.removeEventListener( | ||||
|               `hotline.${_this.#id}.transfer.end`, | ||||
|               listener | ||||
|             ); | ||||
|  | ||||
|             // Восстановление курсора | ||||
|             _this.#shell.style.cursor = null; | ||||
|           } | ||||
|  | ||||
|           // Сброс сдвига | ||||
|           offset = 0; | ||||
|  | ||||
|           // Разблокировка движения | ||||
|           _this.#move = true; | ||||
|  | ||||
|           if (_this.events.get("move.unblock")) { | ||||
|             // Запрошен вызов события: "разблокировка движения" | ||||
|  | ||||
|             // Вызов события: "разблокировка движения" | ||||
|             document.dispatchEvent( | ||||
|               new CustomEvent(`hotline.${_this.#id}.move.unblock`) | ||||
|             ); | ||||
|           } | ||||
|         }; | ||||
|       } | ||||
|  | ||||
|       if (this.wheel) { | ||||
|         // Запрошена возможность прокручивать колесом мыши | ||||
|  | ||||
|         // Инициализация обработчика наведения курсора (остановка движения) | ||||
|         this.#shell.onwheel = function (e) { | ||||
|           // Курсор наведён на бегущую | ||||
|  | ||||
|           // Инициализация буфера для временных данных | ||||
|           let buffer; | ||||
|  | ||||
|           // Перемещение | ||||
|           _this.offset( | ||||
|             (isNaN( | ||||
|               (buffer = parseFloat( | ||||
|                 _this.#shell.firstElementChild.style[ | ||||
|                 _this.vertical ? "marginTop" : "marginLeft" | ||||
|                 ] | ||||
|               )) | ||||
|             ) | ||||
|               ? 0 | ||||
|               : buffer) + | ||||
|             (_this.delta === null | ||||
|               ? e.wheelDelta | ||||
|               : e.wheelDelta > 0 | ||||
|                 ? _this.delta | ||||
|                 : -_this.delta) | ||||
|           ); | ||||
|         }; | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     if (this.observe) { | ||||
|       // Запрошено наблюдение за изменениями аттрибутов элемента бегущей строки | ||||
|  | ||||
|       if (this.#observer === null) { | ||||
|         // Отсутствует наблюдатель | ||||
|  | ||||
|         // Инициализация ссылки на ядро | ||||
|         const _this = this; | ||||
|  | ||||
|         // Инициализация наблюдателя | ||||
|         this.#observer = new MutationObserver(function (mutations) { | ||||
|           for (const mutation of mutations) { | ||||
|             if (mutation.type === "attributes") { | ||||
|               // Запись параметра в инстанцию бегущей строки | ||||
|               _this.write(mutation.attributeName); | ||||
|             } | ||||
|           } | ||||
|  | ||||
|           // Перезапуск бегущей строки | ||||
|           _this.restart(); | ||||
|         }); | ||||
|  | ||||
|         // Активация наблюдения | ||||
|         this.#observer.observe(this.#shell, { | ||||
|           attributes: true | ||||
|         }); | ||||
|       } | ||||
|     } else if (this.#observer instanceof MutationObserver) { | ||||
|       // Запрошено отключение наблюдения | ||||
|  | ||||
|       // Деактивация наблюдения | ||||
|       this.#observer.disconnect(); | ||||
|  | ||||
|       // Удаление наблюдателя | ||||
|       this.#observer = null; | ||||
|     } | ||||
|  | ||||
|     if (this.events.get("start")) { | ||||
|       // Запрошен вызов события: "запуск" | ||||
|  | ||||
|       // Вызов события: "запуск" | ||||
|       document.dispatchEvent(new CustomEvent(`hotline.${this.#id}.start`)); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   stop() { | ||||
|     // Остановка бегущей строки | ||||
|     clearInterval(this.#instance); | ||||
|  | ||||
|     // Удаление инстанции интервала | ||||
|     this.#instance = null; | ||||
|  | ||||
|     if (this.events.get("stop")) { | ||||
|       // Запрошен вызов события: "остановка" | ||||
|  | ||||
|       // Вызов события: "остановка" | ||||
|       document.dispatchEvent(new CustomEvent(`hotline.${this.#id}.stop`)); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   restart() { | ||||
|     // Остановка бегущей строки | ||||
|     this.stop(); | ||||
|  | ||||
|     // Запуск бегущей строки | ||||
|     this.start(); | ||||
|   } | ||||
|  | ||||
|   write(attribute) { | ||||
|     // Инициализация названия параметра | ||||
|     const parameter = (/^data-hotline-(\w+)$/.exec(attribute) ?? [, null])[1]; | ||||
|  | ||||
|     if (typeof parameter === "string") { | ||||
|       // Параметр найден | ||||
|  | ||||
|       // Проверка на разрешение изменения | ||||
|       if (this.#block.has(parameter)) return; | ||||
|  | ||||
|       // Инициализация значения параметра | ||||
|       const value = this.#shell.getAttribute(attribute); | ||||
|  | ||||
|       // Инициализация буфера для временных данных | ||||
|       let buffer; | ||||
|  | ||||
|       // Запись параметра | ||||
|       this[parameter] = isNaN((buffer = parseFloat(value))) | ||||
|         ? value === "true" | ||||
|           ? true | ||||
|           : value === "false" | ||||
|             ? false | ||||
|             : value | ||||
|         : buffer; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   offset(value) { | ||||
|     // Запись отступа | ||||
|     this.#shell.firstElementChild.style[ | ||||
|       this.vertical ? "marginTop" : "marginLeft" | ||||
|     ] = value + "px"; | ||||
|  | ||||
|     if (this.events.get("offset")) { | ||||
|       // Запрошен вызов события: "сдвиг" | ||||
|  | ||||
|       // Вызов события: "сдвиг" | ||||
|       document.dispatchEvent( | ||||
|         new CustomEvent(`hotline.${this.#id}.offset`, { | ||||
|           detail: { | ||||
|             to: value | ||||
|           } | ||||
|         }) | ||||
|       ); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   static preprocessing(event = false) { | ||||
|     // Инициализация счётчиков инстанций горячей строки | ||||
|     const success = new Set(); | ||||
|     let error = 0; | ||||
|  | ||||
|     for (const element of document.querySelectorAll('*[data-hotline="true"]')) { | ||||
|       // Перебор бегущих строк | ||||
|  | ||||
|       if (typeof element.id === "string") { | ||||
|         // Найден идентификатор | ||||
|  | ||||
|         // Инициализация инстанции бегущей строки | ||||
|         const hotline = new this(element.id, element); | ||||
|  | ||||
|         for (const attribute of element.getAttributeNames()) { | ||||
|           // Перебор аттрибутов | ||||
|  | ||||
|           // Запись параметра в инстанцию бегущей строки | ||||
|           hotline.write(attribute); | ||||
|         } | ||||
|  | ||||
|         // Запуск бегущей строки | ||||
|         hotline.start(); | ||||
|  | ||||
|         // Запись инстанции бегущей строки в элемент | ||||
|         element.hotline = hotline; | ||||
|  | ||||
|         // Запись в счётчик успешных инициализаций | ||||
|         success.add(hotline); | ||||
|       } else ++error; | ||||
|     } | ||||
|  | ||||
|     if (event) { | ||||
|       // Запрошен вызов события: "предварительная подготовка" | ||||
|  | ||||
|       // Вызов события: "предварительная подготовка" | ||||
|       document.dispatchEvent( | ||||
|         new CustomEvent(`hotline.preprocessed`, { | ||||
|           detail: { | ||||
|             success, | ||||
|             error | ||||
|           } | ||||
|         }) | ||||
|       ); | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| document.dispatchEvent( | ||||
|   new CustomEvent("hotline.loaded", { | ||||
|     detail: { hotline } | ||||
|   }) | ||||
| ); | ||||
							
								
								
									
										2
									
								
								mirzaev/site/account/system/public/js/js.cookie.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,2 @@ | ||||
| /*! js-cookie v3.0.1 | MIT */ | ||||
| !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self,function(){var n=e.Cookies,o=e.Cookies=t();o.noConflict=function(){return e.Cookies=n,o}}())}(this,(function(){"use strict";function e(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)e[o]=n[o]}return e}return function t(n,o){function r(t,r,i){if("undefined"!=typeof document){"number"==typeof(i=e({},o,i)).expires&&(i.expires=new Date(Date.now()+864e5*i.expires)),i.expires&&(i.expires=i.expires.toUTCString()),t=encodeURIComponent(t).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);var c="";for(var u in i)i[u]&&(c+="; "+u,!0!==i[u]&&(c+="="+i[u].split(";")[0]));return document.cookie=t+"="+n.write(r,t)+c}}return Object.create({set:r,get:function(e){if("undefined"!=typeof document&&(!arguments.length||e)){for(var t=document.cookie?document.cookie.split("; "):[],o={},r=0;r<t.length;r++){var i=t[r].split("="),c=i.slice(1).join("=");try{var u=decodeURIComponent(i[0]);if(o[u]=n.read(c,u),e===u)break}catch(e){}}return e?o[e]:o}},remove:function(t,n){r(t,"",e({},n,{expires:-1}))},withAttributes:function(n){return t(this.converter,e({},this.attributes,n))},withConverter:function(n){return t(e({},this.converter,n),this.attributes)}},{attributes:{value:Object.freeze(o)},converter:{value:Object.freeze(n)}})}({read:function(e){return'"'===e[0]&&(e=e.slice(1,-1)),e.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent)},write:function(e){return encodeURIComponent(e).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent)}},{path:"/"})})); | ||||
							
								
								
									
										127
									
								
								mirzaev/site/account/system/public/js/trolling.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,127 @@ | ||||
| "use strict"; | ||||
|  | ||||
| class troller { | ||||
|     static what = { | ||||
|         enable() { | ||||
|             document.body.onmouseleave = function () { | ||||
|                 // if (Math.random() > 0.90) { | ||||
|                 // 10% | ||||
|  | ||||
|                 troller.what.start(); | ||||
|                 // } | ||||
|             }; | ||||
|  | ||||
|             document.body.onmouseenter = function () { | ||||
|                 troller.what.end(); | ||||
|             }; | ||||
|         }, | ||||
|         disable() { | ||||
|             document.body.onmouseleave = document.body.onmouseenter = undefined; | ||||
|         }, | ||||
|         start() { | ||||
|             // Отображение изображения | ||||
|             document.getElementById('what_image').classList.add('active'); | ||||
|  | ||||
|             // Инициализация элемента со звуком | ||||
|             const what_sound = document.getElementById('what_sound'); | ||||
|  | ||||
|             // Воспроизведение звука | ||||
|             what_sound.currentTime = 0; | ||||
|             what_sound.play(); | ||||
|         }, | ||||
|         end() { | ||||
|             // Сокрытие изображения | ||||
|             document.getElementById('what_image').classList.remove('active'); | ||||
|  | ||||
|             // Остановка звука | ||||
|             document.getElementById('what_sound').pause(); | ||||
|         }, | ||||
|         single(event = 'onmouseleave') { | ||||
|             if (typeof event === 'string') { | ||||
|                 // Получены обязательные входные параметры | ||||
|                 // Отображение изображения | ||||
|                 document.getElementById('what_image').classList.add('active'); | ||||
|  | ||||
|                 // Инициализация элемента со звуком | ||||
|                 const what_sound = document.getElementById('what_sound'); | ||||
|  | ||||
|                 // Воспроизведение звука | ||||
|                 what_sound.currentTime = 0; | ||||
|                 what_sound.play(); | ||||
|  | ||||
|                 document.body[event] = function () { | ||||
|                     troller.what.end(); | ||||
|  | ||||
|                     document.body[event] = undefined; | ||||
|                 }; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     static vk() { | ||||
|         setInterval(function () { | ||||
|             const sound = document.getElementById('sound_vk'); | ||||
|  | ||||
|             if (Math.random() > 0.95) { | ||||
|                 // 5% | ||||
|  | ||||
|                 // Воспроизведение звука | ||||
|                 sound.currentTime = 0; | ||||
|                 sound.play(); | ||||
|             } | ||||
|         }, 85000); | ||||
|     } | ||||
|  | ||||
|     static whatsapp() { | ||||
|         setInterval(function () { | ||||
|             const sound = document.getElementById('sound_whatsup'); | ||||
|  | ||||
|             if (Math.random() > 0.97) { | ||||
|                 // 3% | ||||
|  | ||||
|                 // Воспроизведение звука | ||||
|                 sound.currentTime = 0; | ||||
|                 sound.play(); | ||||
|             } | ||||
|         }, 125000); | ||||
|     } | ||||
|  | ||||
|     static iphone() { | ||||
|         setInterval(function () { | ||||
|             const sound = document.getElementById('sound_iphone'); | ||||
|  | ||||
|             if (Math.random() > 0.98) { | ||||
|                 // 2% | ||||
|  | ||||
|                 // Воспроизведение звука | ||||
|                 sound.currentTime = 0; | ||||
|                 sound.play(); | ||||
|             } | ||||
|         }, 265000); | ||||
|     } | ||||
| } | ||||
|  | ||||
| if (Math.random() > 0.90) { | ||||
|     // 10% | ||||
|  | ||||
|     troller.what.enable(); | ||||
| } | ||||
|  | ||||
| if (Math.random() > 0.90) { | ||||
|     // 10% | ||||
|  | ||||
|     troller.vk(); | ||||
| } | ||||
|  | ||||
|  | ||||
| if (Math.random() > 0.90) { | ||||
|     // 10% | ||||
|  | ||||
|     troller.whatsapp(); | ||||
| } | ||||
|  | ||||
| if (Math.random() > 0.90) { | ||||
|     // 10% | ||||
|  | ||||
|     troller.iphone(); | ||||
| } | ||||
							
								
								
									
										1
									
								
								mirzaev/site/account/system/public/js/victor.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								mirzaev/site/account/system/public/sounds/iphone.mp3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								mirzaev/site/account/system/public/sounds/vk.mp3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								mirzaev/site/account/system/public/sounds/what.mp3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								mirzaev/site/account/system/public/sounds/whatsup.mp3
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 16 KiB |