client/app/components/app_service.js
author rougeronj
Thu, 11 Jun 2015 16:19:36 +0200
changeset 172 ffdfe491869c
parent 146 c6fa8ee3f562
child 178 a3e1106b6f96
permissions -rw-r--r--
uncomment jshint and fix minor bug rename myCustomer to imgType (customer to check if image is portrait or landscape)


(function(){
    'use strict';
    
    angular.module('ammicoCommon', ['ngRoute'])
    .factory('Book', function($resource, context) {
        var books = $resource(context.urls.ammicoUrl+'books/:idBook', {idBook:'@id', idExpo: context.idExpo}, {update: { method: 'PUT'}});
        return books;
    })
    .factory('Slide', function($resource, context, $modal) {
        var slides = $resource(context.urls.ammicoUrl+'slides/:idSlide', {idSlide:'@id'}, {update: { method: 'PUT'}});
        
        angular.extend(slides.prototype, {

            toggleFavorite: function () {
                this.favorite = !this.favorite;
                this.$update();
            },
            addToBook: function () {
                var _this = this;
                var modalInstance = $modal.open({
                    templateUrl: 'books/add_book_modal.html',
                    controller: 'ModalAddBookCtrl',
                    size: 'sm'
                });

                modalInstance.result.then(function (idBook) {
                    var newSlide = _this;
                    newSlide.book = idBook;
                    delete newSlide.id;
                    slides.save(newSlide);
                });
            },
            update: function(){
                console.log('test');
            },
            remove: function (array) {
                var _this = this;
                if(window.confirm('Êtes-vous sûr(e) de vouloir effacer cet élément ? Cette action est irrémédiable.')){
                    this.$delete(function(){
                        if (array){
                            array.splice(array.indexOf(_this), 1);
                        }
                        //$scope.$emit('slideDeleted', array);
                    },
                    function(error) {
                        if (error.status === 404 && array){
                                array.splice(array.indexOf(_this), 1);
                        }
                    });
                }
            }
        });
        
        return slides;
    })
    .factory('Order', function($resource, context) {
        return $resource(context.urls.ammicoUrl+'books/:idBook/order', {idBook:'@id'});
    })
    .service('Utils', function($resource, context, $sce) {
        this.sanitizeUrls = function(data){
            data.details.audio = $sce.trustAsResourceUrl(data.details.audio);
            data.details.video = $sce.trustAsResourceUrl(data.details.video);
            data.audio = $sce.trustAsResourceUrl(data.audio);
            data.video = $sce.trustAsResourceUrl(data.video);
            return data;
        };
    })
    .service('authApi', function($resource, context) {
        this.login = $resource(context.urls.ammicoUrl+'auth/api-token-auth', {idExpo: context.idExpo});
        this.logout = $resource(context.urls.ammicoUrl+'auth/logout');
        this.user = $resource(context.urls.ammicoUrl+'auth/user');
        this.test = $resource(context.urls.ammicoUrl+'auth/auth');
    })
    .service('searchApi', function($resource, context) {
        this.searchResource = function(params){
            return $resource(context.urls.searchUrl,  
                    {
                callback: 'JSON_CALLBACK'
                    },
                    {
                        getJsonp: {
                            method: 'JSONP',
                            params: params,
                            isArray: false,
                            transformResponse: function(data){
                                // Transform meta list into meta dict
                                var nb = data.hits.length;
                                for(var i=0;i<nb;i++){
                                    var nb_metas = data.hits[i].metas.length;
                                    data.hits[i].metas_dict = {};
                                    for(var j=0;j<nb_metas;j++){
                                        if(typeof data.hits[i].metas[j].images==='undefined'){
                                            data.hits[i].metas_dict[data.hits[i].metas[j].name] = data.hits[i].metas[j].value;
                                        }
                                        else{
                                            data.hits[i].metas_dict.images = data.hits[i].metas[j].images[0].value;
                                        }
                                    }
                                }
                                return data;
                            }
                        }
                    });
        };
    })
    .directive('imgType', function(){
        return {
            restrict: 'AE',
            link: function(scope, elem) {
                elem.bind('error', function() {
                    elem.parents('li.item').addClass('no-img');
                    elem.remove();
                });
                elem.on('load', function() {
                    var w = elem.width(),
                        h = elem.height();
                    if (w > h){
                        elem.addClass('img-landscape');
                    }
                });
            }
        };
    });
    
})();