(function() { var Promise, getUrl, request, indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; request = require('request'); Promise = require('bluebird'); getUrl = function(object) { return object.unescapedUrl; }; module.exports = function(searchTerm, options) { return new Promise((function(_this) { return function(resolve, reject) { /* To keep it simple, options is not a needed input. That means that it is possible for only 2 inputs to be passed, which would mean that options was the callback, so make the 2nd input the callback and reset options. */ var color, language, limit, possibleColors, ref, rights, safety, searchPrefix, searchUrl, size; if (options == null) { options = {}; } options.safe = options.safe || "moderate"; options.size = options.size || "any"; options.color = options.color || "any"; options.language = options.language || "en"; options.limit = options.limit || 5; options.rights = options.rights || ""; switch (options.safe) { case true: safety = "active"; break; case false: safety = "off"; break; default: safety = options.safe; } switch (options.size) { case "small": size = "icon"; break; case "medium": size = "media"; break; case "large": size = "xxlarge"; break; case "huge": size = "huge"; break; default: size = "any"; } possibleColors = ["black", "blue", "brown", "gray", "green", "orange", "pink", "purple", "red", "teal", "white", "yellow"]; if (ref = options.color, indexOf.call(possibleColors, ref) >= 0) { color = options.color; } else { "any"; } language = options.language.substring(0, 1).toLowerCase(); limit = options.limit; rights = options.rights; searchPrefix = "https://ajax.googleapis.com/ajax/services/search/images?v=1.0"; searchUrl = searchPrefix + "&q=" + searchTerm + "&as_rights=" + rights + "&imgsz=" + size + "&safe=" + safety + "&hl=" + language + "&imgcolor=" + color + "&rsz=" + limit; return request(searchUrl, function(error, response, body) { var images, parsed, urls; parsed = JSON.parse(body); if (parsed.responseData == null) { return resolve([]); } images = parsed.responseData.results; urls = images.map(getUrl); return resolve(urls); }); }; })(this)); }; }).call(this);