summaryrefslogtreecommitdiffabout
path: root/content/fireflix.js
Unidiff
Diffstat (limited to 'content/fireflix.js') (more/less context) (ignore whitespace changes)
-rw-r--r--content/fireflix.js13
1 files changed, 13 insertions, 0 deletions
diff --git a/content/fireflix.js b/content/fireflix.js
index 328e9e2..995ec5c 100644
--- a/content/fireflix.js
+++ b/content/fireflix.js
@@ -476,495 +476,508 @@ var fireflix = {
476 clear_list: function() { 476 clear_list: function() {
477 this.tree.beginUpdateBatch(); 477 this.tree.beginUpdateBatch();
478 this.rowCount = 0; 478 this.rowCount = 0;
479 this.files = new Array(); 479 this.files = new Array();
480 this.tree.endUpdateBatch(); 480 this.tree.endUpdateBatch();
481 this.selToProps(); 481 this.selToProps();
482 }, 482 },
483 selectionChanged: function() { 483 selectionChanged: function() {
484 this.selToProps(); 484 this.selToProps();
485 }, 485 },
486 disableProps: function() { 486 disableProps: function() {
487 this.upload_filename.value=''; 487 this.upload_filename.value='';
488 this.upload_filename.disabled = true; 488 this.upload_filename.disabled = true;
489 this.upload_title.value=''; 489 this.upload_title.value='';
490 this.upload_title.disabled = true; 490 this.upload_title.disabled = true;
491 this.upload_file_preview.src = null; 491 this.upload_file_preview.src = null;
492 this.upload_file_props.hidden = true; 492 this.upload_file_props.hidden = true;
493 this.upload_tags.value=''; 493 this.upload_tags.value='';
494 this.upload_tags.disabled = true; 494 this.upload_tags.disabled = true;
495 }, 495 },
496 selToProps: function() { 496 selToProps: function() {
497 if(!this.selection.count) { 497 if(!this.selection.count) {
498 this.disableProps(); 498 this.disableProps();
499 }else if(this.selection.count==1) { 499 }else if(this.selection.count==1) {
500 var f=this.files[this.selection.currentIndex]; 500 var f=this.files[this.selection.currentIndex];
501 if(f==null || f.state!='pending') { 501 if(f==null || f.state!='pending') {
502 this.disableProps(); 502 this.disableProps();
503 }else{ 503 }else{
504 this.upload_filename.value = f.file; 504 this.upload_filename.value = f.file;
505 this.upload_filename.disabled = false; 505 this.upload_filename.disabled = false;
506 this.upload_title.value = f.title; 506 this.upload_title.value = f.title;
507 this.upload_title.disabled = false; 507 this.upload_title.disabled = false;
508 this.upload_file_preview.src = 'file:///'+f.file; 508 this.upload_file_preview.src = 'file:///'+f.file;
509 this.upload_file_props.hidden = false; 509 this.upload_file_props.hidden = false;
510 this.upload_tags.value = f.tags; 510 this.upload_tags.value = f.tags;
511 this.upload_tags.disabled = false; 511 this.upload_tags.disabled = false;
512 } 512 }
513 }else{ 513 }else{
514 var ftitle = null; var onetitle = true; 514 var ftitle = null; var onetitle = true;
515 var ftags = null; var onetag = true; 515 var ftags = null; var onetag = true;
516 var fs = 0; 516 var fs = 0;
517 for(var ff in this.files) { 517 for(var ff in this.files) {
518 if(this.selection.isSelected(ff) && this.files[ff].state=='pending' ) { 518 if(this.selection.isSelected(ff) && this.files[ff].state=='pending' ) {
519 ++fs; 519 ++fs;
520 if(ftitle==null) { 520 if(ftitle==null) {
521 ftitle = this.files[ff].title; 521 ftitle = this.files[ff].title;
522 }else if(ftitle!=this.files[ff].title) { 522 }else if(ftitle!=this.files[ff].title) {
523 onetitle = false; 523 onetitle = false;
524 } 524 }
525 if(ftags==null) { 525 if(ftags==null) {
526 ftags = this.files[ff].tags; 526 ftags = this.files[ff].tags;
527 }else if(ftags!=this.files[ff].tags) { 527 }else if(ftags!=this.files[ff].tags) {
528 onetag = false; 528 onetag = false;
529 } 529 }
530 } 530 }
531 } 531 }
532 if(fs) { 532 if(fs) {
533 this.upload_filename.value=''; 533 this.upload_filename.value='';
534 this.upload_filename.disabled = true; 534 this.upload_filename.disabled = true;
535 if(onetitle) 535 if(onetitle)
536 this.upload_title.value = ftitle; 536 this.upload_title.value = ftitle;
537 this.upload_title.disabled = false; 537 this.upload_title.disabled = false;
538 if(onetag) 538 if(onetag)
539 this.upload_tags.value = ftags; 539 this.upload_tags.value = ftags;
540 this.upload_tags.disabled = false; 540 this.upload_tags.disabled = false;
541 this.upload_file_preview.src = null; 541 this.upload_file_preview.src = null;
542 this.upload_file_props.hidden = false; 542 this.upload_file_props.hidden = false;
543 }else 543 }else
544 this.disableProps(); 544 this.disableProps();
545 } 545 }
546 }, 546 },
547 propsToSel: function(prop) { 547 propsToSel: function(prop) {
548 if(this.selection.count<=0) return; 548 if(this.selection.count<=0) return;
549 for(var ff in this.files) { 549 for(var ff in this.files) {
550 if(this.selection.isSelected(ff) && this.files[ff].state=='pending') { 550 if(this.selection.isSelected(ff) && this.files[ff].state=='pending') {
551 if(prop=='filename') 551 if(prop=='filename')
552 this.files[ff].file = this.upload_filename.value; 552 this.files[ff].file = this.upload_filename.value;
553 if(prop=='title') 553 if(prop=='title')
554 this.files[ff].title = this.upload_title.value; 554 this.files[ff].title = this.upload_title.value;
555 if(prop=='tags') 555 if(prop=='tags')
556 this.files[ff].tags = this.upload_tags.value; 556 this.files[ff].tags = this.upload_tags.value;
557 this.tree.invalidateRow(ff); 557 this.tree.invalidateRow(ff);
558 } 558 }
559 } 559 }
560 }, 560 },
561 561
562 on_upload: function() { 562 on_upload: function() {
563 this.selToProps(); 563 this.selToProps();
564 this.batch_ids = new Array(); 564 this.batch_ids = new Array();
565 this.upload_progress.value=0; 565 this.upload_progress.value=0;
566 this.upload_progress.setAttribute('hidden','false'); 566 this.upload_progress.setAttribute('hidden','false');
567 this.upload_worker(); 567 this.upload_worker();
568 }, 568 },
569 on_clear: function() { 569 on_clear: function() {
570 this.clear_list(); 570 this.clear_list();
571 }, 571 },
572 on_remove: function() { 572 on_remove: function() {
573 if(this.selection.count) { 573 if(this.selection.count) {
574 this.tree.beginUpdateBatch(); 574 this.tree.beginUpdateBatch();
575 for(var i=this.files.length-1;i>=0;--i) { 575 for(var i=this.files.length-1;i>=0;--i) {
576 if(this.selection.isSelected(i)) { 576 if(this.selection.isSelected(i)) {
577 this.files.splice(i,1); 577 this.files.splice(i,1);
578 this.rowCount--; 578 this.rowCount--;
579 } 579 }
580 } 580 }
581 this.tree.endUpdateBatch(); 581 this.tree.endUpdateBatch();
582 this.selection.clearSelection(); 582 this.selection.clearSelection();
583 } 583 }
584 }, 584 },
585 on_add: function() { 585 on_add: function() {
586 var ifp = Components.interfaces.nsIFilePicker; 586 var ifp = Components.interfaces.nsIFilePicker;
587 var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(ifp); 587 var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(ifp);
588 fp.init(window, "Select a File", ifp.modeOpenMultiple); 588 fp.init(window, "Select a File", ifp.modeOpenMultiple);
589 fp.appendFilters(ifp.filterImages); 589 fp.appendFilters(ifp.filterImages);
590 var rv = fp.show(); 590 var rv = fp.show();
591 if(rv==ifp.returnOK) { 591 if(rv==ifp.returnOK) {
592 var ff = fp.files; 592 var ff = fp.files;
593 while(ff.hasMoreElements()) { 593 while(ff.hasMoreElements()) {
594 var f = ff.getNext(); 594 var f = ff.getNext();
595 f.QueryInterface(Components.interfaces.nsIFile); 595 f.QueryInterface(Components.interfaces.nsIFile);
596 this.add(f.path); 596 this.add(f.path);
597 } 597 }
598 } 598 }
599 } 599 }
600 }, 600 },
601 601
602 on_set_props: function() { 602 on_set_props: function() {
603 var pset = this.photosets.sets[this.photosets.selection.currentIndex]; 603 var pset = this.photosets.sets[this.photosets.selection.currentIndex];
604 window.openDialog( 604 window.openDialog(
605 "chrome://fireflix/content/photoset-props.xul", 605 "chrome://fireflix/content/photoset-props.xul",
606 null, "dependent,modal,dialog,chrome", this, 606 null, "dependent,modal,dialog,chrome", this,
607 pset ); 607 pset );
608 if(pset.dirty) { 608 if(pset.dirty) {
609 var _this = this; 609 var _this = this;
610 this.flickr.api_call( 610 this.flickr.api_call(
611 { 611 {
612 method: 'flickr.photosets.editMeta', 612 method: 'flickr.photosets.editMeta',
613 auth_token: 'default', 613 auth_token: 'default',
614 photoset_id: pset.id, 614 photoset_id: pset.id,
615 title: pset.title, 615 title: pset.title,
616 description: pset.description 616 description: pset.description
617 }, function(xr) { 617 }, function(xr) {
618 pset.dirty = false; 618 pset.dirty = false;
619 _this.flickr.api_call( 619 _this.flickr.api_call(
620 { 620 {
621 method: 'flickr.photosets.getPhotos', 621 method: 'flickr.photosets.getPhotos',
622 auth_token: 'default', 622 auth_token: 'default',
623 photoset_id: pset.id 623 photoset_id: pset.id
624 }, function(xr) { 624 }, function(xr) {
625 var x = xr.responseXML; 625 var x = xr.responseXML;
626 var xp = x.evaluate( 626 var xp = x.evaluate(
627 '/rsp/photoset/photo', x, null, 627 '/rsp/photoset/photo', x, null,
628 XPathResult.ORDERED_NODE_ITERATOR_TYPE, null ); 628 XPathResult.ORDERED_NODE_ITERATOR_TYPE, null );
629 var phids = new Array(); 629 var phids = new Array();
630 var priph = null; 630 var priph = null;
631 var n; while(n=xp.iterateNext()) { 631 var n; while(n=xp.iterateNext()) {
632 var pid = n.getAttribute('id'); 632 var pid = n.getAttribute('id');
633 phids.push( pid ); 633 phids.push( pid );
634 if(pid==pset.primary && n.getAttribute('isprimary')!='1') 634 if(pid==pset.primary && n.getAttribute('isprimary')!='1')
635 priph = pid; 635 priph = pid;
636 } 636 }
637 if(priph) { 637 if(priph) {
638 _this.flickr.api_call( 638 _this.flickr.api_call(
639 { 639 {
640 method: 'flickr.photosets.editPhotos', 640 method: 'flickr.photosets.editPhotos',
641 auth_token: 'default', 641 auth_token: 'default',
642 photoset_id: pset.id, 642 photoset_id: pset.id,
643 primary_photo_id: priph, 643 primary_photo_id: priph,
644 photo_ids: phids.join(',') 644 photo_ids: phids.join(',')
645 }, function() { }, function(x,s,c,m) { /* flickr.photosets.editPhotos */ 645 }, function() { }, function(x,s,c,m) { /* flickr.photosets.editPhotos */
646 _this.flickr_failure(x,s,c,m); 646 _this.flickr_failure(x,s,c,m);
647 } 647 }
648 ); 648 );
649 } 649 }
650 }, function(x,s,c,m) { /* flickr.photosets.getPhotos */ 650 }, function(x,s,c,m) { /* flickr.photosets.getPhotos */
651 _this.flickr_failure(x,s,c,m); 651 _this.flickr_failure(x,s,c,m);
652 } 652 }
653 ); 653 );
654 }, function(x,s,c,m) { /* flickr.photosets.editMeta */ 654 }, function(x,s,c,m) { /* flickr.photosets.editMeta */
655 _this.flickr_failure(x,s,c,m); 655 _this.flickr_failure(x,s,c,m);
656 } 656 }
657 ); 657 );
658 } 658 }
659 }, 659 },
660 on_refresh_sets: function() { 660 on_refresh_sets: function() {
661 this.refresh_sets(); 661 this.refresh_sets();
662 }, 662 },
663 on_cmd_sets_html: function(csfx,ev) { 663 on_cmd_sets_html: function(csfx,ev) {
664 var uti = csfx.charAt(0); var utl = csfx.charAt(1); 664 var uti = csfx.charAt(0); var utl = csfx.charAt(1);
665 var rv = this.build_html(this.photoset.photos,uti,utl); 665 var rv = this.build_html(this.photoset.photos,uti,utl);
666 this.popup_content(rv); 666 this.popup_content(rv);
667 }, 667 },
668 on_cmd_setphotos_html: function(csfx,ev) {
669 var uti = csfx.charAt(0); var utl = csfx.charAt(1);
670 var rv = '';
671 for(var p in this.photoset.photos) {
672 if(this.photoset.selection.isSelected(p))
673 rv += this.photo_html(this.photoset.photos[p],uti,utl)+'\n';
674 }
675 this.popup_content(rv);
676 },
668 677
669 on_cmd_uploads_html: function(csfx,ev) { 678 on_cmd_uploads_html: function(csfx,ev) {
670 var uti = csfx.charAt(0); var utl = csfx.charAt(1); 679 var uti = csfx.charAt(0); var utl = csfx.charAt(1);
671 var pids = new Array(); 680 var pids = new Array();
672 for(var f in this.uploads.files) { 681 for(var f in this.uploads.files) {
673 if(this.uploads.selection.isSelected(f)) 682 if(this.uploads.selection.isSelected(f))
674 if(this.uploads.files[f].photoid) 683 if(this.uploads.files[f].photoid)
675 pids.push(this.uploads.files[f].photoid); 684 pids.push(this.uploads.files[f].photoid);
676 } 685 }
677 var pp = this.uploads.rowCount*2; if(pp>500) pp = 500; 686 var pp = this.uploads.rowCount*2; if(pp>500) pp = 500;
678 var _this = this; 687 var _this = this;
679 this.flickr.api_call( 688 this.flickr.api_call(
680 { 689 {
681 method: 'flickr.photos.search', 690 method: 'flickr.photos.search',
682 auth_token: 'default', 691 auth_token: 'default',
683 extras: 'original_format', 692 extras: 'original_format',
684 user_id: 'me', 693 user_id: 'me',
685 per_page: pp 694 per_page: pp
686 }, 695 },
687 function(xr) { 696 function(xr) {
688 var x = xr.responseXML; 697 var x = xr.responseXML;
689 var rv = ''; 698 var rv = '';
690 for(var pn in pids) { 699 for(var pn in pids) {
691 var p = pids[pn]; 700 var p = pids[pn];
692 var pp = new Photo(xp_node('/rsp/photos/photo[@id='+p+']',x)); 701 var pp = new Photo(xp_node('/rsp/photos/photo[@id='+p+']',x));
693 rv += _this.photo_html(pp,uti,utl)+'\n'; 702 rv += _this.photo_html(pp,uti,utl)+'\n';
694 } 703 }
695 _this.popup_content(rv); 704 _this.popup_content(rv);
696 }, function(x,s,c,m) { 705 }, function(x,s,c,m) {
697 _this.flickr_failure(x,s,c,m); 706 _this.flickr_failure(x,s,c,m);
698 } 707 }
699 ); 708 );
700 }, 709 },
701 710
702 /* 711 /*
703 * 712 *
704 */ 713 */
705 foundphotos: { 714 foundphotos: {
706 fireflix: null, 715 fireflix: null,
707 init: function(f) { 716 init: function(f) {
708 this.fireflix = f; 717 this.fireflix = f;
709 pull_elements(this,document,[ 718 pull_elements(this,document,[
710 'search_for','search_tags','search_mine', 719 'search_for','search_tags','search_mine',
711 'searchresult_props','search_photo', 720 'searchresult_props','search_photo',
712 'searchresult_title','searchresult_description', 721 'searchresult_title','searchresult_description',
713 'search_page','cmd_search_prev_page','cmd_search_next_page' 722 'search_page','cmd_search_prev_page','cmd_search_next_page'
714 ]); 723 ]);
715 document.getElementById('searchresults').view = this; 724 document.getElementById('searchresults').view = this;
716 }, 725 },
717 photos: new Array(), 726 photos: new Array(),
718 rowCount: 0, 727 rowCount: 0,
719 getCellText: function(r,c) { 728 getCellText: function(r,c) {
720 var p = this.photos[r]; 729 var p = this.photos[r];
721 if(c.id=='sr_title') return p.title; 730 if(c.id=='sr_title') return p.title;
722 return c.id; 731 return c.id;
723 }, 732 },
724 setTree: function(t) { this.tree = t }, 733 setTree: function(t) { this.tree = t },
725 isContainer: function(r) { return false }, 734 isContainer: function(r) { return false },
726 isSeparator: function(r) { return false }, 735 isSeparator: function(r) { return false },
727 isSorted: function(r) { return false }, 736 isSorted: function(r) { return false },
728 getLevel: function(r) { return 0 }, 737 getLevel: function(r) { return 0 },
729 getImageSrc: function(r,c) { return null }, 738 getImageSrc: function(r,c) { return null },
730 getRowProperties: function(r,p) { }, 739 getRowProperties: function(r,p) { },
731 getCellProperties: function(cid,cel,p) { }, 740 getCellProperties: function(cid,cel,p) { },
732 getColumnProperties: function(cid,cel,p) { }, 741 getColumnProperties: function(cid,cel,p) { },
733 cycleHeader: function(cid,e) { }, 742 cycleHeader: function(cid,e) { },
734 getParentIndex: function(r) { return -1 }, 743 getParentIndex: function(r) { return -1 },
735 drop: function(r,o) { }, 744 drop: function(r,o) { },
736 canDropBeforeAfter: function(r,b) { return false }, 745 canDropBeforeAfter: function(r,b) { return false },
737 746
738 importXPR: function(xp) { 747 importXPR: function(xp) {
739 this.selection.clearSelection(); 748 this.selection.clearSelection();
740 this.selection.currentIndex = -1; 749 this.selection.currentIndex = -1;
741 this.searchresult_props.hidden = true; 750 this.searchresult_props.hidden = true;
742 this.tree.beginUpdateBatch(); 751 this.tree.beginUpdateBatch();
743 this.photos = new Array(); 752 this.photos = new Array();
744 var n; while(n=xp.iterateNext()) { 753 var n; while(n=xp.iterateNext()) {
745 this.photos.push(new Photo(n)); 754 this.photos.push(new Photo(n));
746 } 755 }
747 this.rowCount = this.photos.length; 756 this.rowCount = this.photos.length;
748 this.tree.endUpdateBatch(); 757 this.tree.endUpdateBatch();
749 }, 758 },
750 paging: { 759 paging: {
751 pars: null, 760 pars: null,
752 page: null, pages: null, perpage: null, total: null 761 page: null, pages: null, perpage: null, total: null
753 }, 762 },
754 search_photos: function() { 763 search_photos: function() {
755 var pars = { 764 var pars = {
756 method: 'flickr.photos.search', 765 method: 'flickr.photos.search',
757 auth_token: 'default', 766 auth_token: 'default',
758 extras: 'license,date_upload,date_taken,owner_name,icon_server,original_format,last_update,geo' 767 extras: 'license,date_upload,date_taken,owner_name,icon_server,original_format,last_update,geo'
759 }; 768 };
760 if(this.search_mine.checked) 769 if(this.search_mine.checked)
761 pars.user_id='me'; 770 pars.user_id='me';
762 if(this.search_tags.checked) { 771 if(this.search_tags.checked) {
763 pars.tags=this.search_for.value.split(/ +/).join(','); 772 pars.tags=this.search_for.value.split(/ +/).join(',');
764 }else{ 773 }else{
765 pars.text=this.search_for.value; 774 pars.text=this.search_for.value;
766 } 775 }
767 this.paging.pars = new Object(); 776 this.paging.pars = new Object();
768 this.paging.page = null; this.paging.pages = null; 777 this.paging.page = null; this.paging.pages = null;
769 this.paging.perpage = null; this.paging.total = null; 778 this.paging.perpage = null; this.paging.total = null;
770 for(var p in pars) this.paging.pars[p] = pars[p]; 779 for(var p in pars) this.paging.pars[p] = pars[p];
771 this.perform_search(pars); 780 this.perform_search(pars);
772 }, 781 },
773 perform_search: function(p) { 782 perform_search: function(p) {
774 var _this = this; 783 var _this = this;
775 this.fireflix.flickr.api_call( p, 784 this.fireflix.flickr.api_call( p,
776 function(xr) { 785 function(xr) {
777 var x = xr.responseXML; 786 var x = xr.responseXML;
778 var xp = xp_nodes('/rsp/photos/photo',x); 787 var xp = xp_nodes('/rsp/photos/photo',x);
779 _this.importXPR(xp); 788 _this.importXPR(xp);
780 _this.tree.ensureRowIsVisible(0); 789 _this.tree.ensureRowIsVisible(0);
781 xp = xp_node('/rsp/photos',x); 790 xp = xp_node('/rsp/photos',x);
782 _this.paging.page = parseInt(xp.getAttribute('page')); 791 _this.paging.page = parseInt(xp.getAttribute('page'));
783 _this.paging.pages = parseInt(xp.getAttribute('pages')); 792 _this.paging.pages = parseInt(xp.getAttribute('pages'));
784 _this.paging.perpage = parseInt(xp.getAttribute('perpage')); 793 _this.paging.perpage = parseInt(xp.getAttribute('perpage'));
785 _this.paging.total = parseInt(xp.getAttribute('total')); 794 _this.paging.total = parseInt(xp.getAttribute('total'));
786 _this.update_paging(); 795 _this.update_paging();
787 _this.on_select(); 796 _this.on_select();
788 }, function(x,s,c,m) { 797 }, function(x,s,c,m) {
789 _this.fireflix.flickr_failure(x,s,c,m); 798 _this.fireflix.flickr_failure(x,s,c,m);
790 } 799 }
791 ); 800 );
792 }, 801 },
793 on_cmd_prev: function(ev) { 802 on_cmd_prev: function(ev) {
794 var pars = new Object(); 803 var pars = new Object();
795 for(var p in this.paging.pars) pars[p] = this.paging.pars[p]; 804 for(var p in this.paging.pars) pars[p] = this.paging.pars[p];
796 pars.page=this.paging.page-1; pars.per_page=this.paging.perpage; 805 pars.page=this.paging.page-1; pars.per_page=this.paging.perpage;
797 this.perform_search(pars); 806 this.perform_search(pars);
798 }, 807 },
799 on_cmd_next: function(ev) { 808 on_cmd_next: function(ev) {
800 var pars = new Object(); 809 var pars = new Object();
801 for(var p in this.paging.pars) pars[p] = this.paging.pars[p]; 810 for(var p in this.paging.pars) pars[p] = this.paging.pars[p];
802 pars.page=this.paging.page+1; pars.per_page=this.paging.perpage; 811 pars.page=this.paging.page+1; pars.per_page=this.paging.perpage;
803 this.perform_search(pars); 812 this.perform_search(pars);
804 }, 813 },
805 update_paging: function() { 814 update_paging: function() {
806 if(! (this.paging.pars && this.paging.page && this.paging.pages) ) { 815 if(! (this.paging.pars && this.paging.page && this.paging.pages) ) {
807 this.search_page.value=''; this.search_page.hidden = true; 816 this.search_page.value=''; this.search_page.hidden = true;
808 this.cmd_search_prev_page.setAttribute('disabled','true'); 817 this.cmd_search_prev_page.setAttribute('disabled','true');
809 this.cmd_search_next_page.setAttribute('disabled','true'); 818 this.cmd_search_next_page.setAttribute('disabled','true');
810 }else{ 819 }else{
811 this.search_page.value=this.fireflix.loc_strings.getFormattedString('search_page',[this.paging.page,this.paging.pages]); 820 this.search_page.value=this.fireflix.loc_strings.getFormattedString('search_page',[this.paging.page,this.paging.pages]);
812 this.search_page.hidden=false; 821 this.search_page.hidden=false;
813 this.cmd_search_prev_page.setAttribute('disabled',(this.paging.page>1)?'false':'true'); 822 this.cmd_search_prev_page.setAttribute('disabled',(this.paging.page>1)?'false':'true');
814 this.cmd_search_next_page.setAttribute('disabled',(this.paging.page<this.paging.pages)?'false':'true'); 823 this.cmd_search_next_page.setAttribute('disabled',(this.paging.page<this.paging.pages)?'false':'true');
815 } 824 }
816 }, 825 },
817 render_description_frame: function(content) { 826 render_description_frame: function(content) {
818 this.searchresult_description.innerHTML = ''; 827 this.searchresult_description.innerHTML = '';
819 if(content) { 828 if(content) {
820 var dp = new DOMParser(); 829 var dp = new DOMParser();
821 var pd = dp.parseFromString( 830 var pd = dp.parseFromString(
822 '<div xmlns="http://www.w3.org/1999/xhtml">'+content+'</div>', 'text/xml' ); 831 '<div xmlns="http://www.w3.org/1999/xhtml">'+content+'</div>', 'text/xml' );
823 var de = pd.documentElement; 832 var de = pd.documentElement;
824 if(de.tagName=='parsererror') 833 if(de.tagName=='parsererror')
825 this.searchresult_description.innerHTML=this.fireflix.loc_strings.getString('broken_description'); 834 this.searchresult_description.innerHTML=this.fireflix.loc_strings.getString('broken_description');
826 else 835 else
827 this.searchresult_description.appendChild(de); 836 this.searchresult_description.appendChild(de);
828 /* of all linking elements flickr only allows a */ 837 /* of all linking elements flickr only allows a */
829 var as = this.searchresult_description.getElementsByTagName('a'); 838 var as = this.searchresult_description.getElementsByTagName('a');
830 for(var a=0;a<as.length;++a) 839 for(var a=0;a<as.length;++a)
831 as.item(a).setAttribute('target','_blank'); 840 as.item(a).setAttribute('target','_blank');
832 } 841 }
833 }, 842 },
834 on_select: function() { 843 on_select: function() {
835 if(this.selection.currentIndex<0) { 844 if(this.selection.currentIndex<0) {
836 this.searchresult_props.hidden = true; 845 this.searchresult_props.hidden = true;
837 }else{ 846 }else{
838 var p = this.photos[this.selection.currentIndex]; 847 var p = this.photos[this.selection.currentIndex];
839 if(!p) { 848 if(!p) {
840 this.searchresult_props.hidden = true; 849 this.searchresult_props.hidden = true;
841 }else{ 850 }else{
842 this.search_photo.src = this.fireflix.flickr.make_photo_url(p,'t'); 851 this.search_photo.src = this.fireflix.flickr.make_photo_url(p,'t');
843 this.searchresult_title.value = p.title; 852 this.searchresult_title.value = p.title;
844 this.searchresult_title.tooltipText = p.title; 853 this.searchresult_title.tooltipText = p.title;
845 this.render_description_frame(null); 854 this.render_description_frame(null);
846 if(p.description==null && p.description==undefined) { 855 if(p.description==null && p.description==undefined) {
847 var pid = p.id; 856 var pid = p.id;
848 var ci = this.selection.currentIndex; 857 var ci = this.selection.currentIndex;
849 var _this = this; 858 var _this = this;
850 this.fireflix.flickr.api_call( 859 this.fireflix.flickr.api_call(
851 { 860 {
852 method: 'flickr.photos.getInfo', 861 method: 'flickr.photos.getInfo',
853 auth_token: 'default', 862 auth_token: 'default',
854 photo_id: p.id, 863 photo_id: p.id,
855 secret: p.secret 864 secret: p.secret
856 }, function(xr) { 865 }, function(xr) {
857 var pp = _this.photos[ci]; 866 var pp = _this.photos[ci];
858 if(ci==_this.selection.currentIndex && pp.id==pid) { 867 if(ci==_this.selection.currentIndex && pp.id==pid) {
859 var n = xp_node('/rsp/photo',xr.responseXML); 868 var n = xp_node('/rsp/photo',xr.responseXML);
860 pp.fromNode_(n); 869 pp.fromNode_(n);
861 _this.render_description_frame(pp.description); 870 _this.render_description_frame(pp.description);
862 } 871 }
863 }, function(x,s,c,m) { 872 }, function(x,s,c,m) {
864 _this.fireflix.flickr_failure(x,s,c,m); 873 _this.fireflix.flickr_failure(x,s,c,m);
865 } 874 }
866 ); 875 );
867 this.searchresult_props.hidden = false; 876 this.searchresult_props.hidden = false;
868 }else{ 877 }else{
869 this.render_description_frame(p.description); 878 this.render_description_frame(p.description);
870 } 879 }
871 } 880 }
872 } 881 }
873 }, 882 },
874 on_cmd_open: function(ev) { 883 on_cmd_open: function(ev) {
875 if(this.selection.currentIndex<0) 884 if(this.selection.currentIndex<0)
876 return; 885 return;
877 var p = this.photos[this.selection.currentIndex]; 886 var p = this.photos[this.selection.currentIndex];
878 if(!p.id) 887 if(!p.id)
879 return; 888 return;
880 this.fireflix.openTab(this.fireflix.flickr.make_photo_url(p,'p')); 889 this.fireflix.openTab(this.fireflix.flickr.make_photo_url(p,'p'));
881 } 890 }
882 }, 891 },
883 892
884 photo_html: function(p,i,l) { 893 photo_html: function(p,i,l) {
885 // TODO: add alt/title when possible 894 // TODO: add alt/title when possible
886 var rv = 895 var rv =
887 '<a href="'+this.flickr.make_photo_url(p,l)+'">' + 896 '<a href="'+this.flickr.make_photo_url(p,l)+'">' +
888 '<img src="'+this.flickr.make_photo_url(p,i)+'" />'+ 897 '<img src="'+this.flickr.make_photo_url(p,i)+'" />'+
889 '</a>'; 898 '</a>';
890 return rv; 899 return rv;
891 }, 900 },
892 build_html: function(photos,uti,utl) { 901 build_html: function(photos,uti,utl) {
893 var rv = ''; 902 var rv = '';
894 for(var i in photos) { 903 for(var i in photos) {
895 var p = photos[i]; 904 var p = photos[i];
896 rv += this.photo_html(p,uti,utl)+'\n'; 905 rv += this.photo_html(p,uti,utl)+'\n';
897 } 906 }
898 return rv; 907 return rv;
899 }, 908 },
900 909
901 popup_content: function(s) { 910 popup_content: function(s) {
902 window.openDialog( 911 window.openDialog(
903 "chrome://fireflix/content/generated-content.xul", 912 "chrome://fireflix/content/generated-content.xul",
904 null, "dialog,chrome", this, s ); 913 null, "dialog,chrome", this, s );
905 }, 914 },
906 copy_to_clipboard: function(s) { 915 copy_to_clipboard: function(s) {
907 var ch = Components.classes["@mozilla.org/widget/clipboardhelper;1"] 916 var ch = Components.classes["@mozilla.org/widget/clipboardhelper;1"]
908 .getService(Components.interfaces.nsIClipboardHelper); 917 .getService(Components.interfaces.nsIClipboardHelper);
909 ch.copyString(s); 918 ch.copyString(s);
910 }, 919 },
911 openTab: function(l) { 920 openTab: function(l) {
912 var wm = Components.classes['@mozilla.org/appshell/window-mediator;1'].getService( 921 var wm = Components.classes['@mozilla.org/appshell/window-mediator;1'].getService(
913 Components.interfaces.nsIWindowMediator ); 922 Components.interfaces.nsIWindowMediator );
914 var bw = wm.getMostRecentWindow('navigator:browser'); 923 var bw = wm.getMostRecentWindow('navigator:browser');
915 var b = bw.getBrowser(); 924 var b = bw.getBrowser();
916 var t = b.addTab(l); 925 var t = b.addTab(l);
917 b.selectedTab = t; 926 b.selectedTab = t;
918 }, 927 },
919 928
920 build_menus: function() { 929 build_menus: function() {
921 this.append_html_menu( 930 this.append_html_menu(
922 document.getElementById('sets_html_menu'), 931 document.getElementById('sets_html_menu'),
923 'stm_','m_bop','cmdset_sets','cmd_sets_html' 932 'stm_','m_bop','cmdset_sets','cmd_sets_html'
924 ); 933 );
925 this.append_html_menu( 934 this.append_html_menu(
935 document.getElementById('setphotos_html_menu'),
936 'stm_','m_bop','cmdset_setphotos','cmd_setphotos_html'
937 );
938 this.append_html_menu(
926 document.getElementById('uploads_html_menu'), 939 document.getElementById('uploads_html_menu'),
927 'stm_','m_bop','cmdset_uploads','cmd_uploads_html' 940 'stm_','m_bop','cmdset_uploads','cmd_uploads_html'
928 ); 941 );
929 return; 942 return;
930 }, 943 },
931 append_html_menu: function(m,imgt,lnkt,csid,cpfx) { 944 append_html_menu: function(m,imgt,lnkt,csid,cpfx) {
932 var mp = m.appendChild(document.createElement('menupopup')); 945 var mp = m.appendChild(document.createElement('menupopup'));
933 var t; 946 var t;
934 t=mp.appendChild(document.createElement('menuitem')); 947 t=mp.appendChild(document.createElement('menuitem'));
935 t.setAttribute('label',this.loc_strings.getString('menutitle_Images')); 948 t.setAttribute('label',this.loc_strings.getString('menutitle_Images'));
936 t.setAttribute('class','menuhead');t.setAttribute('disabled','true'); 949 t.setAttribute('class','menuhead');t.setAttribute('disabled','true');
937 mp.appendChild(document.createElement('menuseparator')); 950 mp.appendChild(document.createElement('menuseparator'));
938 var cs = document.getElementById(csid); 951 var cs = document.getElementById(csid);
939 for(var iti=0;iti<imgt.length;++iti) { 952 for(var iti=0;iti<imgt.length;++iti) {
940 t = mp.appendChild(document.createElement('menu')); 953 t = mp.appendChild(document.createElement('menu'));
941 t.setAttribute('label',this.loc_strings.getString('urltype_'+imgt.charAt(iti))); 954 t.setAttribute('label',this.loc_strings.getString('urltype_'+imgt.charAt(iti)));
942 var smp = t.appendChild(document.createElement('menupopup')); 955 var smp = t.appendChild(document.createElement('menupopup'));
943 t=smp.appendChild(document.createElement('menuitem')); 956 t=smp.appendChild(document.createElement('menuitem'));
944 t.setAttribute('label',this.loc_strings.getString('menutitle_Links')); 957 t.setAttribute('label',this.loc_strings.getString('menutitle_Links'));
945 t.setAttribute('class','menuhead');t.setAttribute('disabled','true'); 958 t.setAttribute('class','menuhead');t.setAttribute('disabled','true');
946 smp.appendChild(document.createElement('menuseparator')); 959 smp.appendChild(document.createElement('menuseparator'));
947 for(var lti=0;lti<lnkt.length;++lti) { 960 for(var lti=0;lti<lnkt.length;++lti) {
948 var csfx = imgt.charAt(iti)+lnkt.charAt(lti); 961 var csfx = imgt.charAt(iti)+lnkt.charAt(lti);
949 t=smp.appendChild(document.createElement('menuitem')); 962 t=smp.appendChild(document.createElement('menuitem'));
950 t.setAttribute('label',this.loc_strings.getString('urltype_'+lnkt.charAt(lti))); 963 t.setAttribute('label',this.loc_strings.getString('urltype_'+lnkt.charAt(lti)));
951 t.setAttribute('command',cpfx+'_'+csfx); 964 t.setAttribute('command',cpfx+'_'+csfx);
952 t=cs.appendChild(document.createElement('command')); 965 t=cs.appendChild(document.createElement('command'));
953 t.setAttribute('id',cpfx+'_'+csfx); 966 t.setAttribute('id',cpfx+'_'+csfx);
954 t.setAttribute('oncommand','fireflix.on_'+cpfx+"('"+csfx+"',event)"); 967 t.setAttribute('oncommand','fireflix.on_'+cpfx+"('"+csfx+"',event)");
955 } 968 }
956 } 969 }
957 return mp; 970 return mp;
958 }, 971 },
959 972
960 flickr_failure: function(x,s,c,m) { 973 flickr_failure: function(x,s,c,m) {
961 if(c==98) { // Invalid auth token 974 if(c==98) { // Invalid auth token
962 this.flickr.reset_token(); 975 this.flickr.reset_token();
963 this.set_auth_state(false,false); 976 this.set_auth_state(false,false);
964 return; 977 return;
965 } 978 }
966 // TODO: is that beauty? 979 // TODO: is that beauty?
967 alert('flickr api call failed\n'+c+' '+m); 980 alert('flickr api call failed\n'+c+' '+m);
968 } 981 }
969 982
970}; 983};