summaryrefslogtreecommitdiffabout
authorMichael Krelin <hacker@klever.net>2011-08-28 12:17:34 (UTC)
committer Michael Krelin <hacker@klever.net>2011-08-28 12:17:34 (UTC)
commitaa13caca14bac3ed268ac6fb62f0270e40b24e48 (patch) (unidiff)
treeedcfd094407b87cf9c49e9275c6d4b847fc82f29
parent4152a504609522fab4a269dc88d13a1078a09452 (diff)
downloadfireflix-aa13caca14bac3ed268ac6fb62f0270e40b24e48.zip
fireflix-aa13caca14bac3ed268ac6fb62f0270e40b24e48.tar.gz
fireflix-aa13caca14bac3ed268ac6fb62f0270e40b24e48.tar.bz2
made api calls mostly json-based
Signed-off-by: Michael Krelin <hacker@klever.net>
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--content/fireflix.js96
-rw-r--r--content/flickr.js65
2 files changed, 69 insertions, 92 deletions
diff --git a/content/fireflix.js b/content/fireflix.js
index 225e21c..283e930 100644
--- a/content/fireflix.js
+++ b/content/fireflix.js
@@ -103,74 +103,68 @@ var fireflix = {
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 import_json: function(jp) {
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 for(var i in jp) this.photos.push(new Photo(jp[i]));
131 this.photos.push(new Photo(n)); 131 this.rowCount =this.photos.length;
132 }
133 this.rowCount = this.photos.length;
134 this.tree.endUpdateBatch(); 132 this.tree.endUpdateBatch();
135 this.selection.clearSelection(); 133 this.selection.clearSelection();
136 }, 134 },
137 load_photos: function(psid) { 135 load_photos: function(psid) {
138 var _this = this; 136 var that = this;
139 this.fireflix.flickr.api_call( 137 this.fireflix.flickr.api_call_json(
140 { 138 {
141 method: 'flickr.photosets.getPhotos', 139 method: 'flickr.photosets.getPhotos',
142 auth_token: 'default', 140 auth_token: 'default',
143 photoset_id: psid, 141 photoset_id: psid,
144 extras: 'license,date_upload,date_taken,owner_name,icon_server,original_format,last_update' 142 extras: 'license,date_upload,date_taken,owner_name,icon_server,original_format,last_update'
145 }, function(xr) { 143 }, function(x,j) {
146 var x = xr.responseXML; 144 that.import_json(j.photoset.photo);
147 var xp = x.evaluate(
148 '/rsp/photoset/photo', x, null,
149 XPathResult.ORDERED_NODE_ITERATOR_TYPE, null );
150 _this.importXPR(xp);
151 }, function(x,s,c,m) { 145 }, function(x,s,c,m) {
152 _this.fireflix.flickr_failure(x,s,c,m); 146 that.fireflix.flickr_failure(x,s,c,m);
153 } 147 }
154 ); 148 );
155 }, 149 },
156 on_select: function() { 150 on_select: function() {
157 if(this.selection.count==1) { 151 if(this.selection.count==1) {
158 var p = this.photos[this.selection.currentIndex]; 152 var p = this.photos[this.selection.currentIndex];
159 this.set_photo.src = 153 this.set_photo.src =
160 this.fireflix.flickr.get_photo_url(p.server,p.id,p.secret,'t'); 154 this.fireflix.flickr.get_photo_url(p.server,p.id,p.secret,'t');
161 this.set_photo_props.hidden = false; 155 this.set_photo_props.hidden = false;
162 }else{ 156 }else{
163 this.set_photo_props.hidden = true; 157 this.set_photo_props.hidden = true;
164 } 158 }
165 }, 159 },
166 on_cmd_open: function(ev) { 160 on_cmd_open: function(ev) {
167 if(this.selection.currentIndex<0) return; 161 if(this.selection.currentIndex<0) return;
168 var p = this.photos[this.selection.currentIndex]; 162 var p = this.photos[this.selection.currentIndex];
169 if(!p.id) return; 163 if(!p.id) return;
170 this.fireflix.openTab(this.fireflix.flickr.make_photo_url(p,'p')); 164 this.fireflix.openTab(this.fireflix.flickr.make_photo_url(p,'p'));
171 } 165 }
172 }, 166 },
173 167
174 /* photosets treeview */ 168 /* photosets treeview */
175 photosets: { 169 photosets: {
176 sets: new Array(), 170 sets: new Array(),
@@ -179,71 +173,65 @@ var fireflix = {
179 this.fireflix = f; 173 this.fireflix = f;
180 document.getElementById('setslist').view = this; 174 document.getElementById('setslist').view = this;
181 }, 175 },
182 rowCount: 0, 176 rowCount: 0,
183 getCellText: function(r,c) { 177 getCellText: function(r,c) {
184 var s = this.sets[r]; 178 var s = this.sets[r];
185 if(c.id=='sl_name') return s.title; 179 if(c.id=='sl_name') return s.title;
186 if(c.id=='sl_photos') return s.photos; 180 if(c.id=='sl_photos') return s.photos;
187 return c.id; 181 return c.id;
188 }, 182 },
189 setTree: function(t) { this.tree = t }, 183 setTree: function(t) { this.tree = t },
190 isContainer: function(r) { return false; }, 184 isContainer: function(r) { return false; },
191 isSeparator: function(r) { return false; }, 185 isSeparator: function(r) { return false; },
192 isSorted: function() { return false; }, 186 isSorted: function() { return false; },
193 getLevel: function(r) { return 0; }, 187 getLevel: function(r) { return 0; },
194 getImageSrc: function(r,c) { return null }, 188 getImageSrc: function(r,c) { return null },
195 getRowProperties: function(r,p) {}, 189 getRowProperties: function(r,p) {},
196 getCellProperties: function(cid,cel,p) { }, 190 getCellProperties: function(cid,cel,p) { },
197 getColumnProperties: function(cid,cel,p) { }, 191 getColumnProperties: function(cid,cel,p) { },
198 cycleHeader: function(cid,e) { }, 192 cycleHeader: function(cid,e) { },
199 getParentIndex: function(r) { return -1; }, 193 getParentIndex: function(r) { return -1; },
200 drop: function(r,o) { }, 194 drop: function(r,o) { },
201 canDropBeforeAfter: function(r,b) { return false }, 195 canDropBeforeAfter: function(r,b) { return false },
202 196
203 importXPR: function(xp) { 197 import_json: function(j) {
204 this.tree.beginUpdateBatch(); 198 this.tree.beginUpdateBatch();
205 this.sets = new Array(); 199 this.sets = new Array();
206 var n; while(n=xp.iterateNext()) { 200 for(var i in j) this.sets.push(new Photoset(j[i]));
207 this.sets.push(new Photoset(n));
208 }
209 this.rowCount = this.sets.length; 201 this.rowCount = this.sets.length;
210 this.tree.endUpdateBatch(); 202 this.tree.endUpdateBatch();
211 }, 203 },
212 refresh_sets: function() { 204 refresh_sets: function() {
213 var _this = this; 205 var that = this;
214 this.fireflix.flickr.api_call( 206 this.fireflix.flickr.api_call_json(
215 { 207 {
216 method: 'flickr.photosets.getList', 208 method: 'flickr.photosets.getList',
217 auth_token: 'default' 209 auth_token: 'default'
218 }, function(xr) { 210 }, function(x,j) {
219 var x = xr.responseXML; 211 that.import_json(j.photosets.photoset);
220 var xp = x.evaluate(
221 '/rsp/photosets/photoset', x, null,
222 XPathResult.ORDERED_NODE_ITERATOR_TYPE, null );
223 _this.importXPR(xp);
224 }, function(x,s,c,m) { 212 }, function(x,s,c,m) {
225 _this.fireflix.flickr_failure(x,s,c,m); 213 that.fireflix.flickr_failure(x,s,c,m);
226 } 214 }
227 ); 215 );
228 }, 216 },
229 on_select: function() { 217 on_select: function() {
230 if(this.selection.count==1) { 218 if(this.selection.count==1) {
231 this.fireflix.cmd_set_props.setAttribute('disabled','false'); 219 this.fireflix.cmd_set_props.setAttribute('disabled','false');
232 var s = this.sets[this.selection.currentIndex]; 220 var s = this.sets[this.selection.currentIndex];
233 this.fireflix.photoset.load_photos(s.id); 221 this.fireflix.photoset.load_photos(s.id);
234 }else{ 222 }else{
235 this.fireflix.cmd_set_props.setAttribute('disabled','true'); 223 this.fireflix.cmd_set_props.setAttribute('disabled','true');
236 } 224 }
237 }, 225 },
238 on_cmd_open_in_flickr: function(ev) { 226 on_cmd_open_in_flickr: function(ev) {
239 if(this.selection.currentIndex<0) return; 227 if(this.selection.currentIndex<0) return;
240 var p = this.sets[this.selection.currentIndex]; 228 var p = this.sets[this.selection.currentIndex];
241 if(!p.id) return; 229 if(!p.id) return;
242 this.fireflix.openTab(this.fireflix.flickr.make_photoset_url(p)); 230 this.fireflix.openTab(this.fireflix.flickr.make_photoset_url(p));
243 } 231 }
244 }, 232 },
245 233
246 refresh_user_tags: function() { 234 refresh_user_tags: function() {
247 var lb = document.getElementById('tagslist'); 235 var lb = document.getElementById('tagslist');
248 var _this = this; 236 var _this = this;
249 this.flickr.api_call( 237 this.flickr.api_call(
@@ -766,100 +754,97 @@ var fireflix = {
766 ]); 754 ]);
767 document.getElementById('searchresults').view = this; 755 document.getElementById('searchresults').view = this;
768 }, 756 },
769 photos: new Array(), 757 photos: new Array(),
770 rowCount: 0, 758 rowCount: 0,
771 getCellText: function(r,c) { 759 getCellText: function(r,c) {
772 var p = this.photos[r]; 760 var p = this.photos[r];
773 if(c.id=='sr_title') return p.title; 761 if(c.id=='sr_title') return p.title;
774 return c.id; 762 return c.id;
775 }, 763 },
776 setTree: function(t) { this.tree = t }, 764 setTree: function(t) { this.tree = t },
777 isContainer: function(r) { return false }, 765 isContainer: function(r) { return false },
778 isSeparator: function(r) { return false }, 766 isSeparator: function(r) { return false },
779 isSorted: function(r) { return false }, 767 isSorted: function(r) { return false },
780 getLevel: function(r) { return 0 }, 768 getLevel: function(r) { return 0 },
781 getImageSrc: function(r,c) { return null }, 769 getImageSrc: function(r,c) { return null },
782 getRowProperties: function(r,p) { }, 770 getRowProperties: function(r,p) { },
783 getCellProperties: function(cid,cel,p) { }, 771 getCellProperties: function(cid,cel,p) { },
784 getColumnProperties: function(cid,cel,p) { }, 772 getColumnProperties: function(cid,cel,p) { },
785 cycleHeader: function(cid,e) { }, 773 cycleHeader: function(cid,e) { },
786 getParentIndex: function(r) { return -1 }, 774 getParentIndex: function(r) { return -1 },
787 drop: function(r,o) { }, 775 drop: function(r,o) { },
788 canDropBeforeAfter: function(r,b) { return false }, 776 canDropBeforeAfter: function(r,b) { return false },
789 777
790 importXPR: function(xp) { 778 import_json: function(jp) {
791 this.selection.clearSelection(); 779 this.selection.clearSelection();
792 this.selection.currentIndex = -1; 780 this.selection.currentIndex=-1;
793 this.searchresult_props.hidden = true; 781 this.searchresult_props.hidden=true;
794 this.tree.beginUpdateBatch(); 782 this.tree.beginUpdateBatch();
795 this.photos = new Array(); 783 this.photos = new Array();
796 var n; while(n=xp.iterateNext()) { 784 for(var i in jp) {
797 this.photos.push(new Photo(n)); 785 this.photos.push(new Photo(jp[i]));
798 } 786 }
799 this.rowCount = this.photos.length; 787 this.rowCount = this.photos.length;
800 this.tree.endUpdateBatch(); 788 this.tree.endUpdateBatch();
801 }, 789 },
802 paging: { 790 paging: {
803 pars: null, 791 pars: null,
804 page: null, pages: null, perpage: null, total: null 792 page: null, pages: null, perpage: null, total: null
805 }, 793 },
806 search_photos: function() { 794 search_photos: function() {
807 var pars = { 795 var pars = {
808 method: 'flickr.photos.search', 796 method: 'flickr.photos.search',
809 auth_token: 'default', 797 auth_token: 'default',
810 extras: 'license,date_upload,date_taken,owner_name,icon_server,original_format,last_update,geo' 798 extras: 'license,date_upload,date_taken,owner_name,icon_server,original_format,last_update,geo'
811 }; 799 };
812 if(this.search_mine.checked) 800 if(this.search_mine.checked)
813 pars.user_id='me'; 801 pars.user_id='me';
814 if(this.search_tags.checked) { 802 if(this.search_tags.checked) {
815 pars.tags=this.search_for.value.split(/ +/).join(','); 803 pars.tags=this.search_for.value.split(/ +/).join(',');
816 }else{ 804 }else{
817 pars.text=this.search_for.value; 805 pars.text=this.search_for.value;
818 } 806 }
819 this.paging.pars = new Object(); 807 this.paging.pars = new Object();
820 this.paging.page = null; this.paging.pages = null; 808 this.paging.page = null; this.paging.pages = null;
821 this.paging.perpage = null; this.paging.total = null; 809 this.paging.perpage = null; this.paging.total = null;
822 for(var p in pars) this.paging.pars[p] = pars[p]; 810 for(var p in pars) this.paging.pars[p] = pars[p];
823 this.perform_search(pars); 811 this.perform_search(pars);
824 }, 812 },
825 perform_search: function(p) { 813 perform_search: function(p) {
826 var _this = this; 814 var that = this;
827 this.fireflix.flickr.api_call( p, 815 this.fireflix.flickr.api_call_json( p,
828 function(xr) { 816 function(x,j) {
829 var x = xr.responseXML; 817 that.import_json(j.photos.photo);
830 var xp = xp_nodes('/rsp/photos/photo',x); 818 that.tree.ensureRowIsVisible(0);
831 _this.importXPR(xp); 819 var pp=j.photos;
832 _this.tree.ensureRowIsVisible(0); 820 that.paging.page = pp.page; that.paging.pages = pp.pages;
833 xp = xp_node('/rsp/photos',x); 821 that.paging.perpage = pp.perpage;
834 _this.paging.page = parseInt(xp.getAttribute('page')); 822 that.paging.total = pp.total;
835 _this.paging.pages = parseInt(xp.getAttribute('pages')); 823 that.update_paging();
836 _this.paging.perpage = parseInt(xp.getAttribute('perpage')); 824 that.on_select();
837 _this.paging.total = parseInt(xp.getAttribute('total'));
838 _this.update_paging();
839 _this.on_select();
840 }, function(x,s,c,m) { 825 }, function(x,s,c,m) {
841 _this.fireflix.flickr_failure(x,s,c,m); 826 that.fireflix.flickr_failure(x,s,c,m);
842 } 827 }
843 ); 828 );
844 }, 829 },
845 on_cmd_prev: function(ev) { 830 on_cmd_prev: function(ev) {
846 var pars = new Object(); 831 var pars = new Object();
847 for(var p in this.paging.pars) pars[p] = this.paging.pars[p]; 832 for(var p in this.paging.pars) pars[p] = this.paging.pars[p];
848 pars.page=this.paging.page-1; pars.per_page=this.paging.perpage; 833 pars.page=this.paging.page-1; pars.per_page=this.paging.perpage;
849 this.perform_search(pars); 834 this.perform_search(pars);
850 }, 835 },
851 on_cmd_next: function(ev) { 836 on_cmd_next: function(ev) {
852 var pars = new Object(); 837 var pars = new Object();
853 for(var p in this.paging.pars) pars[p] = this.paging.pars[p]; 838 for(var p in this.paging.pars) pars[p] = this.paging.pars[p];
854 pars.page=this.paging.page+1; pars.per_page=this.paging.perpage; 839 pars.page=this.paging.page+1; pars.per_page=this.paging.perpage;
855 this.perform_search(pars); 840 this.perform_search(pars);
856 }, 841 },
857 update_paging: function() { 842 update_paging: function() {
858 if(! (this.paging.pars && this.paging.page && this.paging.pages) ) { 843 if(! (this.paging.pars && this.paging.page && this.paging.pages) ) {
859 this.search_page.value=''; this.search_page.hidden = true; 844 this.search_page.value=''; this.search_page.hidden = true;
860 this.cmd_search_prev_page.setAttribute('disabled','true'); 845 this.cmd_search_prev_page.setAttribute('disabled','true');
861 this.cmd_search_next_page.setAttribute('disabled','true'); 846 this.cmd_search_next_page.setAttribute('disabled','true');
862 }else{ 847 }else{
863 this.search_page.value=this.fireflix.loc_strings.getFormattedString('search_page',[this.paging.page,this.paging.pages]); 848 this.search_page.value=this.fireflix.loc_strings.getFormattedString('search_page',[this.paging.page,this.paging.pages]);
864 this.search_page.hidden=false; 849 this.search_page.hidden=false;
865 this.cmd_search_prev_page.setAttribute('disabled',(this.paging.page>1)?'false':'true'); 850 this.cmd_search_prev_page.setAttribute('disabled',(this.paging.page>1)?'false':'true');
@@ -877,64 +862,63 @@ var fireflix = {
877 this.searchresult_description.innerHTML=this.fireflix.loc_strings.getString('broken_description'); 862 this.searchresult_description.innerHTML=this.fireflix.loc_strings.getString('broken_description');
878 else 863 else
879 this.searchresult_description.appendChild(de); 864 this.searchresult_description.appendChild(de);
880 /* of all linking elements flickr only allows a */ 865 /* of all linking elements flickr only allows a */
881 var as = this.searchresult_description.getElementsByTagName('a'); 866 var as = this.searchresult_description.getElementsByTagName('a');
882 for(var a=0;a<as.length;++a) 867 for(var a=0;a<as.length;++a)
883 as.item(a).setAttribute('target','_blank'); 868 as.item(a).setAttribute('target','_blank');
884 } 869 }
885 }, 870 },
886 on_select: function() { 871 on_select: function() {
887 if(this.selection.currentIndex<0) { 872 if(this.selection.currentIndex<0) {
888 this.searchresult_props.hidden = true; 873 this.searchresult_props.hidden = true;
889 }else{ 874 }else{
890 var p = this.photos[this.selection.currentIndex]; 875 var p = this.photos[this.selection.currentIndex];
891 if(!p) { 876 if(!p) {
892 this.searchresult_props.hidden = true; 877 this.searchresult_props.hidden = true;
893 }else{ 878 }else{
894 this.search_photo.src = this.fireflix.flickr.make_photo_url(p,'t'); 879 this.search_photo.src = this.fireflix.flickr.make_photo_url(p,'t');
895 this.searchresult_title.value = p.title; 880 this.searchresult_title.value = p.title;
896 this.searchresult_title.tooltipText = p.title; 881 this.searchresult_title.tooltipText = p.title;
897 this.render_description_frame(null); 882 this.render_description_frame(null);
898 if(p.description==null && p.description==undefined) { 883 if(p.description==null && p.description==undefined) {
899 var pid = p.id; 884 var pid = p.id;
900 var ci = this.selection.currentIndex; 885 var ci = this.selection.currentIndex;
901 var _this = this; 886 var that = this;
902 this.fireflix.flickr.api_call( 887 this.fireflix.flickr.api_call_json(
903 { 888 {
904 method: 'flickr.photos.getInfo', 889 method: 'flickr.photos.getInfo',
905 auth_token: 'default', 890 auth_token: 'default',
906 photo_id: p.id, 891 photo_id: p.id,
907 secret: p.secret 892 secret: p.secret
908 }, function(xr) { 893 }, function(x,j) {
909 var pp = _this.photos[ci]; 894 var pp = that.photos[ci];
910 if(ci==_this.selection.currentIndex && pp.id==pid) { 895 if(ci==that.selection.currentIndex && pp.id==pid) {
911 var n = xp_node('/rsp/photo',xr.responseXML); 896 pp.fromJSON_(j.photo);
912 pp.fromNode_(n); 897 that.render_description_frame(pp.description);
913 _this.render_description_frame(pp.description);
914 } 898 }
915 }, function(x,s,c,m) { 899 }, function(x,s,c,m) {
916 _this.fireflix.flickr_failure(x,s,c,m); 900 that.fireflix.flickr_failure(x,s,c,m);
917 } 901 }
918 ); 902 );
919 this.searchresult_props.hidden = false; 903 this.searchresult_props.hidden = false;
920 }else{ 904 }else{
921 this.render_description_frame(p.description); 905 this.render_description_frame(p.description);
922 } 906 }
923 } 907 }
924 } 908 }
925 }, 909 },
926 on_cmd_open: function(ev) { 910 on_cmd_open: function(ev) {
927 if(this.selection.currentIndex<0) return; 911 if(this.selection.currentIndex<0) return;
928 var p = this.photos[this.selection.currentIndex]; 912 var p = this.photos[this.selection.currentIndex];
929 if(!p.id) return; 913 if(!p.id) return;
930 this.fireflix.openTab(this.fireflix.flickr.make_photo_url(p,'p')); 914 this.fireflix.openTab(this.fireflix.flickr.make_photo_url(p,'p'));
931 } 915 }
932 }, 916 },
933 917
934 photo_html: function(p,i,l) { 918 photo_html: function(p,i,l) {
935 // TODO: add alt/title when possible 919 // TODO: add alt/title when possible
936 var rv = 920 var rv =
937 '<a href="'+this.flickr.make_photo_url(p,l)+'">' + 921 '<a href="'+this.flickr.make_photo_url(p,l)+'">' +
938 '<img src="'+this.flickr.make_photo_url(p,i)+'" />'+ 922 '<img src="'+this.flickr.make_photo_url(p,i)+'" />'+
939 '</a>'; 923 '</a>';
940 return rv; 924 return rv;
diff --git a/content/flickr.js b/content/flickr.js
index 545144c..716874b 100644
--- a/content/flickr.js
+++ b/content/flickr.js
@@ -1,102 +1,95 @@
1/* 1/*
2 * Photoset 2 * Photoset
3 */ 3 */
4 4
5function Photoset(s) { 5function Photoset(s) {
6 if(s instanceof Photoset) { 6 if(s instanceof Photoset) {
7 for(var p in s) this[p]=s[p]; 7 for(var p in s) this[p]=s[p];
8 }else 8 }else
9 this.fromNode(s); 9 this.fromJSON(s);
10} 10}
11Photoset.prototype = { 11Photoset.prototype = {
12 id: null, 12 id: null,
13 primary: null, 13 primary: null,
14 secret: null, 14 secret: null,
15 server: null, 15 server: null,
16 photos: null, 16 photos: null,
17 title: null, 17 title: null,
18 description: null, 18 description: null,
19 fromNode: function(n) { 19 fromJSON: function(j) {
20 this.id = n.getAttribute('id'); 20 this.id=j.id;
21 this.primary = n.getAttribute('primary'); 21 this.primary = j.primary;
22 this.secret = n.getAttribute('secret'); 22 this.secret = j.secret; this.server = j.server;
23 this.server = n.getAttribute('server'); 23 this.photos = j.photos;
24 this.photos = n.getAttribute('photos'); 24 this.title = j.title._content;
25 this.title = n.getElementsByTagName('title').item(0).firstChild.nodeValue; 25 this.description = j.description._content;
26 this.description = n.getElementsByTagName('description').item(0).firstChild;
27 if(this.description) this.description = this.description.nodeValue;
28 } 26 }
29}; 27};
30 28
31/* 29/*
32 * Photo 30 * Photo
33 */ 31 */
34function Photo(s) { 32function Photo(s) {
35 if(s instanceof Photo) { 33 if(s instanceof Photo) {
36 for(var p in s) this[p]=s[p]; 34 for(var p in s) this[p]=s[p];
37 }else 35 }else
38 this.fromNode(s); 36 this.fromJSON(s);
39} 37}
40Photo.prototype = { 38Photo.prototype = {
41 id: null, secret: null, 39 id: null, secret: null,
42 server: null, 40 server: null,
43 title: null, 41 title: null,
44 isprimary: null, 42 isprimary: null,
45 license: null, 43 license: null,
46 dateupload: null, datetaken: null, datetakengranularity: null, 44 dateupload: null, datetaken: null, datetakengranularity: null,
47 ownername: null, 45 ownername: null,
48 iconserver: null, 46 iconserver: null,
49 originalformat: null, 47 originalformat: null,
50 lastupdate: null, 48 lastupdate: null,
51 fromNode: function(n) { 49 fromJSON: function(j) {
52 this.id = n.getAttribute('id'); this.secret = n.getAttribute('secret'); 50 this.id = j.id; this.secret = j.secret;
53 this.server = n.getAttribute('server'); 51 this.server = j.server;
54 this.title = n.getAttribute('title'); 52 this.title=j.title;
55 this.isprimary = n.getAttribute('isprimary'); 53 this.isprimary = j.isprimary;
56 this.license = n.getAttribute('license'); 54 this.license = j.license;
57 this.dateupload = n.getAttribute('dateupload'); 55 this.dateupload = j.dateupload;
58 this.datetaken = n.getAttribute('datetaken'); this.datetakengranularity = n.getAttribute('datetakengranularity'); 56 this.datetaken=j.datetaken; j.datetakengranularity=j.datetakengranularity;
59 this.ownername = n.getAttribute('ownername'); 57 this.ownername=j.ownername;
60 this.iconserver = n.getAttribute('iconserver'); 58 this.iconserver=j.iconserver;
61 this.originalformat = n.getAttribute('originalformat'); 59 this.originalformat=j.originalformat;
62 this.lastupdate = n.getAttribute('lastupdate'); 60 this.lastupdate=j.lastupdate;
63 }, 61 },
64 fromNode_: function(n) { 62 fromJSON_: function(j) {
65 var t;
66 // TODO: @rotation @isfavorite
67 this.owner = {}; 63 this.owner = {};
68 t = n.getElementsByTagName('owner').item(0); 64 var t;
69 if(t) { 65 if((t=j.owner)) {
70 this.owner.nsid=t.getAttribute('nsid'); 66 this.owner.nsid=t.nsid;
71 this.owner.username=t.getAttribute('username'); 67 this.owner.username=t.username; this.owner.realname=t.realname;
72 this.owner.realname=t.getAttribute('realname'); 68 this.owner.location=t.location;
73 this.owner.location=t.getAttribute.location;
74 }
75 t = n.getElementsByTagName('description').item(0);
76 if(t && t.firstChild) {
77 this.description = t.firstChild.nodeValue;
78 } 69 }
70 if((t=j.description)) this.description=t._content;
71 // TODO: @rotation @isfavorite
79 // TODO: visibility/@ispublic visibility/@isfriend visibility/@isfamily 72 // TODO: visibility/@ispublic visibility/@isfriend visibility/@isfamily
80 // TODO: dates/@posted dates/@taken dates/@takengranularity dates/@lastupdate 73 // TODO: dates/@posted dates/@taken dates/@takengranularity dates/@lastupdate
81 // TODO: permissions/@permcomment permsiions/@permaddmeta 74 // TODO: permissions/@permcomment permsiions/@permaddmeta
82 // TODO: editability/@canaddcomment editability/@canaddmeta 75 // TODO: editability/@canaddcomment editability/@canaddmeta
83 // TODO: comments 76 // TODO: comments
84 // TODO: notes/note/@id notes/note/@author notes/note/@authorname 77 // TODO: notes/note/@id notes/note/@author notes/note/@authorname
85 // TODO: notes/note/@x notes/note/@y notes/note/@w notes/note/@h 78 // TODO: notes/note/@x notes/note/@y notes/note/@w notes/note/@h
86 // TODO: notes/note 79 // TODO: notes/note
87 // TODO: tags/tag/@id tags/tag/@author tags/tag/@raw tags/tag 80 // TODO: tags/tag/@id tags/tag/@author tags/tag/@raw tags/tag
88 // TODO: urls/url/@type urls/url 81 // TODO: urls/url/@type urls/url
89 } 82 }
90}; 83};
91 84
92function Flickr() { } 85function Flickr() { }
93Flickr.prototype = { 86Flickr.prototype = {
94 87
95 rest_url: 'http://www.flickr.com/services/rest/', 88 rest_url: 'http://www.flickr.com/services/rest/',
96 auth_url: 'http://flickr.com/services/auth/', 89 auth_url: 'http://flickr.com/services/auth/',
97 photo_url: 'http://static.flickr.com/', 90 photo_url: 'http://static.flickr.com/',
98 photos_url: 'http://www.flickr.com/photos/', 91 photos_url: 'http://www.flickr.com/photos/',
99 upload_url: 'http://www.flickr.com/services/upload/', 92 upload_url: 'http://www.flickr.com/services/upload/',
100 uploader_edit_url: 'http://www.flickr.com/tools/uploader_edit.gne', 93 uploader_edit_url: 'http://www.flickr.com/tools/uploader_edit.gne',
101 94
102 api_sig: function(paramstr) { 95 api_sig: function(paramstr) {