Skip to content

Instantly share code, notes, and snippets.

@NickColley
Created October 21, 2018 23:36
Show Gist options
  • Save NickColley/b920741df8c7541908bb7b361d84f35b to your computer and use it in GitHub Desktop.
Save NickColley/b920741df8c7541908bb7b361d84f35b to your computer and use it in GitHub Desktop.
JS Bin // source https://jsbin.com/bucijav
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
<style id="jsbin-css">
html, body {
font-size: 16px;
font-family: sans-serif;
line-height: normal;
margin: 1rem;
}
* {
margin-top: 0;
}
main > *,
body > * {
margin-bottom: 1.5rem;
}
ul {
padding: 0;
padding-left: 1em;
}
.scrollable-list {
display: inline-block;
max-height: 250px;
overflow-y: auto;
padding-right: 15px;
}
</style>
</head>
<body>
<!--
This is not accessible, for demonstration only, do not use in production.
I will make an accessible real example when/if this is published to npm.
-->
<h1>Loading...</h1>
<script id="jsbin-javascript">
var Registers=function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=0)}([function(e,t,r){const{kebabCaseObjectKeys:n,objectToQueryString:o,validateParams:i}=r(1),s=r(5);e.exports=class{constructor(e){this.name=e}_getEndpoint(e,t={},r=[]){const s=n(t),u=i(s,r),c=o(u);return`https://${this.name}.register.gov.uk/${e}${c}`}register(){return s(this._getEndpoint("register"))}records(e,t={}){let r={},o="records";if("string"==typeof e)o+="/"+e,t.entries&&(o+="/entries");else if("object"==typeof e){const t=n(e);void 0!==t["field-name"]&&void 0!==t["field-value"]?o+=`/${t["field-name"]}/${t["field-value"]}`:r=e}return s(this._getEndpoint(o,r,["page-size","page-index"]))}entries(e){let t={},r="entries";return void 0!==e&&(isNaN(e)?t=e:r+="/"+e),s(this._getEndpoint(r,t,["start","limit"]))}items(e){return s(this._getEndpoint(`items/${e}`))}downloadRegister(){return s(this._getEndpoint("download-register"),"blob")}}},function(e,t,r){const n=r(2);e.exports={kebabCaseObjectKeys:function(e){if(void 0===e)throw new Error("expected object to be passed");let t={};return Object.keys(e).forEach(r=>{t[function(e){return e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}(r)]=e[r]}),t},objectToQueryString:function(e){if(void 0===e)throw new Error("expected object to be passed");const t=n.stringify(e);return t?"?"+t:""},validateParams:function(e,t=[]){let r={};return Object.keys(e).forEach(n=>{t.includes(n)&&(r[n]=e[n])}),r}}},function(e,t,r){"use strict";t.decode=t.parse=r(3),t.encode=t.stringify=r(4)},function(e,t,r){"use strict";function n(e,t){return Object.prototype.hasOwnProperty.call(e,t)}e.exports=function(e,t,r,i){t=t||"&",r=r||"=";var s={};if("string"!=typeof e||0===e.length)return s;var u=/\+/g;e=e.split(t);var c=1e3;i&&"number"==typeof i.maxKeys&&(c=i.maxKeys);var a=e.length;c>0&&a>c&&(a=c);for(var f=0;f<a;++f){var p,l,d,b,y=e[f].replace(u,"%20"),g=y.indexOf(r);g>=0?(p=y.substr(0,g),l=y.substr(g+1)):(p=y,l=""),d=decodeURIComponent(p),b=decodeURIComponent(l),n(s,d)?o(s[d])?s[d].push(b):s[d]=[s[d],b]:s[d]=b}return s};var o=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)}},function(e,t,r){"use strict";var n=function(e){switch(typeof e){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}};e.exports=function(e,t,r,u){return t=t||"&",r=r||"=",null===e&&(e=void 0),"object"==typeof e?i(s(e),function(s){var u=encodeURIComponent(n(s))+r;return o(e[s])?i(e[s],function(e){return u+encodeURIComponent(n(e))}).join(t):u+encodeURIComponent(n(e[s]))}).join(t):u?encodeURIComponent(n(u))+r+encodeURIComponent(n(e)):""};var o=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)};function i(e,t){if(e.map)return e.map(t);for(var r=[],n=0;n<e.length;n++)r.push(t(e[n],n));return r}var s=Object.keys||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.push(r);return t}},function(e,t,r){const n=r(6),o=r(7);e.exports=function(e,t="json"){return n(e,{headers:{Accept:`application/${"json"===t?"json":"octet-stream"}`}}).then(e=>"blob"===t?o(e):e.json()).catch(e=>{throw e})}},function(e,t,r){"use strict";e.exports=t=self.fetch,t.default=self.fetch.bind(self),t.Headers=self.Headers,t.Request=self.Request,t.Response=self.Response},function(e,t){e.exports=function(e){return e.arrayBuffer()}}]);
// Utilities
function getItems (records) {
return Object.entries(records).map(record => {
return record[1].item[0]
})
}
// Application code
async function App () {
const country = new window.Registers('country')
const info = await country.register()
const registerDescription = info['register-record'].text
const records = await country.records({ pageSize: 5000 })
const countries = getItems(records)
const buffer = await country.downloadRegister()
const blob = new window.Blob([buffer], { type: 'application/octet-stream' })
document.body.innerHTML = `
<h1>Country register</h1>
<p>${registerDescription}</p>
<ul class="scrollable-list">
${countries.map(country => {
return `<li>
${country.name}
</li>`
}).join('')}
</ul>
<br>
<a href="${URL.createObjectURL(blob)}" download='register.zip'>
Download register.zip
</a>
`
}
App()
</script>
<script id="jsbin-source-css" type="text/css">html, body {
font-size: 16px;
font-family: sans-serif;
line-height: normal;
margin: 1rem;
}
* {
margin-top: 0;
}
main > *,
body > * {
margin-bottom: 1.5rem;
}
ul {
padding: 0;
padding-left: 1em;
}
.scrollable-list {
display: inline-block;
max-height: 250px;
overflow-y: auto;
padding-right: 15px;
}</script>
<script id="jsbin-source-javascript" type="text/javascript">var Registers=function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=0)}([function(e,t,r){const{kebabCaseObjectKeys:n,objectToQueryString:o,validateParams:i}=r(1),s=r(5);e.exports=class{constructor(e){this.name=e}_getEndpoint(e,t={},r=[]){const s=n(t),u=i(s,r),c=o(u);return`https://${this.name}.register.gov.uk/${e}${c}`}register(){return s(this._getEndpoint("register"))}records(e,t={}){let r={},o="records";if("string"==typeof e)o+="/"+e,t.entries&&(o+="/entries");else if("object"==typeof e){const t=n(e);void 0!==t["field-name"]&&void 0!==t["field-value"]?o+=`/${t["field-name"]}/${t["field-value"]}`:r=e}return s(this._getEndpoint(o,r,["page-size","page-index"]))}entries(e){let t={},r="entries";return void 0!==e&&(isNaN(e)?t=e:r+="/"+e),s(this._getEndpoint(r,t,["start","limit"]))}items(e){return s(this._getEndpoint(`items/${e}`))}downloadRegister(){return s(this._getEndpoint("download-register"),"blob")}}},function(e,t,r){const n=r(2);e.exports={kebabCaseObjectKeys:function(e){if(void 0===e)throw new Error("expected object to be passed");let t={};return Object.keys(e).forEach(r=>{t[function(e){return e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}(r)]=e[r]}),t},objectToQueryString:function(e){if(void 0===e)throw new Error("expected object to be passed");const t=n.stringify(e);return t?"?"+t:""},validateParams:function(e,t=[]){let r={};return Object.keys(e).forEach(n=>{t.includes(n)&&(r[n]=e[n])}),r}}},function(e,t,r){"use strict";t.decode=t.parse=r(3),t.encode=t.stringify=r(4)},function(e,t,r){"use strict";function n(e,t){return Object.prototype.hasOwnProperty.call(e,t)}e.exports=function(e,t,r,i){t=t||"&",r=r||"=";var s={};if("string"!=typeof e||0===e.length)return s;var u=/\+/g;e=e.split(t);var c=1e3;i&&"number"==typeof i.maxKeys&&(c=i.maxKeys);var a=e.length;c>0&&a>c&&(a=c);for(var f=0;f<a;++f){var p,l,d,b,y=e[f].replace(u,"%20"),g=y.indexOf(r);g>=0?(p=y.substr(0,g),l=y.substr(g+1)):(p=y,l=""),d=decodeURIComponent(p),b=decodeURIComponent(l),n(s,d)?o(s[d])?s[d].push(b):s[d]=[s[d],b]:s[d]=b}return s};var o=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)}},function(e,t,r){"use strict";var n=function(e){switch(typeof e){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}};e.exports=function(e,t,r,u){return t=t||"&",r=r||"=",null===e&&(e=void 0),"object"==typeof e?i(s(e),function(s){var u=encodeURIComponent(n(s))+r;return o(e[s])?i(e[s],function(e){return u+encodeURIComponent(n(e))}).join(t):u+encodeURIComponent(n(e[s]))}).join(t):u?encodeURIComponent(n(u))+r+encodeURIComponent(n(e)):""};var o=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)};function i(e,t){if(e.map)return e.map(t);for(var r=[],n=0;n<e.length;n++)r.push(t(e[n],n));return r}var s=Object.keys||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.push(r);return t}},function(e,t,r){const n=r(6),o=r(7);e.exports=function(e,t="json"){return n(e,{headers:{Accept:`application/${"json"===t?"json":"octet-stream"}`}}).then(e=>"blob"===t?o(e):e.json()).catch(e=>{throw e})}},function(e,t,r){"use strict";e.exports=t=self.fetch,t.default=self.fetch.bind(self),t.Headers=self.Headers,t.Request=self.Request,t.Response=self.Response},function(e,t){e.exports=function(e){return e.arrayBuffer()}}]);
// Utilities
function getItems (records) {
return Object.entries(records).map(record => {
return record[1].item[0]
})
}
// Application code
async function App () {
const country = new window.Registers('country')
const info = await country.register()
const registerDescription = info['register-record'].text
const records = await country.records({ pageSize: 5000 })
const countries = getItems(records)
const buffer = await country.downloadRegister()
const blob = new window.Blob([buffer], { type: 'application/octet-stream' })
document.body.innerHTML = `
<h1>Country register</h1>
<p>${registerDescription}</p>
<ul class="scrollable-list">
${countries.map(country => {
return `<li>
${country.name}
</li>`
}).join('')}
</ul>
<br>
<a href="${URL.createObjectURL(blob)}" download='register.zip'>
Download register.zip
</a>
`
}
App()</script></body>
</html>
html, body {
font-size: 16px;
font-family: sans-serif;
line-height: normal;
margin: 1rem;
}
* {
margin-top: 0;
}
main > *,
body > * {
margin-bottom: 1.5rem;
}
ul {
padding: 0;
padding-left: 1em;
}
.scrollable-list {
display: inline-block;
max-height: 250px;
overflow-y: auto;
padding-right: 15px;
}
var Registers=function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=0)}([function(e,t,r){const{kebabCaseObjectKeys:n,objectToQueryString:o,validateParams:i}=r(1),s=r(5);e.exports=class{constructor(e){this.name=e}_getEndpoint(e,t={},r=[]){const s=n(t),u=i(s,r),c=o(u);return`https://${this.name}.register.gov.uk/${e}${c}`}register(){return s(this._getEndpoint("register"))}records(e,t={}){let r={},o="records";if("string"==typeof e)o+="/"+e,t.entries&&(o+="/entries");else if("object"==typeof e){const t=n(e);void 0!==t["field-name"]&&void 0!==t["field-value"]?o+=`/${t["field-name"]}/${t["field-value"]}`:r=e}return s(this._getEndpoint(o,r,["page-size","page-index"]))}entries(e){let t={},r="entries";return void 0!==e&&(isNaN(e)?t=e:r+="/"+e),s(this._getEndpoint(r,t,["start","limit"]))}items(e){return s(this._getEndpoint(`items/${e}`))}downloadRegister(){return s(this._getEndpoint("download-register"),"blob")}}},function(e,t,r){const n=r(2);e.exports={kebabCaseObjectKeys:function(e){if(void 0===e)throw new Error("expected object to be passed");let t={};return Object.keys(e).forEach(r=>{t[function(e){return e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}(r)]=e[r]}),t},objectToQueryString:function(e){if(void 0===e)throw new Error("expected object to be passed");const t=n.stringify(e);return t?"?"+t:""},validateParams:function(e,t=[]){let r={};return Object.keys(e).forEach(n=>{t.includes(n)&&(r[n]=e[n])}),r}}},function(e,t,r){"use strict";t.decode=t.parse=r(3),t.encode=t.stringify=r(4)},function(e,t,r){"use strict";function n(e,t){return Object.prototype.hasOwnProperty.call(e,t)}e.exports=function(e,t,r,i){t=t||"&",r=r||"=";var s={};if("string"!=typeof e||0===e.length)return s;var u=/\+/g;e=e.split(t);var c=1e3;i&&"number"==typeof i.maxKeys&&(c=i.maxKeys);var a=e.length;c>0&&a>c&&(a=c);for(var f=0;f<a;++f){var p,l,d,b,y=e[f].replace(u,"%20"),g=y.indexOf(r);g>=0?(p=y.substr(0,g),l=y.substr(g+1)):(p=y,l=""),d=decodeURIComponent(p),b=decodeURIComponent(l),n(s,d)?o(s[d])?s[d].push(b):s[d]=[s[d],b]:s[d]=b}return s};var o=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)}},function(e,t,r){"use strict";var n=function(e){switch(typeof e){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}};e.exports=function(e,t,r,u){return t=t||"&",r=r||"=",null===e&&(e=void 0),"object"==typeof e?i(s(e),function(s){var u=encodeURIComponent(n(s))+r;return o(e[s])?i(e[s],function(e){return u+encodeURIComponent(n(e))}).join(t):u+encodeURIComponent(n(e[s]))}).join(t):u?encodeURIComponent(n(u))+r+encodeURIComponent(n(e)):""};var o=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)};function i(e,t){if(e.map)return e.map(t);for(var r=[],n=0;n<e.length;n++)r.push(t(e[n],n));return r}var s=Object.keys||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.push(r);return t}},function(e,t,r){const n=r(6),o=r(7);e.exports=function(e,t="json"){return n(e,{headers:{Accept:`application/${"json"===t?"json":"octet-stream"}`}}).then(e=>"blob"===t?o(e):e.json()).catch(e=>{throw e})}},function(e,t,r){"use strict";e.exports=t=self.fetch,t.default=self.fetch.bind(self),t.Headers=self.Headers,t.Request=self.Request,t.Response=self.Response},function(e,t){e.exports=function(e){return e.arrayBuffer()}}]);
// Utilities
function getItems (records) {
return Object.entries(records).map(record => {
return record[1].item[0]
})
}
// Application code
async function App () {
const country = new window.Registers('country')
const info = await country.register()
const registerDescription = info['register-record'].text
const records = await country.records({ pageSize: 5000 })
const countries = getItems(records)
const buffer = await country.downloadRegister()
const blob = new window.Blob([buffer], { type: 'application/octet-stream' })
document.body.innerHTML = `
<h1>Country register</h1>
<p>${registerDescription}</p>
<ul class="scrollable-list">
${countries.map(country => {
return `<li>
${country.name}
</li>`
}).join('')}
</ul>
<br>
<a href="${URL.createObjectURL(blob)}" download='register.zip'>
Download register.zip
</a>
`
}
App()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment