This creates a new element instagram-box element which displays 12 recent images with a specific tag.
Taken out of a project due to the polyfill failing in IE9. Works natively in Chrome, needs polyfilled for all other browsers.
| <html> | |
| <head> | |
| <script src="instagram.js"></script> | |
| </head> | |
| <body> | |
| <instagram-box></instagram-box> | |
| </body> | |
| </html> |
| var css = '@import "/css/style.css";'; | |
| define([], function () { | |
| var url = 'https://api.instagram.com/v1/tags/brockhole/media/recent?client_id=CLIENT_ID&count=12'; | |
| var Instagram = Object.create(HTMLElement.prototype); | |
| Instagram.createdCallback = function () { | |
| this.root = this.createShadowRoot(); | |
| // Append CSS | |
| var style = document.createElement('style'); | |
| style.textContent = css; | |
| this.root.appendChild(style); | |
| // Get data | |
| this.getData(); | |
| }; | |
| Instagram.getData = function () { | |
| var self = this; | |
| // Create JSON script element | |
| var callbackName = 'jsonp_callback_' + Math.round(100000 * Math.random()); | |
| var script = document.createElement('script'); | |
| script.src = url + '&callback=' + callbackName; | |
| // Create JSONP callback | |
| window[callbackName] = function (data) { | |
| delete window[callbackName]; | |
| self.root.removeChild(script); | |
| self.dataCallback(data); | |
| }; | |
| this.root.appendChild(script); | |
| }; | |
| Instagram.dataCallback = function (d) { | |
| var self = this; | |
| // Loop data | |
| var holder = document.createElement('div'); | |
| holder.className = 'row no-gutter'; | |
| d.data.forEach(function (insta) { | |
| // Create new Instagram element | |
| var div = document.createElement('div'); | |
| div.className = 'col-xs-6 col-sm-3'; | |
| // Create link | |
| var link = document.createElement('a'); | |
| link.href = insta.link; | |
| link.target = '_blank'; | |
| // Create image | |
| var img = document.createElement('img'); | |
| img.src = insta.images.standard_resolution.url; | |
| img.className = 'img-responsive'; | |
| link.appendChild(img); | |
| div.appendChild(link); | |
| // Append | |
| holder.appendChild(div); | |
| }); | |
| this.root.appendChild(holder); | |
| }; | |
| var InstagramBox = document.registerElement('instagram-box', { | |
| prototype: Instagram | |
| }); | |
| }); |