$(function () {
$("#searchInput").keypress(function (e) {
if (e.which == 13) { //Enter key pressed
$("#searchChainLoc").text("");
urlHighlightParams = "";
searchButton();
}
});
$("#searchButton").click(function (e) {
$("#searchChainLoc").text("");
urlHighlightParams = "";
searchButton();
});
});
var serviceName = "searchaccessibilitypoc";
var indexName = "documents";
var apiVersion = "2019-05-06";
var searchApiKey = "1F29382F601EE2938863744DF641131B";
var pinFilter = "";
var mapCentre = [51.46, 0.36];
var highlightField = "content";
var pinDistanceLimit = 0.32;
var urlHighlightParams = "";
var boundariesOn = false;
var boundaryOn = true;
var routeOn = true;
var isIE = /*@cc_on!@*/false || !!document.documentMode;
function searchButton(e, pinLoc) {
var text = $("#searchInput").val();
var displayText = text;
var bingObject = bingSearch(text);
var geoFilter = bingObject.geoFilter;
var count = 0;
if (typeof pinLoc !== "undefined") {
text = text + "+\"" + pinLoc + "\"";
displayText = displayText + "\" and \"" + pinLoc;
}
var textResults = textSearch(text, pinFilter);
if (geoFilter !== "") {
var geoResults = geoSearch(geoFilter, pinFilter);
if (textResults.value.length > 0) {
var finalResults = deduplicate(textResults, geoResults);
displayResults(finalResults, textResults["@odata.count"], displayText);
GetMap(textResults.value, bingObject);
count = finalResults.length;
}
else {
displayResults(geoResults.value, 0, displayText);
GetMap(geoResults.value, bingObject);
count = geoResults.value.length;
}
}
else {
displayResults(textResults.value, textResults.value.length, displayText);
GetMap(textResults.value, bingObject);
count = textResults.value.length;
}
appInsights.trackEvent({ name: 'Search Event' }, { searchTerms: text, resultCount: count });
pinFilter = "";
}
function bingSearch(searchText) {
var geoFilter = ""
var coords = [];
var bingObject = {};
var name = "";
var url = "https://dev.virtualearth.net/REST/v1/Locations?"
var stopWords = ["pollution", "geology"];
for (var i = 0; i < stopWords.length; i++) {
searchText = searchText.toLowerCase();
searchText = searchText.replace(stopWords[i], "");
}
$.ajax({
url: url,
async: false,
type: "GET",
dataType: "JSON",
data: {
"culture": "en-GB",
"maxResults": 1,
"key": "AmvptebktO-hQjfpGosvLfkoItYVCKNESul-s19CMXmwQ_7PQGf2OuoWJsJ3eqfS",
"userLocation": "51.46390151977539, 0.35016998648643494",
"q": searchText + ",england",
},
success: function (data) {
var firstResult = data.resourceSets[0].resources[0];
coords = firstResult.point.coordinates;
name = firstResult.name;
if (typeof firstResult == "undefined" || coords[0] < 50.7 || coords[0] > 52.1 || coords[1] < -1 || coords[1] > 1.6) {
geoFilter = "";
coords = [];
}
else if (firstResult.entityType == "AdminDivision2") {
var box = firstResult.bbox;
var geoPolygon = "geography'POLYGON((" + box[1] + " " + box[0] + ',' + box[3] + " " + box[0] + ',' + box[3] + " " + box[2]
+ ',' + box[1] + " " + box[2] + ',' + box[1] + " " + box[0] + "))'";
geoFilter = "GeoPointResults/any(a: geo.intersects(a/GeoPoint, " + geoPolygon + "))";
}
else {
var searchLocation = "geography'POINT(" + coords[1] + " " + coords[0] + ")'";
geoFilter = "GeoPointResults/any(a: geo.distance(a/GeoPoint, " + searchLocation + ") lt 5)";
}
},
error: function (err) {
console.log("error:" + err);
}
});
bingObject = {
"geoFilter": geoFilter,
"coords": coords,
"name": name
};
return bingObject;
}
function textSearch(text, filterExpression) {
var url = "https://" + serviceName + ".search.windows.net/indexes/" + indexName + "/docs?";
var textResults = "";
var dataObject = {
"api-version": apiVersion,
"highlight": highlightField,
"searchFields": highlightField,
"search": text,
"$select": "metadata_storage_path,content,contentCymru,contentBangla,GeoPointResults",
"$count": "true"
};
if (filterExpression !== "") {
dataObject["$filter"] = filterExpression;
}
$.ajax({
url: url,
async: false,
headers: {
"api-key": searchApiKey,
"Content-Type": "application/json"
},
type: "GET",
dataType: "JSON",
data: dataObject,
success: function (data) {
textResults = data;
},
error: function (err) {
console.log(err)
}
});
return textResults;
}
function geoSearch(geoFilter, filterExpression) {
var url = "https://" + serviceName + ".search.windows.net/indexes/" + indexName + "/docs?";
var geoResults = null;
if (filterExpression !== "") {
geoFilter = filterExpression;
}
var dataObject = {
"api-version": apiVersion,
"highlight": highlightField,
"search": "*",
"$select": "metadata_storage_path,content,contentCymru,contentBangla,GeoPointResults",
"$filter": geoFilter,
"$count": "true"
};
$.ajax({
url: url,
async: false,
headers: {
"api-key": searchApiKey,
"Content-Type": "application/json"
},
type: "GET",
dataType: "JSON",
data: dataObject,
success: function (data) {
geoResults = data;
},
error: function (err) {
console.log(err)
}
});
return geoResults;
}
function deduplicate(textResults, geoResults) {
var finalResults = JSON.parse(JSON.stringify(textResults.value));
for (var i = 0; i < geoResults.value.length; i++) {
var count = 0;
for (var j = 0; j < textResults.value.length; j++) {
if (geoResults.value[i].metadata_storage_path == textResults.value[j].metadata_storage_path) {
count++;
}
}
if (count < 1) {
finalResults.push(geoResults.value[i]);
}
}
return finalResults;
}
function displayResults(results, textResLen, text) {
var count = 1;
$("#resultList").html("");
$(results).each(function () {
var storageAddress = atob(this.metadata_storage_path.substring(0, this.metadata_storage_path.length - 1));
var pathParts = storageAddress.split("/");
var searchTerms = $("#searchInput").val() + "," + urlHighlightParams;
var url = "../HTML/" + pathParts[5] + "/main.html" + "?text=" + searchTerms + "" + pathParts[6].replace(".txt", "");
var documentName = pathParts[5].replace(/_/g, " ");
var section = pathParts[6].replace(".txt", "");
var sectionSplits = section.split(".");
var sectionDisplay = sectionSplits[sectionSplits.length - 1].match(/[A-Z][a-z]+|[A-Z][0-9]+/g).join(" ")
var highlights = this["@search.highlights"];
var currentResult = "";
if (highlightField == "contentCymru") {
if (highlights == null) {
currentResult = this.contentCymru;
}
else {
currentResult = highlights.contentCymru.join('
...
');
}
}
else if (highlightField == "contentBangla") {
if (highlights == null) {
currentResult = this.contentBangla;
}
else {
currentResult = highlights.contentBangla.join('
...
');
}
}
else {
if (highlights == null) {
currentResult = this.content;
}
else {
currentResult = highlights.content.join('
...
');
}
}
$("#resultList").append("" +
"
" + currentResult.replace(/\r\n/g, "
") + "