UNPKG

dojox

Version:

Dojo eXtensions, a rollup of many useful sub-projects and varying states of maturity – from very stable and robust, to alpha and experimental. See individual projects contain README files for details.

231 lines (190 loc) 5.48 kB
dojo.require("dojox.mobile.app.SceneAssistant"); dojo.declare("FlickrImageThumbViewAssistant", dojox.mobile.app.SceneAssistant, { apiKey: "8c6803164dbc395fb7131c9d54843627", setup: function(){ // Instantiate widgets in the template HTML. this.controller.parse(); this.handlePhotoLoad = dojo.hitch(this, this.handlePhotoLoad); this.search = dojo.hitch(this, this.search); this.resizeViewer = dojo.hitch(this, this.resizeViewer); this.textWidget = dijit.byId("searchTextThumbInput"); var viewer = this.viewer = dijit.byId("flickrImageThumbView"); // Set the parameter from which to retrieve the owner name viewer.labelParam = "ownername"; var _this = this; this.connect(viewer, "onSelect", function(item, index){ console.log("selected ", item, index); _this.controller.stageController.pushScene("flickr-image-view",{ type: "data", images: _this.urls, index: index }); }); this.connect(this.textWidget, "onChange", function(value){ if(!value || value.length == 0){ _this.viewer.set("items", []); return; } if(!_this.timer){ _this.timer = setTimeout(_this.search, 1000); } }); this.connect(dijit.byId("btnSmall"), "onClick", function(){ _this.setThumbSize("small"); }); this.connect(dijit.byId("btnMedium"), "onClick", function(){ _this.setThumbSize("medium"); }); this.connect(dijit.byId("btnLarge"), "onClick", function(){ _this.setThumbSize("large"); }); var resizeTimer; // Listen to the resize event on the window to make // the thumbnails fill the horizontal space // This is fairly pointless for mobile, but makes it work // better in desktop browsers this.connect(window, "resize", function(){ if(resizeTimer){ clearTimeout(resizeTimer); } resizeTimer = setTimeout(_this.resizeViewer, 300); }); }, activate: function(options){ // If this is the first time this view is activated, then do the initial // load of images if (!this.dataType) { this.dataType = (options ? options.type : "interesting"); switch (this.dataType) { case "interesting": // Hide the search text box dojo.style(this.textWidget.domNode, "display", "none"); this.loadInteresting(); break; case "text": dojo.style(this.textWidget.domNode, "visibility", "visible"); this.loadText(this.textWidget.set("value")); break; case "tag": // Another scene has passed in a list of images // and an initial index dojo.style(this.textWidget.domNode, "visibility", "visible"); this.loadTags(this.textWidget.set("value")); break; default: console.log("unknown type " + this.dataType, options); } } }, setThumbSize: function(cls){ dojo.removeClass(this.viewer.domNode, ["small", "medium", "large"]); dojo.addClass(this.viewer.domNode, cls); this.resizeViewer(); }, resizeViewer: function(){ this.viewer.resize(); }, search: function(){ if(this.timer){ clearTimeout(this.timer); this.timer = null; } var searchText = this.textWidget.set("value"); if(!searchText || dojo.trim(searchText).length < 1){ this.viewer.set("items", []); console.log("NOT SEARCHING"); return; } console.log("search", searchText); switch(this.dataType){ case "text": this.loadText(searchText); break; case "tag": // Another scene has passed in a list of images // and an initial index this.loadTags(searchText); break; } }, loadInteresting: function(){ console.log("loading interesting"); var url = "http://api.flickr.com/services/rest/?method=" + "flickr.interestingness.getList"; var deferred = dojo.io.script.get({ url: url, content: { api_key: this.apiKey, format: "json", per_page: 20 }, jsonp: "jsoncallback" }); deferred.addBoth(this.handlePhotoLoad); }, loadText: function(text){ console.log("loading text ", text); var url = "http://api.flickr.com/services/rest/?method=" + "flickr.photos.search"; var deferred = dojo.io.script.get({ url: url, content: { api_key: this.apiKey, format: "json", text: text, extras: "owner_name", per_page: 20 }, jsonp: "jsoncallback" }); deferred.addBoth(this.handlePhotoLoad); }, loadTags: function(text){ console.log("loading tags ", text); var url = "http://api.flickr.com/services/rest/?method=" + "flickr.photos.search"; var deferred = dojo.io.script.get({ url: url, content: { api_key: this.apiKey, format: "json", tags: text, per_page: 20 }, jsonp: "jsoncallback" }); deferred.addBoth(this.handlePhotoLoad); }, handlePhotoLoad: function(res){ console.log("got photos", res); if(res && res.photos && res.photos.photo){ var images = this.images = res.photos.photo; var urls = []; var baseUrl; for(var i = 0; i < images.length; i++){ baseUrl = "http://farm" + images[i].farm + ".static.flickr.com/" + images[i].server + "/" + images[i].id + "_" + images[i].secret; urls.push({ large: baseUrl + ".jpg", small: baseUrl + "_t.jpg", thumb: baseUrl + "_s.jpg", ownername: images[i].ownername, title: images[i].title }); } this.urls = urls; this.index = 0; this.viewer.set("selectedIndex", this.index); this.viewer.set("items", urls); }else{ this.viewer.set("items", []); console.log("didn't get photos"); } } });