author | Michael Krelin <hacker@klever.net> | 2006-11-16 22:22:23 (UTC) |
---|---|---|
committer | Michael Krelin <hacker@klever.net> | 2006-11-16 22:22:23 (UTC) |
commit | d98dfeb112f9db06c5e642e14ee9bbda4d90d0cb (patch) (unidiff) | |
tree | dee166a9e25442a9043492f38104397fb748633b /content | |
parent | 4b21b4fc5248322c10ffb24edfd5ec78ebcce824 (diff) | |
download | fireflix-d98dfeb112f9db06c5e642e14ee9bbda4d90d0cb.zip fireflix-d98dfeb112f9db06c5e642e14ee9bbda4d90d0cb.tar.gz fireflix-d98dfeb112f9db06c5e642e14ee9bbda4d90d0cb.tar.bz2 |
double click on photoset opens photoset in flickr now
git-svn-id: http://svn.klever.net/kin/fireflix/trunk@229 fe716a7a-6dde-0310-88d9-d003556173a8
-rw-r--r-- | content/fireflix-panel.xul | 1 | ||||
-rw-r--r-- | content/fireflix.js | 12 | ||||
-rw-r--r-- | content/flickr.js | 4 |
3 files changed, 13 insertions, 4 deletions
diff --git a/content/fireflix-panel.xul b/content/fireflix-panel.xul index b2ca7dc..af92d22 100644 --- a/content/fireflix-panel.xul +++ b/content/fireflix-panel.xul | |||
@@ -163,48 +163,49 @@ | |||
163 | <hbox pack="center"> | 163 | <hbox pack="center"> |
164 | <image id="search_photo" | 164 | <image id="search_photo" |
165 | ondblclick="fireflix.foundphotos.on_cmd_open(event)"/> | 165 | ondblclick="fireflix.foundphotos.on_cmd_open(event)"/> |
166 | </hbox> | 166 | </hbox> |
167 | </vbox> | 167 | </vbox> |
168 | <vbox flex="1"> | 168 | <vbox flex="1"> |
169 | <label id="searchresult_title" crop="end"/> | 169 | <label id="searchresult_title" crop="end"/> |
170 | <hbox flex="1" pack="center"> | 170 | <hbox flex="1" pack="center"> |
171 | <div flex="1" id="searchresult_description" xmlns="http://www.w3.org/1999/xhtml"/> | 171 | <div flex="1" id="searchresult_description" xmlns="http://www.w3.org/1999/xhtml"/> |
172 | </hbox> | 172 | </hbox> |
173 | <hbox pack="end"> | 173 | <hbox pack="end"> |
174 | <button command="cmd_search_open"/> | 174 | <button command="cmd_search_open"/> |
175 | </hbox> | 175 | </hbox> |
176 | </vbox> | 176 | </vbox> |
177 | </groupbox> | 177 | </groupbox> |
178 | </vbox> | 178 | </vbox> |
179 | </tabpanel> | 179 | </tabpanel> |
180 | 180 | ||
181 | <tabpanel id="tabpanel_sets" flex="1" | 181 | <tabpanel id="tabpanel_sets" flex="1" |
182 | onkeypress="if(event.keyCode==event.DOM_VK_RETURN) | 182 | onkeypress="if(event.keyCode==event.DOM_VK_RETURN) |
183 | document.getElementById('setphotos').focus()"> | 183 | document.getElementById('setphotos').focus()"> |
184 | <vbox flex="1"> | 184 | <vbox flex="1"> |
185 | <tree id="setslist" rows="2" onselect="fireflix.photosets.on_select()" | 185 | <tree id="setslist" rows="2" onselect="fireflix.photosets.on_select()" |
186 | flex="1" context="sets_menu" | 186 | flex="1" context="sets_menu" |
187 | ondblclick="fireflix.photosets.on_cmd_open_in_flickr(event)" | ||
187 | > | 188 | > |
188 | <treecols> | 189 | <treecols> |
189 | <treecol id="sl_name" label="&panel.sets.name.label;" flex="4" crop="end" align="start" tooltiptext="&panel.sets.name.tip;"/> | 190 | <treecol id="sl_name" label="&panel.sets.name.label;" flex="4" crop="end" align="start" tooltiptext="&panel.sets.name.tip;"/> |
190 | <splitter class="tree-splitter" /> | 191 | <splitter class="tree-splitter" /> |
191 | <treecol id="sl_photos" label="&panel.sets.photos.label;" flex="1" align="end" tooltiptext="&panel.sets.photos.tip;" /> | 192 | <treecol id="sl_photos" label="&panel.sets.photos.label;" flex="1" align="end" tooltiptext="&panel.sets.photos.tip;" /> |
192 | </treecols> | 193 | </treecols> |
193 | <treechildren/> | 194 | <treechildren/> |
194 | </tree> | 195 | </tree> |
195 | <hbox> | 196 | <hbox> |
196 | <button command="cmd_refresh_sets" /> | 197 | <button command="cmd_refresh_sets" /> |
197 | <button command="cmd_set_props" /> | 198 | <button command="cmd_set_props" /> |
198 | </hbox> | 199 | </hbox> |
199 | <tree id="setphotos" rows="2" onselect="fireflix.photoset.on_select()" | 200 | <tree id="setphotos" rows="2" onselect="fireflix.photoset.on_select()" |
200 | flex="1" ondblclick="fireflix.photoset.on_cmd_open(event)" | 201 | flex="1" ondblclick="fireflix.photoset.on_cmd_open(event)" |
201 | onkeypress="if(event.keyCode==event.DOM_VK_RETURN) fireflix.photoset.on_cmd_open(event)"> | 202 | onkeypress="if(event.keyCode==event.DOM_VK_RETURN) fireflix.photoset.on_cmd_open(event)"> |
202 | <treecols> | 203 | <treecols> |
203 | <treecol id="sp_title" label="&panel.setphotos.title.label;" flex="1" crop="end" align="start" tooltiptext="&panel.setphotos.title.tip;" /> | 204 | <treecol id="sp_title" label="&panel.setphotos.title.label;" flex="1" crop="end" align="start" tooltiptext="&panel.setphotos.title.tip;" /> |
204 | <splitter class="tree-splitter" /> | 205 | <splitter class="tree-splitter" /> |
205 | <treecol id="sp_taken" label="&panel.setphotos.taken.label;" crop="end" align="start" tooltiptext="&panel.setphotos.taken.tip;" hidden="true" /> | 206 | <treecol id="sp_taken" label="&panel.setphotos.taken.label;" crop="end" align="start" tooltiptext="&panel.setphotos.taken.tip;" hidden="true" /> |
206 | <treecol id="sp_upload" label="&panel.setphotos.upload.label;" crop="end" align="start" tooltiptext="&panel.setphotos.upload.tip;" hidden="true" /> | 207 | <treecol id="sp_upload" label="&panel.setphotos.upload.label;" crop="end" align="start" tooltiptext="&panel.setphotos.upload.tip;" hidden="true" /> |
207 | </treecols> | 208 | </treecols> |
208 | <treechildren/> | 209 | <treechildren/> |
209 | </tree> | 210 | </tree> |
210 | <groupbox id="set_photo_props" orient="horizontal"> | 211 | <groupbox id="set_photo_props" orient="horizontal"> |
diff --git a/content/fireflix.js b/content/fireflix.js index 24894df..48053c5 100644 --- a/content/fireflix.js +++ b/content/fireflix.js | |||
@@ -143,53 +143,51 @@ var fireflix = { | |||
143 | photoset_id: psid, | 143 | photoset_id: psid, |
144 | extras: 'license,date_upload,date_taken,owner_name,icon_server,original_format,last_update' | 144 | extras: 'license,date_upload,date_taken,owner_name,icon_server,original_format,last_update' |
145 | }, function(xr) { | 145 | }, function(xr) { |
146 | var x = xr.responseXML; | 146 | var x = xr.responseXML; |
147 | var xp = x.evaluate( | 147 | var xp = x.evaluate( |
148 | '/rsp/photoset/photo', x, null, | 148 | '/rsp/photoset/photo', x, null, |
149 | XPathResult.ORDERED_NODE_ITERATOR_TYPE, null ); | 149 | XPathResult.ORDERED_NODE_ITERATOR_TYPE, null ); |
150 | _this.importXPR(xp); | 150 | _this.importXPR(xp); |
151 | }, function(x,s,c,m) { | 151 | }, function(x,s,c,m) { |
152 | _this.fireflix.flickr_failure(x,s,c,m); | 152 | _this.fireflix.flickr_failure(x,s,c,m); |
153 | } | 153 | } |
154 | ); | 154 | ); |
155 | }, | 155 | }, |
156 | on_select: function() { | 156 | on_select: function() { |
157 | if(this.selection.count==1) { | 157 | if(this.selection.count==1) { |
158 | var p = this.photos[this.selection.currentIndex]; | 158 | var p = this.photos[this.selection.currentIndex]; |
159 | this.set_photo.src = | 159 | this.set_photo.src = |
160 | this.fireflix.flickr.get_photo_url(p.server,p.id,p.secret,'t'); | 160 | this.fireflix.flickr.get_photo_url(p.server,p.id,p.secret,'t'); |
161 | this.set_photo.hidden = false; | 161 | this.set_photo.hidden = false; |
162 | }else{ | 162 | }else{ |
163 | this.set_photo.hidden = true; | 163 | this.set_photo.hidden = true; |
164 | } | 164 | } |
165 | }, | 165 | }, |
166 | on_cmd_open: function(ev) { | 166 | on_cmd_open: function(ev) { |
167 | if(this.selection.currentIndex<0) | 167 | if(this.selection.currentIndex<0) return; |
168 | return; | ||
169 | var p = this.photos[this.selection.currentIndex]; | 168 | var p = this.photos[this.selection.currentIndex]; |
170 | if(!p.id) | 169 | if(!p.id) return; |
171 | return; | ||
172 | this.fireflix.openTab(this.fireflix.flickr.make_photo_url(p,'p')); | 170 | this.fireflix.openTab(this.fireflix.flickr.make_photo_url(p,'p')); |
173 | } | 171 | } |
174 | }, | 172 | }, |
175 | 173 | ||
176 | /* photosets treeview */ | 174 | /* photosets treeview */ |
177 | photosets: { | 175 | photosets: { |
178 | sets: new Array(), | 176 | sets: new Array(), |
179 | fireflix: null, | 177 | fireflix: null, |
180 | init: function(f) { | 178 | init: function(f) { |
181 | this.fireflix = f; | 179 | this.fireflix = f; |
182 | document.getElementById('setslist').view = this; | 180 | document.getElementById('setslist').view = this; |
183 | }, | 181 | }, |
184 | rowCount: 0, | 182 | rowCount: 0, |
185 | getCellText: function(r,c) { | 183 | getCellText: function(r,c) { |
186 | var s = this.sets[r]; | 184 | var s = this.sets[r]; |
187 | if(c.id=='sl_name') return s.title; | 185 | if(c.id=='sl_name') return s.title; |
188 | if(c.id=='sl_photos') return s.photos; | 186 | if(c.id=='sl_photos') return s.photos; |
189 | return c.id; | 187 | return c.id; |
190 | }, | 188 | }, |
191 | setTree: function(t) { this.tree = t }, | 189 | setTree: function(t) { this.tree = t }, |
192 | isContainer: function(r) { return false; }, | 190 | isContainer: function(r) { return false; }, |
193 | isSeparator: function(r) { return false; }, | 191 | isSeparator: function(r) { return false; }, |
194 | isSorted: function() { return false; }, | 192 | isSorted: function() { return false; }, |
195 | getLevel: function(r) { return 0; }, | 193 | getLevel: function(r) { return 0; }, |
@@ -215,48 +213,54 @@ var fireflix = { | |||
215 | var _this = this; | 213 | var _this = this; |
216 | this.fireflix.flickr.api_call( | 214 | this.fireflix.flickr.api_call( |
217 | { | 215 | { |
218 | method: 'flickr.photosets.getList', | 216 | method: 'flickr.photosets.getList', |
219 | auth_token: 'default' | 217 | auth_token: 'default' |
220 | }, function(xr) { | 218 | }, function(xr) { |
221 | var x = xr.responseXML; | 219 | var x = xr.responseXML; |
222 | var xp = x.evaluate( | 220 | var xp = x.evaluate( |
223 | '/rsp/photosets/photoset', x, null, | 221 | '/rsp/photosets/photoset', x, null, |
224 | XPathResult.ORDERED_NODE_ITERATOR_TYPE, null ); | 222 | XPathResult.ORDERED_NODE_ITERATOR_TYPE, null ); |
225 | _this.importXPR(xp); | 223 | _this.importXPR(xp); |
226 | }, function(x,s,c,m) { | 224 | }, function(x,s,c,m) { |
227 | _this.fireflix.flickr_failure(x,s,c,m); | 225 | _this.fireflix.flickr_failure(x,s,c,m); |
228 | } | 226 | } |
229 | ); | 227 | ); |
230 | }, | 228 | }, |
231 | on_select: function() { | 229 | on_select: function() { |
232 | if(this.selection.count==1) { | 230 | if(this.selection.count==1) { |
233 | this.fireflix.cmd_set_props.setAttribute('disabled','false'); | 231 | this.fireflix.cmd_set_props.setAttribute('disabled','false'); |
234 | var s = this.sets[this.selection.currentIndex]; | 232 | var s = this.sets[this.selection.currentIndex]; |
235 | this.fireflix.photoset.load_photos(s.id); | 233 | this.fireflix.photoset.load_photos(s.id); |
236 | }else{ | 234 | }else{ |
237 | this.fireflix.cmd_set_props.setAttribute('disabled','true'); | 235 | this.fireflix.cmd_set_props.setAttribute('disabled','true'); |
238 | } | 236 | } |
237 | }, | ||
238 | on_cmd_open_in_flickr: function(ev) { | ||
239 | if(this.selection.currentIndex<0) return; | ||
240 | var p = this.sets[this.selection.currentIndex]; | ||
241 | if(!p.id) return; | ||
242 | this.fireflix.openTab(this.fireflix.flickr.make_photoset_url(p)); | ||
239 | } | 243 | } |
240 | }, | 244 | }, |
241 | 245 | ||
242 | refresh_user_tags: function() { | 246 | refresh_user_tags: function() { |
243 | var lb = document.getElementById('tagslist'); | 247 | var lb = document.getElementById('tagslist'); |
244 | var _this = this; | 248 | var _this = this; |
245 | this.flickr.api_call( | 249 | this.flickr.api_call( |
246 | { | 250 | { |
247 | method: 'flickr.tags.getListUser', | 251 | method: 'flickr.tags.getListUser', |
248 | auth_token: 'default', | 252 | auth_token: 'default', |
249 | }, function(xr) { | 253 | }, function(xr) { |
250 | var x = xr.responseXML; | 254 | var x = xr.responseXML; |
251 | var xp = x.evaluate( | 255 | var xp = x.evaluate( |
252 | '/rsp/who/tags/tag', x, null, | 256 | '/rsp/who/tags/tag', x, null, |
253 | XPathResult.ORDERED_NODE_ITERATOR_TYPE, null ); | 257 | XPathResult.ORDERED_NODE_ITERATOR_TYPE, null ); |
254 | // TODO: clear list | 258 | // TODO: clear list |
255 | var n; while(n=xp.iterateNext()) { | 259 | var n; while(n=xp.iterateNext()) { |
256 | lb.appendItem(n.firstChild.nodeValue); | 260 | lb.appendItem(n.firstChild.nodeValue); |
257 | } | 261 | } |
258 | }, function(x,s,c,m) { | 262 | }, function(x,s,c,m) { |
259 | _this.flickr_failure(x,s,c,m); | 263 | _this.flickr_failure(x,s,c,m); |
260 | } | 264 | } |
261 | ); | 265 | ); |
262 | }, | 266 | }, |
diff --git a/content/flickr.js b/content/flickr.js index 75d1a72..b8360c1 100644 --- a/content/flickr.js +++ b/content/flickr.js | |||
@@ -250,48 +250,52 @@ Flickr.prototype = { | |||
250 | o.server, | 250 | o.server, |
251 | (o instanceof Photoset)? o.primary : o.id, | 251 | (o instanceof Photoset)? o.primary : o.id, |
252 | o.secret, | 252 | o.secret, |
253 | sfx, | 253 | sfx, |
254 | (sfx=='o')?o.originalformat:null | 254 | (sfx=='o')?o.originalformat:null |
255 | ); | 255 | ); |
256 | }, | 256 | }, |
257 | get_photo_page_url: function(p) { | 257 | get_photo_page_url: function(p) { |
258 | if(p instanceof Photo) { | 258 | if(p instanceof Photo) { |
259 | // TODO: track photoset and user owner id from there? | 259 | // TODO: track photoset and user owner id from there? |
260 | // The approach below is sheerly wrong. | 260 | // The approach below is sheerly wrong. |
261 | var o = this.user.nsid; | 261 | var o = this.user.nsid; |
262 | if(p.owner && p.owner.nsid) o = p.owner.nsid; | 262 | if(p.owner && p.owner.nsid) o = p.owner.nsid; |
263 | var rv = this.photos_url + o +'/' + p.id; | 263 | var rv = this.photos_url + o +'/' + p.id; |
264 | return rv; | 264 | return rv; |
265 | }else // TODO: take owner into account? | 265 | }else // TODO: take owner into account? |
266 | return this.photos_url + this.user.nsid + '/' + p; | 266 | return this.photos_url + this.user.nsid + '/' + p; |
267 | }, | 267 | }, |
268 | make_photo_url: function(p,sfx) { | 268 | make_photo_url: function(p,sfx) { |
269 | if(sfx=='p') | 269 | if(sfx=='p') |
270 | return this.get_photo_page_url(p); | 270 | return this.get_photo_page_url(p); |
271 | else | 271 | else |
272 | return this.get_image_url(p,sfx); | 272 | return this.get_image_url(p,sfx); |
273 | }, | 273 | }, |
274 | make_photoset_url: function(ps) { | ||
275 | // TODO: allow for using someone else's photoset? | ||
276 | return this.photos_url+this.user.nsid+'/sets/'+ps.id; | ||
277 | }, | ||
274 | 278 | ||
275 | upload_file: function(f,fa,on_success,on_failure) { | 279 | upload_file: function(f,fa,on_success,on_failure) { |
276 | try { | 280 | try { |
277 | var fi = Components.classes["@mozilla.org/file/local;1"] | 281 | var fi = Components.classes["@mozilla.org/file/local;1"] |
278 | .createInstance(Components.interfaces.nsILocalFile); | 282 | .createInstance(Components.interfaces.nsILocalFile); |
279 | fi.initWithPath( f ); | 283 | fi.initWithPath( f ); |
280 | var st = Components.classes["@mozilla.org/network/file-input-stream;1"] | 284 | var st = Components.classes["@mozilla.org/network/file-input-stream;1"] |
281 | .createInstance(Components.interfaces.nsIFileInputStream); | 285 | .createInstance(Components.interfaces.nsIFileInputStream); |
282 | st.init(fi,0x01,00004,null); | 286 | st.init(fi,0x01,00004,null); |
283 | var bis = Components.classes["@mozilla.org/binaryinputstream;1"] | 287 | var bis = Components.classes["@mozilla.org/binaryinputstream;1"] |
284 | .createInstance(Components.interfaces.nsIBinaryInputStream); | 288 | .createInstance(Components.interfaces.nsIBinaryInputStream); |
285 | bis.setInputStream(st); | 289 | bis.setInputStream(st); |
286 | 290 | ||
287 | // allocate and initialize temp storage string | 291 | // allocate and initialize temp storage string |
288 | var pbs = Components.classes["@mozilla.org/storagestream;1"] | 292 | var pbs = Components.classes["@mozilla.org/storagestream;1"] |
289 | .createInstance(Components.interfaces.nsIStorageStream); | 293 | .createInstance(Components.interfaces.nsIStorageStream); |
290 | pbs.init(1024,10000000,null); | 294 | pbs.init(1024,10000000,null); |
291 | // create output stream | 295 | // create output stream |
292 | var pbos = pbs.getOutputStream(0); | 296 | var pbos = pbs.getOutputStream(0); |
293 | // and a binaryoutputstream interface | 297 | // and a binaryoutputstream interface |
294 | var pbbos = Components.classes["@mozilla.org/binaryoutputstream;1"] | 298 | var pbbos = Components.classes["@mozilla.org/binaryoutputstream;1"] |
295 | .createInstance(Components.interfaces.nsIBinaryOutputStream); | 299 | .createInstance(Components.interfaces.nsIBinaryOutputStream); |
296 | pbbos.setOutputStream(pbos); | 300 | pbbos.setOutputStream(pbos); |
297 | 301 | ||