jQuery(function($) { var query = getQueryVariable("q"), pageNum = getQueryVariable("page"), searchResults = $("#bing-search-results"), internalResults, hasResults; if(query !== false) { query = $.trim(query); if(query.length) { $("#bing-search-form").find("input[name=q]").attr("value", query); pageNum = parseInt(pageNum, 10); if(!pageNum) pageNum = 1; else pageNum = Math.abs(pageNum); getBingSearchResults(query, pageNum); } } setNoMatchesFound(); function getBingSearchResults(query, pageNum) { var hostname = window.location.hostname, searchPagination = $("#bing-search-pagination"), resultsPerPage = 25, offset, sites, internal_filename, term; offset = (pageNum * resultsPerPage) - resultsPerPage; if(hostname === "northbaybusinessjournal.com" || hostname === "www.northbaybusinessjournal.com") { sites = "(site:northbaybusinessjournal.com)"; internal_filename = "nbbj_search_terms.json"; } else if(hostname === "sonomanews.com" || hostname === "www.sonomanews.com") { sites = "(site:sonomanews.com)"; internal_filename = "sit_search_terms.json"; } else if(hostname === "petaluma360.com" || hostname === "www.petaluma360.com") { sites = "(site:petaluma360.com)"; internal_filename = "p360_search_terms.json"; } else { sites = "(site:pressdemocrat.com OR site:emeraldreport.com OR site:pdpreps.com OR site:sonomamag.com)"; internal_filename = "pd_search_terms.json"; } if(pageNum === 1 && query.length > 3) { $.getJSON("//code.pressdemocrat.com/bing-search/internal/" + internal_filename, function(data) { $.each(data, function(key, val) { $.each(val.terms, function(k, v) { term = v.toLowerCase(); if(term.indexOf(query.toLowerCase()) !== -1) { addInternalResult(val.title, val.description, val.url, null, null); return false; } }); }); }); } var params = { // Request parameters "q" : query + sites, "sortby" : "date", "count" : resultsPerPage, "offset" : offset, "mkt" : "en-us", "safesearch" : "Moderate", "textDecorations" : true, "textFormat" : "HTML" }; $.ajax({ url : "https://api.cognitive.microsoft.com/bing/v5.0/news/search?" + $.param(params), type : "GET", data : "{body}", beforeSend : function(xhrObj) { xhrObj.setRequestHeader("Ocp-Apim-Subscription-Key", "db5564505fb5462b8744cbd89365f76b"); } }).done(function(data) { if(data.value !== undefined && data.value.length) { var totalPages = 1, button, thisButton, href, i; if(data.totalEstimatedMatches !== undefined) { totalPages = Math.ceil(data.totalEstimatedMatches / resultsPerPage); totalPages = (totalPages > 50) ? 50 : totalPages; if(totalPages > 1) { href = window.location.pathname + "?q=" + encodeURIComponent(query) + "&page="; button = $('').addClass("bing-search-page-button"); if(pageNum > 1) { thisButton = button.clone(); thisButton.attr("href", href + (pageNum - 1)).html(''); searchPagination.append(thisButton); } for(i = 1; i <= totalPages; i++) { if(i < (pageNum + 4) && i > (pageNum - 4)) { button = $('').addClass("bing-search-page-button").attr("href", href + i).text(i); if(i === pageNum) { button.addClass("selected"); } searchPagination.append(button); } } if(pageNum < totalPages) { thisButton = button.clone(); thisButton.attr("href", href + (pageNum + 1)).html(''); searchPagination.append(thisButton); } } } $.each(data.value, function(i) { var result = data.value[i], title = result.name, description = result.description, url = result.url, imageUrl = (result.image !== undefined) ? result.image.thumbnail.contentUrl : null, datePublished = (result.datePublished !== undefined) ? result.datePublished : null; addBingResult(title, description, url, imageUrl, datePublished); }); } }).fail(function(jqXHR) { console.log(jqXHR.responseText); }); } function addInternalResult(title, description, url) { if(!internalResults) { internalResults = $('
').css({marginBottom : "1em"}); searchResults.before(internalResults); } var result = addSearchResult(title, description, url, null, null); internalResults.append(result); } function addBingResult(title, description, url, imageUrl, datePublished) { var result = addSearchResult(title, description, url, imageUrl, datePublished); searchResults.append(result); } function addSearchResult(title, description, url, imageUrl, datePublished) { if(!hasResults) { hasResults = true; searchResults.empty(); } var outer = $('').addClass("bing-search-result"), href = $('').attr("href", url), image = $('').attr("alt", ""), name = $(''), snippet = $('').addClass("bing-snippet"), display = $('').addClass("bing-display-url"), pubDate, imageHref; if(datePublished && datePublished !== undefined) { pubDate = new Date(datePublished); snippet.append('' + (pubDate.getMonth() + 1) + '/' + pubDate.getDate() + '/' + pubDate.getFullYear() + ' - '); } if(imageUrl && imageUrl !== undefined) { imageHref = href.clone(); image.attr("src", imageUrl).appendTo(imageHref); imageHref.appendTo(outer); } href.html(title).appendTo(name); name.appendTo(outer); snippet.append(description).appendTo(outer); return outer; } function getQueryVariable(variable) { var query = window.location.search.substring(1); var vars = query.split("&"); for(var i = 0; i < vars.length; i++) { var pair = vars[i].split("="); if(pair[0] == variable) { return decodeURIComponent(pair[1].replace(/\+/g, '%20')); } } return false; } function setNoMatchesFound() { if(!hasResults) { searchResults.html('No Matches Found'); } } });