Ignore:
Timestamp:
08/10/12 16:34:08 (12 years ago)
Author:
acoutinho
Message:

Ticket #2966 - Correcao de bugs e refactoring das novas funcionalidades

Location:
sandbox/2.4.2-expresso1/prototype/modules/calendar
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/js/helpers.js

    r6989 r6990  
    10471047 
    10481048        /** 
    1049                                          * email válido? 
    1050                                          */ 
     1049        * email válido? 
     1050        */ 
    10511051        info.match(/^[\w!#$%&'*+\/=?^`{|}~-]+(\.[\w!#$%&'*+\/=?^`{|}~-]+)*@(([\w-]+\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/) ?  
    10521052        newAttendeeEmail = info : newAttendeeName = info; 
    10531053 
    10541054        /** 
    1055                                          * 1) busca no banco para saber se o usuário já existe 
    1056                                          *              1.1) se existe, atualiza as info na lista de participantes e nao abre o tooltip 
    1057                                          *              1.2) se não existe 
    1058                                          *                      a) salva como novo usuario externo no banco (apenas com email) 
    1059                                          *                      b) exibe tooltip pedindo o nome 
    1060                                          *                      c) se o usuário preenche tooltip e salva, atualiza com o nome o usuário recém criado 
    1061                                          *                      d) se o usuário cancela o tooltip, fica o usuário salvo apenas com email e sem nome 
    1062                                          */ 
     1055        * 1) busca no banco para saber se o usuário já existe 
     1056        *               1.1) se existe, atualiza as info na lista de participantes e nao abre o tooltip 
     1057        *               1.2) se não existe 
     1058        *                       a) salva como novo usuario externo no banco (apenas com email) 
     1059        *                       b) exibe tooltip pedindo o nome 
     1060        *                       c) se o usuário preenche tooltip e salva, atualiza com o nome o usuário recém criado 
     1061        *                       d) se o usuário cancela o tooltip, fica o usuário salvo apenas com email e sem nome 
     1062        */ 
    10631063 
    10641064        var user = DataLayer.get('user', ["=", "mail", $(this).val()]); 
     
    10691069                                         
    10701070        /** 
    1071                                          * guarda o último tooltip aberto referente à lista de participantes  
    1072                                          */ 
     1071        * guarda o último tooltip aberto referente à lista de participantes  
     1072        */ 
    10731073        lastEditAttendeeToolTip = []; 
    10741074 
    10751075        /** 
    1076                                          * Valida email e salva um participante externo  
    1077                                          */ 
     1076        * Valida email e salva um participante externo  
     1077        */ 
    10781078        var saveContact = function() { 
    10791079            Encoder.EncodeType = "entity"; 
     
    13421342 
    13431343/**  
    1344                         * Trata a busca de usuários para adição de participantes 
    1345                         */ 
     1344* Trata a busca de usuários para adição de participantes 
     1345*/ 
    13461346blkAddAtendee.find('.add-attendee-search .ui-icon-search').click(function(event) { 
    13471347    blkAddAtendee.find('.add-attendee-search input').keydown(); 
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/js/task.helpers.js

    r6981 r6990  
    562562        } 
    563563    }); 
     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    }); 
    564879 
    565880    blkAddAtendee.find('.add-attendee-search .ui-icon-search').click(function (task) { 
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/templates/attendees_task.ejs

    r6988 r6990  
    8484                            <span class="ui-icon ui-icon-close ui-corner-all ui-icon-float-right"></span> 
    8585                        </div> 
    86                         <%if(data.isOrganizer){%> 
     86                        <%if(data.task.isOrganizer){%> 
    8787                            <div class="attendee-options"> 
    8888                                <a class="button close new">Remover</a> 
     
    118118            </ul> 
    119119        </dd> 
    120         <dd class="attendee-list-add" <%= data.isOrganizer ? '' : 'disabled="disabled"'%>> 
     120        <dd class="attendee-list-add" <%= data.task.isOrganizer ? '' : 'disabled="disabled"'%>> 
    121121            <fieldset class="add-attendee-input input-field-rounded ui-corner-all"> 
    122                 <span class="ui-icon ui-icon-plus" <%= data.isOrganizer ? '' : 'disabled="disabled"'%>></span> 
    123                 <input class="plus" <%= data.isOrganizer ? '' : 'disabled="disabled"'%> type="text" /> 
     122                <span class="ui-icon ui-icon-plus" <%= data.task.isOrganizer ? '' : 'disabled="disabled"'%>></span> 
     123                <input class="plus" <%= data.task.isOrganizer ? '' : 'disabled="disabled"'%> type="text" /> 
    124124            </fieldset> 
    125125        </dd> 
     
    152152    </dl> 
    153153 
    154     <dl class="block-add-attendee search <%= data.isOrganizer ? '' : 'hidden'%>"> 
     154    <dl class="block-add-attendee search <%= data.task.isOrganizer ? '' : 'hidden'%>"> 
    155155    <dt class="add-attendee search">Adicionar outros convidados</dt> 
    156156    <dd class="add-attendee"> 
Note: See TracChangeset for help on using the changeset viewer.