class OpenVerse { constructor () { //register your key at https://api.openverse.engineering/v1/ and replace client_id, client_secret and name bellow this.key = { "client_secret" : "YhVjvIBc7TuRJSvO2wIi344ez5SEreXLksV7GjalLiKDpxfbiM8qfUb5sNvcwFOhBUVzGNdzmmHvfyt6yU3aGrN6TAbMW8EOkRMOwhyXkN1iDetmzMMcxLVELf00BR2e", "client_id" : "pm8GMaIXIhkjQ4iDfXLOvVUUcIKGYRnMlZYApbda", "name" : "My amazing project", "grant_type" : "client_credentials" }; this.accessToken = { "access_token" : "DLBYIcfnKfolaXKcmMC8RIDCavc2hW", "scope" : "read write groups", "expires_in" : 36000, "token_type" : "Bearer" }; this.filters = { "license" :["BY-ND", "PDM", "BY-NC", "BY-NC-SA", "BY-NC-ND", "BY-SA", "BY", "CC0"], "license_type" :["all", "all-cc", "commercial", "modification"], "categories" :["illustration", "photograph", "digitized_artwork"], "aspect_ratio" :["tall", "wide", "square"], "size" :["small", "medium", "large"], "source" :["woc_tech", "wikimedia", "wellcome_collection", "thorvaldsensmuseum", "thingiverse", "svgsilh", "statensmuseum", "spacex", "smithsonian_zoo_and_conservation", "smithsonian_postal_museum", "smithsonian_portrait_gallery", "smithsonian_national_museum_of_natural_history", "smithsonian_libraries", "smithsonian_institution_archives", "smithsonian_hirshhorn_museum", "smithsonian_gardens", "smithsonian_freer_gallery_of_art", "smithsonian_cooper_hewitt_museum", "smithsonian_anacostia_museum", "smithsonian_american_indian_museum", "smithsonian_american_history_museum", "smithsonian_american_art_museum", "smithsonian_air_and_space_museum", "smithsonian_african_art_museum", "smithsonian_african_american_history_museum", "sketchfab", "sciencemuseum", "rijksmuseum", "rawpixel", "phylopic", "nypl", "nasa", "museumsvictoria", "met", "mccordmuseum", "iha", "geographorguk", "floraon", "flickr", "europeana", "eol", "digitaltmuseum", "deviantart", "clevelandmuseum", "brooklynmuseum", "bio_diversity", "behance", "animaldiversity", "WoRMS", "CAPL", "500px"] }, this.baseUrl = 'https://api.openverse.engineering/v1/images?format=json&filter_dead=true&'; this.currentUrl = this.baseUrl; this.filtersParameters = ""; } authenticate() { let url = "https://api.openverse.engineering/v1/auth_tokens/token/"; let self = this; fetch(url, { method: "POST", headers: { "Content-Type": "application/json", }, body: this.key }) .then((response) => { if (!response.ok) { throw new Error(response) } return response.text() }) .then((data) => { this.accessToken = data; console.log('OpenVerse Authentication:' , data); }) .catch(error => { console.log(error.statusText); displayToast("bg-danger", "Error", "Openverse authentication failed!"); }); } setFiltersParams(filtersParameters) { this.filtersParameters = filtersParameters; } getResults(callback) { this.currentUrl = this.baseUrl + this.filtersParameters; fetch(this.currentUrl, { method: "GET", headers: { "Content-Type": "application/json", 'Authorization': 'Bearer ' + this.accessToken.access_token, }, }) .then((response) => { if (!response.ok) { throw new Error(response) } return response.text() }) .then((data) => { callback(data); }) .catch(error => { console.log(error.statusText); displayToast("bg-danger", "Error", "Openverse error!"); }); } } class OpenVerseDisplay extends OpenVerse { constructor () { super(); } getFiltersHtml() { let html = ""; for (name in this.filters) { let values = this.filters[name]; html += "
"; html += ""; html += ""; html += "
"; } return html; } showLoading() { document.getElementById("openverse-results").innerHTML = generateElements(`
Loading...
`)[0]; } setFilters() { this.filtersParameters = document.querySelector("#openverse-form").serialize(); //this.setFiltersParams(filters); } displayResults(data) { var items = []; data['results'].forEach( key =>{ let value = data['results'][key]; let item = `
  • `; items.push( item ); }); document.getElementById("openverse-results").innerHTML = items.join( "" ); //pagination const maxpages = 15; let pages = data['page_count']; let visiblePages = 5; let pagenum = openverse.pageNo ? openverse.pageNo : 1; let pageStop = 1; let currentPage = openverse.pageNo; if (pages > maxpages) { if (pagenum > visiblePages) { if ((pagenum + visiblePages) > pages) { currentPage = pages - maxpages - 1; pageStop = pages; } else { currentPage = pagenum - visiblePages; pageStop = pagenum + visiblePages; } } else { currentPage = 1; pageStop = maxpages; } } let pagination = ''; let active = ''; //next let prev = Math.max(pagenum - 1, 1); pagination += `
  • `; for (let i = currentPage; i <= pageStop; i++) { if (i == pagenum) { active = "active"; } else { active = ""; } pagination += `
  • `; } //next let next = Math.min(pagenum + 1, pages); pagination += `
  • `; pagination += `
    total pages ${data['page_count']}
    `; document.getElementById("openverse-results").innerHTML = generateElements('
    ' + pagination + '
    ')[0]; } page(pageNo) { this.pageNo = pageNo; this.filtersParameters = (new FormData("openverse-form").toString()) + "&page=" + pageNo; this.showLoading(); this.getResults(this.displayResults); } search() { this.pageNo = 1; this.setFilters(); this.showLoading(); this.getResults(this.displayResults); } toggleBtn() { return generateElements(` `)[0]; } displayPanel() { return generateElements(``)[0]; } paginationContainer() { return generateElements(``)[0]; } topPanel() { return generateElements(`
    `)[0];; } init() { let self = this ; this.authenticate(); document.querySelector("#MediaModal .top-panel").append(self.topPanel()); document.querySelector("#MediaModal .display-panel").append(self.displayPanel()); document.querySelector("#MediaModal .top-right .align-right").append(self.toggleBtn()); document.querySelector("#MediaModal .modal-footer .align-left").append(self.paginationContainer()); document.querySelector("#openverse-filters").prepend(self.getFiltersHtml()); document.querySelector("#openverse-search-btn").click(function (e) { self.search();e.preventDefault(); } ); //if openverse enabled hide media images document.querySelector("#openverse-form").on("show.bs.collapse", function (e){ if (e.target.id == "openverse-form") { document.querySelector("#MediaModal #openverse-results").show(); document.querySelector("#MediaModal #openverse-pagination").show(); document.querySelector("#MediaModal #media-files").hide(); } }); document.querySelector("#openverse-form").on("hide.bs.collapse", function (e){ if (e.target.id == "openverse-form") { document.querySelector("#MediaModal #openverse-results").hide(); document.querySelector("#MediaModal #openverse-pagination").hide(); document.querySelector("#MediaModal #media-files").show(); } }); } } let openverse = new OpenVerseDisplay(); window.addEventListener("mediaModal:init", () => openverse.init());