Creating Menu for the Frontend
// routes/index.js const express = require('express'); const router = express.Router(); var vdict = require('../config'); const utility = require('../utility'); router.use(function(req, res, next){ vdict.khDate = utility.toKhDate(new Date()); next(); }); router.get('/', function(req, res, next) { res.render('index', vdict); }); module.exports = router;
<!--views/index.ejs--> <%- include('partials/head') %> <%- include('partials/facebookapi') %> <%- include('partials/header') %> <link rel='stylesheet' href='/stylesheets/index.css' /> <script src='/javascripts/utility.js'></script> <section id="panel"></section> <section id="main"></section> <%- include('partials/footer.ejs') %>
<!--views/partials/header.ejs--> <section id="header"> <div class="top-menu-outer"> <div class="top-menu region"><span><%= khDate %></span><span id="kh-clock" class="time">time</span></div> </div> <div class="title-outer"> <h1 class="site-title region"> <span><a href="/" ><%= site_title %></a></span> <img class="news" src="/images/newspaper.png" /> <span><img class="tvlive" src="/images/livetv.png"/></span> </h1> </div> <div class="main-menu-outer"> <nav class='main-menu region'> <div class="topnav" id="myTopnav"> <a id="house" href="/" class="active"><img src="/images/house.png" /></a> <a href="#news">ព័ត៌មាន</a> <a href="#contact">ទំនាក់ទំនង</a> <a href="#about">អំពីយើងខ្ញុំ</a> <a href="javascript:void(0);" class="icon" onclick="mobielMenu()"> <i class="fa fa-bars"></i> </a> </div> </nav> </div> <script> function mobielMenu() { var x = document.getElementById("myTopnav"); if (x.className === "topnav") { x.className += " responsive"; } else { x.className = "topnav"; } } </script> </section>
// public/javascripts/utility.js class Utility{ toKhNum(number){ const khNum = {'0':'០', '1':'១', '2':'២', '3':'៣', '4':'៤', '5':'៥', '6':'៦', '7':'៧', '8':'៨', '9':'៩'}; const stringNum = number.toString(); var khString = ''; for(var i in stringNum){ var char = stringNum.charAt(i); khString += khNum[char]; } return khString; } toKhDate(rawDate){ const KhmerDays = ['អាទិត្យ', 'ច័ន្ទ', 'អង្គារ', 'ពុធ', 'ព្រហស្បតិ៍', 'សុក្រ', 'សៅរ៍']; const KhmerMonths = ['មករា', 'កុម្ភៈ', 'មិនា', 'មេសា', 'ឧសភា', 'មិថុនា', 'កក្កដា', 'សីហា', 'កញ្ញា', 'តុលា', 'វិច្ឆិកា', 'ធ្នូ']; const date = new Date(rawDate); const month = date.getMonth(); const day = date.getDay(); const daym = this.toKhNum(date.getDate()); const year = this.toKhNum(date.getFullYear()); return ('ថ្ងៃ '+KhmerDays[day]+' ទី '+daym+' '+KhmerMonths[month]+' '+year); } clock(){ var period = 'ព្រឹក'; var today = new Date(); var h = today.getHours(); if(h>12){ h = h-12; period = 'ល្ងាច'; } var m = today.getMinutes(); var s = today.getSeconds(); h = utility.toKhNum(h); m = utility.toKhNum(utility.checkTime(m)); s = utility.toKhNum(utility.checkTime(s)); document.getElementById('kh-clock').innerHTML = h + " : " + m + " : " + s+' '+period; var t = setTimeout(utility.clock, 500); } checkTime(i) { if (i < 10){i = "0" + i}; return i; } }//end class const utility = new Utility();
*{ padding:0; margin:0; box-sizing: border-box; } body{ font:14px Vidaloka, OdorMeanChey; } a{ color:#e20000; text-decoration: none; } a:hover{ opacity:.7; } .region{ max-width: 1100px; margin:0 auto; } #header{ background:#e20000; color:white; } #header .top-menu-outer{ padding:5px 0; border-bottom: 5px solid black; } #header .top-menu{ display: grid; grid-template-columns: auto auto; align-items: center; } #header .top-menu .time{ text-align: right; } #header .title-outer{ background: #3d3d3d; padding: 10px 0; } #header .site-title{ display: grid; grid-template-columns:auto auto auto; align-items: center; font:50px/1.75 Anton, Moul; text-shadow:0px 0px 0 rgb(231,231,231), 1px 1px 0 rgb(216,216,216), 2px 2px 0 rgb(202,202,202), 3px 3px 0 rgb(187,187,187), 4px 4px 0 rgb(173,173,173), 5px 5px 0 rgb(158,158,158), 6px 6px 0 rgb(144,144,144), 7px 7px 6px rgba(0,0,0,0.6), 7px 7px 1px rgba(0,0,0,0.5), 0px 0px 6px rgba(0,0,0,.2); } #header .site-title a{ color:white; } #header .site-title img{ width: 150px; } #header .site-title .tvlive{ float: right; } #header .site-title .news{ margin: 0 auto; width:120px; } #header .main-menu-outer{ background: black; } .topnav { background-color:transparent; overflow: hidden; } .topnav a { float: left; display: block; color: #f2f2f2; text-align: center; padding: 12px 16px; text-decoration: none; font: 16px/1.5 Oswald, Bayon; } .topnav #house{ padding-top:0; padding-bottom:10px; } .topnav #house img{ width: 40px; position: relative; top:5px; } .topnav a:hover { background-color:rgb(34, 34, 34); } .topnav a.active { background-color: rgb(46, 46, 46); color: white; } .topnav .icon { display: none; } .footer{ padding: 30px 0; text-align:center; } @media only screen and (max-width:600px){ #header .top-menu{ padding: 0 10px; grid-template-columns: 100%; } #header .top-menu span, #header .top-menu .time{ text-align:center; } #header .site-title{ grid-template-columns:100%; text-align:center; } #header .site-title .tvlive{ float: none; } #header .site-title .news{ margin: 10px auto; } } @media screen and (max-width: 600px) { .topnav a:not(:first-child) {display: none;} .topnav a.icon { float: right; display: block; } } @media screen and (max-width: 600px) { .topnav.responsive {position: relative;} .topnav.responsive a.icon { position: absolute; right: 0; top: 0; } .topnav.responsive a { float: none; display: block; text-align: left; } }
GitHub: "https://github.com/Sokhavuth/multimedia
Heroku: https://khmerweb-multimedia.herokuapp.com/
Comments
Post a Comment