Diff between bf2ec2a3bc2acda0aa51728213ada92d58d69cce and 751055abd43b8737d0fcaf65e37517d1daeeeb19

Changed Files

File Additions Deletions Status
app.lua +47 -1 modified
koivuhaka.sqlite +0 -0 modified
koivuhaka.sqlite-journal +0 -0 added
static/images/4124379_3_600x600_t_g.webp +0 -0 added
static/images/n02112018_1611.jpg +0 -0 added
static/pen.svg +1 -0 added
team-description +1 -0 added
team-description.txt +1 -0 added
views/index.etlua +87 -63 modified

Full Patch

diff --git a/app.lua b/app.lua
index a979837..57bd421 100644
--- a/app.lua
+++ b/app.lua
@@ -21,12 +21,57 @@ local function isNumber(str)
     end
 end
 
+-- opens and checks if file exists
+local function file_exists(file)
+  local f = io.open(file, "rb")
+  if f then f:close() end
+  return f ~= nil
+end
+
+-- returns a table with lines in file
+local function lines_from(file)
+  if not file_exists(file) then return {} end
+  local lines = {}
+  for line in io.lines(file) do
+    lines[#lines + 1] = line
+  end
+  return lines
+end
+
+
+local function readTeamDesc()
+    local lines = lines_from("team-description.txt")
+    if lines then
+	return lines[1]
+    end
+    return nil
+end
+
 app:get("index", "/", function(self)
     local res = db.query("SELECT * FROM asunnot")
     self.asunnot = res
+    self.team_desc = readTeamDesc()
     return { render = true }
 end)
 
+app:post("edit-description", "/edit-description", function(self)
+    if not self.session.user then
+	return { redirect_to = "/" }
+    end
+
+    local new_desc = strip(self.params.description)
+    if not file_exists("team-description.txt") then return {} end
+    local f = io.open("team-description.txt", "w")
+
+    if f == nil then
+	return { redirect_to = "/" }
+    end
+
+    f:write(new_desc)
+    f:close()
+    return { redirect_to = "/" }
+end)
+
 app:match("kirjaudu", "/kirjaudu", respond_to({
   GET = function(self)
     self.err = self.params.error
@@ -98,7 +143,7 @@ app:match("hallintapaneeli", "/hallintapaneeli", respond_to({
     out:write(data)
     out:close()
 
-    picture = "http://localhost:8080/static/images/" .. picture_file.filename --öaldsfkölsadkfölakdsfölkasöldfkö
+    picture = "http://localhost:8080/static/images/" .. picture_file.filename
 
     if address == "" or picture == "" or price == "" then
 	return { redirect_to = "/hallintapaneeli"}
@@ -113,5 +158,6 @@ app:match("hallintapaneeli", "/hallintapaneeli", respond_to({
   end
 }))
 
+
 return app
 
diff --git a/koivuhaka.sqlite b/koivuhaka.sqlite
index c35ef29..a8af9bc 100644
Binary files a/koivuhaka.sqlite and b/koivuhaka.sqlite differ
diff --git a/koivuhaka.sqlite-journal b/koivuhaka.sqlite-journal
new file mode 100644
index 0000000..b30d24a
Binary files /dev/null and b/koivuhaka.sqlite-journal differ
diff --git a/static/images/4124379_3_600x600_t_g.webp b/static/images/4124379_3_600x600_t_g.webp
new file mode 100644
index 0000000..0685fa0
Binary files /dev/null and b/static/images/4124379_3_600x600_t_g.webp differ
diff --git a/static/images/n02112018_1611.jpg b/static/images/n02112018_1611.jpg
new file mode 100644
index 0000000..ddd4af2
Binary files /dev/null and b/static/images/n02112018_1611.jpg differ
diff --git a/static/pen.svg b/static/pen.svg
new file mode 100644
index 0000000..e7cb2f5
--- /dev/null
+++ b/static/pen.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-pencil-icon lucide-pencil"><path d="M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z"/><path d="m15 5 4 4"/></svg>
diff --git a/team-description b/team-description
new file mode 100644
index 0000000..45c9412
--- /dev/null
+++ b/team-description
@@ -0,0 +1 @@
+asdfddsdfdsfsdfdsaf
\ No newline at end of file
diff --git a/team-description.txt b/team-description.txt
new file mode 100644
index 0000000..559ea59
--- /dev/null
+++ b/team-description.txt
@@ -0,0 +1 @@
+Ota yhteyttä!
\ No newline at end of file
diff --git a/views/index.etlua b/views/index.etlua
index 2247dcc..4034b5b 100644
--- a/views/index.etlua
+++ b/views/index.etlua
@@ -1,72 +1,96 @@
-<!doctype html>
-<html lang="fi">
-  <head>
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <title>Koivuhaan asunto</title>
-  </head>
-  <body>
-    <nav class="navbar navbar-expand-sm bg-dark navbar-dark fixed-top">
-	<div class="container-fluid">
-	<a class="navbar-brand" href="#">Koivuhaan Asuntolat</a>
-	    <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
-	      <span class="navbar-toggler-icon"></span>
-	    </button>
-	    <div class="collapse navbar-collapse" id="navbarNav">
-	      <ul class="navbar-nav">
-		<li class="nav-item">
-		  <a class="nav-link" href="#asunnot">Asunnot</a>
-		</li>
-		<li class="nav-item">
-		  <a class="nav-link" href="#tiimi">Tietoa meistä</a>
-		</li>
-		<li class="nav-item">
-		  <a class="nav-link" href="#tiimi">Ota yhteyttä</a>
-		</li>
-	      </ul>
-	    </div>
-      </div>
-    </nav>
-    <div class="mb-5 container-fluid px-0 position-relative" style="height: 500px; overflow: hidden">
-        <img class="w-100" src="https://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/2010s_residential_area_near_Peltolantie_and_Tikkurilantie_in_Koivuhaka%2C_Vantaa%2C_Finland%2C_2021_September.jpg/2560px-2010s_residential_area_near_Peltolantie_and_Tikkurilantie_in_Koivuhaka%2C_Vantaa%2C_Finland%2C_2021_September.jpg" class="img-fluid">
-	<h1 class="position-absolute top-50 start-50 translate-middle text-white bg-dark px-4 py-2 fw-bold display-6">Koivuhaan Asuntolat</h1>
-    </div>
-
-    <div class="container">
-	<h2 class="mb-4" id="asunnot">Asuntolat</h2>
-	<div class="row row-cols-3 g-3 mb-5">
-	    <% for i, asunto in pairs(asunnot) do %>
-		<div class="col">
-		    <div class="card">
-			<img class="card-img-top" src="<%= asunto["kuva"] %>" alt="kuva asunnosta">
-			<div class="card-body">
-			    <h4 class="card-title">
-				<%= asunto["osoite"] %>
-			    </h4>
-			    <div class="d-inline-flex gap-2">
-				<small class="text-body-secondary"><%= asunto["hinta"]%> €</small>
-			    </div>
-			</div>
-		    </div>
-		</div>
-	    <% end %>
+<nav class="navbar navbar-expand-sm bg-dark navbar-dark fixed-top">
+    <div class="container-fluid">
+    <a class="navbar-brand" href="#">Koivuhaan Asuntolat</a>
+	<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
+	  <span class="navbar-toggler-icon"></span>
+	</button>
+	<div class="collapse navbar-collapse" id="navbarNav">
+	  <ul class="navbar-nav">
+	    <li class="nav-item">
+	      <a class="nav-link" href="#asunnot">Asunnot</a>
+	    </li>
+	    <li class="nav-item">
+	      <a class="nav-link" href="#tiimi">Tietoa meistä</a>
+	    </li>
+	    <li class="nav-item">
+	      <a class="nav-link" href="#tiimi">Ota yhteyttä</a>
+	    </li>
+	  </ul>
 	</div>
-	<h2 class="mb-3" id="tiimi">Tietoa meistä</h2> 
-	<p class="mb-4">Ota rohkeasti yhteyttä!</p>
-	<div class="row row-cols-5 g-5 mb-5">
-	    <% for i=5,1,-1 do %>
+  </div>
+</nav>
+<div class="mb-5 container-fluid px-0 position-relative" style="height: 500px; overflow: hidden">
+    <img class="w-100" src="https://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/2010s_residential_area_near_Peltolantie_and_Tikkurilantie_in_Koivuhaka%2C_Vantaa%2C_Finland%2C_2021_September.jpg/2560px-2010s_residential_area_near_Peltolantie_and_Tikkurilantie_in_Koivuhaka%2C_Vantaa%2C_Finland%2C_2021_September.jpg" class="img-fluid">
+    <h1 class="position-absolute top-50 start-50 translate-middle text-white bg-dark px-4 py-2 fw-bold display-6">Koivuhaan Asuntolat</h1>
+</div>
+
+<div class="container">
+    <h2 class="mb-4" id="asunnot">Asuntolat</h2>
+    <div class="row row-cols-3 g-3 mb-5">
+	<% for i, asunto in pairs(asunnot) do %>
 	    <div class="col">
-		<div class="card border-0">
-		    <img class="card-img-top rounded-circle object-fit-cover" style="aspect-ratio: 1 / 1;" src="https://cataas.com/cat/fQCYUQNMnhPBN4jb?position=center" alt="jäsen">
+		<div class="card">
+		    <img class="card-img-top" src="<%= asunto["kuva"] %>" alt="kuva asunnosta">
 		    <div class="card-body">
-			<h5 class="card-title text-center">
-			    Matti Meikäläinen
-			</h5>
+			<h4 class="card-title">
+			    <%= asunto["osoite"] %>
+			</h4>
+			<div class="d-inline-flex gap-2">
+			    <small class="text-body-secondary"><%= asunto["hinta"]%> €</small>
+			</div>
 		    </div>
 		</div>
 	    </div>
+	<% end %>
+    </div>
+    <h2 class="mb-3" id="tiimi">Tietoa meistä</h2>
+    <div class="d-inline-flex align-items-center mb-4 gap-1">
+	<p id="team-desc" style="margin: 0;">
+	    <% if team_desc then %>
+	    <%= team_desc %>
+	    <% else %>
+	    Ota rohkeasti yhteyttä!
 	    <% end %>
+	</p>
+	<% if session.user then %>
+	<button style="background: none; border: none;" id="edit-btn" onclick="changeToEditMode()"><img src="/static/pen.svg" /></button>
+	<% end %>
+	<form class="row g-3" id="edit-form" style="display: none" action="/edit-description" method="post">
+	    <div class="col-auto">
+		<input type="text" class="form-control" id="edit-input" name="description" placeholder="">
+	    </div>
+	    <div class="col-auto">
+		<button type="submit" class="btn btn-secondary">Vahvista</button>
+	    </div>
+	</form>
+    </div>
+    <div class="row row-cols-5 g-5 mb-5">
+	<% for i=5,1,-1 do %>
+	<div class="col">
+	    <div class="card border-0">
+		<img class="card-img-top rounded-circle object-fit-cover" style="aspect-ratio: 1 / 1;" src="https://cataas.com/cat/fQCYUQNMnhPBN4jb?position=center" alt="jäsen">
+		<div class="card-body">
+		    <h5 class="card-title text-center">
+			Matti Meikäläinen
+		    </h5>
+		</div>
+	    </div>
 	</div>
+	<% end %>
     </div>
-  </body>
-</html>
+</div>
+<script>
+    const editForm =  document.getElementById("edit-form")
+    const editBtn = document.getElementById("edit-btn")
+    const editInput = document.getElementById("edit-input")
+    const teamDesc = document.getElementById("team-desc")
+
+    function changeToEditMode() {
+	editBtn.style = "display: none";
+	editForm.style = "";
+	teamDesc.style = "display: none"
+	editInput.value = teamDesc.innerText.trim()
+    }
+
+
+</script>