rinogo
6/26/2014 - 3:00 PM

angular-offline.js

// Usage:
// OfflineListener.init(true);
define(['angular', 'core'], function(angular){

    // Some concepts from: https://github.com/HubSpot/offline
    var module = angular.module('utils.offline', []);

    module.service('OfflineListener', function ($rootScope, $window, $alert) {

        var offlineAlert;

        var hookup = function(){
            $rootScope.$on('offline', function(){
                // $alert is Angular-Strap component
                offlineAlert = $alert({ 
                    title: 'Internet connection unstable', 
                    type: 'danger',
                    dissmissable: false,
                    duration: false
                });
            }, true);

            $rootScope.$on('online', function(){
                if(!offlineAlert) return;

                offlineAlert.hide();
                offlineAlert = false;

                $alert({ 
                    title: 'Internet connection re-established', 
                    type: 'info',
                    dissmissable: true,
                    duration: 10
                });

            }, true);
        };

        var init = function(hookupAlert){
            $window.addEventListener("offline", function () {
                $rootScope.$emit('offline');
            }, false);

            $window.addEventListener("online", function () {
                $rootScope.$emit('online');
            });

            if(hookupAlert){
                hookup();
            }
        };

        return {
            init: init
        };

    });

    return module;

});