Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <html>
- <head>
- <script src="js/lib/jquery-3.1.1.min.js"></script>
- <script src="js/lib/underscore-1.8.3.min.js"></script>
- <script src="js/api.js"></script>
- <script src="js/translate.js"></script>
- <script src="js/main.js"></script>
- <link href="http://fonts.googleapis.com/css?family=Open+Sans:400" rel="stylesheet">
- <link rel="stylesheet" href="style.css" type="text/css">
- </head>
- <body>
- <header class="compact">
- <!--<a href="/index.html"> -->
- <img src="images/header-logo.png" alt="The Flying Dutchman" />
- <h1>The Flying Dutchman</h1>
- <div class="profileimg">
- <span id="welcome-nologin" class="profile translate" data-translate="header.welcome_no_login">Welcome, click here to login!</span>
- <span id="welcome-admin" class="profile translate" style="display: none;" data-translate="header.welcome_admin">Welcome, Admin!</span>
- <span id="welcome-member" class="profile translate" style="display: none;" data-translate="header.welcome_member">Welcome, Member!</span>
- <img id="profile-img" class="profile" src="https://cit.duke.edu/wp-content/uploads/2013/12/about-icon-md.png" />
- <div class="clear:both;"></div>
- </div>
- <!-- START LOGIN MODAL -->
- <!-- The Modal -->
- <div id="myModal" class="modal">
- <div class="modal-content fadein">
- <span class="close">×</span>
- <form class="container" id="loginform">
- <span id="login-msg"></span>
- <label class="translate" data-translate="login.username"><b>Username</b></label>
- <input id="txt-username" type="text" placeholder="Enter Username" name="uname" required class="translate" data-translate="login.username_placeholder">
- <label class="translate" data-translate="login.password"><b>Password</b></label>
- <input id="txt-password" type="password" placeholder="Enter Password" name="psw" required class="translate" data-translate="login.password_placeholder">
- <button type="submit" id="loginbutton" class="translate" data-translate="login.login">Login</button>
- </form>
- </div>
- </div>
- <!-- END LOGIN MODAL -->
- </header>
- <!-- --- USER LOGGED IN PROFILE POPUP --- -->
- <div class="userinfo">
- <span class="close" id="closeuser">×</span>
- <img id="userpic" src="https://cit.duke.edu/wp-content/uploads/2013/12/about-icon-md.png" />
- <h2 class="nameofuser">John Doe</h2>
- <h4>Account balance: 452kr</h4>
- <h4>Purchases made: </h4>
- <table class="usertable">
- <tr class="head">
- <th class="translate" data-translate="checkout.name">Product name</th>
- <th class="translate" data-translate="checkout.price">Price</th>
- <th class="translate" data-translate="checkout.quantity">Quantity</th>
- </tr>
- <tr>
- <td>Hej test</td>
- <td>Hej test 2</td>
- <td>Hej test 3</td>
- </tr>
- <tr>
- <td>Hej test</td>
- <td>Hej test 2</td>
- <td>Hej test 3</td>
- </tr>
- <tr>
- <td>Hej test</td>
- <td>Hej test 2</td>
- <td>Hej test 3</td>
- </tr>
- </table>
- </div>
- <div class="admininfo">
- <span class="close" id="closeadmin">×</span>
- <img id="adminpic" src="https://cit.duke.edu/wp-content/uploads/2013/12/about-icon-md.png" />
- <h2 class="nameofuser">John Doe</h2>
- <h4 class="purchases_get_all">Purchases_get_all:</h4>
- <table class="admintable" id="purchases_get_all">
- <tr class="head">
- <th class="translate" data-translate="checkout.name">Product name</th>
- <th class="translate" data-translate="checkout.price">Price</th>
- <th class="translate" data-translate="checkout.quantity">Quantity</th>
- </tr>
- <tr>
- <td>Gives a list of all purchases made by all users.</td>
- <td>Hej test 2</td>
- <td>Hej test 3</td>
- </tr>
- </table>
- <h4 class="payments_get_all">Payments_get_all: </h4>
- <table class="admintable" id="payments_get_all">
- <tr class="head">
- <th class="translate" data-translate="checkout.name">Product name</th>
- <th class="translate" data-translate="checkout.price">Price</th>
- <th class="translate" data-translate="checkout.quantity">Quantity</th>
- </tr>
- <tr>
- <td>Returns a list of payments made by all users.</td>
- <td>Hej test 2</td>
- <td>Hej test 3</td>
- </tr>
- <tr>
- <td>Hej test</td>
- <td>Hej test 2</td>
- <td>Hej test 3</td>
- </tr>
- <tr>
- <td>Hej test</td>
- <td>Hej test 2</td>
- <td>Hej test 3</td>
- </tr>
- </table>
- <h4>inventory_append</h4>
- </div>
- <div class="checkout" ondrop="drop(event)" ondragover="allowDrop(event)">
- <h1 class="translate" data-translate="checkout.h1">Checkout</h1>
- <table id="order_table" class="basket_list">
- <thead><td><i>Hint: You can drag-and-drop your drinks here.</i><td></thead>
- </table>
- <script type="text/template" id="order-list-template">
- <% for(let item of orders){ %>
- <tr>
- <td class="beer-name"><%= item.name %></td>
- <td class="beer-qty">x<%= item.quantity %></td>
- <td class="beer-price"><%= (item.quantity * Number(item.price)).toFixed(2) %>kr</td>
- </tr>
- <% } %>
- <tr class="total-row">
- <td><span class="translate" data-translate="checkout.total">Total</span></td>
- <td>:</td>
- <td><%= total.toFixed(2) %>kr</td>
- </tr>
- </script>
- <button class="checkoutButton translate" data-translate="checkout.purchase">Pay</button>
- <div class="screensize">
- <div id="errorpurchasediv" class="modal-content fadein">
- <span class="close togglepurchaseerror">×</span> You need to log in to make a purchase. </br>
- Members without a login order at the bar.
- <!-- TODO: translate -->
- <button id="link">Log in</button>
- <!-- TODO: translate -->
- </div>
- <div class="product-filter">
- <form id="filter-form">
- <span>Categories :</span>
- <input type="radio" id="all-check" name="filter" value="all" checked/>
- <label for="all-check" class="translate" data-translate="product_filter.label_all">All</label>
- <input type="radio" id="beers-check" name="filter" value="beer" />
- <label for="beers-check" class="translate" data-translate="product_filter.label_beer">Beer</label>
- <input type="radio" id="wines-check" name="filter" value="wine" />
- <label for="wines-check" class="translate" data-translate="product_filter.label_wine">Wine</label>
- <input type="radio" id="ciders-check" name="filter" value="cider" />
- <label for="ciders-check" class="translate" data-translate="product_filter.label_cider">Cider</label>
- <input type="radio" id="noalcohols-check" name="filter" value="noalcohol" />
- <label for="noalcohols-check" class="translate" data-translate="product_filter.label_noalcohol">Non-alcoholic</label>
- <input type="radio" id="other-check" name="filter" value="other" />
- <label for="other-check" class="translate" data-translate="product_filter.label_other">Other</label>
- </form>
- <script type="text/javascript">
- $("document").ready(function () {
- $('#filter-form input').on('change', function () {
- let selected = $('input[name=filter]:checked', '#filter-form').val();
- if (selected == "all") {
- renderProductList(products);
- }
- else {
- let filtered = products.filter(product => product.type == selected);
- renderProductList(filtered);
- }
- });
- $("#loginbutton").on("click", function (e) {
- e.preventDefault();
- $("#login-msg").text("");
- let username = $("#txt-username").val().trim();
- let password = $("#txt-password").val().trim();
- login(username, password).then(role => {
- if (role == "admin") {
- console.log("ADMIN!!");
- $("#login-msg").text("Login as a admin.");
- }
- else if (role == "member") {
- console.log("member!!");
- $("#login-msg").text("Login as a member.");
- }
- else {
- console.log("Invalid!!");
- $("#login-msg").text("Invalid login!");
- }
- })
- })
- });
- async function login(username, password) {
- let api = new Api();
- let payload = await api.getPurchasesAll(username, password);
- console.log("Try Admin: ", payload);
- if (payload.type != "error") {
- return "admin"
- }
- payload = await api.getPayments(username, password);
- console.log("Try member: ", payload);
- if (payload.type != "error") {
- return "member"
- }
- return false;
- }
- </script>
- </div>
- <div class="content">
- <ul id="beer-list" class="product-list"></ul>
- <script type="text/template" id="beer-listitem-template">
- <li class="<%= type %>">
- <div class="product-container item" draggable="true" ondragstart="drag(event)" data-beerid="<%= beer_id %>" data-price="<%= price %>"
- data-name="<%= (namn + ' ' + namn2).trim() %>" data-type="<%= type %>">
- <span class="item-name"><%= (namn + " " + namn2).trim() %></span>
- <br/>
- <img id="<%= beer_id %>" class="beer-listitem" draggable="false" src="images/<%= beer_id %>.jpg" onerror="this.src='images/default.png'"
- />
- <span class="pricetag"><%= price %> Kr</span>
- </div>
- <div class="product-button-div">
- <button class="detail-button translate" data-translate="button.detail"> DETAILS </button>
- <button class="buy-button translate" data-translate="button.buy"> BUY </button>
- </div>
- </li>
- </script>
- </div>
- <!-- DETAILS POPUP DIV -->
- <div id="detailPopup">
- <p id="test"> </p>
- <button id="detailClose" class="translate" data-translate="detail.close">Close</button>
- </div>
- <!-- Loading animation -->
- <div class="loader"></div>
- <script type="text/javascript">
- var products = [];
- $("document").ready(() => {
- $("body").addClass("loading");
- try {
- getMenu().then(beers => {
- products = beers;
- renderProductList(beers);
- }).then(function(){
- let trans = new Translate("en");
- trans.init();
- }).then(function () {
- $("body").removeClass("loading");
- }).then(function(){
- /* Pop-up modal of beer detail */
- $(".detail-button").on('click',function() {
- let detail_beer_id;
- let detail_beer;
- detail_beer_id = this.parentNode.parentNode.children[0].getAttribute("data-beerid");
- $( "#detailPopup" ).toggle("slow", function(){
- detail_beer = products.find(function(beer){ return beer.beer_id == detail_beer_id } );
- $("#test").html(`
- <img id="detailImg" src="images/` + detail_beer_id + `.jpg" />
- <ul id="detailList">
- <li class="detailListItem" class="translate" data-translate="detail.name">` + detail_beer.namn + ` ` + detail_beer.namn2 + `</li>
- <li class="detailListItem" class="translate" data-translate="detail.alcohol">` + detail_beer.alkoholhalt + `</li>
- <li class="detailListItem" class="translate" data-translate="detail.producer">` + detail_beer.producent + `</li>
- <li class="detailListItem" class="translate" data-translate="detail.country">` + detail_beer.ursprunglandnamn + `</li>
- </ul>`);
- });
- });
- /* buy button */
- $(".buy-button").on('click',function() {
- let detailDiv = this.parentNode.parentNode.children[0];
- let beer_id = detailDiv.getAttribute("data-beerid");
- let name = detailDiv.getAttribute("data-name");
- let price = detailDiv.getAttribute("data-price");
- doOrderAction("addOrder", beer_id, name, price, 1);
- renderOrderList(orderlist);
- });
- });
- }
- catch (e) {
- console.log("Application error: ", e);
- }
- $('.checkoutButton').click(function () {
- $('#errorpurchasediv').css("display", "block");
- });
- $('.togglepurchaseerror').click(function () {
- $('#errorpurchasediv').toggle();
- });
- $('.closepurchaseerror').click(function () {
- $('#errorpurchasediv').css("display", "none");
- });
- $('#link').click(function () {
- $('#errorpurchasediv').toggle();
- })
- $('#closeuser').click(function () {
- $('.userinfo').css("display", "none");
- })
- $('#closeadmin').click(function () {
- $('.admininfo').css("display", "none");
- })
- $('.purchases_get_all').click(function () {
- //$('#purchases_get_all').css('display', 'block');
- $('#purchases_get_all').toggle();
- })
- $('.payments_get_all').click(function () {
- //$('#payments_get_all').css('display', 'block');
- $('#payments_get_all').toggle();
- })
- $("#detailClose").click(function(){
- $("#detailPopup").hide("slow");
- });
- });
- function drag(ev) {
- ev.dataTransfer.setData("beer_id", ev.target.getAttribute("data-beerid"));
- ev.dataTransfer.setData("name", ev.target.getAttribute("data-name"));
- ev.dataTransfer.setData("price", ev.target.getAttribute("data-price"));
- }
- function drop(ev) {
- ev.preventDefault();
- let beer_id = ev.dataTransfer.getData("beer_id");
- let name = ev.dataTransfer.getData("name");
- let price = ev.dataTransfer.getData("price");
- doOrderAction("addOrder", beer_id, name, price, 1);
- renderOrderList(orderlist);
- }
- function allowDrop(ev) {
- ev.preventDefault();
- }
- function renderOrderList(list) {
- let _templatemap = _.template($("#order-list-template").html());
- let total = 0;
- for(item of list){
- total += Number(item.price);
- }
- let html = _templatemap({orders:list, total:total})
- $("#order_table").html(html);
- }
- var undostack = [];
- var redostack = [];
- var orderlist = [];
- function doOrderAction(action /* , args */) {
- let args = Array.prototype.slice.call(arguments, 1);
- // generate reverse action, and push it to the undostack
- if (action == "addOrder") {
- undostack.push({ action: "addOrder", arguments: [args[0], args[1], args[2], (-args[3] || -1)] });
- }
- else if (action == "removeOrder") {
- let order = orderlist.find(o => o.id == id);
- undostack.push({ action: "addOrder", arguments: [order.id, order.name, order.price, order.quantity] });
- }
- // clear redo stack`
- redostack = [];
- // run function
- window[action].apply(this, args);
- }
- function undoOrderAction() {
- let act = undostack.pop();
- if (!act)
- return;
- // run action
- window[act.action].apply(this, act.arguments);
- // generate reverse action, and push it to the redostack
- redostack.push({ action: act.action, arguments: [act.arguments[0], act.arguments[1], act.arguments[2], (-act.arguments[3] || -1)] });
- }
- function redoOrderAction() {
- let act = redostack.pop();
- if (!act)
- return;
- // run action
- window[act.action].apply(this, act.arguments);
- // generate reverse action, and push it to the undostack
- undostack.push({ action: act.action, arguments: [act.arguments[0], act.arguments[1], act.arguments[2], (-act.arguments[3] || -1)] });
- }
- function addOrder(id, name, price, quantity) {
- let order = orderlist.find(o => o.id == id);
- if (order)
- order.quantity += (quantity || 1);
- else {
- order = { id: id, name: name, price: price, quantity: quantity || 1 };
- orderlist.push(order);
- }
- if (order.quantity <= 0)
- removeOrder(id);
- }
- function removeOrder(id) {
- let order = orderlist.find(o => o.id == id);
- orderlist.splice(orderlist.indexOf(order), 1);
- }
- </script>
- </body>
- <script>
- /* LOG IN MODAL */
- // Get the modal
- var modal = document.getElementById('myModal');
- // Get the button that opens the modal
- var btn = document.getElementsByClassName("profileimg")[0];
- var btn2 = document.getElementById("link");
- // Get the <span> element that closes the modal
- var span = document.getElementsByClassName("close")[0];
- // When the user clicks on the button, open the modal
- btn.onclick = function () {
- modal.style.display = "block";
- }
- btn2.onclick = function () {
- modal.style.display = "block";
- }
- // When the user clicks on <span> (x), close the modal
- span.onclick = function () {
- modal.style.display = "none";
- }
- // When the user clicks anywhere outside of the modal, close it
- window.onclick = function (event) {
- if (event.target == modal) {
- modal.style.display = "none";
- }
- }
- </script>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement