78 lines
1.9 KiB
JavaScript
78 lines
1.9 KiB
JavaScript
var services = angular.module('satbd.satellite.bar.services',[])
|
|
|
|
services.factory('albumService',['$http','$log','$q', function($http,$log,$q) {
|
|
var determinantRegexp = /^(.*) \(([Ll][eas']+)\)$/;
|
|
|
|
var removeSerie = /^\(.*\) .*$/;
|
|
|
|
function cleanupName(name) {
|
|
matches = name.match(determinantRegexp);
|
|
if (matches == null) {
|
|
return name;
|
|
}
|
|
return matches[2] + ' ' + matches[1];
|
|
}
|
|
|
|
function cleanupFields(album) {
|
|
album.serie = album.série;
|
|
album.série = undefined;
|
|
album.editeur = album.éditeur;
|
|
album.éditeur = undefined;
|
|
if (removeSerie.test(album.serie) == true) {
|
|
album.serieDisplay = '';
|
|
} else {
|
|
album.serieDisplay = cleanupName(album.serie);
|
|
if ( album.Num > -1 ) {
|
|
album.serieDisplay += ' ' + album.Num;
|
|
}
|
|
}
|
|
album.titleDisplay = cleanupName(album.titre);
|
|
return album;
|
|
}
|
|
function get(id) {
|
|
return $http.get('/api/albums/'+ id).then(function (response) {
|
|
return cleanupFields(response.data);
|
|
});
|
|
}
|
|
|
|
var keywordRegexp = /(\s+)|$/g;
|
|
|
|
function fuzzifyTerms(terms) {
|
|
return terms.replace(keywordRegexp,"~2 ");
|
|
}
|
|
|
|
function processResult(res, timeOffset) {
|
|
res.took += timeOffset;
|
|
return res;
|
|
}
|
|
|
|
function search(terms,from,fuzzify, previousTime) {
|
|
if (typeof fuzzify == 'undefined' ) {
|
|
fuzzify = true;
|
|
}
|
|
if (typeof previousTime == 'undefined' ) {
|
|
previousTime = 0;
|
|
}
|
|
|
|
return $http.post('/api/search', {
|
|
"size" : 10,
|
|
"from": from || 0,
|
|
"explain": false,
|
|
"highlight":{},
|
|
"fields": ["ID","série","collection","titre","éditeur","ref","description","Note"],
|
|
"query": {
|
|
"query": terms
|
|
}
|
|
}).then(function(response) {
|
|
if ( fuzzify == true && response.data.total_hits == 0) {
|
|
return search(fuzzifyTerms(terms),from,false,response.data.took);
|
|
}
|
|
return processResult(response.data,previousTime);
|
|
});
|
|
}
|
|
return {
|
|
get: get,
|
|
search: search
|
|
};
|
|
}]);
|