summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--NEWS.xml2
-rw-r--r--content/fireflix-panel.xul4
-rw-r--r--content/fireflix.js6
3 files changed, 7 insertions, 5 deletions
diff --git a/NEWS.xml b/NEWS.xml
index b8f1cf4..6d17c53 100644
--- a/NEWS.xml
+++ b/NEWS.xml
@@ -1,30 +1,32 @@
1<?xml version="1.0" encoding="us-ascii"?> 1<?xml version="1.0" encoding="us-ascii"?>
2<news> 2<news>
3 <version version="0.0.5"> 3 <version version="0.0.5">
4 <ni>Added toolbar button</ni> 4 <ni>Added toolbar button</ni>
5 <ni>Enter or double click on photo in set now opens photo in flickr</ni> 5 <ni>Enter or double click on photo in set now opens photo in flickr</ni>
6 <ni>Double click on photoset opens photoset in flickr</ni> 6 <ni>Double click on photoset opens photoset in flickr</ni>
7 <ni>Hiding completely photo properties in sets browser when no photo
8 selected</ni>
7 </version> 9 </version>
8 <version version="0.0.4" date="November 13th, 2006"> 10 <version version="0.0.4" date="November 13th, 2006">
9 <ni>Added button to remove linebreaks from generated HTML</ni> 11 <ni>Added button to remove linebreaks from generated HTML</ni>
10 <ni>Added the word 'sidebar' to the extension name so that you don't have to look hard for it</ni> 12 <ni>Added the word 'sidebar' to the extension name so that you don't have to look hard for it</ni>
11 <ni>UI polishing, including making it more boring</ni> 13 <ni>UI polishing, including making it more boring</ni>
12 <ni>code cosmetics</ni> 14 <ni>code cosmetics</ni>
13 </version> 15 </version>
14 <version version="0.0.3" date="November 6th, 2006"> 16 <version version="0.0.3" date="November 6th, 2006">
15 <ni>Firefox 2.0 compatibility</ni> 17 <ni>Firefox 2.0 compatibility</ni>
16 </version> 18 </version>
17 <version version="0.0.2" date="October 17th, 2006"> 19 <version version="0.0.2" date="October 17th, 2006">
18 <ni>Added brief help file</ni> 20 <ni>Added brief help file</ni>
19 <ni>Fixed HTML generation code</ni> 21 <ni>Fixed HTML generation code</ni>
20 <ni>Fixed a mistyped flickr url so that the 'Flickr' button works now</ni> 22 <ni>Fixed a mistyped flickr url so that the 'Flickr' button works now</ni>
21 </version> 23 </version>
22 <version version="0.0.1" date="October 3rd, 2006"> 24 <version version="0.0.1" date="October 3rd, 2006">
23 <ni>Added ability to paginate through search results</ni> 25 <ni>Added ability to paginate through search results</ni>
24 <ni>Fixed packaging bug that omitted packaging license dialog</ni> 26 <ni>Fixed packaging bug that omitted packaging license dialog</ni>
25 <ni>A lot of code cleanup and UI polishing</ni> 27 <ni>A lot of code cleanup and UI polishing</ni>
26 </version> 28 </version>
27 <version version="0.0" date="September 26th, 2006"> 29 <version version="0.0" date="September 26th, 2006">
28 <ni>Initial release</ni> 30 <ni>Initial release</ni>
29 </version> 31 </version>
30</news> 32</news>
diff --git a/content/fireflix-panel.xul b/content/fireflix-panel.xul
index af92d22..62862a9 100644
--- a/content/fireflix-panel.xul
+++ b/content/fireflix-panel.xul
@@ -163,100 +163,100 @@
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 ondblclick="fireflix.photosets.on_cmd_open_in_flickr(event)"
188 > 188 >
189 <treecols> 189 <treecols>
190 <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;"/>
191 <splitter class="tree-splitter" /> 191 <splitter class="tree-splitter" />
192 <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;" />
193 </treecols> 193 </treecols>
194 <treechildren/> 194 <treechildren/>
195 </tree> 195 </tree>
196 <hbox> 196 <hbox>
197 <button command="cmd_refresh_sets" /> 197 <button command="cmd_refresh_sets" />
198 <button command="cmd_set_props" /> 198 <button command="cmd_set_props" />
199 </hbox> 199 </hbox>
200 <tree id="setphotos" rows="2" onselect="fireflix.photoset.on_select()" 200 <tree id="setphotos" rows="2" onselect="fireflix.photoset.on_select()"
201 flex="1" ondblclick="fireflix.photoset.on_cmd_open(event)" 201 flex="1" ondblclick="fireflix.photoset.on_cmd_open(event)"
202 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)">
203 <treecols> 203 <treecols>
204 <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;" />
205 <splitter class="tree-splitter" /> 205 <splitter class="tree-splitter" />
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_taken" label="&panel.setphotos.taken.label;" crop="end" align="start" tooltiptext="&panel.setphotos.taken.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 <treecol id="sp_upload" label="&panel.setphotos.upload.label;" crop="end" align="start" tooltiptext="&panel.setphotos.upload.tip;" hidden="true" />
208 </treecols> 208 </treecols>
209 <treechildren/> 209 <treechildren/>
210 </tree> 210 </tree>
211 <groupbox id="set_photo_props" orient="horizontal"> 211 <groupbox id="set_photo_props" orient="horizontal" hidden="true">
212 <vbox width="100" pack="center"> 212 <vbox width="100" pack="center">
213 <hbox pack="center"> 213 <hbox pack="center">
214 <image id="set_photo" hidden="true" 214 <image id="set_photo"
215 ondblclick="fireflix.photoset.on_cmd_open(event)" /> 215 ondblclick="fireflix.photoset.on_cmd_open(event)" />
216 </hbox> 216 </hbox>
217 </vbox> 217 </vbox>
218 <spacer flex="1"/> 218 <spacer flex="1"/>
219 </groupbox> 219 </groupbox>
220 </vbox> 220 </vbox>
221 </tabpanel> 221 </tabpanel>
222 222
223 <tabpanel id="tabpanel_tags"> 223 <tabpanel id="tabpanel_tags">
224 <listbox id="tagslist" rows="8" flex="1"> 224 <listbox id="tagslist" rows="8" flex="1">
225 <listhead> 225 <listhead>
226 <listheader label="&panel.tagslist.tag.label;"/> 226 <listheader label="&panel.tagslist.tag.label;"/>
227 </listhead> 227 </listhead>
228 <listcols> 228 <listcols>
229 <listcol flex="1"/> 229 <listcol flex="1"/>
230 </listcols> 230 </listcols>
231 </listbox> 231 </listbox>
232 </tabpanel> 232 </tabpanel>
233 233
234 <tabpanel id="tabpanel_upload"> 234 <tabpanel id="tabpanel_upload">
235 <vbox flex="1"> 235 <vbox flex="1">
236 <tree id="uploadlist" rows="2" flex="1" 236 <tree id="uploadlist" rows="2" flex="1"
237 onselect="fireflix.uploads.selectionChanged()" 237 onselect="fireflix.uploads.selectionChanged()"
238 context="uploads_menu"> 238 context="uploads_menu">
239 <treecols> 239 <treecols>
240 <treecol id="up_file" label="&panel.uploadlist.file.label;" flex="4" crop="start" align="start"/> 240 <treecol id="up_file" label="&panel.uploadlist.file.label;" flex="4" crop="start" align="start"/>
241 <splitter class="tree-splitter" /> 241 <splitter class="tree-splitter" />
242 <treecol id="up_title" label="&panel.uploadlist.title.label;" flex="5" crop="end" align="start" /> 242 <treecol id="up_title" label="&panel.uploadlist.title.label;" flex="5" crop="end" align="start" />
243 <splitter class="tree-splitter" /> 243 <splitter class="tree-splitter" />
244 <treecol id="up_status" label="&panel.uploadlist.status.label;" flex="1" crop="end" align="start" /> 244 <treecol id="up_status" label="&panel.uploadlist.status.label;" flex="1" crop="end" align="start" />
245 </treecols> 245 </treecols>
246 <treechildren/> 246 <treechildren/>
247 </tree> 247 </tree>
248 <progressmeter id="upload_progress" mode="undetermined" hidden="true" /> 248 <progressmeter id="upload_progress" mode="undetermined" hidden="true" />
249 <groupbox id="upload_file_props" orient="horizontal" hidden="true"> 249 <groupbox id="upload_file_props" orient="horizontal" hidden="true">
250 <image id="upload_file_preview" width="100" height="100" /> 250 <image id="upload_file_preview" width="100" height="100" />
251 <grid flex="1"> 251 <grid flex="1">
252 <columns> 252 <columns>
253 <column/> 253 <column/>
254 <column flex="1"/> 254 <column flex="1"/>
255 </columns> 255 </columns>
256 <rows> 256 <rows>
257 <row> 257 <row>
258 <label control="upload_filename" 258 <label control="upload_filename"
259 value="&panel.upload_props.filename.label;" /> 259 value="&panel.upload_props.filename.label;" />
260 <textbox id="upload_filename" 260 <textbox id="upload_filename"
261 oninput="fireflix.uploads.propsToSel('filename')"/> 261 oninput="fireflix.uploads.propsToSel('filename')"/>
262 </row> 262 </row>
diff --git a/content/fireflix.js b/content/fireflix.js
index 48053c5..328e9e2 100644
--- a/content/fireflix.js
+++ b/content/fireflix.js
@@ -48,164 +48,164 @@ var fireflix = {
48 this.auth_info.value = this.no_auth_info_label; 48 this.auth_info.value = this.no_auth_info_label;
49 } 49 }
50 }, 50 },
51 on_cmd_auth: function() { 51 on_cmd_auth: function() {
52 var _this = this; 52 var _this = this;
53 this.flickr.authorize_0( 53 this.flickr.authorize_0(
54 'delete', 54 'delete',
55 function(x,f,u) { 55 function(x,f,u) {
56 _this.openTab(u); 56 _this.openTab(u);
57 _this.set_auth_state(_this.flickr.token,true); 57 _this.set_auth_state(_this.flickr.token,true);
58 }, function(x,s,c,m) { 58 }, function(x,s,c,m) {
59 _this.flickr_failure(x,s,c,m); 59 _this.flickr_failure(x,s,c,m);
60 } 60 }
61 ); 61 );
62 }, 62 },
63 on_cmd_auth_done: function() { 63 on_cmd_auth_done: function() {
64 this.set_auth_state(this.flickr.token,false); 64 this.set_auth_state(this.flickr.token,false);
65 var _this = this; 65 var _this = this;
66 this.flickr.authorize_1( 66 this.flickr.authorize_1(
67 function() { 67 function() {
68 _this.flickr.save_token(); 68 _this.flickr.save_token();
69 _this.refresh_stuff(); 69 _this.refresh_stuff();
70 _this.set_auth_state(_this.flickr.token,false); 70 _this.set_auth_state(_this.flickr.token,false);
71 _this.auth_info.value = 71 _this.auth_info.value =
72 _this.flickr.user.fullname+' ['+_this.flickr.user.username+']'; 72 _this.flickr.user.fullname+' ['+_this.flickr.user.username+']';
73 }, function(x,s,c,m) { 73 }, function(x,s,c,m) {
74 _this.set_auth_state(_this.flickr.token,false); /* XXX: no reset token? */ 74 _this.set_auth_state(_this.flickr.token,false); /* XXX: no reset token? */
75 _this.flickr_failure(x,s,c,m); 75 _this.flickr_failure(x,s,c,m);
76 } 76 }
77 ); 77 );
78 }, 78 },
79 on_cmd_auth_unauth: function() { 79 on_cmd_auth_unauth: function() {
80 this.flickr.reset_token(); 80 this.flickr.reset_token();
81 this.set_auth_state(false,false); 81 this.set_auth_state(false,false);
82 }, 82 },
83 83
84 refresh_sets: function() { this.photosets.refresh_sets(); }, 84 refresh_sets: function() { this.photosets.refresh_sets(); },
85 refresh_stuff: function() { 85 refresh_stuff: function() {
86 this.refresh_sets(); 86 this.refresh_sets();
87 this.refresh_user_tags(); 87 this.refresh_user_tags();
88 }, 88 },
89 89
90 /* photoset treeview */ 90 /* photoset treeview */
91 photoset: { 91 photoset: {
92 photos: new Array(), 92 photos: new Array(),
93 fireflix: null, 93 fireflix: null,
94 init: function(f) { 94 init: function(f) {
95 this.fireflix = f; 95 this.fireflix = f;
96 pull_elements(this,document,[ 'set_photo' ]); 96 pull_elements(this,document,[ 'set_photo', 'set_photo_props' ]);
97 document.getElementById('setphotos').view = this; 97 document.getElementById('setphotos').view = this;
98 }, 98 },
99 rowCount: 0, 99 rowCount: 0,
100 getCellText: function(r,c) { 100 getCellText: function(r,c) {
101 var p = this.photos[r]; 101 var p = this.photos[r];
102 if(c.id=='sp_title') return p.title; 102 if(c.id=='sp_title') return p.title;
103 if(c.id=='sp_taken') return p.datetaken; 103 if(c.id=='sp_taken') return p.datetaken;
104 if(c.id=='sp_upload') { 104 if(c.id=='sp_upload') {
105 var du = new Date(p.dateupload*1000); 105 var du = new Date(p.dateupload*1000);
106 var rv = du.getFullYear()+'-'+(du.getMonth()+1)+'-'+du.getDate() 106 var rv = du.getFullYear()+'-'+(du.getMonth()+1)+'-'+du.getDate()
107 +' '+ 107 +' '+
108 du.getHours()+':'+du.getMinutes()+':'+du.getSeconds(); 108 du.getHours()+':'+du.getMinutes()+':'+du.getSeconds();
109 return rv.replace(/(\D)(\d)(\D)/,'$10$2$3'); 109 return rv.replace(/(\D)(\d)(\D)/,'$10$2$3');
110 } 110 }
111 return c.id; 111 return c.id;
112 }, 112 },
113 setTree: function(t) { this.tree = t }, 113 setTree: function(t) { this.tree = t },
114 isContainer: function(r) { return false; }, 114 isContainer: function(r) { return false; },
115 isSeparator: function(r) { return false; }, 115 isSeparator: function(r) { return false; },
116 isSorted: function(r) { return false; }, 116 isSorted: function(r) { return false; },
117 getLevel: function(r) { return 0; }, 117 getLevel: function(r) { return 0; },
118 getImageSrc: function(r,c) { return null }, 118 getImageSrc: function(r,c) { return null },
119 getRowProperties: function(r,p) {}, 119 getRowProperties: function(r,p) {},
120 getCellProperties: function(cid,cel,p) {}, 120 getCellProperties: function(cid,cel,p) {},
121 getColumnProperties: function(cid,cel,p) { }, 121 getColumnProperties: function(cid,cel,p) { },
122 cycleHeader: function(cid,e) { }, 122 cycleHeader: function(cid,e) { },
123 getParentIndex: function(r) { return -1; }, 123 getParentIndex: function(r) { return -1; },
124 drop: function(r,o) { }, 124 drop: function(r,o) { },
125 canDropBeforeAfter: function(r,b) { return false }, 125 canDropBeforeAfter: function(r,b) { return false },
126 126
127 importXPR: function(xp) { 127 importXPR: function(xp) {
128 this.tree.beginUpdateBatch(); 128 this.tree.beginUpdateBatch();
129 this.photos = new Array(); 129 this.photos = new Array();
130 var n; while(n=xp.iterateNext()) { 130 var n; while(n=xp.iterateNext()) {
131 this.photos.push(new Photo(n)); 131 this.photos.push(new Photo(n));
132 } 132 }
133 this.rowCount = this.photos.length; 133 this.rowCount = this.photos.length;
134 this.tree.endUpdateBatch(); 134 this.tree.endUpdateBatch();
135 this.selection.clearSelection(); 135 this.selection.clearSelection();
136 }, 136 },
137 load_photos: function(psid) { 137 load_photos: function(psid) {
138 var _this = this; 138 var _this = this;
139 this.fireflix.flickr.api_call( 139 this.fireflix.flickr.api_call(
140 { 140 {
141 method: 'flickr.photosets.getPhotos', 141 method: 'flickr.photosets.getPhotos',
142 auth_token: 'default', 142 auth_token: 'default',
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_props.hidden = false;
162 }else{ 162 }else{
163 this.set_photo.hidden = true; 163 this.set_photo_props.hidden = true;
164 } 164 }
165 }, 165 },
166 on_cmd_open: function(ev) { 166 on_cmd_open: function(ev) {
167 if(this.selection.currentIndex<0) return; 167 if(this.selection.currentIndex<0) return;
168 var p = this.photos[this.selection.currentIndex]; 168 var p = this.photos[this.selection.currentIndex];
169 if(!p.id) return; 169 if(!p.id) return;
170 this.fireflix.openTab(this.fireflix.flickr.make_photo_url(p,'p')); 170 this.fireflix.openTab(this.fireflix.flickr.make_photo_url(p,'p'));
171 } 171 }
172 }, 172 },
173 173
174 /* photosets treeview */ 174 /* photosets treeview */
175 photosets: { 175 photosets: {
176 sets: new Array(), 176 sets: new Array(),
177 fireflix: null, 177 fireflix: null,
178 init: function(f) { 178 init: function(f) {
179 this.fireflix = f; 179 this.fireflix = f;
180 document.getElementById('setslist').view = this; 180 document.getElementById('setslist').view = this;
181 }, 181 },
182 rowCount: 0, 182 rowCount: 0,
183 getCellText: function(r,c) { 183 getCellText: function(r,c) {
184 var s = this.sets[r]; 184 var s = this.sets[r];
185 if(c.id=='sl_name') return s.title; 185 if(c.id=='sl_name') return s.title;
186 if(c.id=='sl_photos') return s.photos; 186 if(c.id=='sl_photos') return s.photos;
187 return c.id; 187 return c.id;
188 }, 188 },
189 setTree: function(t) { this.tree = t }, 189 setTree: function(t) { this.tree = t },
190 isContainer: function(r) { return false; }, 190 isContainer: function(r) { return false; },
191 isSeparator: function(r) { return false; }, 191 isSeparator: function(r) { return false; },
192 isSorted: function() { return false; }, 192 isSorted: function() { return false; },
193 getLevel: function(r) { return 0; }, 193 getLevel: function(r) { return 0; },
194 getImageSrc: function(r,c) { return null }, 194 getImageSrc: function(r,c) { return null },
195 getRowProperties: function(r,p) {}, 195 getRowProperties: function(r,p) {},
196 getCellProperties: function(cid,cel,p) { }, 196 getCellProperties: function(cid,cel,p) { },
197 getColumnProperties: function(cid,cel,p) { }, 197 getColumnProperties: function(cid,cel,p) { },
198 cycleHeader: function(cid,e) { }, 198 cycleHeader: function(cid,e) { },
199 getParentIndex: function(r) { return -1; }, 199 getParentIndex: function(r) { return -1; },
200 drop: function(r,o) { }, 200 drop: function(r,o) { },
201 canDropBeforeAfter: function(r,b) { return false }, 201 canDropBeforeAfter: function(r,b) { return false },
202 202
203 importXPR: function(xp) { 203 importXPR: function(xp) {
204 this.tree.beginUpdateBatch(); 204 this.tree.beginUpdateBatch();
205 this.sets = new Array(); 205 this.sets = new Array();
206 var n; while(n=xp.iterateNext()) { 206 var n; while(n=xp.iterateNext()) {
207 this.sets.push(new Photoset(n)); 207 this.sets.push(new Photoset(n));
208 } 208 }
209 this.rowCount = this.sets.length; 209 this.rowCount = this.sets.length;
210 this.tree.endUpdateBatch(); 210 this.tree.endUpdateBatch();
211 }, 211 },