Changeset 7288 for branches/2.4
- Timestamp:
- 09/24/12 16:53:52 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2.4/expressoMail1_2/js/main.js
r7281 r7288 20 20 DataLayer.get("folder", true); 21 21 22 //Os IE's < 9 n ão possui suporte a trim() introduzida no JavaScript 1.8.122 //Os IE's < 9 não possui suporte a trim() introduzida no JavaScript 1.8.1 23 23 if(!String.prototype.trim){ 24 24 String.prototype.trim = function(){ … … 33 33 function updateDynamicContact(){ 34 34 dynamicContacts = new Array(); 35 var dynamicData = REST.get("/dynamiccontacts").collection.itens; 36 if(dynamicData){ 37 $.each(dynamicData, function(index, value){ 35 36 var dynamicUsers = REST.get("/dynamiccontacts"); 37 38 if(dynamicUsers.collection && !dynamicUsers.collection.error){ 39 var dynamicData = normalizeContacts(dynamicUsers.collection.itens) 40 41 $.each(dynamicData, function(index, value){ 38 42 if(index ==0){ 39 topContact = parseInt(value .data[2].value);43 topContact = parseInt(value['number_of_messages']); 40 44 } 41 45 var dynamic = { 42 name : value. data[0].value,43 mail : value.data[1].value, 44 value: value.data[0].value + " - " + value.data[1].value,46 name : value.name, 47 mail : value.mail, 48 value: value.name + " - " + value.mail, 45 49 type: "", 46 id: parseInt(value.data[3].value),47 qtd : parseInt(value.data[2].value) 50 id: value.id, 51 qtd : value['number_of_messages'] 48 52 }; 49 53 dynamicContacts.push(dynamic); … … 55 59 function updateDynamicPersonalContacts(){ 56 60 dynamicPersonalContacts = new Array(); 57 var contactsData = normalizeContacts(REST.get("/personalContact").collection.itens); 58 if(contactsData){ 59 $.each(contactsData, function(index, value){ 60 var contact = { 61 id : parseInt(value.id), 62 name : value.name, 63 email: value.email, 64 value: value.name+ " - " + value.email, 65 type: "P" 66 }; 67 dynamicPersonalContacts.push(contact); 68 }); 69 } 61 62 var personalContacts = REST.get("/personalContact"); 63 64 if(personalContacts.collection && !personalContacts.collection.error){ 65 var contactsData = normalizeContacts(personalContacts.collection.itens); 66 if(contactsData){ 67 $.each(contactsData, function(index, value){ 68 var contact = { 69 id : parseInt(value.id), 70 name : value.name, 71 email: value.email, 72 value: value.name+ " - " + value.email, 73 type: "P" 74 }; 75 dynamicPersonalContacts.push(contact); 76 }); 77 } 78 } 70 79 } 71 80 … … 73 82 function updateDynamicPersonalGroups(){ 74 83 dynamicPersonalGroups = new Array(); 75 var contactsData = normalizeContacts(REST.get("/groups").collection.itens); 76 if(contactsData){ 77 $.each(contactsData, function(index, value){ 78 var contact = { 79 id : parseInt(value.id), 80 owner : value.owner, 81 name : value.name, 82 email: value.email, 83 type: "G" 84 }; 85 dynamicPersonalGroups.push(contact); 86 }); 87 } 84 85 var groups = REST.get("/groups"); 86 87 if(groups.collection && !groups.collection.error){ 88 var contactsData = normalizeContacts(groups.collection.itens); 89 if(contactsData.collecion && !contactsData.collecion.error){ 90 $.each(contactsData, function(index, value){ 91 var contact = { 92 id : parseInt(value.id), 93 owner : value.owner, 94 name : value.name, 95 email: value.email, 96 type: "G" 97 }; 98 dynamicPersonalGroups.push(contact); 99 }); 100 } 101 } 88 102 } 89 103 … … 123 137 } 124 138 } 125 if (preferences.use_local_messages==1) { //O I.E 7 estava se atrapalhando caso esses loads fossem feitos ap ós as chamadas ajax. Antes não apresentou problemas...139 if (preferences.use_local_messages==1) { //O I.E 7 estava se atrapalhando caso esses loads fossem feitos após as chamadas ajax. Antes não apresentou problemas... 126 140 connector.loadScript('mail_sync'); 127 141 setTimeout('auto_archiving()', 30000); … … 154 168 } 155 169 }); 156 //Substituido por padr ão Jquery170 //Substituido por padrão Jquery 157 171 cExecute ("$this.imap_functions.get_range_msgs2&folder=INBOX&msg_range_begin=1&msg_range_end="+preferences.max_email_per_page+"&sort_box_type=SORTARRIVAL&search_box_type=ALL&sort_box_reverse=1", handler_draw_box); 158 172 //cExecute ("$this.db_functions.get_dropdown_contacts", save_contacts); //Save contacts needs preferences. … … 166 180 // 167 181 168 //Troca da forma de constru ção de menu para o plugin jquery.contextMenu182 //Troca da forma de construção de menu para o plugin jquery.contextMenu 169 183 //ConstructMenuTools(); 170 184 171 if ( (preferences.use_local_messages==1) && (expresso_local_messages.is_offline_installed()) ) //Precisa ser feito ap ós a renderização da caixa de emails185 if ( (preferences.use_local_messages==1) && (expresso_local_messages.is_offline_installed()) ) //Precisa ser feito após a renderização da caixa de emails 172 186 check_mail_in_queue(); 173 187 … … 176 190 loadApplet(); 177 191 } 178 // Fim da inser ção da applet192 // Fim da inserção da applet 179 193 DataLayer.get("folder", true); 180 194 cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); … … 246 260 } 247 261 248 // Vers ão262 // Versão 249 263 Element('divAppboxHeader').innerHTML = title_app; 250 264 … … 276 290 '<td style="padding-left:17px" width=33% id="content_quota" align=left></td>' + 277 291 '<td width=33% height=16px align=center nowrap><font face=Verdana, Arial, Helvetica, sans-serif color=#000066 size=2>' + 278 '<b>ExpressoMail Offline</b><font size=1><b> - Vers ão 1.0</b></font></td>' +292 '<b>ExpressoMail Offline</b><font size=1><b> - Versão 1.0</b></font></td>' + 279 293 '<td width=33% id="div_menu_c3" align=right></td>' + 280 294 '</tr></table>'; 281 295 282 //Troca da forma de constru ção de menu para o plugin jquery.contextMenu296 //Troca da forma de construção de menu para o plugin jquery.contextMenu 283 297 //ConstructMenuTools(); 284 298 … … 298 312 /** 299 313 * Carrega a applet java no objeto search_div 300 * @author M ário César Kolling <mario.kolling@serpro.gov.br>314 * @author Mário César Kolling <mario.kolling@serpro.gov.br> 301 315 */ 302 316 … … 366 380 } 367 381 /* 368 fun ção que remove todos os anexos...382 função que remove todos os anexos... 369 383 */ 370 384 function remove_all_attachments(folder,msg_num) { … … 481 495 // Verifica se existe o objeto applet 482 496 if (!Element('cert_applet')){ 483 // se n ão existir, mostra mensagem de erro.497 // se não existir, mostra mensagem de erro. 484 498 write_msg(get_lang('The preference "%1" isn\'t enabled.', get_lang('Enable digitally sign/cipher the message?'))); 485 499 } else { 486 500 // se existir prepara os dados para serem enviados e chama a 487 // opera ção na applet501 // operação na applet 488 502 489 503 // if ((msg_info.DispositionNotificationTo) && ((msg_info.Unseen == 'U') || (msg_info.Recent == 'N'))){ … … 520 534 var id_msg_read = ID+"_r_"+folderName; 521 535 522 //Evita a tentativa de cria ção de uma aba cujo ID jáexiste536 //Evita a tentativa de criação de uma aba cujo ID já existe 523 537 if (Element("border_id_"+id_msg_read) && currentTab > 0) 524 538 id_msg_read += "n"; … … 585 599 586 600 if (confNotification) { 587 /* Adequa ção a nova funcionalidade. Agora, a confirmação de leitura é uma preferência do usuário. */601 /* Adequação a nova funcionalidade. Agora, a confirmação de leitura é uma preferência do usuário. */ 588 602 if(preferences.confirm_read_message) { 589 603 $.Zebra_Dialog(get_lang("Would you like to send the read receipt?"), { … … 657 671 658 672 } 659 /* Busca nas pastas indexadas para ver se h ánovas mensagens com a flag $FilteredMessage */673 /* Busca nas pastas indexadas para ver se há novas mensagens com a flag $FilteredMessage */ 660 674 cExecute ("$this.imap_functions.getFlaggedAlertMessages&folders="+fromRules, handlerMessageFilter); 661 675 … … 901 915 function delete_msgs(folder, msgs_number, border_ID, show_success_msg,archive){ 902 916 if( preferences.use_local_messages == 1 && expresso_local_messages.isArchiving( msgs_number, folder ) ){ 903 alert( "Impossivel deletar mensagens que est ão ainda estão sendo arquivadas." );917 alert( "Impossivel deletar mensagens que estão ainda estão sendo arquivadas." ); 904 918 return; 905 919 } … … 914 928 var arrayFolder = folder.split(cyrus_delimiter); 915 929 userTrashFolder = 'user'+cyrus_delimiter+arrayFolder[1]+cyrus_delimiter+special_folders['Trash']; 916 /** TODO Mudar quando melhorias forem implementadas na API de atualiza ção do cache */930 /** TODO Mudar quando melhorias forem implementadas na API de atualização do cache */ 917 931 DataLayer.remove('folder', false); 918 932 DataLayer.get('folder'); … … 1041 1055 1042 1056 if( preferences.use_local_messages == 1 && expresso_local_messages.isArchiving( selected_messages, folder ) ){ 1043 alert( "Impossivel mover mensagens que est ão ainda estão sendo arquivadas." );1057 alert( "Impossivel mover mensagens que estão ainda estão sendo arquivadas." ); 1044 1058 return; 1045 1059 } … … 1190 1204 var folder_error = new_folder_name; 1191 1205 if( preferences.use_local_messages == 1 && expresso_local_messages.isArchiving( msgs_number, folder ) ){ 1192 alert( "Impossivel mover mensagens que est ão ainda estão sendo arquivadas." );1206 alert( "Impossivel mover mensagens que estão ainda estão sendo arquivadas." ); 1193 1207 return; 1194 1208 } … … 1254 1268 } 1255 1269 } 1256 //se houver pagina anterior a pagina ção deve ser refeita1270 //se houver pagina anterior a paginação deve ser refeita 1257 1271 else if (current_page > 1){ 1258 1272 $('#msg_opt_previous_'+msg_to_delete.getAttribute('id') + '_r').trigger('click'); … … 1298 1312 if ( preferences.use_shortcuts == '1') { 1299 1313 var all_messages = Element('tbody_box').childNodes; 1300 // verificar se a msg selecionada com o checkbox éa mesma selecionada com o shortcut1314 // verificar se a msg selecionada com o checkbox é a mesma selecionada com o shortcut 1301 1315 var msg_list_shortcut = get_selected_messages_shortcut().split(','); 1302 1316 if(data.msgs_number.length > 0 && msg_list_shortcut.length > 0 && data.msgs_number.toString() == msg_list_shortcut.toString()){ … … 1359 1373 } 1360 1374 1361 // se a aba estiver aberta e selecionada, apenas a msg da aba émovida1375 // se a aba estiver aberta e selecionada, apenas a msg da aba é movida 1362 1376 if(currentTab.toString().indexOf("_r") != -1) 1363 1377 { … … 1435 1449 1436 1450 1437 // se a aba estiver aberta e selecionada, apenas a msg da aba émovida1451 // se a aba estiver aberta e selecionada, apenas a msg da aba é movida 1438 1452 if(currentTab.toString().indexOf("_r") != -1) 1439 1453 { … … 1471 1485 1472 1486 if( !id_msgs ){ 1473 write_msg( "Todas as mensagens j áforam arquivadas anteriormente." );1487 write_msg( "Todas as mensagens já foram arquivadas anteriormente." ); 1474 1488 return; 1475 1489 } … … 1484 1498 msgs_info[i] = connector.unserialize( data[i] ); 1485 1499 1486 //vejo se j átinha mensagens locais1500 //vejo se já tinha mensagens locais 1487 1501 var h = expresso_local_messages.has_local_mails(); 1488 1502 … … 1550 1564 1551 1565 if( !id_msgs ){ 1552 write_msg( "Todas as mensagens j áforam arquivadas anteriormente." );1566 write_msg( "Todas as mensagens já foram arquivadas anteriormente." ); 1553 1567 return; 1554 1568 } … … 1563 1577 msgs_info[i] = connector.unserialize( data[i] ); 1564 1578 1565 //vejo se j átinha mensagens locais1579 //vejo se já tinha mensagens locais 1566 1580 var h = expresso_local_messages.has_local_mails(); 1567 1581 … … 1782 1796 1783 1797 1784 /* Verifica se est ána tela de pesquisa. */ /*1798 /* Verifica se está na tela de pesquisa. */ /* 1785 1799 if(selected_messages.indexOf("_") != -1) 1786 1800 { 1787 1801 results_search_messages = selected_messages; 1788 /* Retira a informa ção da aba */ /*1802 /* Retira a informação da aba */ /* 1789 1803 selected_messages = selected_messages.substring(0,selected_messages.indexOf("_")); 1790 1804 } … … 2164 2178 openTab.imapBox[new_border_ID] = folder_message.value; 2165 2179 document.getElementById('font_border_id_'+new_border_ID).innerHTML = data.subject; 2166 title = "Edi ção: "+ html_entities(data.subject);2180 title = "Edição: "+ html_entities(data.subject); 2167 2181 2168 2182 data.to = Element("to_values_" + border_ID).value; … … 2236 2250 } 2237 2251 2238 //DESENHA OS RETANGULOS PARA OS E-MAIL NA OP ÇÃO REPLY2252 //DESENHA OS RETANGULOS PARA OS E-MAIL NA OPÃÃO REPLY 2239 2253 function draw_reply_boxes_by_field(field, value, context){ 2240 2254 array = break_comma(value); … … 2599 2613 } 2600 2614 else { // crypt 2601 //TODO: Colocar mensagem de erro, e finalizar o m étodo.2615 //TODO: Colocar mensagem de erro, e finalizar o método. 2602 2616 operation = 'nop'; 2603 2617 } … … 2705 2719 } 2706 2720 2707 /*Fun ção que grava o destinatário nos contatos dinâmicos*/2721 /*Função que grava o destinatário nos contatos dinâmicos*/ 2708 2722 function save_dynamic_contacts(array){ 2709 2723 if(parseInt(preferences.use_dynamic_contacts)){ … … 2743 2757 2744 2758 /** 2745 * M étodo chamado pela applet para retornar o resultado da assinatura/decifragem do e-mail.2759 * Método chamado pela applet para retornar o resultado da assinatura/decifragem do e-mail. 2746 2760 * para posterior envio ao servidor. 2747 * @author M ário César Kolling <mario.kolling@serpro.gov.br>, Bruno Vieira da Costa <bruno.vieira-costa@serpro.gov.br>2761 * @author Mário César Kolling <mario.kolling@serpro.gov.br>, Bruno Vieira da Costa <bruno.vieira-costa@serpro.gov.br> 2748 2762 * @param smime O e-mail decifrado/assinado 2749 * @param ID O ID do e-mail, para saber em que aba esse e-mail ser ámostrado.2750 * @param operation A opera ção que foi realizada pela applet (assinatura ou decifragem)2763 * @param ID O ID do e-mail, para saber em que aba esse e-mail será mostrado. 2764 * @param operation A operação que foi realizada pela applet (assinatura ou decifragem) 2751 2765 */ 2752 2766 function appletReturn(smime, ID, operation, folder){ … … 2779 2793 { 2780 2794 ID_tmp = ID; 2781 // L ê a variável e chama a nova função cExecuteForm2795 // Lê a variável e chama a nova função cExecuteForm 2782 2796 // Processa e envia para o servidor web 2783 2797 // Faz o request do connector novamente. Talvez implementar no connector 2784 // para manter coer ência.2798 // para manter coerência. 2785 2799 2786 2800 var handler_send_smime = function(data){ … … 2794 2808 textArea.value += smime; 2795 2809 2796 // L ê a variável e chama a nova função cExecuteForm2810 // Lê a variável e chama a nova função cExecuteForm 2797 2811 // Processa e envia para o servidor web 2798 2812 // Faz o request do connector novamente. Talvez implementar no connector 2799 // para manter coer ência.2813 // para manter coerência. 2800 2814 if (is_ie){ 2801 2815 var i = 0; … … 2817 2831 zebraDiscardEventDialog = true; 2818 2832 window.setTimeout(function() { 2819 $.Zebra_Dialog('Existem anexos sendo enviados para o servidor. Caso envie sua mensagem agora estes arquivos ser ão perdidos.', {2833 $.Zebra_Dialog('Existem anexos sendo enviados para o servidor. Caso envie sua mensagem agora estes arquivos serão perdidos.', { 2820 2834 'type': 'question', 2821 2835 'overlay_opacity': '0.5', … … 2898 2912 form = document.forms["form_message_"+ID]; 2899 2913 2900 // Evita que e-mails assinados sejam enviados quando o usu ário tenta enviar um e-mail2901 // n ão assinado (desmarcou a opção) após tentar enviar um e-mail assinado que não passou2902 // no teste de valida ção.2914 // Evita que e-mails assinados sejam enviados quando o usuário tenta enviar um e-mail 2915 // não assinado (desmarcou a opção) após tentar enviar um e-mail assinado que não passou 2916 // no teste de validação. 2903 2917 var checkSign = document.getElementById('return_digital_'+ID); 2904 2918 if (checkSign && !checkSign.checked){ … … 2914 2928 form.appendChild(input_folder); 2915 2929 form.appendChild(input_type); 2916 // Implementa ção do In_Reply_To e References2930 // Implementação do In_Reply_To e References 2917 2931 var msgId = document.createElement("INPUT"); 2918 2932 msgId.style.display = 'none'; … … 2996 3010 return; 2997 3011 }else if(invalidEmail[0] == true){ 2998 write_msg("Os endere ços de destinatário a seguir estão incorretos: "+invalidEmail[1]);3012 write_msg("Os endereços de destinatário a seguir estão incorretos: "+invalidEmail[1]); 2999 3013 return; 3000 3014 } … … 3036 3050 if((campo.replace(/^\s+|\s+$/g,"")) != ""){ 3037 3051 if(invalidEmail[0] == true){ 3038 write_msg("Erro de SMTP: Os endere ços de destinatário a seguir falharam: "+ invalidEmail[1]);3052 write_msg("Erro de SMTP: Os endereços de destinatário a seguir falharam: "+ invalidEmail[1]); 3039 3053 return false; 3040 3054 }else{ 3041 3055 if(semicolon.length > 1){ 3042 var stringError = "Erro de SMTP: Os endere ços devem ser separados apenas por vígula: ";3056 var stringError = "Erro de SMTP: Os endereços devem ser separados apenas por vÃgula: "; 3043 3057 for(var i= 0; i < semicolon.length; i++){ 3044 3058 stringError = stringError + semicolon[i]; … … 3652 3666 if(to) { 3653 3667 if(!printListTO) 3654 to = 'Os destinat ários não estão sendo exibidos para esta impressão';3668 to = 'Os destinatários não estão sendo exibidos para esta impressão'; 3655 3669 html += "<tr><td width=7%><font size='2'>" + get_lang('To') + ": </font></td><td><font size='2'>"+to+"</font></td></tr>"; 3656 3670 } 3657 3671 if (cc) { 3658 3672 if(!printListCC) 3659 cc = 'Os destinat ários não estão sendo exibidos para esta impressão';3673 cc = 'Os destinatários não estão sendo exibidos para esta impressão'; 3660 3674 html += "<tr><td width=7%><font size='2'>" + get_lang('Cc') + ": </font></td><td><font size='2'>"+cc+"</font></td></tr>"; 3661 3675 } 3662 3676 if (cco) { 3663 3677 if(!printListCCO) 3664 cco = 'Os destinat ários não estão sendo exibidos para esta impressão';3678 cco = 'Os destinatários não estão sendo exibidos para esta impressão'; 3665 3679 html += "<tr><td width=7%><font size='2'>" + get_lang('Cco') + ": </font></td><td><font size='2'>"+cco+"</font></td></tr>"; 3666 3680 } … … 3920 3934 msgs_number = get_selected_messages(); 3921 3935 3922 //TODO: REFATORAR O C ÓDIGO PARA EVITAR recodificação3936 //TODO: REFATORAR O CÃDIGO PARA EVITAR recodificação 3923 3937 if(currentTab == 0) 3924 3938 msgs_number = get_selected_messages(); … … 3963 3977 msgs_number = get_selected_messages(); 3964 3978 3965 //TODO: REFATORAR O C ÓDIGO PARA EVITAR recodificação3979 //TODO: REFATORAR O CÃDIGO PARA EVITAR recodificação 3966 3980 if(currentTab == 0) 3967 3981 msgs_number = get_selected_messages(); … … 4143 4157 if ( er.test(folder.id) ) 4144 4158 { 4145 alert( "Mensagens n ão podem ser importadas em pastas locais" );4159 alert( "Mensagens não podem ser importadas em pastas locais" ); 4146 4160 //archive_msgs('INBOX/Lixeira/tmpMoveToLocal',wfolders_tree._selected.id,data); 4147 4161 //cExecute('$this.imap_functions.delete_mailbox',function(){},'del_past=INBOX/Lixeira/tmpMoveToLocal'); … … 4162 4176 } 4163 4177 4164 //Normaliza ção dos dados evita ter que reemplementar toda as funcionalidades do calendar4178 //Normalização dos dados evita ter que reemplementar toda as funcionalidades do calendar 4165 4179 function decodeCreateSchedulable(type, ID){ 4166 4180 var startEvent = new Date(); … … 4278 4292 if(typeof(Encoder) == "undefined"){ 4279 4293 /* 4280 * Deve-se centralizar as informa ções do usuário logado afim de não incluir4294 * Deve-se centralizar as informações do usuário logado afim de não incluir 4281 4295 * arquivos de modulos distintos para este fim. 4282 4296 */ … … 4331 4345 wfolders.makeWindow('null','import'); 4332 4346 } 4333 //Verifica o contexto de importa ção4347 //Verifica o contexto de importação 4334 4348 function decodeOwner(){ 4335 4349 owner = User.me.id; … … 4453 4467 break; 4454 4468 case 6: 4455 var acceptedSuggestion = confirm("Deseja atualizar o evento/tarefa de acordo com a sugest ão ?");4469 var acceptedSuggestion = confirm("Deseja atualizar o evento/tarefa de acordo com a sugestão ?"); 4456 4470 $.ajax({ 4457 4471 url: "controller.php?action="+import_url+'&from_ajax=true&id_user='+User.me.id+'&selected=true&cirus_delimiter='+cyrus_delimiter+'&acceptedSuggestion='+acceptedSuggestion+"&from="+document.getElementById('from_values_'+currentTab).value+'&uidAccount='+decodeOwner(), … … 4464 4478 break; 4465 4479 case 9: 4466 alert('Seu evento/tarefa n ão possui alterações!');4480 alert('Seu evento/tarefa não possui alterações!'); 4467 4481 return; 4468 4482 break; 4469 4483 case 11: 4470 alert('Este evento/tarefa j á fora importando por algum dos particpantes e já se encontra disponível em sua agenda compartilhada!');4484 alert('Este evento/tarefa já fora importando por algum dos particpantes e já se encontra disponÃvel em sua agenda compartilhada!'); 4471 4485 return; 4472 4486 break; … … 4546 4560 else { 4547 4561 expresso_local_messages.set_as_sent(rowid_message); 4548 if(document.getElementById('_action')) { //N ão posso manter esse elemento, pois o connector irá criar outro com o mesmo id para a próxima mensagem.4562 if(document.getElementById('_action')) { //Não posso manter esse elemento, pois o connector irá criar outro com o mesmo id para a próxima mensagem. 4549 4563 el =document.getElementById('_action'); 4550 4564 father = el.parentNode; … … 4665 4679 } 4666 4680 4667 /* Fun ção que chama a tela para o usuário reportar um erro no email. */4681 /* Função que chama a tela para o usuário reportar um erro no email. */ 4668 4682 function reports_window(currentTab){ 4669 4683 ID_msg = currentTab.substr(0,currentTab.indexOf("_")); … … 4692 4706 var prefix = 'user' + cyrus_delimiter+user_selected_name; 4693 4707 4694 /** TODO Mudar quando melhorias forem implementadas na API de atualiza ção do cache */4708 /** TODO Mudar quando melhorias forem implementadas na API de atualização do cache */ 4695 4709 DataLayer.remove('folder', false); 4696 4710 DataLayer.get('folder');
Note: See TracChangeset
for help on using the changeset viewer.