JS router

This commit is contained in:
realaravinth 2021-04-07 23:02:45 +05:30
parent 36e64e399e
commit 432905e9f7
No known key found for this signature in database
GPG Key ID: AD9F0F08E855ED88
4 changed files with 82 additions and 18 deletions

View File

@ -48,12 +48,10 @@ const registerUser = async e => {
} }
}; };
const index = () => { export const index = () => {
let form = document.getElementById('form'); let form = document.getElementById('form');
form.addEventListener('submit', registerUser, true); form.addEventListener('submit', registerUser, true);
let username = document.getElementById('username'); let username = document.getElementById('username');
username.addEventListener('input', userExists, false); username.addEventListener('input', userExists, false);
} }
export default index;

View File

@ -1,18 +1,14 @@
import {Router} from './router';
import * as login from './auth/login'; import * as login from './auth/login';
import * as register from './auth/register'; import * as register from './auth/register';
import * as panel from './panel/index'; import * as panel from './panel/index';
if (window.location.pathname == '/') { const router = new Router();
login.index();
} else if (window.location.pathname == '/register') {
register.index();
// let form = document.getElementById('form');
// form.addEventListener('submit', registerUser, true);
// let username = document.getElementById('username');
// username.addEventListener('input', checkUsernameEventHandler, false);
} else if (window.location.pathname.includes('panel')) {
panel.index();
} else {
}
//export default signin; router.register('/', login.index);
router.register('/register', register.index);
router.register('/panel/', panel.index);
router.register('/panel/layout.html/', panel.index);
router.route();

View File

@ -10,6 +10,14 @@
<nav class="secondary-menu"> <nav class="secondary-menu">
<ul> <ul>
<li class="secondary-menu__item">mCaptcha</li> <li class="secondary-menu__item">mCaptcha</li>
<li class="secondary-menu__section-partition"></li>
<button class="main-menu__add-site">+ New Site</button>
<li class="secondary-menu__item">Overview</li>
<li class="secondary-menu__item">Site Keys</li>
<li class="main-menu__item--spacer"></li>
<li class="secondary-menu__section-partition"></li>
<li class="secondary-menu__item">API Docs</li> <li class="secondary-menu__item">API Docs</li>
<li class="secondary-menu__section-partition"></li> <li class="secondary-menu__section-partition"></li>
<li class="secondary-menu__item">Settings</li> <li class="secondary-menu__item">Settings</li>
@ -41,7 +49,8 @@
<!-- <!--
<li class="task-bar__action">Brand Name</li> <li class="task-bar__action">Brand Name</li>
--> -->
<li class="task-bar__action"></li> <li class="task-bar__action">
</li>
<li class="task-bar__action"> <li class="task-bar__action">
<img src="../../static/img/svg/bell.svg" alt="Notifications" /> <img src="../../static/img/svg/bell.svg" alt="Notifications" />
</li> </li>
@ -51,11 +60,14 @@
</li> </li>
</ul> </ul>
<ul class="main-menu"> <ul class="main-menu">
<!-- important actions --> <!-- important actions -->
<!--
<li class="main-menu__item">Overview</li> <li class="main-menu__item">Overview</li>
<li class="main-menu__item">Site Keys</li> <li class="main-menu__item">Site Keys</li>
<li class="main-menu__item">Settings</li> <li class="main-menu__item">Settings</li>
-->
<li class="main-menu__item--spacer"></li> <li class="main-menu__item--spacer"></li>
<!-- dummy--> <!-- dummy-->
<li class="main-menu__item"> <li class="main-menu__item">
@ -142,6 +154,10 @@
padding: 0; padding: 0;
} }
:root {
--green: #5cad66;
}
.home-button { .home-button {
width: 250px; width: 250px;
margin: auto; margin: auto;
@ -175,7 +191,7 @@
} }
.secondary-menu__item:hover { .secondary-menu__item:hover {
color: #5cad66 !important; color: var(--green);
cursor: grab; cursor: grab;
} }

View File

@ -0,0 +1,54 @@
export class Router {
constructor() {
this.routes = [];
}
register(uri, fn) {
// typechecks
if (!uri) {
throw new Error('uri is empty');
}
if (!fn) {
throw new Error('fn is empty');
}
if (typeof uri !== 'string') {
throw new TypeError('URI must be a string');
}
if (typeof fn !== 'function') {
throw new TypeError('a callback fn must be provided');
}
this.routes.forEach(route => {
if (route.uri == uri) {
throw new Error(
`URI exists. provided URI: ${uri}, registered config: ${route}`,
);
}
});
// normalize URI for trailing slash
let uriLength = uri.length;
if (uri[uriLength - 1] == '/') {
uri = uri.slice(0, uriLength - 1);
}
const route = {
uri,
fn,
};
this.routes.push(route);
}
route() {
this.routes.forEach(route => {
// normalize for trailing slash
let pattern = new RegExp(`^${route.uri}/$`);
let path = window.location.pathname;
if (path.match(pattern)) {
return route.fn.call();
}
});
}
}