summaryrefslogtreecommitdiffabout
path: root/content/fireflix.js
Unidiff
Diffstat (limited to 'content/fireflix.js') (more/less context) (ignore whitespace changes)
-rw-r--r--content/fireflix.js53
1 files changed, 37 insertions, 16 deletions
diff --git a/content/fireflix.js b/content/fireflix.js
index 7291b68..78e56c2 100644
--- a/content/fireflix.js
+++ b/content/fireflix.js
@@ -311,51 +311,64 @@ var fireflix = {
311 // is it ascii or could it be utf8? 311 // is it ascii or could it be utf8?
312 this.drop_urilist(ev,splitascii(d.data),s); 312 this.drop_urilist(ev,splitascii(d.data),s);
313 break; 313 break;
314 default: alert(d.flavour.contentType+':'+d.data); break; 314 default: alert(d.flavour.contentType+':'+d.data); break;
315 }; 315 };
316 }, 316 },
317 drop_urilist: function(ev,ul,s) { 317 drop_urilist: function(ev,ul,s) {
318 // TODO: check for being a file? 318 // TODO: check for being a file?
319 var us = decodeURIComponent(ul).split(/[\r\n]/); 319 var us = decodeURIComponent(ul).split(/[\r\n]/);
320 for(var ui in us) 320 for(var ui in us)
321 if(/\S/.test(us[ui])) 321 if(/\S/.test(us[ui]))
322 this.fireflix.uploads.add(us[ui]); 322 this.fireflix.uploads.add(us[ui]);
323 document.getElementById('fireflix_tabs').selectedTab 323 document.getElementById('fireflix_tabs').selectedTab
324 = document.getElementById('tab_upload'); 324 = document.getElementById('tab_upload');
325 } 325 }
326 }, 326 },
327 327
328 uploads: { 328 uploads: {
329 fireflix: null, 329 fireflix: null,
330 init: function(f) { 330 init: function(f) {
331 this.fireflix=f; 331 this.fireflix=f;
332 pull_elements(this,document,[ 332 pull_elements(this,document,[
333 'upload_filename','upload_title','upload_file_preview', 333 'upload_filename','upload_title','upload_file_preview',
334 'upload_file_props','upload_progress','upload_tags', 334 'upload_file_props','upload_progress','upload_tags',
335 'cmd_uploads_upload', 'upload_failure' 335 'cmd_uploads_upload', 'upload_failure', 'upload_is_public',
336 'upload_is_friends', 'upload_is_family'
336 ]); 337 ]);
337 document.getElementById('uploadlist').view = this; 338 document.getElementById('uploadlist').view = this;
339 this.upload_is_public.addEventListener(
340 'CheckboxStateChange', { that: this,
341 handleEvent: function(ev) { this.that.propsToSel('is_public'); }
342 }, false );
343 this.upload_is_friends.addEventListener(
344 'CheckboxStateChange', { that: this,
345 handleEvent: function(ev) { this.that.propsToSel('is_friends'); }
346 }, false );
347 this.upload_is_family.addEventListener(
348 'CheckboxStateChange', { that: this,
349 handleEvent: function(ev) { this.that.propsToSel('is_family'); }
350 }, false );
338 }, 351 },
339 files: new Array(), 352 files: new Array(),
340 rowCount: 0, 353 rowCount: 0,
341 getCellText: function(r,c) { 354 getCellText: function(r,c) {
342 var f = this.files[r]; 355 var f = this.files[r];
343 if(c.id=='up_file') return f.file; 356 if(c.id=='up_file') return f.file;
344 if(c.id=='up_title') return f.title; 357 if(c.id=='up_title') return f.title;
345 if(c.id=='up_status') return f.state; 358 if(c.id=='up_status') return f.state;
346 return c.id; 359 return c.id;
347 }, 360 },
348 setTree: function(t) { this.tree = t }, 361 setTree: function(t) { this.tree = t },
349 isContainer: function(r) { return false; }, 362 isContainer: function(r) { return false; },
350 isSeparator: function(r) { return false; }, 363 isSeparator: function(r) { return false; },
351 isSorted: function(r) { return false; }, 364 isSorted: function(r) { return false; },
352 getLevel: function(r) { return 0; }, 365 getLevel: function(r) { return 0; },
353 getImageSrc: function(r,c) { return null }, 366 getImageSrc: function(r,c) { return null },
354 getRowProperties: function(r,p) { 367 getRowProperties: function(r,p) {
355 try { 368 try {
356 if(!Components) return; 369 if(!Components) return;
357 }catch(e) { return } 370 }catch(e) { return }
358 var f = this.files[r]; 371 var f = this.files[r];
359 var as = Components.classes['@mozilla.org/atom-service;1']. 372 var as = Components.classes['@mozilla.org/atom-service;1'].
360 getService(Components.interfaces.nsIAtomService); 373 getService(Components.interfaces.nsIAtomService);
361 p.AppendElement(as.getAtom(f.state)); 374 p.AppendElement(as.getAtom(f.state));
@@ -364,65 +377,70 @@ var fireflix = {
364 getColumnProperties: function(c,p) { }, 377 getColumnProperties: function(c,p) { },
365 cycleHeader: function(cid,e) { }, 378 cycleHeader: function(cid,e) { },
366 getParentIndex: function(r) { return -1; }, 379 getParentIndex: function(r) { return -1; },
367 drop: function(r,o) { }, 380 drop: function(r,o) { },
368 canDropBeforeAfter: function(r,b) { return false }, 381 canDropBeforeAfter: function(r,b) { return false },
369 382
370 add: function(f) { 383 add: function(f) {
371 if(f.indexOf('file:/')==0) { 384 if(f.indexOf('file:/')==0) {
372 f = f.substr(5); 385 f = f.substr(5);
373 while(f.substr(0,2)=='//') { // XXX: not very performant, is it? ;-) 386 while(f.substr(0,2)=='//') { // XXX: not very performant, is it? ;-)
374 f = f.substr(1); 387 f = f.substr(1);
375 } 388 }
376 } 389 }
377 var t = f; 390 var t = f;
378 var ls = t.lastIndexOf('/'); 391 var ls = t.lastIndexOf('/');
379 if(ls>0) t = t.substr(ls+1); 392 if(ls>0) t = t.substr(ls+1);
380 ls = t.lastIndexOf('\\'); 393 ls = t.lastIndexOf('\\');
381 if(ls>0) t = t.substr(ls+1); 394 if(ls>0) t = t.substr(ls+1);
382 var ld = t.lastIndexOf('.'); 395 var ld = t.lastIndexOf('.');
383 if(ld>0) t = t.substr(0,ld); 396 if(ld>0) t = t.substr(0,ld);
384 this.files.push( { 397 this.files.push( {
385 file: f, 398 file: f,
386 title: t, 399 title: t,
387 tags: '', 400 tags: '',
401 is_public: true, is_friend: false, is_family: false,
388 state: 'pending' 402 state: 'pending'
389 } ); 403 } );
390 this.rowCount = this.files.length; 404 this.rowCount = this.files.length;
391 this.tree.rowCountChanged(this.rowCount-1,1); 405 this.tree.rowCountChanged(this.rowCount-1,1);
392 }, 406 },
393 407
394 upload_worker: function() { 408 upload_worker: function() {
395 for(var f in this.files) { 409 for(var f in this.files) {
396 if(this.files[f].state=='pending') { 410 if(this.files[f].state=='pending') {
397 var ff = this.files[f]; 411 var ff = this.files[f];
398 this.on_file_upload(ff); 412 this.on_file_upload(ff);
399 ff.state='uploading'; 413 ff.state='uploading';
400 this.tree.invalidate(); 414 this.tree.invalidate();
401 var _this = this; 415 var _this = this;
402 this.fireflix.flickr.upload_file( 416 this.fireflix.flickr.upload_file(
403 ff.file, { title: ff.title, tags: ff.tags }, 417 ff.file, {
404 function(x,p) { 418 title: ff.title, tags: ff.tags,
419 is_public: ff.is_public?'1':'0',
420 is_friend: ff.is_friend?'1':'0',
421 is_family: ff.is_family?'1':'0'
422 }, function(x,p) {
405 ff.photoid = p; 423 ff.photoid = p;
406 _this.batch_ids.push(p); 424 _this.batch_ids.push(p);
407 ff.state='completed'; 425 ff.state='completed';
408 _this.tree.invalidate(); 426 _this.tree.invalidate();
409 window.setTimeout(_this.upload_to,0,_this); 427 window.setTimeout(_this.upload_to,0,_this);
410 }, function(x,s,c,m) { 428 }, function(x,s,c,m) {
411 ff.state='failed'; 429 ff.state='failed';
412 ff.flickr_errcode = c; 430 ff.flickr_errcode = c;
413 ff.flickr_errmsg = m; 431 ff.flickr_errmsg = m;
414 _this.tree.invalidate(); 432 _this.tree.invalidate();
415 window.setTimeout(_this.upload_to,0,_this); 433 window.setTimeout(_this.upload_to,0,_this);
416 } 434 }
417 ); 435 );
418 return; 436 return;
419 } 437 }
420 } 438 }
421 this.on_finish_upload(); 439 this.on_finish_upload();
422 }, 440 },
423 upload_to: function(_this) { _this.upload_worker(); }, 441 upload_to: function(_this) { _this.upload_worker(); },
424 on_file_upload: function(f) { 442 on_file_upload: function(f) {
425 this.cmd_uploads_upload.setAttribute('disabled','true'); 443 this.cmd_uploads_upload.setAttribute('disabled','true');
426 for(var fi in this.files) { 444 for(var fi in this.files) {
427 if(this.files[fi].file==f.file) { 445 if(this.files[fi].file==f.file) {
428 this.tree.ensureRowIsVisible(fi); 446 this.tree.ensureRowIsVisible(fi);
@@ -470,122 +488,125 @@ var fireflix = {
470 } 488 }
471 this.selection.clearSelection(); 489 this.selection.clearSelection();
472 this.cmd_uploads_upload.setAttribute('disabled','false'); 490 this.cmd_uploads_upload.setAttribute('disabled','false');
473 this.upload_progress.setAttribute('hidden','true'); 491 this.upload_progress.setAttribute('hidden','true');
474 }, 492 },
475 493
476 clear_list: function() { 494 clear_list: function() {
477 this.tree.beginUpdateBatch(); 495 this.tree.beginUpdateBatch();
478 this.rowCount = 0; 496 this.rowCount = 0;
479 this.files = new Array(); 497 this.files = new Array();
480 this.tree.endUpdateBatch(); 498 this.tree.endUpdateBatch();
481 this.selToProps(); 499 this.selToProps();
482 }, 500 },
483 selectionChanged: function() { 501 selectionChanged: function() {
484 this.selToProps(); 502 this.selToProps();
485 }, 503 },
486 disableProps: function() { 504 disableProps: function() {
487 this.upload_filename.value=''; 505 this.upload_filename.value='';
488 this.upload_filename.disabled = true; 506 this.upload_filename.disabled = true;
489 this.upload_title.value=''; 507 this.upload_title.value='';
490 this.upload_title.disabled = true; 508 this.upload_title.disabled = true;
491 this.upload_file_preview.src = null; 509 this.upload_file_preview.src = null;
492 this.upload_tags.value=''; 510 this.upload_tags.value='';
493 this.upload_tags.disabled = true; 511 this.upload_tags.disabled = true;
512 this.upload_is_public.disabled = true;
513 this.upload_is_friends.disabled = true;
514 this.upload_is_family.disabled = true;
494 /* this.upload_file_props.hidden = true; */ 515 /* this.upload_file_props.hidden = true; */
495 }, 516 },
496 selToProps: function() { 517 selToProps: function() {
497 if(!this.selection.count) { 518 if(!this.selection.count) {
498 this.disableProps(); 519 this.disableProps();
499 this.upload_file_props.hidden = true; 520 this.upload_file_props.hidden = true;
500 }else if(this.selection.count==1) { 521 }else if(this.selection.count==1) {
501 var f=this.files[this.selection.currentIndex]; 522 var f=this.files[this.selection.currentIndex];
502 if(f==null) { 523 if(f==null) {
503 this.disableProps(); 524 this.disableProps();
504 this.upload_file_props.hidden = true; 525 this.upload_file_props.hidden = true;
505 }else{ 526 }else{
506 var inactives = f.state!='pending'; 527 var inactives = f.state!='pending';
507 this.upload_filename.value = f.file; 528 this.upload_filename.value = f.file; this.upload_filename.disabled = inactives;
508 this.upload_filename.disabled = inactives; 529 this.upload_title.value = f.title; this.upload_title.disabled = inactives;
509 this.upload_title.value = f.title;
510 this.upload_title.disabled = inactives;
511 this.upload_file_preview.src = 'file:///'+f.file; 530 this.upload_file_preview.src = 'file:///'+f.file;
512 this.upload_tags.value = f.tags; 531 this.upload_tags.value = f.tags; this.upload_tags.disabled = inactives;
513 this.upload_tags.disabled = inactives; 532 this.upload_is_public.checked = f.is_public; this.upload_is_public.disabled = inactives;
533 this.upload_is_friends.checked = f.is_friend; this.upload_is_friends.disabled = inactives;
534 this.upload_is_family.checked = f.is_family; this.upload_is_family.disabled = inactives;
514 if(f.state=='failed') { 535 if(f.state=='failed') {
515 this.upload_failure.textContent=f.flickr_errcode+': '+f.flickr_errmsg; 536 this.upload_failure.textContent=((f.flickr_errcode<0)?'':f.flickr_errcode+': ')+f.flickr_errmsg;
516 this.upload_failure.hidden = false; 537 this.upload_failure.hidden = false;
517 }else{ 538 }else{
518 this.upload_failure.hidden = true; 539 this.upload_failure.hidden = true;
519 } 540 }
520 this.upload_file_props.hidden = false; 541 this.upload_file_props.hidden = false;
521 } 542 }
522 }else{ 543 }else{
523 var ftitle = null; var onetitle = true; 544 var ftitle = null; var onetitle = true;
524 var ftags = null; var onetag = true; 545 var ftags = null; var onetag = true;
525 var fs = 0; 546 var fs = 0;
526 for(var ff in this.files) { 547 for(var ff in this.files) {
527 if(this.selection.isSelected(ff) && this.files[ff].state=='pending' ) { 548 if(this.selection.isSelected(ff) && this.files[ff].state=='pending' ) {
528 ++fs; 549 ++fs;
529 if(ftitle==null) { 550 if(ftitle==null) {
530 ftitle = this.files[ff].title; 551 ftitle = this.files[ff].title;
531 }else if(ftitle!=this.files[ff].title) { 552 }else if(ftitle!=this.files[ff].title) {
532 onetitle = false; 553 onetitle = false;
533 } 554 }
534 if(ftags==null) { 555 if(ftags==null) {
535 ftags = this.files[ff].tags; 556 ftags = this.files[ff].tags;
536 }else if(ftags!=this.files[ff].tags) { 557 }else if(ftags!=this.files[ff].tags) {
537 onetag = false; 558 onetag = false;
538 } 559 }
539 } 560 }
540 } 561 }
541 if(fs) { 562 if(fs) {
542 this.upload_filename.value=''; 563 this.upload_filename.value='';
543 this.upload_filename.disabled = true; 564 this.upload_filename.disabled = true;
544 if(onetitle) 565 if(onetitle)
545 this.upload_title.value = ftitle; 566 this.upload_title.value = ftitle;
546 this.upload_title.disabled = false; 567 this.upload_title.disabled = false;
547 if(onetag) 568 if(onetag)
548 this.upload_tags.value = ftags; 569 this.upload_tags.value = ftags;
549 this.upload_tags.disabled = false; 570 this.upload_tags.disabled = false;
550 this.upload_file_preview.src = null; 571 this.upload_file_preview.src = null;
551 this.upload_failure.hidden = true; 572 this.upload_failure.hidden = true;
552 this.upload_file_props.hidden = false; 573 this.upload_file_props.hidden = false;
553 }else 574 }else
554 this.disableProps(); 575 this.disableProps();
555 this.upload_file_props.hidden = true; 576 this.upload_file_props.hidden = true;
556 } 577 }
557 }, 578 },
558 propsToSel: function(prop) { 579 propsToSel: function(prop) {
559 if(this.selection.count<=0) return; 580 if(this.selection.count<=0) return;
560 for(var ff in this.files) { 581 for(var ff in this.files) {
561 if(this.selection.isSelected(ff) && this.files[ff].state=='pending') { 582 if(this.selection.isSelected(ff) && this.files[ff].state=='pending') {
562 if(prop=='filename') 583 if(prop=='filename') this.files[ff].file = this.upload_filename.value;
563 this.files[ff].file = this.upload_filename.value; 584 if(prop=='title') this.files[ff].title = this.upload_title.value;
564 if(prop=='title') 585 if(prop=='tags') this.files[ff].tags = this.upload_tags.value;
565 this.files[ff].title = this.upload_title.value; 586 if(prop=='is_public') this.files[ff].is_public = this.upload_is_public.checked;
566 if(prop=='tags') 587 if(prop=='is_friends') this.files[ff].is_friend = this.upload_is_friends.checked;
567 this.files[ff].tags = this.upload_tags.value; 588 if(prop=='is_family') this.files[ff].is_family = this.upload_is_family.checked;
568 this.tree.invalidateRow(ff); 589 this.tree.invalidateRow(ff);
569 } 590 }
570 } 591 }
571 }, 592 },
572 593
573 on_upload: function() { 594 on_upload: function() {
574 this.selToProps(); 595 this.selToProps();
575 this.batch_ids = new Array(); 596 this.batch_ids = new Array();
576 this.upload_progress.value=0; 597 this.upload_progress.value=0;
577 this.upload_progress.setAttribute('hidden','false'); 598 this.upload_progress.setAttribute('hidden','false');
578 this.upload_worker(); 599 this.upload_worker();
579 }, 600 },
580 on_clear: function() { 601 on_clear: function() {
581 this.clear_list(); 602 this.clear_list();
582 }, 603 },
583 on_remove: function() { 604 on_remove: function() {
584 if(this.selection.count) { 605 if(this.selection.count) {
585 this.tree.beginUpdateBatch(); 606 this.tree.beginUpdateBatch();
586 for(var i=this.files.length-1;i>=0;--i) { 607 for(var i=this.files.length-1;i>=0;--i) {
587 if(this.selection.isSelected(i)) { 608 if(this.selection.isSelected(i)) {
588 this.files.splice(i,1); 609 this.files.splice(i,1);
589 this.rowCount--; 610 this.rowCount--;
590 } 611 }
591 } 612 }