AngularJS: Facets in a Search Grid
Sometime back I really needed this code however it came a little too late and unfortunately didn't make it into the final product. However I have since then built a complete explain showing how to hand facets with little javascript code and with a whole lot of functionality!
Requirements
Load appropriate facets, make a search. Update the UI, reload page if necessary but scale up for a single page application. Make things bookmarkable but don't lose that awesomeness from SPA's.
Example
http://jsfiddle.net/t7kr8/211/ - I forget where I found this but its probably buried somewhere in my resources.
My Example
https://fassetar.github.io/blog-examples/catalog-facets/
Javascript code
This is where I will implement the example but for now I have not included it yet.
It is mostly included and I only need to hookup the backend, however I'm working getting it live.
Project: https://github.com/fassetar/catalog
Resources
search - Multiple facets per field with Solr - Stack Overflow
Pretty URLs in AngularJS: Removing the # ♥ Scotch
https://docs.angularjs.org/api/ng/function/angular.copy - used in the first example.
c# - URL with multiple parameters as a query string in ASP.NET - Stack Overflow
java - Handling multiple values for a single query parameter in a rest webservice url and handling them using hibernate criteria - Stack Overflow
Requirements
Load appropriate facets, make a search. Update the UI, reload page if necessary but scale up for a single page application. Make things bookmarkable but don't lose that awesomeness from SPA's.
Example
http://jsfiddle.net/t7kr8/211/ - I forget where I found this but its probably buried somewhere in my resources.
My Example
https://fassetar.github.io/blog-examples/catalog-facets/
Javascript code
var myApp = angular.module('myApp', []);
myApp.controller('mainController', function($scope) {
$scope.items = [{
item:"apples",
flag: true
}, {
item:"oranges",
flag: true
}, {
item:"pears",
flag: false
}];
$scope.itemsUnchanged = angular.copy($scope.items);
$scope.allNeedsClicked = function () {
var newValue = !$scope.allNeedsMet();
for (var i = 0; i < $scope.items.length; i++) {
$scope.items[i].flag = newValue;
}
};
$scope.allNeedsMet = function () {
var needsMet = [];
for (var i = 0; i < $scope.items.length; i++) {
if ($scope.items[i].flag === true)
needsMet.push(true);
}
return (needsMet.length === $scope.items.length);
};
$scope.update = function() {
if (angular.equals($scope.items, $scope.itemsUnchanged)) {
return "Not Changed";
} else {
return "Changed";
}
};
$scope.url = function(){
var url = [];
//url = $scope.items[1].item;
angular.forEach($scope.items, function(key, value) {
if(key.flag)
url.push(key.item);
});
return url.toString();
}
});
Html Code <h1>Catalog Facets</h1>
{{update()}}
<ul>
<li><input type="checkbox" ng-click="allNeedsClicked()" ng-checked="allNeedsMet()"/>All
<label></label>
<ul ng-repeat="i in items">
<li><input type="checkbox" ng-model="i.flag"/>{{i.item}}</li>
</ul>
</li>
</ul>
<label>Single value Url Query:</label>/?fq={{url()}}
<label style="float:left">Multi value Url Query:/?</label>
<div style="float:left" ng-repeat="i in items">
<div ng-if="i.flag">fq={{i.item}}
<span ng-if="items[$index+1].flag || items[$index+2].flag">&</span></div>
</div>
It is mostly included and I only need to hookup the backend, however I'm working getting it live.
Project: https://github.com/fassetar/catalog
Resources
search - Multiple facets per field with Solr - Stack Overflow
Pretty URLs in AngularJS: Removing the # ♥ Scotch
https://docs.angularjs.org/api/ng/function/angular.copy - used in the first example.
c# - URL with multiple parameters as a query string in ASP.NET - Stack Overflow
java - Handling multiple values for a single query parameter in a rest webservice url and handling them using hibernate criteria - Stack Overflow