Initial commit
10
HTML/AdminPanel/src/app/app-routing.module.ts
Normal file
@@ -0,0 +1,10 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { RouterModule, Routes } from '@angular/router';
|
||||
|
||||
const routes: Routes = [];
|
||||
|
||||
@NgModule({
|
||||
imports: [RouterModule.forRoot(routes)],
|
||||
exports: [RouterModule]
|
||||
})
|
||||
export class AppRoutingModule { }
|
||||
58
HTML/AdminPanel/src/app/app.component.html
Normal file
@@ -0,0 +1,58 @@
|
||||
<app-navigation></app-navigation>
|
||||
|
||||
<div class="sidebar">
|
||||
<div class="sites">
|
||||
<div class="link selected">
|
||||
<mat-icon>dashboard</mat-icon>
|
||||
<span>Dashboard</span>
|
||||
</div>
|
||||
|
||||
<div class="link">
|
||||
<mat-icon>currency_exchange</mat-icon>
|
||||
<span>Exchange</span>
|
||||
</div>
|
||||
|
||||
<div class="link">
|
||||
<mat-icon>account_balance_wallet</mat-icon>
|
||||
<span>Wallet</span>
|
||||
</div>
|
||||
|
||||
<div class="link">
|
||||
<mat-icon>credit_card</mat-icon>
|
||||
<span>Transactions</span>
|
||||
</div>
|
||||
|
||||
<div class="link">
|
||||
<mat-icon>pie_chart</mat-icon>
|
||||
<span>Analytics</span>
|
||||
</div>
|
||||
|
||||
<div class="link">
|
||||
<mat-icon>chat</mat-icon>
|
||||
<span>Messages</span>
|
||||
</div>
|
||||
|
||||
<div class="link">
|
||||
<mat-icon>help_center</mat-icon>
|
||||
<span>Help Center</span>
|
||||
</div>
|
||||
|
||||
<div class="link">
|
||||
<mat-icon>settings</mat-icon>
|
||||
<span>Settings</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="update">
|
||||
<mat-icon>update</mat-icon>
|
||||
<h1>Updates Available</h1>
|
||||
<span>Security Updates <br> General Updates</span>
|
||||
<input type="button" value="Update Now">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<main class="content">
|
||||
<div class="overview">
|
||||
<h1>Overview</h1>
|
||||
</div>
|
||||
</main>
|
||||
107
HTML/AdminPanel/src/app/app.component.scss
Normal file
@@ -0,0 +1,107 @@
|
||||
$background: #f0eff6;
|
||||
$selected: #460ccd;
|
||||
$text: #929299;
|
||||
|
||||
.sidebar {
|
||||
position: fixed;
|
||||
width: 200px;
|
||||
height: calc(100% - 50px);
|
||||
background-color: $background;
|
||||
user-select: none;
|
||||
|
||||
.link {
|
||||
width: 80%;
|
||||
height: 50px;
|
||||
margin: 10px auto;
|
||||
display: flex;
|
||||
color: $text;
|
||||
|
||||
mat-icon {
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
font-size: 30px;
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
span {
|
||||
align-self: center;
|
||||
justify-self: center;
|
||||
}
|
||||
|
||||
&.selected {
|
||||
background: #fff;
|
||||
color: $selected;
|
||||
border-left: 5px solid $selected;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
cursor: pointer;
|
||||
background: #fff;
|
||||
}
|
||||
}
|
||||
|
||||
.update {
|
||||
top: 100%;
|
||||
left: 5%;
|
||||
transform: translateY(-110%);
|
||||
width: 90%;
|
||||
height: 17%;
|
||||
background-color: #fff;
|
||||
border-radius: 20px;
|
||||
position: absolute;
|
||||
|
||||
mat-icon {
|
||||
margin-top: 5px;
|
||||
width: 100%;
|
||||
height: max-content;
|
||||
line-height: 100%;
|
||||
text-align: center;
|
||||
font-size: 40px;
|
||||
}
|
||||
|
||||
h1 {
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
font-size: 17px;
|
||||
}
|
||||
|
||||
span {
|
||||
display: block;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
input {
|
||||
display: block;
|
||||
margin: 20px auto;
|
||||
width: 80%;
|
||||
height: 30px;
|
||||
background-color: $selected;
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
color: #fff;
|
||||
|
||||
&:hover {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.content {
|
||||
margin-left: 200px;
|
||||
width: calc(100% - 200px);
|
||||
height: calc(100% - 50px);
|
||||
background-color: $background;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 750px) {
|
||||
.sidebar {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.content {
|
||||
margin-left: 0;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
29
HTML/AdminPanel/src/app/app.component.ts
Normal file
@@ -0,0 +1,29 @@
|
||||
import {Component, OnInit} from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'app-root',
|
||||
templateUrl: './app.component.html',
|
||||
styleUrls: ['./app.component.scss']
|
||||
})
|
||||
export class AppComponent implements OnInit {
|
||||
title = 'AdminPanel';
|
||||
|
||||
ngOnInit(): void {
|
||||
AppComponent.createClickable(".sites");
|
||||
}
|
||||
|
||||
public static createClickable(querySelector: string) {
|
||||
const container = document.querySelector(querySelector) as HTMLDivElement;
|
||||
|
||||
for (let index = 0; index < container.children.length; index++) {
|
||||
const element = container.children[index] as HTMLDivElement;
|
||||
|
||||
element.onclick = () => {
|
||||
for (let i = 0; i < container.children.length; i++)
|
||||
container.children[i].classList.remove("selected");
|
||||
|
||||
element.classList.add("selected");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
24
HTML/AdminPanel/src/app/app.module.ts
Normal file
@@ -0,0 +1,24 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { BrowserModule } from '@angular/platform-browser';
|
||||
|
||||
import { AppRoutingModule } from './app-routing.module';
|
||||
import { AppComponent } from './app.component';
|
||||
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
|
||||
import { NavigationComponent } from './navigation/navigation.component';
|
||||
import {MatIconModule} from "@angular/material/icon";
|
||||
|
||||
@NgModule({
|
||||
declarations: [
|
||||
AppComponent,
|
||||
NavigationComponent
|
||||
],
|
||||
imports: [
|
||||
BrowserModule,
|
||||
AppRoutingModule,
|
||||
BrowserAnimationsModule,
|
||||
MatIconModule
|
||||
],
|
||||
providers: [],
|
||||
bootstrap: [AppComponent]
|
||||
})
|
||||
export class AppModule { }
|
||||
22
HTML/AdminPanel/src/app/navigation/navigation.component.html
Normal file
@@ -0,0 +1,22 @@
|
||||
<nav>
|
||||
<mat-icon class="expander">menu</mat-icon>
|
||||
|
||||
<img src="assets/images/logo.png" alt="logo" id="logo">
|
||||
|
||||
<div class="search-bar">
|
||||
<mat-icon>search</mat-icon>
|
||||
<input type="text" placeholder="Search">
|
||||
</div>
|
||||
|
||||
<div class="theme">
|
||||
<mat-icon class="dark selected">dark_mode</mat-icon>
|
||||
<mat-icon class="light">light_mode</mat-icon>
|
||||
</div>
|
||||
|
||||
<div class="profile">
|
||||
<img src="assets/images/profile-1.jpg" alt="profile">
|
||||
<span class="name">Leon Hoppe</span>
|
||||
<mat-icon>expand_more</mat-icon>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="spacer"></div>
|
||||
154
HTML/AdminPanel/src/app/navigation/navigation.component.scss
Normal file
@@ -0,0 +1,154 @@
|
||||
$background: #fff;
|
||||
$search: #f0eff6;
|
||||
$dark: #2c2830;
|
||||
$light: #fafeff;
|
||||
$icon: #929299;
|
||||
|
||||
nav {
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
height: 50px;
|
||||
background-color: $background;
|
||||
padding: 10px;
|
||||
display: flex;
|
||||
overflow: hidden;
|
||||
|
||||
.expander {
|
||||
height: 30px;
|
||||
width: 30px;
|
||||
font-size: 30px;
|
||||
margin-right: 15px;
|
||||
display: none;
|
||||
}
|
||||
|
||||
#logo {
|
||||
height: 30px;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.search-bar {
|
||||
width: 30%;
|
||||
height: 30px;
|
||||
background-color: $search;
|
||||
border-radius: 5px;
|
||||
margin-left: 10%;
|
||||
position: relative;
|
||||
|
||||
mat-icon {
|
||||
margin: 2px;
|
||||
font-size: 26px;
|
||||
color: $icon;
|
||||
}
|
||||
|
||||
input {
|
||||
position: absolute;
|
||||
width: calc(100% - 30px);
|
||||
height: 100%;
|
||||
left: 30px;
|
||||
top: 0;
|
||||
background: none;
|
||||
border: none;
|
||||
font-size: 15px;
|
||||
|
||||
&:focus {
|
||||
outline: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.theme {
|
||||
width: 50px;
|
||||
height: 25px;
|
||||
background-color: $search;
|
||||
position: absolute;
|
||||
left: 70%;
|
||||
border-radius: 5px;
|
||||
margin-top: 2.5px;
|
||||
|
||||
mat-icon {
|
||||
width: 25px;
|
||||
height: 25px;
|
||||
line-height: 25px;
|
||||
font-size: 15px;
|
||||
text-align: center;
|
||||
display: inline-block;
|
||||
color: $dark;
|
||||
background: none;
|
||||
border-radius: inherit;
|
||||
transition: 200ms;
|
||||
|
||||
&.selected {
|
||||
background-color: $dark;
|
||||
color: $light;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.profile {
|
||||
position: absolute;
|
||||
left: 100%;
|
||||
top: 5px;
|
||||
transform: translateX(-110%);
|
||||
width: 170px;
|
||||
height: 40px;
|
||||
display: flex;
|
||||
user-select: none;
|
||||
|
||||
img {
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
margin: 5px;
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
.name {
|
||||
align-self: center;
|
||||
justify-self: center;
|
||||
margin-left: 10px;
|
||||
color: $dark;
|
||||
}
|
||||
|
||||
mat-icon {
|
||||
align-self: center;
|
||||
justify-self: center;
|
||||
margin-left: auto;
|
||||
color: $dark;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 750px) {
|
||||
.expander {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.profile {
|
||||
width: 40px;
|
||||
|
||||
.name, mat-icon {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.theme {
|
||||
left: 85%;
|
||||
}
|
||||
|
||||
.search-bar {
|
||||
width: 50%;
|
||||
margin-left: 5%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.spacer {
|
||||
width: 100%;
|
||||
height: 50px;
|
||||
}
|
||||
17
HTML/AdminPanel/src/app/navigation/navigation.component.ts
Normal file
@@ -0,0 +1,17 @@
|
||||
import { Component, OnInit } from '@angular/core';
|
||||
import {AppComponent} from "../app.component";
|
||||
|
||||
@Component({
|
||||
selector: 'app-navigation',
|
||||
templateUrl: './navigation.component.html',
|
||||
styleUrls: ['./navigation.component.scss']
|
||||
})
|
||||
export class NavigationComponent implements OnInit {
|
||||
|
||||
constructor() { }
|
||||
|
||||
ngOnInit(): void {
|
||||
AppComponent.createClickable(".theme");
|
||||
}
|
||||
|
||||
}
|
||||
0
HTML/AdminPanel/src/assets/.gitkeep
Normal file
BIN
HTML/AdminPanel/src/assets/images/BTC.png
Normal file
|
After Width: | Height: | Size: 4.0 KiB |
BIN
HTML/AdminPanel/src/assets/images/ETH.png
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
HTML/AdminPanel/src/assets/images/EURO.png
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
BIN
HTML/AdminPanel/src/assets/images/card chip.png
Normal file
|
After Width: | Height: | Size: 65 KiB |
BIN
HTML/AdminPanel/src/assets/images/logo.png
Normal file
|
After Width: | Height: | Size: 6.2 KiB |
BIN
HTML/AdminPanel/src/assets/images/master card.png
Normal file
|
After Width: | Height: | Size: 7.4 KiB |
BIN
HTML/AdminPanel/src/assets/images/mcdonalds.png
Normal file
|
After Width: | Height: | Size: 9.6 KiB |
BIN
HTML/AdminPanel/src/assets/images/monster.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
HTML/AdminPanel/src/assets/images/profile-1.jpg
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
HTML/AdminPanel/src/assets/images/tesla.png
Normal file
|
After Width: | Height: | Size: 4.8 KiB |
BIN
HTML/AdminPanel/src/assets/images/uniliver.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
HTML/AdminPanel/src/assets/images/visa.png
Normal file
|
After Width: | Height: | Size: 8.3 KiB |
3
HTML/AdminPanel/src/environments/environment.prod.ts
Normal file
@@ -0,0 +1,3 @@
|
||||
export const environment = {
|
||||
production: true
|
||||
};
|
||||
16
HTML/AdminPanel/src/environments/environment.ts
Normal file
@@ -0,0 +1,16 @@
|
||||
// This file can be replaced during build by using the `fileReplacements` array.
|
||||
// `ng build` replaces `environment.ts` with `environment.prod.ts`.
|
||||
// The list of file replacements can be found in `angular.json`.
|
||||
|
||||
export const environment = {
|
||||
production: false
|
||||
};
|
||||
|
||||
/*
|
||||
* For easier debugging in development mode, you can import the following file
|
||||
* to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`.
|
||||
*
|
||||
* This import should be commented out in production mode because it will have a negative impact
|
||||
* on performance if an error is thrown.
|
||||
*/
|
||||
// import 'zone.js/plugins/zone-error'; // Included with Angular CLI.
|
||||
BIN
HTML/AdminPanel/src/favicon.ico
Normal file
|
After Width: | Height: | Size: 948 B |
17
HTML/AdminPanel/src/index.html
Normal file
@@ -0,0 +1,17 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>AdminPanel</title>
|
||||
<base href="/">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="icon" type="image/x-icon" href="favicon.ico">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500&display=swap" rel="stylesheet">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap" rel="stylesheet">
|
||||
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
|
||||
</head>
|
||||
<body class="mat-typography">
|
||||
<app-root></app-root>
|
||||
</body>
|
||||
</html>
|
||||
12
HTML/AdminPanel/src/main.ts
Normal file
@@ -0,0 +1,12 @@
|
||||
import { enableProdMode } from '@angular/core';
|
||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||
|
||||
import { AppModule } from './app/app.module';
|
||||
import { environment } from './environments/environment';
|
||||
|
||||
if (environment.production) {
|
||||
enableProdMode();
|
||||
}
|
||||
|
||||
platformBrowserDynamic().bootstrapModule(AppModule)
|
||||
.catch(err => console.error(err));
|
||||
53
HTML/AdminPanel/src/polyfills.ts
Normal file
@@ -0,0 +1,53 @@
|
||||
/**
|
||||
* This file includes polyfills needed by Angular and is loaded before the app.
|
||||
* You can add your own extra polyfills to this file.
|
||||
*
|
||||
* This file is divided into 2 sections:
|
||||
* 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers.
|
||||
* 2. Application imports. Files imported after ZoneJS that should be loaded before your main
|
||||
* file.
|
||||
*
|
||||
* The current setup is for so-called "evergreen" browsers; the last versions of browsers that
|
||||
* automatically update themselves. This includes recent versions of Safari, Chrome (including
|
||||
* Opera), Edge on the desktop, and iOS and Chrome on mobile.
|
||||
*
|
||||
* Learn more in https://angular.io/guide/browser-support
|
||||
*/
|
||||
|
||||
/***************************************************************************************************
|
||||
* BROWSER POLYFILLS
|
||||
*/
|
||||
|
||||
/**
|
||||
* By default, zone.js will patch all possible macroTask and DomEvents
|
||||
* user can disable parts of macroTask/DomEvents patch by setting following flags
|
||||
* because those flags need to be set before `zone.js` being loaded, and webpack
|
||||
* will put import in the top of bundle, so user need to create a separate file
|
||||
* in this directory (for example: zone-flags.ts), and put the following flags
|
||||
* into that file, and then add the following code before importing zone.js.
|
||||
* import './zone-flags';
|
||||
*
|
||||
* The flags allowed in zone-flags.ts are listed here.
|
||||
*
|
||||
* The following flags will work for all browsers.
|
||||
*
|
||||
* (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame
|
||||
* (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick
|
||||
* (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames
|
||||
*
|
||||
* in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js
|
||||
* with the following flag, it will bypass `zone.js` patch for IE/Edge
|
||||
*
|
||||
* (window as any).__Zone_enable_cross_context_check = true;
|
||||
*
|
||||
*/
|
||||
|
||||
/***************************************************************************************************
|
||||
* Zone JS is required by default for Angular itself.
|
||||
*/
|
||||
import 'zone.js'; // Included with Angular CLI.
|
||||
|
||||
|
||||
/***************************************************************************************************
|
||||
* APPLICATION IMPORTS
|
||||
*/
|
||||
9
HTML/AdminPanel/src/styles.scss
Normal file
@@ -0,0 +1,9 @@
|
||||
/* You can add global styles to this file, and also import other style files */
|
||||
|
||||
html, body { height: 100%; }
|
||||
body { margin: 0; }
|
||||
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
font-family: Poppins, "Helvetica Neue", sans-serif;
|
||||
}
|
||||
26
HTML/AdminPanel/src/test.ts
Normal file
@@ -0,0 +1,26 @@
|
||||
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
|
||||
|
||||
import 'zone.js/testing';
|
||||
import { getTestBed } from '@angular/core/testing';
|
||||
import {
|
||||
BrowserDynamicTestingModule,
|
||||
platformBrowserDynamicTesting
|
||||
} from '@angular/platform-browser-dynamic/testing';
|
||||
|
||||
declare const require: {
|
||||
context(path: string, deep?: boolean, filter?: RegExp): {
|
||||
<T>(id: string): T;
|
||||
keys(): string[];
|
||||
};
|
||||
};
|
||||
|
||||
// First, initialize the Angular testing environment.
|
||||
getTestBed().initTestEnvironment(
|
||||
BrowserDynamicTestingModule,
|
||||
platformBrowserDynamicTesting(),
|
||||
);
|
||||
|
||||
// Then we find all the tests.
|
||||
const context = require.context('./', true, /\.spec\.ts$/);
|
||||
// And load the modules.
|
||||
context.keys().map(context);
|
||||