summaryrefslogtreecommitdiffabout
path: root/content
authorMichael Krelin <hacker@klever.net>2006-11-16 22:22:23 (UTC)
committer Michael Krelin <hacker@klever.net>2006-11-16 22:22:23 (UTC)
commitd98dfeb112f9db06c5e642e14ee9bbda4d90d0cb (patch) (unidiff)
treedee166a9e25442a9043492f38104397fb748633b /content
parent4b21b4fc5248322c10ffb24edfd5ec78ebcce824 (diff)
downloadfireflix-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
Diffstat (limited to 'content') (more/less context) (ignore whitespace changes)
-rw-r--r--content/fireflix-panel.xul1
-rw-r--r--content/fireflix.js12
-rw-r--r--content/flickr.js4
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