[483] | 1 | dojo.provide("dojox.image.Gallery"); |
---|
| 2 | dojo.experimental("dojox.image.Gallery"); |
---|
| 3 | // |
---|
| 4 | // dojox.image.Gallery courtesy Shane O Sullivan, licensed under a Dojo CLA |
---|
| 5 | // |
---|
| 6 | // For a sample usage, see http://www.skynet.ie/~sos/photos.php |
---|
| 7 | // |
---|
| 8 | // TODO: Make public, document params and privitize non-API conformant methods. |
---|
| 9 | // document topics. |
---|
| 10 | |
---|
| 11 | dojo.require("dojo.fx"); |
---|
| 12 | dojo.require("dijit._Widget"); |
---|
| 13 | dojo.require("dijit._Templated"); |
---|
| 14 | dojo.require("dojox.image.ThumbnailPicker"); |
---|
| 15 | dojo.require("dojox.image.SlideShow"); |
---|
| 16 | |
---|
| 17 | dojo.declare("dojox.image.Gallery", |
---|
| 18 | [dijit._Widget, dijit._Templated], |
---|
| 19 | { |
---|
| 20 | // summary: |
---|
| 21 | // Gallery widget that wraps a dojox.image.ThumbnailPicker and dojox.image.SlideShow widget |
---|
| 22 | // |
---|
| 23 | // imageHeight: Number |
---|
| 24 | // Maximum height of an image in the SlideShow widget |
---|
| 25 | imageHeight: 375, |
---|
| 26 | |
---|
| 27 | // imageWidth: Number |
---|
| 28 | // Maximum width of an image in the SlideShow widget |
---|
| 29 | imageWidth: 500, |
---|
| 30 | |
---|
| 31 | // pageSize: Number |
---|
| 32 | // The number of records to retrieve from the data store per request. |
---|
| 33 | pageSize: dojox.image.SlideShow.prototype.pageSize, |
---|
| 34 | |
---|
| 35 | // autoLoad: Boolean |
---|
| 36 | // If true, images are loaded before the user views them. If false, an |
---|
| 37 | // image is loaded when the user displays it. |
---|
| 38 | autoLoad: true, |
---|
| 39 | |
---|
| 40 | // linkAttr: String |
---|
| 41 | // Defines the name of the attribute to request from the store to retrieve the |
---|
| 42 | // URL to link to from an image, if any. |
---|
| 43 | linkAttr: "link", |
---|
| 44 | |
---|
| 45 | // imageThumbAttr: String |
---|
| 46 | // Defines the name of the attribute to request from the store to retrieve the |
---|
| 47 | // URL to the thumbnail image. |
---|
| 48 | imageThumbAttr: "imageUrlThumb", |
---|
| 49 | |
---|
| 50 | // imageLargeAttr: String |
---|
| 51 | // Defines the name of the attribute to request from the store to retrieve the |
---|
| 52 | // URL to the image. |
---|
| 53 | imageLargeAttr: "imageUrl", |
---|
| 54 | |
---|
| 55 | // titleAttr: String |
---|
| 56 | // Defines the name of the attribute to request from the store to retrieve the |
---|
| 57 | // title of the picture, if any. |
---|
| 58 | titleAttr: "title", |
---|
| 59 | |
---|
| 60 | // slideshowInterval: Integer |
---|
| 61 | // Time, in seconds, between image changes in the slide show. |
---|
| 62 | slideshowInterval: 3, |
---|
| 63 | |
---|
| 64 | templateString: dojo.cache("dojox.image", "resources/Gallery.html"), |
---|
| 65 | |
---|
| 66 | postCreate: function(){ |
---|
| 67 | // summary: |
---|
| 68 | // Initializes the widget, creates the ThumbnailPicker and SlideShow widgets |
---|
| 69 | this.widgetid = this.id; |
---|
| 70 | this.inherited(arguments) |
---|
| 71 | |
---|
| 72 | this.thumbPicker = new dojox.image.ThumbnailPicker({ |
---|
| 73 | linkAttr: this.linkAttr, |
---|
| 74 | imageLargeAttr: this.imageLargeAttr, |
---|
| 75 | imageThumbAttr: this.imageThumbAttr, |
---|
| 76 | titleAttr: this.titleAttr, |
---|
| 77 | useLoadNotifier: true, |
---|
| 78 | size: this.imageWidth |
---|
| 79 | }, this.thumbPickerNode); |
---|
| 80 | |
---|
| 81 | |
---|
| 82 | this.slideShow = new dojox.image.SlideShow({ |
---|
| 83 | imageHeight: this.imageHeight, |
---|
| 84 | imageWidth: this.imageWidth, |
---|
| 85 | autoLoad: this.autoLoad, |
---|
| 86 | linkAttr: this.linkAttr, |
---|
| 87 | imageLargeAttr: this.imageLargeAttr, |
---|
| 88 | titleAttr: this.titleAttr, |
---|
| 89 | slideshowInterval: this.slideshowInterval, |
---|
| 90 | pageSize: this.pageSize |
---|
| 91 | }, this.slideShowNode); |
---|
| 92 | |
---|
| 93 | var _this = this; |
---|
| 94 | //When an image is shown in the Slideshow, make sure it is visible |
---|
| 95 | //in the ThumbnailPicker |
---|
| 96 | dojo.subscribe(this.slideShow.getShowTopicName(), function(packet){ |
---|
| 97 | _this.thumbPicker._showThumbs(packet.index); |
---|
| 98 | }); |
---|
| 99 | //When the user clicks a thumbnail, show that image |
---|
| 100 | dojo.subscribe(this.thumbPicker.getClickTopicName(), function(evt){ |
---|
| 101 | _this.slideShow.showImage(evt.index); |
---|
| 102 | }); |
---|
| 103 | //When the ThumbnailPicker moves to show a new set of pictures, |
---|
| 104 | //make the Slideshow start loading those pictures first. |
---|
| 105 | dojo.subscribe(this.thumbPicker.getShowTopicName(), function(evt){ |
---|
| 106 | _this.slideShow.moveImageLoadingPointer(evt.index); |
---|
| 107 | }); |
---|
| 108 | //When an image finished loading in the slideshow, update the loading |
---|
| 109 | //notification in the ThumbnailPicker |
---|
| 110 | dojo.subscribe(this.slideShow.getLoadTopicName(), function(index){ |
---|
| 111 | _this.thumbPicker.markImageLoaded(index); |
---|
| 112 | }); |
---|
| 113 | this._centerChildren(); |
---|
| 114 | }, |
---|
| 115 | |
---|
| 116 | setDataStore: function(dataStore, request, /*optional*/paramNames){ |
---|
| 117 | // summary: |
---|
| 118 | // Sets the data store and request objects to read data from. |
---|
| 119 | // dataStore: |
---|
| 120 | // An implementation of the dojo/data/api/Read API. This accesses the image |
---|
| 121 | // data. |
---|
| 122 | // request: |
---|
| 123 | // An implementation of the dojo/data/api/Request API. This specifies the |
---|
| 124 | // query and paging information to be used by the data store |
---|
| 125 | // paramNames: |
---|
| 126 | // An object defining the names of the item attributes to fetch from the |
---|
| 127 | // data store. The four attributes allowed are 'linkAttr', 'imageLargeAttr', |
---|
| 128 | // 'imageThumbAttr' and 'titleAttr' |
---|
| 129 | this.thumbPicker.setDataStore(dataStore, request, paramNames); |
---|
| 130 | this.slideShow.setDataStore(dataStore, request, paramNames); |
---|
| 131 | }, |
---|
| 132 | |
---|
| 133 | reset: function(){ |
---|
| 134 | // summary: |
---|
| 135 | // Resets the widget to its initial state |
---|
| 136 | this.slideShow.reset(); |
---|
| 137 | this.thumbPicker.reset(); |
---|
| 138 | }, |
---|
| 139 | |
---|
| 140 | showNextImage: function(inTimer){ |
---|
| 141 | // summary: |
---|
| 142 | // Changes the image being displayed in the SlideShow to the next |
---|
| 143 | // image in the data store |
---|
| 144 | // inTimer: Boolean |
---|
| 145 | // If true, a slideshow is active, otherwise the slideshow is inactive. |
---|
| 146 | this.slideShow.showNextImage(); |
---|
| 147 | }, |
---|
| 148 | |
---|
| 149 | toggleSlideshow: function(){ |
---|
| 150 | dojo.deprecated("dojox.widget.Gallery.toggleSlideshow is deprecated. Use toggleSlideShow instead.", "", "2.0"); |
---|
| 151 | this.toggleSlideShow(); |
---|
| 152 | }, |
---|
| 153 | |
---|
| 154 | toggleSlideShow: function(){ |
---|
| 155 | // summary: |
---|
| 156 | // Switches the slideshow mode on and off. |
---|
| 157 | this.slideShow.toggleSlideShow(); |
---|
| 158 | }, |
---|
| 159 | |
---|
| 160 | showImage: function(index, /*optional*/callback){ |
---|
| 161 | // summary: |
---|
| 162 | // Shows the image at index 'idx'. |
---|
| 163 | // idx: Number |
---|
| 164 | // The position of the image in the data store to display |
---|
| 165 | // callback: Function |
---|
| 166 | // Optional callback function to call when the image has finished displaying. |
---|
| 167 | this.slideShow.showImage(index, callback); |
---|
| 168 | }, |
---|
| 169 | |
---|
| 170 | resize: function(dim){ |
---|
| 171 | this.thumbPicker.resize(dim); |
---|
| 172 | }, |
---|
| 173 | |
---|
| 174 | _centerChildren: function() { |
---|
| 175 | // summary: |
---|
| 176 | // Ensures that the ThumbnailPicker and the SlideShow widgets |
---|
| 177 | // are centered. |
---|
| 178 | var thumbSize = dojo.marginBox(this.thumbPicker.outerNode); |
---|
| 179 | var slideSize = dojo.marginBox(this.slideShow.outerNode); |
---|
| 180 | |
---|
| 181 | var diff = (thumbSize.w - slideSize.w) / 2; |
---|
| 182 | |
---|
| 183 | if(diff > 0) { |
---|
| 184 | dojo.style(this.slideShow.outerNode, "marginLeft", diff + "px"); |
---|
| 185 | } else if(diff < 0) { |
---|
| 186 | dojo.style(this.thumbPicker.outerNode, "marginLeft", (diff * -1) + "px"); |
---|
| 187 | } |
---|
| 188 | } |
---|
| 189 | }); |
---|