Flickrapi.js
by Colin White
JavaScript
// flickrapi.js - ignore all this and skip waaay down...
!function(){var e={};e.formQueryString=function(e){var s=[],i=function(i){s.push(i+"="+encodeURIComponent(e[i]))};return Object.keys(e).sort().forEach(i),s.join("&")},e.checkRequirements=function(e,s,i,r){s=s||[];for(var n,t=0,o=s.length;o>t;t++)if(n=s[t],"api_key"!==n.name&&!i.hasOwnProperty(n.name))return r(new Error("missing required argument '"+n.name+"' in call to "+e))},e.generateAPIFunction=function(s){return function(i,r){i&&!r&&(r=i,i={});var n=e.generateQueryArguments(s.name,this.flickrOptions,i);e.queryFlickr(n,this.flickrOptions,s.security,r)}},e.generateAPIDevFunction=function(s){return function(i,r){i&&!r&&(r=i,i={}),e.checkRequirements(s.name,s.required,i,r);var n=e.generateQueryArguments(s.name,this.flickrOptions,i);e.queryFlickr(n,this.flickrOptions,s.security,r,s.errors)}},e.generateQueryArguments=function(e,s,i){var r={method:e,format:"json"};return s.api_key&&(r.api_key=s.api_key),Object.keys(i).forEach(function(e){r[e]=i[e]}),r},e.queryFlickr=function(e,s,i,r){return s.endpoint?this.queryProxyEndpoint(e,s,r):this.queryFlickrAPI(e,s,i,r)},e.upload=function(e,s,i){return i(new Error("Uploading directly from the browser is not supported"))},e.queryFlickrAPI=function(e,s,i,r){var n="https://api.flickr.com/services/rest/",t=this.formQueryString(e),o=n+"?"+t;return i.requiredperms>0?r(new Error("signed calls (write/delete) currently not supported")):void this.handleURLRequest("GET",o,r)},e.queryProxyEndpoint=function(e,s,i){var r=this.formQueryString(e),n=s.endpoint+"?"+r;this.handleURLRequest("POST",n,i,e)},e.handleURLRequest=function(e,s,i,r){var n=new XMLHttpRequest;n.open(e,s,!0),r&&n.setRequestHeader("Content-Type","application/json"),n.onreadystatechange=function(){if(4===n.readyState)if(200==n.status){var e=!1,s=n.responseText;if(!s)return e="HTTP Error "+response.statusCode+"...