self.addEventListener(‘install’, function(event) {

'use strict';

      // Open device cache and store our list of items
event.waitUntil(
  caches.open(CACHE_NAME).then(function(cache) {
    return cache.addAll(URLS_TO_CACHE);
  })
);

});

self.addEventListener(‘fetch’, function(event) {

'use strict';

      // Intercept fetch request
event.respondWith(
      // match and serve cached asset if it exists
  caches.match(event.request).then(function(response) {
    if (response)
      log_message('Read from cache', response);

    return response || fetch(event.request);
  })
);

});

self.addEventListener(‘activate’, function(event) {

'use strict';

event.waitUntil(
      // Open our apps cache and delete any old cache items
      caches.open(CACHE_NAME).then(function(cacheNames){
              cacheNames.keys().then(function(cache){
                      cache.forEach(function(element, index, array) {
                              if (URLS_TO_CACHE.indexOf(element) === -1)
                                      caches.delete(element);
                  });
              });
      })
);

});

function log_message(message, event){

'use strict';
if (DEBUG)
  console.info('SWCR: ' + message, event );

}