summaryrefslogtreecommitdiffabout
authorMichael Krelin <hacker@klever.net>2006-11-16 22:33:43 (UTC)
committer Michael Krelin <hacker@klever.net>2006-11-16 22:33:43 (UTC)
commit77bede81381ed1adbda91a119128712a3688b4bd (patch) (unidiff)
treeb4021f71605bf4cee254684377759873c7967375
parentd98dfeb112f9db06c5e642e14ee9bbda4d90d0cb (diff)
downloadfireflix-77bede81381ed1adbda91a119128712a3688b4bd.zip
fireflix-77bede81381ed1adbda91a119128712a3688b4bd.tar.gz
fireflix-77bede81381ed1adbda91a119128712a3688b4bd.tar.bz2
hiding photo properties completely in photoset browser when no photo selected
git-svn-id: http://svn.klever.net/kin/fireflix/trunk@230 fe716a7a-6dde-0310-88d9-d003556173a8
Diffstat (more/less context) (show 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
@@ -115,182 +115,182 @@
115 115
116 <tabbox flex="1" id="fireflix_tabs"> 116 <tabbox flex="1" id="fireflix_tabs">
117 117
118 <tabs> 118 <tabs>
119 <tab label="&panel.tabs.search;"/> 119 <tab label="&panel.tabs.search;"/>
120 <tab label="&panel.tabs.sets;"/> 120 <tab label="&panel.tabs.sets;"/>
121 <tab label="&panel.tabs.tags;" hidden="true"/> <!-- TODO: --> 121 <tab label="&panel.tabs.tags;" hidden="true"/> <!-- TODO: -->
122 <tab id="tab_upload" label="&panel.tabs.upload;"/> 122 <tab id="tab_upload" label="&panel.tabs.upload;"/>
123 </tabs> 123 </tabs>
124 124
125 <tabpanels flex="1"> 125 <tabpanels flex="1">
126 126
127 <tabpanel id="tabpanel_search" flex="1"> 127 <tabpanel id="tabpanel_search" flex="1">
128 <vbox flex="1"> 128 <vbox flex="1">
129 <groupbox class="search_params" orient="vertical" onkeypress="if(event.keyCode==event.DOM_VK_RETURN) fireflix.foundphotos.search_photos()"> 129 <groupbox class="search_params" orient="vertical" onkeypress="if(event.keyCode==event.DOM_VK_RETURN) fireflix.foundphotos.search_photos()">
130 <hbox> 130 <hbox>
131 <vbox pack="center"> 131 <vbox pack="center">
132 <label control="search_for" value="&panel.search.search_for.label;" accesskey="s"/> 132 <label control="search_for" value="&panel.search.search_for.label;" accesskey="s"/>
133 </vbox> 133 </vbox>
134 <textbox id="search_for" flex="1"/> 134 <textbox id="search_for" flex="1"/>
135 </hbox> 135 </hbox>
136 <hbox> 136 <hbox>
137 <checkbox id="search_tags" label="&panel.search.mode.tagsonly.label;" 137 <checkbox id="search_tags" label="&panel.search.mode.tagsonly.label;"
138 tooltiptext="&panel.search.mode.tagsonly.tip;" checked="false" 138 tooltiptext="&panel.search.mode.tagsonly.tip;" checked="false"
139 accesskey="t" /> 139 accesskey="t" />
140 <checkbox id="search_mine" label="&panel.search.mode.mine.label;" checked="true" accesskey="m"/> 140 <checkbox id="search_mine" label="&panel.search.mode.mine.label;" checked="true" accesskey="m"/>
141 <spacer flex="1"/> 141 <spacer flex="1"/>
142 <button class="lean" command="cmd_search"/> 142 <button class="lean" command="cmd_search"/>
143 </hbox> 143 </hbox>
144 </groupbox> 144 </groupbox>
145 <hbox> 145 <hbox>
146 <button class="lean" command="cmd_search_prev_page"/> 146 <button class="lean" command="cmd_search_prev_page"/>
147 <spacer flex="1"/> 147 <spacer flex="1"/>
148 <label id="search_page" hidden="true"/> 148 <label id="search_page" hidden="true"/>
149 <spacer flex="1"/> 149 <spacer flex="1"/>
150 <button class="lean" command="cmd_search_next_page"/> 150 <button class="lean" command="cmd_search_next_page"/>
151 </hbox> 151 </hbox>
152 <tree id="searchresults" rows="2" flex="1" 152 <tree id="searchresults" rows="2" flex="1"
153 onselect="fireflix.foundphotos.on_select()" 153 onselect="fireflix.foundphotos.on_select()"
154 ondblclick="fireflix.foundphotos.on_cmd_open(event)" 154 ondblclick="fireflix.foundphotos.on_cmd_open(event)"
155 onkeypress="if(event.keyCode==event.DOM_VK_RETURN) fireflix.foundphotos.on_cmd_open(event)"> 155 onkeypress="if(event.keyCode==event.DOM_VK_RETURN) fireflix.foundphotos.on_cmd_open(event)">
156 <treecols> 156 <treecols>
157 <treecol id="sr_title" label="&panel.search.col.title.label;" flex="2" crop="end" align="start" /> 157 <treecol id="sr_title" label="&panel.search.col.title.label;" flex="2" crop="end" align="start" />
158 </treecols> 158 </treecols>
159 <treechildren/> 159 <treechildren/>
160 </tree> 160 </tree>
161 <groupbox id="searchresult_props" orient="horizontal" hidden="true"> 161 <groupbox id="searchresult_props" orient="horizontal" hidden="true">
162 <vbox width="100" pack="center"> 162 <vbox width="100" pack="center">
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>
263 <row> 263 <row>
264 <label control="upload_title" value="&panel.upload_props.title.label;" /> 264 <label control="upload_title" value="&panel.upload_props.title.label;" />
265 <textbox id="upload_title" 265 <textbox id="upload_title"
266 oninput="fireflix.uploads.propsToSel('title')"/> 266 oninput="fireflix.uploads.propsToSel('title')"/>
267 </row> 267 </row>
268 <row> 268 <row>
269 <label control="uplod_tags" value="&panel.upload_props.tags.label;" /> 269 <label control="uplod_tags" value="&panel.upload_props.tags.label;" />
270 <textbox id="upload_tags" 270 <textbox id="upload_tags"
271 oninput="fireflix.uploads.propsToSel('tags')"/> 271 oninput="fireflix.uploads.propsToSel('tags')"/>
272 </row> 272 </row>
273 <!-- TODO: description, public, friend, family --> 273 <!-- TODO: description, public, friend, family -->
274 </rows> 274 </rows>
275 </grid> 275 </grid>
276 </groupbox> 276 </groupbox>
277 <hbox> 277 <hbox>
278 <button class="lean" command="cmd_uploads_add" /> 278 <button class="lean" command="cmd_uploads_add" />
279 <spacer flex="1"/> 279 <spacer flex="1"/>
280 <button class="lean" command="cmd_uploads_remove" /> 280 <button class="lean" command="cmd_uploads_remove" />
281 <spacer flex="1"/> 281 <spacer flex="1"/>
282 <button class="lean" command="cmd_uploads_clear" /> 282 <button class="lean" command="cmd_uploads_clear" />
283 </hbox> 283 </hbox>
284 <hbox pack="center"> 284 <hbox pack="center">
285 <button command="cmd_uploads_upload" flex="1"/> 285 <button command="cmd_uploads_upload" flex="1"/>
286 </hbox> 286 </hbox>
287 </vbox> 287 </vbox>
288 </tabpanel> 288 </tabpanel>
289 289
290 </tabpanels> 290 </tabpanels>
291 291
292 </tabbox> 292 </tabbox>
293 293
294 </vbox> 294 </vbox>
295 295
296</page> 296</page>
diff --git a/content/fireflix.js b/content/fireflix.js
index 48053c5..328e9e2 100644
--- a/content/fireflix.js
+++ b/content/fireflix.js
@@ -1,259 +1,259 @@
1function splitascii(s) { 1function splitascii(s) {
2 var rv=''; 2 var rv='';
3 for(var i=0;i<s.length;++i) { 3 for(var i=0;i<s.length;++i) {
4 var w = s.charCodeAt(i); 4 var w = s.charCodeAt(i);
5 rv += String.fromCharCode( 5 rv += String.fromCharCode(
6 w&0xff, (w>>8)&0xff ); 6 w&0xff, (w>>8)&0xff );
7 } 7 }
8 return rv; 8 return rv;
9} 9}
10 10
11 11
12var fireflix = { 12var fireflix = {
13 flickr: new Flickr(), 13 flickr: new Flickr(),
14 init: function() { 14 init: function() {
15 pull_elements(this,document,[ 15 pull_elements(this,document,[
16 'cmd_auth_auth','cmd_auth_done','cmd_auth_unauth', 16 'cmd_auth_auth','cmd_auth_done','cmd_auth_unauth',
17 'menu_auth_done','b_auth','b_auth_done','auth_info', 17 'menu_auth_done','b_auth','b_auth_done','auth_info',
18 'loc_strings','cmd_set_props' 18 'loc_strings','cmd_set_props'
19 ]); 19 ]);
20 this.build_menus(); 20 this.build_menus();
21 this.foundphotos.init(this); 21 this.foundphotos.init(this);
22 this.photosets.init(this); 22 this.photosets.init(this);
23 this.photoset.init(this); 23 this.photoset.init(this);
24 this.uploads.init(this); 24 this.uploads.init(this);
25 this.uploadObserver.init(this); 25 this.uploadObserver.init(this);
26 this.flickr.api_key = '9c43cd66947a57e6f29db1a9da3f72e3'; 26 this.flickr.api_key = '9c43cd66947a57e6f29db1a9da3f72e3';
27 this.flickr.api_shs = '9c33c9e2f0f0cfd5'; 27 this.flickr.api_shs = '9c33c9e2f0f0cfd5';
28 this.flickr.prefs_root = 'net.klever.kin.fireflix'; 28 this.flickr.prefs_root = 'net.klever.kin.fireflix';
29 this.flickr.load_token(); 29 this.flickr.load_token();
30 this.no_auth_info_label = this.auth_info.value; 30 this.no_auth_info_label = this.auth_info.value;
31 this.set_auth_state(this.flickr.token,false); 31 this.set_auth_state(this.flickr.token,false);
32 if(this.flickr.token) { 32 if(this.flickr.token) {
33 this.refresh_stuff(); 33 this.refresh_stuff();
34 }else{ 34 }else{
35 this.on_cmd_auth(); 35 this.on_cmd_auth();
36 } 36 }
37 }, 37 },
38 set_auth_state: function(au,inp) { /* authorized, in progress */ 38 set_auth_state: function(au,inp) { /* authorized, in progress */
39 this.cmd_auth_unauth.disabled = !au; 39 this.cmd_auth_unauth.disabled = !au;
40 this.b_auth.hidden = au || inp; 40 this.b_auth.hidden = au || inp;
41 this.b_auth_done.hidden = !inp; 41 this.b_auth_done.hidden = !inp;
42 this.menu_auth_done.hidden = !inp; 42 this.menu_auth_done.hidden = !inp;
43 this.cmd_auth_done.setAttribute('disabled',!inp); 43 this.cmd_auth_done.setAttribute('disabled',!inp);
44 this.auth_info.disabled = !au; 44 this.auth_info.disabled = !au;
45 if(au) { 45 if(au) {
46 this.auth_info.value = this.flickr.user.fullname+' ['+this.flickr.user.username+']'; /* TODO: move to locale */ 46 this.auth_info.value = this.flickr.user.fullname+' ['+this.flickr.user.username+']'; /* TODO: move to locale */
47 }else{ 47 }else{
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 },
212 refresh_sets: function() { 212 refresh_sets: function() {
213 var _this = this; 213 var _this = this;
214 this.fireflix.flickr.api_call( 214 this.fireflix.flickr.api_call(
215 { 215 {
216 method: 'flickr.photosets.getList', 216 method: 'flickr.photosets.getList',
217 auth_token: 'default' 217 auth_token: 'default'
218 }, function(xr) { 218 }, function(xr) {
219 var x = xr.responseXML; 219 var x = xr.responseXML;
220 var xp = x.evaluate( 220 var xp = x.evaluate(
221 '/rsp/photosets/photoset', x, null, 221 '/rsp/photosets/photoset', x, null,
222 XPathResult.ORDERED_NODE_ITERATOR_TYPE, null ); 222 XPathResult.ORDERED_NODE_ITERATOR_TYPE, null );
223 _this.importXPR(xp); 223 _this.importXPR(xp);
224 }, function(x,s,c,m) { 224 }, function(x,s,c,m) {
225 _this.fireflix.flickr_failure(x,s,c,m); 225 _this.fireflix.flickr_failure(x,s,c,m);
226 } 226 }
227 ); 227 );
228 }, 228 },
229 on_select: function() { 229 on_select: function() {
230 if(this.selection.count==1) { 230 if(this.selection.count==1) {
231 this.fireflix.cmd_set_props.setAttribute('disabled','false'); 231 this.fireflix.cmd_set_props.setAttribute('disabled','false');
232 var s = this.sets[this.selection.currentIndex]; 232 var s = this.sets[this.selection.currentIndex];
233 this.fireflix.photoset.load_photos(s.id); 233 this.fireflix.photoset.load_photos(s.id);
234 }else{ 234 }else{
235 this.fireflix.cmd_set_props.setAttribute('disabled','true'); 235 this.fireflix.cmd_set_props.setAttribute('disabled','true');
236 } 236 }
237 }, 237 },
238 on_cmd_open_in_flickr: function(ev) { 238 on_cmd_open_in_flickr: function(ev) {
239 if(this.selection.currentIndex<0) return; 239 if(this.selection.currentIndex<0) return;
240 var p = this.sets[this.selection.currentIndex]; 240 var p = this.sets[this.selection.currentIndex];
241 if(!p.id) return; 241 if(!p.id) return;
242 this.fireflix.openTab(this.fireflix.flickr.make_photoset_url(p)); 242 this.fireflix.openTab(this.fireflix.flickr.make_photoset_url(p));
243 } 243 }
244 }, 244 },
245 245
246 refresh_user_tags: function() { 246 refresh_user_tags: function() {
247 var lb = document.getElementById('tagslist'); 247 var lb = document.getElementById('tagslist');
248 var _this = this; 248 var _this = this;
249 this.flickr.api_call( 249 this.flickr.api_call(
250 { 250 {
251 method: 'flickr.tags.getListUser', 251 method: 'flickr.tags.getListUser',
252 auth_token: 'default', 252 auth_token: 'default',
253 }, function(xr) { 253 }, function(xr) {
254 var x = xr.responseXML; 254 var x = xr.responseXML;
255 var xp = x.evaluate( 255 var xp = x.evaluate(
256 '/rsp/who/tags/tag', x, null, 256 '/rsp/who/tags/tag', x, null,
257 XPathResult.ORDERED_NODE_ITERATOR_TYPE, null ); 257 XPathResult.ORDERED_NODE_ITERATOR_TYPE, null );
258 // TODO: clear list 258 // TODO: clear list
259 var n; while(n=xp.iterateNext()) { 259 var n; while(n=xp.iterateNext()) {