Compare commits

...

2 Commits

Author SHA1 Message Date
Yurun Chen
67f2ace46e change 2024-12-02 14:16:48 +11:00
Yurun Chen
32fd2b341e change to oop 2024-12-02 14:14:32 +11:00
3 changed files with 43 additions and 122 deletions

0
db.js Normal file
View File

View File

@@ -1,66 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>Crime Statistics</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- dependencies -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
</head>
<body>
<!-- bootstrap-->
<script defer src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.min.js" integrity="sha384-0pUGZvbkm6XF6gxjEnlmuGrJXVbNuzT9qBBavbLwCsOGabYfZo0T0to5eqruptLy" crossorigin="anonymous"></script>
<!-- SQL -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/sql.js/1.2.1/dist/sql-wasm.js"></script>
<!-- handlebars -->
<script src="https://cdn.jsdelivr.net/npm/handlebars@latest/dist/handlebars.js"></script>
<!--nav-->
<nav class="navbar navbar-expand-lg navbar-light bg-warning">
<a class="navbar-brand" href="#">&nbsp;&nbsp;Crime statistic analysis</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<a class="nav-link" href="#">Home</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
View
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="#">By year</a>
<a class="dropdown-item" href="#">By LGA</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">By Crime category</a>
</div>
</li>
</ul>
</div>
</nav>
<br><br>
<!-- page columns -->
<div class="container text-center " id="body">
<div class="row">
<!-- now to vue-->
<div class="col-2 border border-primary text-left" id="filters">
<ul class="">
<li class="list-group-item text-left">
<span v-html="item.html"></span>
</li>
<li class="list-group-item text-left"
</ul>
</div>
<div class="col-10">
</div>
</div>
</div>
<!-- my stuff-->
<script src="index.js"></script>
</body>
</html>

View File

@@ -1,60 +1,47 @@
const initSqlJs = window.initSqlJs
const SQL = await initSqlJs({
// Required to load the wasm binary asynchronously. Of course, you can host it wherever you want
// You can omit locateFile completely when running in node
locateFile: file => `https://sql.js.org/dist/${file}`
});
class db_handler {
constructor (sqlite3){
this.db = sqlite3;
}
// Create a database
const db = new SQL.Database();
select_all(table){
var stmt = ("SELECT * FROM "+table+";");
console.log(stmt);
return this.db.exec(stmt, {"returnValue":"resultRows"})
}
select(column, condition, table){
console.log(column,condition);
var stmt = this.db.prepare("SELECT * FROM "+table+" WHERE $column = $condition").bind([column,condition]);
return stmt.finalize();
}
}
class component {
constructor(dbhandler){
this.handler = dbhandler;
}
}
class filter extends component{
constructor(dbhandler){
super(dbhandler);
this.init();
}
init(){
var all_location = this.handler.select_all("locations");
console.log(all_location);
var some_location = this.handler.select("id","1","locations");
console.log(some_location);
}
}
function init(sqlite3){
var global_component = new filter(new db_handler(sqlite3));
}
const { createApp, ref } = Vue
//filters module
createApp({
props: ['dbConnObj'],
data(){
return {
filters : [{"html": a}]
}
},
methods:{
sqlStatements(opt, val = 0){
var stmt;
switch(opt){
case 0:
stmt = "SELECT * FROM index";
break;
case 1:
stmt = "SELECT DISTINCT lga FROM index";
break;
case 2:
stmt = "SELECT DISTINCT crime_category FROM index";
break;
case 3:
stmt = "SELECT record_id FROM index";
case 4:
stmt = db.prepare("SELECT * FROM records WHERE record_id=:id");
stmt = stmt.
default:
break;
}
return stmt;
} ,
init(){
db.exec(sqlStatements(0))
}
},
beforeMount(){
this.init;
}
}, {"dbConnObj": db}).mount('#filters');
function filtergen(){
console.log(this.sqlite3);
}