Amazon Store Router

Home · Changelog

CDN:
https://cdn.davecross.co.uk/js/amazon-store/v1/amazon-store.min.js (rolling major)
https://cdn.davecross.co.uk/js/amazon-store/v1.2.0/amazon-store.min.js (pinned)

GitHub release (latest SemVer)

A tiny, dependency‑free helper to route Amazon links to the viewer’s local store and add your Associate tag. Works in any static site. Ship it from your own CDN.


Quick start

UMD (global) — easiest

<script src="https://cdn.davecross.co.uk/js/amazon-store/v1/amazon-store.min.js" defer></script>
<script>
  document.addEventListener('DOMContentLoaded', () => {
    // Upgrade all elements with data attributes:
    AmazonStore.enhanceAll({ tag: 'davblog-21' });

    // (Optional) render any “More stores” grids
    AmazonStore.renderStoreGridAll({ tag: 'davblog-21' });
  });
</script>

Markup for a button:

<a class="btn btn-primary"
   data-amazon-asin="B0DJRYGFKM"
   data-amazon-text="Buy on Amazon"> </a>

ESM (modern browsers)

Pinned version (reproducible):

<script type="module">
  import { enhanceAll, renderStoreGridAll } from 'https://cdn.davecross.co.uk/js/amazon-store/v1.2.0/amazon-store.esm.js';
  enhanceAll({ tag: 'davblog-21' });
  renderStoreGridAll({ tag: 'davblog-21' });
</script>

Or follow the moving pointer (latest v1.x):

<script type="module">
  import { enhanceAll, renderStoreGridAll } from 'https://cdn.davecross.co.uk/js/amazon-store/v1/amazon-store.esm.js';
  enhanceAll({ tag: 'davblog-21' });
  renderStoreGridAll({ tag: 'davblog-21' });
</script>

Data attributes

For buttons/links you want auto‑wired:

Optional per‑element overrides:

<a class="cover-link"
   data-amazon-asin="1529922933"
   data-amazon-mode="link">
  <img src="…" alt="Cover of …">
</a>

“More stores” grid (v1.1.0+)

HTML:

<details class="more-stores">
  <summary>More stores</summary>
  <div class="store-grid"
       data-amazon-grid
       data-amazon-asin="B09VPLGMBN"></div>
</details>

JS (already shown in Quick start):

AmazonStore.renderStoreGridAll({ tag: 'davblog-21' });

Optional grid attributes:


API

detectRegion(opts?) -> "UK" | "US" | "DE" | ...   // browser‑first (navigator → timeZone → html → TLD → fallback)
label(region) -> "Amazon UK"
url(asin, opts) -> string             // builds a store URL (supports search fallback)
enhance(elOrSelector, asin, opts)     // wire up a single element
enhanceAll(defaults)                  // wire up all matching elements

renderStoreGrid(elOrSelector, opts)   // build a “More stores” grid
renderStoreGridAll(defaults)          // build all grids on the page

opts:

{
  region?: "UK" | "US" | "DE" | ...,  // force region (optional)
  defaultRegion?: "UK" | "US" | ...,  // fallback only if undetectable
  tag?: string,
  path?: string,                      // default 'dp'
  params?: Record<string,string>,
  search?: string,                    // if set (and ASIN omitted), use /s?k=...
  // grids:
  currentFirst?: boolean, regions?: string[] | CSV, linkClass?: string, newTab?: boolean,
  // enhance:
  mode?: "link" | "button" | "auto", text?: string
}

Versioning & CDN


SRI (optional)

Generate a Subresource Integrity hash:

openssl dgst -sha384 -binary amazon-store.min.js | openssl base64 -A

Include:

<script src="…/amazon-store.min.js"
        integrity="sha384-…"
        crossorigin="anonymous" defer></script>

Licence

MIT