diff --git a/config.yaml b/config.yaml index 2d06244c..669b3fdb 100644 --- a/config.yaml +++ b/config.yaml @@ -13,6 +13,7 @@ collections: archive_paths: ./sample_archive/warcs/ ukwa: cdx+https://www.webarchive.org.uk/wayback/archive/cdx + is: cdx+http://beta.vefsafn.is/is/cdx # Settings for each collection use_js_obj_proxy: true diff --git a/pywb/static/loading-spinner/loading-spinner.js b/pywb/static/loading-spinner/loading-spinner.js new file mode 100644 index 00000000..eddaee34 --- /dev/null +++ b/pywb/static/loading-spinner/loading-spinner.js @@ -0,0 +1,156 @@ +class LoadingSpinner { + static #instanceCount = 0; + constructor(config={}) { + this.config = {initialState:true, animationDuration:500, text:'Loading...', ...config}; + + if (LoadingSpinner.#instanceCount > 0) { + throw new Error('Cannot make a second loading spinner (aka progress indicator)'); + } + LoadingSpinner.#instanceCount++; + + + const uuid = Math.floor(Math.random()*1000); + this.classes = { + el: `loading-spinner-${uuid}`, + mask: `loading-spinner-mask-${uuid}`, + hidden: `hidden-${uuid}`, + spinning: `spinning-${uuid}` + }; + + this.state = config.initialState; + this.addStyles(); + this.addDom(); + } + + toggle() { + if (this.state) { + this.setOn(); + } else { + this.setOff(); + } + } + + setOn() { + this.state = true; + this.el.classList.remove(this.classes.hidden); + setTimeout(function setSpinning() { + this.el.classList.add(this.classes.spinning); + }.bind(this), 10); + } + + setOff() { + this.state = false; + this.el.classList.remove(this.classes.spinning); + setTimeout(function setHidden() { + this.el.classList.add(this.classes.hidden); + }.bind(this), this.config.animationDuration); + } + + addDom() { + const text = this.config.text; + const dom = ` +