From 49716806fc92dca625b2bc86e47f0b56dce00c9b Mon Sep 17 00:00:00 2001 From: Franklin Rice Date: Sat, 1 Sep 2018 19:10:31 -0700 Subject: [PATCH] searching implemented for landing charts --- js/database.js | 31 ++++++++++++++++++++++ js/landing.js | 60 ++++++++++++++++++++++++++++++++++++++----- sections/landing.html | 12 ++++----- 3 files changed, 90 insertions(+), 13 deletions(-) diff --git a/js/database.js b/js/database.js index 86e395b..4c9ea1a 100644 --- a/js/database.js +++ b/js/database.js @@ -959,6 +959,37 @@ class Database { }); } + /* Get data for one field across all projects. */ + get_data_by_field(field, callback) { + var _this = this; + var db = this.db; + db.serialize(function() { + _this.has_metadata_attr([field], function(attr_exists) { + if (attr_exists) { + var apertures = []; + var counts = []; + var stmt = db.prepare("SELECT COUNT(*) as Count, " + field + " FROM Images WHERE " + field + " IS NOT NULL GROUP BY " + field); + stmt.each([], function(err, row) { + if (err) { + console.error("FAILING: " + err); + callback([], []); + return; + } + + apertures.push(JSON.parse(row[field])); + counts.push(row['Count']); + }, function() { + callback(apertures, counts); + }); + stmt.finalize(); + } else { + console.error("column DNE: " + field); + callback([], []); + } + }); + }); + } + /* Uses callback(img_path, proj_name, dictionary) to return dict of metafields to metadata. * Ignores any fields that are not filled in or not selected. */ get_selected_image_metadata(img_path, proj_name, selected, callback) { diff --git a/js/landing.js b/js/landing.js index dea6590..5745771 100644 --- a/js/landing.js +++ b/js/landing.js @@ -27,7 +27,7 @@ function dashSearch() { var results = []; var searchId = $("#dashSearchId").val(); - if (searchId) { + if (searchId) { database.has_project(searchId, function(bool) { if (bool) { database.get_project_thumbnail(searchId, function(path) { @@ -35,7 +35,7 @@ function dashSearch() { results.path = path; results.proj_name = searchId; insertSearchResults(false, results); - }); + }); } else { insertSearchResults(true, "No Projects Found: " + searchId); } @@ -126,10 +126,55 @@ function create_image_locations_map() { }); } +function create_data_charts() { + database.get_metadata_fields(charts_helper) +} + +function charts_helper(fields) { + var options = "" + var template = "" + for (var ind in fields) { + var field = fields[ind] + options += template.replace(/field/g, field) + } + var data1 = document.getElementById('field-select-1') + var data2 = document.getElementById('field-select-2') + data1.innerHTML = "" + options + data2.innerHTML = "" + options + + var _ = new Choices(data1, { + searchPlaceholderValue: "Type to search", + }) + _ = new Choices(data2, { + searchPlaceholderValue: "Type to search" + }) + + function selectorFunction(event) { + database.get_data_by_field(event.detail.choice.value, function(labels, counts) { + if (event.path[0].id === 'field-select-1') { + var target = 'chart-1' + document.getElementById('chart1-parent').innerHTML = "" + } else { + var target = 'chart-2' + document.getElementById('chart2-parent').innerHTML = "" + } + addPieChart( + target, + labels, + counts, + event.detail.choice.value, + ) + }) + } + + data1.addEventListener('choice', selectorFunction) + data2.addEventListener('choice', selectorFunction) +} + function create_image_models_chart() { database.get_all_image_models(function(models, counts) { addPieChart( - "all-image-models", + "chart-1", models, counts, "Camera Make" @@ -140,7 +185,7 @@ function create_image_models_chart() { function create_image_apertures_chart() { database.get_all_image_apertures(function(apertures, counts) { addPieChart( - "all-image-apertures", + "chart-2", apertures, counts, "Aperture" @@ -151,8 +196,8 @@ function create_image_apertures_chart() { function clear_charts() { $("#all-image-by-date").html(""); $("#all-image-locations").html(""); - $("#all-image-models").html(""); - $("#all-image-apertures").html(""); + $("#chart-1").html(""); + $("#chart-2").html(""); } function populate_landing() { @@ -161,6 +206,7 @@ function populate_landing() { create_image_locations_map(); create_image_models_chart(); create_image_apertures_chart(); + create_data_charts(); } -populate_landing(); \ No newline at end of file +populate_landing(); diff --git a/sections/landing.html b/sections/landing.html index 17756a4..d72c16b 100644 --- a/sections/landing.html +++ b/sections/landing.html @@ -69,12 +69,12 @@
- Camera Models +
-
- +
+
@@ -85,12 +85,12 @@
- Camera Apertures +
-
- +
+