- Timestamp:
- 08/10/12 16:34:08 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sandbox/2.4.2-expresso1/prototype/modules/calendar/js/task.helpers.js
r6981 r6990 562 562 } 563 563 }); 564 565 UI.dialogs.addTask.find(".attendee-list-add .add-attendee-input input").Watermark("digite um email para convidar"); 566 /* 567 * Trata a edição de um novo participante adicionado 568 */ 569 var hasNewAttendee = false; 570 571 blkAddAtendee.find('.attendee-list-add .add-attendee-input span').click(function(data){ 572 blkAddAtendee.find('.attendee-list-add .add-attendee-input input').keydown(); 573 }); 574 575 blkAddAtendee.find('.attendee-list-add .add-attendee-input input').keydown(function(event) { 576 if (event.keyCode == '13' && $(this).val() != '' || (event.keyCode == undefined && $(this).val() != '')) { 577 Encoder.EncodeType = "entity"; 578 $(this).val(Encoder.htmlEncode($(this).val())); 579 580 newAttendeeEmail = false; 581 newAttendeeName = false; 582 skipAddNewLine = false; 583 584 var info = $(this).val(); 585 586 /** 587 * email válido? 588 */ 589 info.match(/^[\w!#$%&'*+\/=?^`{|}~-]+(\.[\w!#$%&'*+\/=?^`{|}~-]+)*@(([\w-]+\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/) ? 590 newAttendeeEmail = info : newAttendeeName = info; 591 592 /** 593 * 1) busca no banco para saber se o usuário já existe 594 * 1.1) se existe, atualiza as info na lista de participantes e nao abre o tooltip 595 * 1.2) se não existe 596 * a) salva como novo usuario externo no banco (apenas com email) 597 * b) exibe tooltip pedindo o nome 598 * c) se o usuário preenche tooltip e salva, atualiza com o nome o usuário recém criado 599 * d) se o usuário cancela o tooltip, fica o usuário salvo apenas com email e sem nome 600 */ 601 602 var user = DataLayer.get('user', ["=", "mail", $(this).val()]); 603 if(!!user && user[0].id) 604 attendees[user[0].id] = { 605 name: user[0].name 606 }; 607 608 /** 609 * guarda o último tooltip aberto referente à lista de participantes 610 */ 611 lastEditAttendeeToolTip = []; 612 613 /** 614 * Valida email e salva um participante externo 615 */ 616 var saveContact = function() { 617 Encoder.EncodeType = "entity"; 618 619 var currentTip = $('.qtip-active'); 620 newAttendeeName = currentTip.find('input[name="name"]').val(); 621 newAttendeeEmail = currentTip.find('input[name="mail"]').val(); 622 623 if (!(!!newAttendeeEmail.match(/^[\w!#$%&'*+\/=?^`{|}~-]+(\.[\w!#$%&'*+\/=?^`{|}~-]+)*@(([\w-]+\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/))) { 624 currentTip.find('.messages').removeClass('hidden').find('.message label').html('Email inválido.'); 625 return false; 626 } 627 628 DataLayer.put('user', { 629 id:userId, 630 name:newAttendeeName, 631 mail:newAttendeeEmail, 632 isExternal:isExternal 633 }); 634 635 lastEditAttendeeToolTip.find('label') 636 .filter('.name').html(Encoder.htmlEncode(newAttendeeName)).attr('title', Encoder.htmlEncode(newAttendeeName)).end() 637 .filter('.mail').html(Encoder.htmlEncode(newAttendeeEmail)).attr('title', Encoder.htmlEncode(newAttendeeEmail)); 638 639 blkAddAtendee.find('.attendee-list-add .add-attendee-input input').val(''); 640 return true; 641 } 642 643 /** 644 * Formata e adequa um tootip abert para edição de um participante na lista 645 */ 646 var onShowToolTip = function(arg0) { 647 $('.qtip-active .button.close').button({ 648 icons: { 649 primary: "ui-icon-close" 650 }, 651 text: false 652 }); 653 $('.qtip-active .button').button() 654 .filter('.save').click(function(event, ui) { 655 if(saveContact()) 656 lastEditAttendeeToolTip.qtip("destroy"); 657 else 658 return false; 659 }).end() 660 .filter('.cancel').click(function(event, ui) { 661 lastEditAttendeeToolTip.qtip("destroy"); 662 }) 663 664 /** 665 * Trata o ENTER no campo da tooltip, equivalente a salvar 666 * o novo convidado. 667 */ 668 $('.qtip-active input').keydown(function(event) { 669 if (event.keyCode == '13') { 670 if (saveContact()) 671 lastEditAttendeeToolTip.qtip("destroy"); 672 673 lastEditAttendeeToolTip.qtip("destroy"); 674 event.preventDefault(); 675 } 676 }) 677 .filter('[name="name"]').Watermark("informe o nome do contato").end() 678 .filter('[name="mail"]').Watermark("informe o email do contato"); 679 } 680 681 /** 682 * Se o email digitado já foi adicionado na lista, 683 * o usuário deve ser avisado e um botão de edição deve ser exibido 684 */ 685 if(blkAddAtendee.find('label.mail[title="' + newAttendeeEmail + '"]').length) { 686 hasNewAttendee = false; 687 newAttendeeName = blkAddAtendee.find('label.mail[title="' + newAttendeeEmail + '"]').parents('li').find('label.name').attr('title'); 688 689 blkAddAtendee.find('.email-validation').removeClass('hidden') 690 .find('.message label').html("O usuário acima já foi adicionado! <a class=\"small button\">Editar</a>") 691 .find(".button").button().click(function () { 692 /** 693 * Se o usuário optar por editar o participante anteriormente adicionado, 694 * uma tooltip deve ser aberta para este participante, viabilizando a edição 695 */ 696 blkAddAtendee.find("ul.attendee-list").scrollTo('label.mail[title="' + newAttendeeEmail + '"]'); 697 /** 698 * Remove tooltip possivelmente existente 699 */ 700 if (lastEditAttendeeToolTip.length && lastEditAttendeeToolTip.data('qtip')) 701 lastEditAttendeeToolTip.qtip('destroy'); 702 703 lastEditAttendeeToolTip = blkAddAtendee.find('label.mail[title="' + newAttendeeEmail + '"]').parents('li'); 704 lastEditAttendeeToolTip.qtip({ 705 show: { 706 ready: true, 707 solo: true, 708 when: { 709 event: 'click' 710 } 711 }, 712 hide: false, 713 content: { 714 text: $('<div></div>').html( DataLayer.render( path+'templates/attendee_quick_edit.ejs', { 715 attendee:{ 716 name:newAttendeeName, 717 mail:newAttendeeEmail 718 } 719 } ) ), 720 title: { 721 text:'Detalhes do participante', 722 button: '<a class="button close" href="#">close</a>' 723 } 724 }, 725 style: { 726 name: 'blue', 727 tip: { 728 corner: 'leftMiddle' 729 }, 730 border: { 731 width: 4, 732 radius: 8 733 }, 734 width: { 735 min: 230, 736 max:230 737 } 738 }, 739 position: { 740 corner: { 741 target: 'rightMiddle', 742 tooltip: 'leftMiddle' 743 }, 744 adjust: { 745 x:0, 746 y:0 747 } 748 } 749 }); 750 lastEditAttendeeToolTip.qtip("api").onShow = onShowToolTip; 751 }); 752 skipAddNewLine = true; 753 } else { 754 hasNewAttendee = true; 755 blkAddAtendee.find('.email-validation').addClass('hidden'); 756 } 757 758 759 var isExternal = (!!user && !(!!user.isExternal)) ? 0 : 1; 760 761 /** 762 * Remove tooltip possivelmente existente 763 */ 764 if (lastEditAttendeeToolTip.length && lastEditAttendeeToolTip.data('qtip')) 765 lastEditAttendeeToolTip.qtip('destroy'); 766 767 userId = ''; 768 var newAttendeeId = ''; 769 770 if (user){ 771 if (!skipAddNewLine) { 772 user[0].id = DataLayer.put('participant', { 773 user: user[0].id, 774 isExternal: isExternal, 775 acl: 'r' 776 }); 777 user[0].acl = 'r'; 778 user[0].isDirty = !!!objTask.id; 779 780 blkAddAtendee.find('dd.attendee-list ul.attendee-list').append( 781 DataLayer.render(path+'templates/participants_add_itemlist.ejs', user) 782 ) 783 .scrollTo('max'); 784 callbackAttendee(); 785 } 786 787 $(this).val(''); 788 789 } else if (!skipAddNewLine) { 790 /** 791 * a) salva como novo usuario externo no banco (apenas com email) e... 792 * adiciona novo contato externo à lista de convidados 793 */ 794 795 userId = DataLayer.put('user', { 796 name: newAttendeeName, 797 mail: newAttendeeEmail, 798 isExternal: isExternal 799 }); 800 newAttendeeId = DataLayer.put('participant', { 801 user: userId, 802 isExternal: isExternal 803 }); 804 805 806 blkAddAtendee.find('dd.attendee-list ul.attendee-list').append( 807 DataLayer.render(path+'templates/participants_add_itemlist.ejs', [{ 808 id:newAttendeeId, 809 name: newAttendeeName, 810 mail: newAttendeeEmail, 811 isExternal: 1, 812 isDirty: !!!objTask.id 813 }]) 814 ).scrollTo('max'); 815 callbackAttendee(); 816 817 /** 818 * Adiciona tootip para atualização dos dados do contato externo 819 * recém adicionado. 820 */ 821 lastEditAttendeeToolTip = blkAddAtendee.find('dd.attendee-list li:last'); 822 lastEditAttendeeToolTip.qtip({ 823 show: { 824 ready: true, 825 solo: true, 826 when: { 827 event: 'click' 828 } 829 }, 830 hide: false, 831 content: { 832 text: $('<div></div>').html( DataLayer.render( path+'templates/attendee_quick_edit.ejs', { 833 attendee:{ 834 name:newAttendeeName, 835 mail:newAttendeeEmail 836 } 837 } ) ), 838 title: { 839 text:'Detalhes do participante', 840 button: '<a class="button close" href="#">close</a>' 841 } 842 }, 843 style: { 844 name: 'blue', 845 tip: { 846 corner: 'leftMiddle' 847 }, 848 border: { 849 width: 4, 850 radius: 8 851 }, 852 width: { 853 min: 230, 854 max:230 855 } 856 }, 857 position: { 858 corner: { 859 target: 'rightMiddle', 860 tooltip: 'leftMiddle' 861 }, 862 adjust: { 863 x:0, 864 y:0 865 } 866 } 867 }); 868 869 lastEditAttendeeToolTip.qtip("api").onShow = onShowToolTip; 870 871 $(this).val(''); 872 873 874 } 875 event.preventDefault(); 876 } 877 878 }); 564 879 565 880 blkAddAtendee.find('.add-attendee-search .ui-icon-search').click(function (task) {
Note: See TracChangeset
for help on using the changeset viewer.