0.6.2 • Published 5 years ago

cache-holepuncher v0.6.2

Weekly downloads
3
License
MIT
Repository
github
Last release
5 years ago

cache-holepuncher.js

A lightweight dependency-free library for cache hole punching.

Pull dynamic HMTL snippets in fully cached sites with a single line of code. By default the response is cached browser to avoid unnecessary requests.

Install

npm install cache-holepuncher

or

yarn add cache-holepuncher

If you are constained to a non-module environment (e.g. no bundlers such as webpack) - don’t fret. Simply pull the latest version of cache-holepuncher from jsdelivr.

<!-- ES6 module -->
<script type="module" src="https://cdn.jsdelivr.net/npm/cache-holepuncher/dist/holepuncher.min.js"></script>

<!-- legacy fallback -->
<script nomodule src="https://cdn.jsdelivr.net/npm/cache-holepuncher/dist/holepuncher.legacy.min.js"></script>

Basic usage

Once loaded you

Get single

<div id="single_placeholder_id">
    empty state
</div>

<script>
    punch_one("/some/endpoint", "single_placeholder_id");
</script>

Get multiple

<ul>
    <li class="placeholder" data-callback-url="/some/endpoint/foo">empty state</li>
    <li class="placeholder" data-callback-url="/some/endpoint/bar">empty state</li>
</ul>

<script>
    punch_all(".placeholder", "data-callback-url");
</script>

Flush local cache

document.querySelector("form").addEventListener('submit', e => punch_flush());

Advanced usage

import { HolePuncher } from 'holepuncher';

let puncher     = new HolePuncher(options);
let placeholder = document.getElementById(elementId);
let url         = '/some/endpoint';
    
// do something before fetch  
puncher.events.on('before_fetch', e => { 
    const placeholder = e.detail.context;
    placeholder.classList.add('loading');
});

// do something when the data is avaiable
puncher.events.on('fetch_data', e => { 
    // hide loader 
    const placeholder = e.detail.context;
    const response = e.detail.response.clone();
    response.json().then(data => {
        placeholder.innerHTML = data.someAttribute;
        placeholder.classList.remove('loading');
        console.log(data.anotherAttribute)
    }); 
});
    
// fetch html    
puncher.fetch(url, placeholder);   

// fetch json    
puncher.fetch(url, placeholder, { 
    credentials: 'same-origin',
    headers: new Headers({
        'Content-Type': 'application/json'
    })
});      
        
// register listener that flushes the local cache 
document.querySelector("form").addEventListener('submit', e => {
    puncher.flush({verbose: true})
});
    
0.6.2

5 years ago

0.6.1

5 years ago

0.6.0

5 years ago

0.5.0

5 years ago

0.4.0

5 years ago

0.3.0

5 years ago

0.2.0

5 years ago

0.1.0

5 years ago