server-side-rendering / views / index.ejs
index.ejs
Raw
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700" type="text/css">
    <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
    <link rel="stylesheet" href="https://code.getmdl.io/1.3.0/material.indigo-pink.min.css">
    <style>
        h1 {
            font-size: 20pt;
            margin: 0;
            padding-top: 10px;
            padding-bottom: 10px;
        }
        .mdl-layout {
            width : 90%;
            max-width: 960px;
            margin-left: auto;
            margin-right: auto;
        }
        .mdl-textfield__input{
            display: inline-block;
        }
        .mdl-search--icon {
            width: 10%;
            display: inline-block;
        }
        .haku {
            display: flex;
            justify-content: space-between;
            margin-bottom: 10px;
        }
        footer {
            position: fixed;
            bottom: 0;
            width : 100%;
            max-width: 928px;
            margin-left: auto;
            margin-right: auto;
        }
        #alkuNappi {
            margin-top: 15px;
        }
        .sortButton {
            font-weight: bold;
            margin: 0;
            padding-left: 0;
            color: gray;
            width: auto;
            height: 25px;
            border: none;
            background-color: transparent;
        }
        .sortButton:hover {
            cursor: pointer;
            background-color: lightgray;
        }
        .sortIcons {
            display: inline-block;
            position: relative;
            top: 7px;
        }
        .row {
            display: inline;
        }
        table {
            margin-bottom: 100px;
        }
    </style>

    <title>Kuntien asukastilastoja</title>
</head>
<body>
    <%
        const tuhatErotin = (asukasLuku) => {
            let tulos;
            if(asukasLuku >= 1000){
                tulos = asukasLuku.toString().replace(/\B(?=(\d{3})+(?!\d))/g, " ");
            }
            else {
                tulos = asukasLuku;
            }
            return tulos;
        }

        const lukumaara = () => {
            let lkm = 0;
            if(kunnat.length > 0){
                kunnat.map((kunta) => {
                    lkm++;
                });
            }
            return lkm;
        }

        const keskiarvo = () => {
            let keskiarvo = 0;
            let lkm = 0;
            if(kunnat.length > 0){
                kunnat.map((kunta) => {
                    keskiarvo = keskiarvo + kunta.asukkaatYhteensa;
                    lkm++;
                });
                keskiarvo = keskiarvo / lkm;
            }
            return Math.round(keskiarvo);
        }

        const naiset = () => {
            let asukkaatYhteensa = 0;
            let naiset = 0;
            let naisprosentti = 0;
            if(kunnat.length > 0){
                kunnat.map((kunta) => {
                    asukkaatYhteensa = asukkaatYhteensa + kunta.asukkaatYhteensa;
                    naiset = naiset + kunta.asukkaatNaiset;
                });
                naisprosentti = naiset / asukkaatYhteensa;
            }
            return Math.round((naisprosentti + Number.EPSILON) * 100 * 100) / 100;
        }
    %>

    <div class="mdl-layout">

        <div class="haku">
            <h1>Kuntien asukastilastoja</h1>
            <form method="GET" action="/">
                <button id="alkuNappi" class="mdl-button">Alkuun</button>
            </form>
        </div>
            
            <form method="POST" action="/hae">
                <div class="haku">
                <input name="nimi" class="mdl-textfield__input" type="text" placeholder="Hae kuntaa...">
                        <button type="submit" class="mdl-button mdl-search--icon">
                            <i class="material-icons">search</i>
                        </button>
                </div>
            </form>
            <% if(kunnat.length <= 0){  %>
                <h5>Hakusi ei tuottanut tuloksia</h5>
            <% } else { %>

        <table class="mdl-data-table mdl-js-data-table mdl-data-table--selectable mdl-shadow--2dp">
            <thead>
                <tr>
                    <th class="mdl-data-table__cell--non-numeric">
                        <form method="POST" action="/sortByName" class="row">
                            <input type="hidden" name="kunnat" value="<%= JSON.stringify(kunnat) %>">
                            <input type="hidden" name="key" value="<%= key %>">
                            <button class="sortButton" type="submit">Kunnan nimi</button>
                        </form>
                        <% if (key === 'name') { %>
                            <i class="material-icons sortIcons">arrow_drop_down</i>
                        <% } else if(key === "nameDown"){ %>
                            <i class="material-icons sortIcons">arrow_drop_up</i>
                        <% } %> 
                    </th>
                    <th>
                        <form method="POST" action="/sortByPeople" class="row">
                            <input type="hidden" name="kunnat" value="<%= JSON.stringify(kunnat) %>">
                            <input type="hidden" name="key" value="<%= key %>">
                            <button class="sortButton" type="submit">Asukkaita yhteensä</button>
                        </form>
                        <% if (key === 'people') { %>
                            <i class="material-icons sortIcons">arrow_drop_down</i>
                        <% } else if(key === "peopleDown"){ %>
                            <i class="material-icons sortIcons">arrow_drop_up</i>
                        <% } %> 
                    </th>
                    <th>
                        <form method="POST" action="/sortByMen" class="row">
                            <input type="hidden" name="kunnat" value="<%= JSON.stringify(kunnat) %>">
                            <input type="hidden" name="key" value="<%= key %>">
                            <button class="sortButton" type="submit">Miehiä</button>
                        </form>
                        <% if (key === 'men') { %>
                            <i class="material-icons sortIcons">arrow_drop_down</i>
                        <% } else if(key === "menDown"){ %>
                            <i class="material-icons sortIcons">arrow_drop_up</i>
                        <% } %> 
                    </th>
                    <th>
                        <form method="POST" action="/sortByWomen" class="row">
                            <input type="hidden" name="kunnat" value="<%= JSON.stringify(kunnat) %>">
                            <input type="hidden" name="key" value="<%= key %>">
                            <button class="sortButton" type="submit">Naisia</button>
                        </form>
                        <% if (key === 'women') { %>
                            <i class="material-icons sortIcons">arrow_drop_down</i>
                        <% } else if(key === "womenDown"){ %>
                            <i class="material-icons sortIcons">arrow_drop_up</i>
                        <% } %> 
                    </th>
                </tr>
              </thead>
            <% kunnat.forEach((kunta) => { %>
                    <tbody>
                      <tr>
                        <td class="mdl-data-table__cell--non-numeric"><%= kunta.kunta %></td>
                        <td><%= tuhatErotin(kunta.asukkaatYhteensa) %></td>
                        <td><%= tuhatErotin(kunta.asukkaatMiehet) %></td>
                        <td><%= tuhatErotin(kunta.asukkaatNaiset) %></td>
                      </tr>
                    </tbody>
            
            <% })}; %>

        </table>
        <footer class="mdl-mini-footer">
            <div class="mdl-mini-footer__left-section">
                <div class="mdl-logo">
                    Kuntien lukumäärä: <%= lukumaara(); %>
                </div>
            </div>
            <div class="mdl-mini-footer__middle-section">
                <div class="mdl-logo">
                    Kuntien asukasluvun keskiarvo: <%= tuhatErotin(keskiarvo()); %>
                </div>
            </div>
            <div class="mdl-mini-footer__right-section">
                <div class="mdl-logo">
                    Kuntien naisten prosentuaalinen osuus: <%= naiset() %> %
                </div>
            </div>
          </footer>
        </div>
 </body>
</html>