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) { var 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 }; }]);