├── old
├── vtex-smartResearch.V.2.3.js
├── vtex-smartResearch.V.2.4.js
├── vtex-smartResearch.V.2.5.js
├── vtex-smartResearch.V.3.0.js
├── vtex-smartResearch.V.3.1.js
├── vtex-smartResearch.V.3.3.js
├── vtex-smartResearch.V.3.2.js
├── vtex-smartResearch.V.3.4.js
├── vtex-smartResearch.V.3.5.js
├── vtex-smartResearch.V.3.6.js
├── vtex-smartResearch.V.3.7.js
└── vtex-smartResearch.V.3.8.js
├── example
└── example.js
├── vtex-smartResearch.css
├── README.md
├── vtex-smartResearch.min.js
├── vtex-smartResearch.js
└── vtex-smartResearch.dev.js
/old/vtex-smartResearch.V.2.3.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cvscarlos/VTEX-Smart-Research/HEAD/old/vtex-smartResearch.V.2.3.js
--------------------------------------------------------------------------------
/example/example.js:
--------------------------------------------------------------------------------
1 | $(function(){
2 | var disclaimer=$(".disclaimer");
3 | var halfBanner=$(".halfBanner");
4 |
5 | $(".navLeftDepartament input[type='checkbox']").vtexSmartResearch({
6 | loadContent:'.columnMain #search',
7 | filtersMenu:'.navLeftDepartament',
8 | searchUrl:'/buscapagina?ft=nokia&PS=5&sl=336f9b54-4681-49c2-85b5-c6524e25e92d&cc=1&sm=0&PageNumber=',
9 | usePopup:true,
10 | pageLimit:1000,
11 | ajaxCallback:function(obj)
12 | {
13 | if(obj.filters>0)
14 | {
15 | disclaimer.hide();
16 | halfBanner.hide();
17 | }
18 | else
19 | {
20 | disclaimer.show();
21 | halfBanner.show();
22 | }
23 | },
24 | authorizeScroll:function(obj)
25 | {
26 | return (obj.filters>0)?true:false;
27 | },
28 | authorizeUpdate:function(obj)
29 | {
30 | if(obj.filters>0)
31 | return true;
32 | else
33 | {
34 | $("#search").children().slideUp();
35 | return false;
36 | }
37 | }
38 | });
39 | });
--------------------------------------------------------------------------------
/vtex-smartResearch.css:
--------------------------------------------------------------------------------
1 | /* Extensão */
2 | .vtexSr-overlay{display:none; width:100%; height:100%; left:0; position:absolute; top:0; z-index:10; background:#FFF url("/arquivos/ajax-loader.gif") center center no-repeat;}
3 |
4 | /* Controles */
5 | .search-multiple-navigator{visibility:hidden;}
6 |
7 | /* Return to top */
8 | #returnToTop{display:none; position:fixed; bottom:100px; right:0; width:90px; padding:3px 0 0 4px; height:32px; background-color:#FFF; border-radius:4px 0 0 4px;}
9 | #returnToTop span{font-weight:bold; height:auto; line-height:12px; color:#AD2023;}
10 | #returnToTop .text{display:block;}
11 | #returnToTop .text2{float:left; font-size:18px; font-weight:normal;}
12 | #returnToTop .arrowToTop{background:url("/arquivos/returnToTop.png") no-repeat #AD2023; width:32px; height:32px; position:absolute; top:2px; right:0; display:block; float:right;}
13 |
14 | /* SCROLL INFINITO */
15 | #scrollLoading{border:#FFD324 solid 2px; margin:20px auto; line-height:20px; padding:5px; width:100px; background:url("/arquivos/ajax-loader2.gif") no-repeat right center #FFF6BF;}
16 |
17 | /* Chilli Beans */
18 | .resultItemsWrapper{position:relative;}
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | #VTEX - Smart Research
2 | >*Extensões da plataforma VTEX são plugins criados por desenvolvedores de interface ou pelo VTEX Lab (Laboratório de Inovações da VTEX) que podem ser inseridas em sua loja. Existem extensões gratuitas com código aberto - Open Source - e extensões pagas. Indicamos que a instalação seja realizada pelos profissionais e empresas certificados pela VTEX. Vale ressaltar que qualquer profissional de CSS, JavaScript e HTML pode também executar esta tarefa.*
3 |
4 | ----------
5 |
6 | Veja este componente na [VTEX Store](http://conversionstore.com.br/index.php/extensoes/home/smart-research)
7 |
8 | ##Instalação
9 | Faça o upload para o "Gerenciador do portal" no "Vtex Admin" dos seguintes arquivos:
10 | * vtex-smartResearch.css
11 | * vtex-smartResearch.min.js
12 |
13 | Faça a chamada do arquivo javascript e CSS na página:
14 |
15 | ```html
16 |
17 |
18 | ```
19 |
20 | Certifique-se que na página existe o controle `` e que os produtos possueem opções de filtros.
21 |
22 | Execute o plugin sempre selecionando os check-box retornados pelo controle:
23 | ```javascript
24 | $(".menuLateral input[type='checkbox']").vtexSmartResearch();
25 | ```
26 |
27 | ###Avançado
28 |
29 | Configurações completas do plugin (lista atualizada em 07/11/2012):
30 | ```javascript
31 | $(".menuLateral input[type='checkbox']").vtexSmartResearch({
32 | pageLimit:null, // Número máximo de páginas que o script irá retornar. Exemplo "pageLimit=3" só será retornado resultados até a terceira página
33 | loadContent:".prateleira[id^=ResultItems]", // Elemento que esta em volta da(s) prateleira(s) de produtos.
34 | shelfClass:".prateleira", // Pratelira de produtos (filha do elemento definido de um "loadContent")
35 | filtersMenu:".search-multiple-navigator", // Menu com os filtros
36 | linksMenu:".search-single-navigator", // Menu de links
37 | menuDepartament:".navigation .menu-departamento", // seletor do menu da página de departamentos
38 | mergeMenu:true, // Define se o menu de links será mesclado com o de filtros será mesclado na página de departamento
39 | insertMenuAfter:".search-multiple-navigator h3:first", // O menu de links será inserido após este elemento
40 | emptySearchElem:jQuery('
'), // Elemento Html (em Objeto jQuery) no qual será adicionado a mensagem de busca vazia
41 | elemLoading:'
Carregando ...
', // Elemento com mensagem de carregando ao iniciar a requisição da página seguinte
42 | returnTopText:'voltar aoTOPO', // Mensagem de "retornar ao topo"
43 | emptySearchMsg:'
Esta combinação de filtros não retornou nenhum resultado!
', // Html com a mensagem para ser apresentada quando não existirem resultados para os filtros selecionados
44 | filterErrorMsg:"Houve um erro ao tentar filtrar a página!", // Mensagem de erro exibida quando existe algum erro de servidor ao aplicar os filtros
45 | searchUrl:null, // Url da página de busca (opicional)
46 | usePopup:false, // Opção p/ definir se deseja que a mensagem de não localizado seja exibida em um popup
47 | showLinks:true, // Exibe o menu de links caso o de filtro não seja encontrado
48 | popupAutoCloseSeconds:3, // Caso esteja utilizando popup, defina aqui o tempo para que ele feche automaticamente
49 | // Função que retorna o valor p/ onde a página deve rolar quando o usuário marca ou desmarca um filtro
50 | filterScrollTop:function(shelfOffset)
51 | {
52 | return (shelfOffset.top-20);
53 | },
54 | callback:function(){},
55 | // Cálculo do tamanho do conteúdo/vitrine para que uma nova página seja chamada antes do usuário chegar ao "final" do site
56 | getShelfHeight:function(container)
57 | {
58 | return (container.scrollTop()+container.height());
59 | },
60 | // Callback após inserir a prateleira na página
61 | shelfCallback:function(){},
62 | // Callback em cada requisição Ajax (Para requisições feitas com sucesso)
63 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
64 | ajaxCallback:function(){},
65 | // Função que é executada quando a seleção de filtros não retorna nenhum resultado
66 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
67 | emptySearchCallback:function(){},
68 | // Função para permitir ou não que a rolagem infinita execute na página esta deve retornar "true" ou "false"
69 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
70 | authorizeScroll:function(){return true;},
71 | // Função para permitir ou não que o conteúdo de "loadContent" seja atualizado. Esta deve retornar "true" ou "false"
72 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
73 | authorizeUpdate:function(){return true;},
74 | // Callback de cada laço percorrendo os fildsets e os labels. Retorna um objeto com algumas informações
75 | labelCallback:function(data){}
76 | });
77 | ```
--------------------------------------------------------------------------------
/vtex-smartResearch.min.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Pesquisa Inteligente
3 | * @description Execurar buscas sem recarregar a página
4 | * @author Carlos Vinicius
5 | * @author Edson Domingos Júnior
6 | * @version 3.8
7 | * @date 2012-10-01
8 | */
9 | "function"!==typeof String.prototype.replaceSpecialChars&&(String.prototype.replaceSpecialChars=function(){var r={"\u00e7":"c","\u00e6":"ae","\u0153":"oe","\u00e1":"a","\u00e9":"e","\u00ed":"i","\u00f3":"o","\u00fa":"u","\u00e0":"a","\u00e8":"e","\u00ec":"i","\u00f2":"o","\u00f9":"u","\u00e4":"a","\u00eb":"e","\u00ef":"i","\u00f6":"o","\u00fc":"u","\u00ff":"y","\u00e2":"a","\u00ea":"e","\u00ee":"i","\u00f4":"o","\u00fb":"u","\u00e5":"a","\u00e3":"a","\u00f8":"o","\u00f5":"o",u:"u","\u00c1":"A","\u00c9":"E",
10 | "\u00cd":"I","\u00d3":"O","\u00da":"U","\u00ca":"E","\u00d4":"O","\u00dc":"U","\u00c3":"A","\u00d5":"O","\u00c0":"A","\u00c7":"C"};return this.replace(/[\u00e0-\u00fa]/g,function(e){return"undefined"!=typeof r[e]?r[e]:e})});"function"!==typeof String.prototype.trim&&(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")});
11 | jQuery.fn.vtexSmartResearch=function(r){$this=jQuery(this);var e=function(a,b){"object"==typeof console&&console.log("[Smart Research - "+(b||"Erro")+"] "+a)},B={pageLimit:null,loadContent:".prateleira[id^=ResultItems]",shelfClass:".prateleira",filtersMenu:".search-multiple-navigator",linksMenu:".search-single-navigator",menuDepartament:".navigation .menu-departamento",insertMenuAfter:".search-multiple-navigator h3:first",emptySearchElem:jQuery(''),elemLoading:'
'),j.append(a));var g=m.height();m.bind("resize",function(){g=m.height()});m.bind("scroll",function(){m.scrollTop()>g?a.stop(!0).fadeTo(300,1,function(){a.show()}):a.stop(!0).fadeTo(300,0,function(){a.hide()})});a.bind("click",function(){y.animate({scrollTop:0},"slow");return!1})},infinitScroll:function(){var a,g,c;c=(j.find(".pager:first").attr("id")||"").split("_").pop();a=null!==b.pageLimit?b.pageLimit:window["pagecount_"+c];g=!0;"undefined"===
16 | typeof a&&(a=99999999);m.bind("scroll",function(){var c=jQuery(this);if(!v&&p<=a&&t&&b.authorizeScroll(f)){if(c.scrollTop()+c.height()>=b.getShelfHeight(h)&&g){var d=h.find(b.shelfClass).filter(":last");d.after(x);g=!1;w=jQuery.ajax({url:i.getUrl(!0),success:function(a){1>a.trim().length?(t=!1,e("N\u00e3o existem mais resultados a partir da p\u00e1gina: "+(p-1),"Aviso")):d.after(a);g=!0;x.remove();f.requests++;b.ajaxCallback(f)}});p++}}else return!1})}},n=null!==b.searchUrl?u=b.searchUrl:u=i.getSearchUrl();
17 | if(1>$this.length)return e("Nenhuma op\u00e7\u00e3o de filtro encontrada","Aviso"),b.showLinks&&jQuery(b.linksMenu).css("visibility","visible").show(),i.infinitScroll(),i.scrollToTop(),$this;if(1>h.length)return e("Elemento para destino da requisi\u00e7\u00e3o n\u00e3o foi encontrado \n ("+h.selector+")"),!1;1>k.length&&e("O menu de filtros n\u00e3o foi encontrado \n ("+k.selector+")");var z=jQuery(b.linksMenu),q=jQuery(''),A=jQuery(b.menuDepartament),E=h.offset(),
18 | D=1,s=null,w=null;b.emptySearchElem.append(b.emptySearchMsg);h.before(q);var c={exec:function(){c.setFilterMenu();c.fieldsetFormat();$this.each(function(){var a=jQuery(this),b=a.parent();a.is(":checked")&&(d+="&"+(a.attr("rel")||""),b.addClass("sr_selected"));c.adjustText(a);b.append('');a.bind("change",function(){c.inputAction();a.is(":checked")?c.addFilter(a):c.removeFilter(a);f.filters=$this.filter(":checked").length})});""!==d&&c.addFilter(C)},
19 | mergeMenu:function(){if(!b.mergeMenu)return!1;A.insertAfter(b.insertMenuAfter);c.departamentMenuFormat(A)},mergeMenuList:function(){var a=0;k.find("h3,h4").each(function(){var b=z.find("h3,h4").eq(a).next("ul");b.insertAfter(jQuery(this));c.departamentMenuFormat(b);a++})},departamentMenuFormat:function(a){a.find("a").each(function(){var a=jQuery(this);a.text(c.removeCounter(a.text()))})},fieldsetFormat:function(){l.fieldsetCount=0;l.tmpCurrentLabel={};k.find("fieldset").each(function(){var a=jQuery(this),
20 | c=a.find("label"),d="filtro_"+(a.find("h5:first").text()||"").toLowerCase().replaceSpecialChars().replace(/\s/g,"-");l[d]={};1>c.length?a.hide():(a.addClass(d),c.each(function(c){var g=jQuery(this),e=g.find("input").val()||"",f="sr_"+e.toLowerCase().replaceSpecialChars().replace(/\s/g,"-");l.tmpCurrentLabel={fieldsetParent:[a,d],elem:g};l[d][c.toString()]={className:f,title:e};g.addClass(f).attr({title:e,index:c});b.labelCallback(l)}),l.fieldsetCount++)})},inputAction:function(){null!==w&&w.abort();
21 | null!==s&&s.abort();p=2;t=!0},addFilter:function(a){d+="&"+(a.attr("rel")||"");q.fadeTo(300,0.6);n=i.getUrl();s=jQuery.ajax({url:n,success:c.filterAjaxSuccess,error:c.filterAjaxError});a.parent().addClass("sr_selected")},removeFilter:function(a){var b=a.attr("rel")||"";q.fadeTo(300,0.6);""!==b&&(d=d.replace("&"+b,""));n=i.getUrl();s=jQuery.ajax({url:n,success:c.filterAjaxSuccess,error:c.filterAjaxError});a.parent().removeClass("sr_selected")},filterAjaxSuccess:function(a){a=jQuery(a);q.fadeTo(300,
22 | 0,function(){jQuery(this).hide()});c.updateContent(a);f.requests++;b.ajaxCallback(f);y.animate({scrollTop:b.filterScrollTop(E||{top:0,left:0})},600)},filterAjaxError:function(){q.fadeTo(300,0,function(){jQuery(this).hide()});alert(b.filterErrorMsg);e("Houve um erro ao tentar fazer a requisi\u00e7\u00e3o da p\u00e1gina com filtros.")},updateContent:function(a){v=!0;if(!b.authorizeUpdate(f))return!1;var c=a.filter(b.shelfClass),a=h.find(b.shelfClass);(0'), // Elemento Html da busca vazia
23 | elemLoading:'
Carregando ...
', // Elemento com mensagem de carregando ao iniciar a requisição da página seguinte
24 | filterErrorMsg:"Houve um erro ao tentar filtrar a página!", // Mensagem de erro
25 | emptySearchMsg:'
Esta combinação de filtros não retornou nenhum resultado!
', // Html para quando a busca retornar vazia
26 | searchUrl:null, // Url da página de busca (opicional)
27 | usePopup:false, // Opção p/ definir se deseja que a mensagem de não localizado seja exibida em um popup
28 | popupAutoCloseSeconds:3, // Caso esteja utilizando popup, defina aqui o tempo para que ele feche automaticamente
29 | callback:function(){},
30 | // Cálculo do tamanho do footer para que uam nova página seja chamada antes do usuário chegar ao "final" do site
31 | getShelfHeight:function()
32 | {
33 | return (loadContentE.scrollTop()+loadContentE.height());
34 | },
35 | // Callback em cada requisição Ajax (Para requisições feitas com sucesso)
36 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
37 | ajaxCallback:function(){},
38 | // Função que é executada quando a seleção de filtros não retorna nenhum resultado
39 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
40 | emptySearchCallback:function(){},
41 | // Função para permitir ou não que a rolagem infinita execute na página esta deve retornar "true" ou "false"
42 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
43 | authorizeScroll:function(){return true;},
44 | // Função para permitir ou não que o conteúdo de "loadContent" seja atualizado. Esta deve retornar "true" ou "false"
45 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
46 | authorizeUpdate:function(){return true;}
47 | };
48 | var options=jQuery.extend(defaults, opts),
49 | _console="object"==typeof(console),
50 | $empty=jQuery("");
51 |
52 | var loadContentE=jQuery(options.loadContent),
53 | filtersMenuE=jQuery(options.filtersMenu);
54 | // Reporting Errors
55 | if(loadContentE.length<1){if(_console) console.log("[Erro] Elemento para destino da requisição não foi encontrado \n ("+loadContentE.selector+")"); return false;}
56 | if(filtersMenuE.length<1 && _console) console.log("[Erro] O menu de filtros não foi encontrado \n ("+filtersMenuE.selector+")");
57 |
58 | var currentUrl=document.location.href,
59 | linksMenuE=jQuery(options.linksMenu),
60 | prodOverlay=jQuery(''),
61 | _document=jQuery(document),
62 | _window=jQuery(window),
63 | body=jQuery("body"),
64 | urlFilters="",
65 | pageNumber=1,
66 | currentPage=2,
67 | searchUrl="",
68 | currentSearchUrl="",
69 | shelfJqxhr=null,
70 | elemLoading=jQuery(options.elemLoading),
71 | pageJqxhr=null,
72 | ajaxCallbackObj={requests:0,filters:0, isEmpty:false},
73 | moreResults=true;
74 |
75 | options.emptySearchElem.append(options.emptySearchMsg);
76 | loadContentE.before(prodOverlay);
77 |
78 | var fns=
79 | {
80 | exec:function()
81 | {
82 | fns.setFilterMenu();
83 | $this.each(function(){
84 | var _this=jQuery(this);
85 |
86 | fns.adjustText(_this);
87 | filtersMenuE.css("visibility","visible");
88 |
89 | _this.bind("change",function(){
90 | fns.inputAction();
91 | if(_this.is(":checked"))
92 | fns.addFilter(_this);
93 | else
94 | fns.removeFilter(_this);
95 | ajaxCallbackObj.filters=$this.filter(":checked").length;
96 | });
97 | });
98 | },
99 | inputAction:function()
100 | {
101 | if(null!==pageJqxhr) pageJqxhr.abort();
102 | if(null!==shelfJqxhr) shelfJqxhr.abort();
103 | currentPage=2;
104 | },
105 | addFilter:function(input)
106 | {
107 | urlFilters+="&"+(input.attr("rel")||"");
108 | prodOverlay.fadeTo(300,0.6);
109 | currentSearchUrl=fns.getUrl();
110 | shelfJqxhr=jQuery.ajax({
111 | url:currentSearchUrl,
112 | success:fns.filterAjaxSuccess,
113 | error:fns.filterAjaxError
114 | });
115 | },
116 | removeFilter:function(input)
117 | {
118 | var url=(input.attr("rel")||"");
119 | prodOverlay.fadeTo(300,0.6);
120 | if(url!=="")
121 | urlFilters=urlFilters.replace("&"+url,"");
122 |
123 | currentSearchUrl=fns.getUrl();
124 | shelfJqxhr=jQuery.ajax({
125 | url:currentSearchUrl,
126 | success:fns.filterAjaxSuccess,
127 | error:fns.filterAjaxError
128 | });
129 | },
130 | getUrl:function(scroll)
131 | {
132 | var s=scroll||false;
133 | if(s)
134 | return currentSearchUrl.replace(/PageNumber=[0-9]*/,"PageNumber="+currentPage);
135 | else
136 | return (searchUrl+urlFilters).replace(/PageNumber=[0-9]*/,"PageNumber="+pageNumber);
137 | },
138 | filterAjaxSuccess:function(data)
139 | {
140 | var $data=jQuery(data);
141 | prodOverlay.fadeTo(300,0,function(){jQuery(this).hide();});
142 | fns.updateContent($data);
143 | ajaxCallbackObj.requests++;
144 | options.ajaxCallback(ajaxCallbackObj);
145 | },
146 | filterAjaxError:function()
147 | {
148 | prodOverlay.fadeTo(300,0,function(){jQuery(this).hide();});
149 | alert(options.filterErrorMsg);
150 | if(_console) console.log("[Erro] Houve um erro ao tentar fazer a requisição da página com filtros.");
151 | },
152 | updateContent:function($data)
153 | {
154 | if(!options.authorizeUpdate(ajaxCallbackObj)) return false;
155 |
156 | var shelf=$data.filter(options.shelfClass);
157 | var shelfPage=loadContentE.find(options.shelfClass);
158 |
159 | (shelfPage.length>0?shelfPage:options.emptySearchElem).slideUp(600,function(){
160 | jQuery(this).remove();
161 |
162 | // Removendo a mensagem de busca vazia, esta remoção "forçada" foi feita para
163 | // corrigir um bug encontrado ao clicar em vários filtros
164 | if(options.usePopup)
165 | body.find(".boxPopUp2").vtexPopUp2();
166 | else
167 | options.emptySearchElem.remove();
168 |
169 | if(shelf.length>0)
170 | {
171 | shelf.hide();
172 | loadContentE.append(shelf);
173 | shelf.slideDown(600);
174 | ajaxCallbackObj.isEmpty=false;
175 | }
176 | else
177 | {
178 | ajaxCallbackObj.isEmpty=true;
179 |
180 | if(options.usePopup)
181 | options.emptySearchElem.addClass("freeContent autoClose ac_"+options.popupAutoCloseSeconds).vtexPopUp2().stop(true).show();
182 | else
183 | {
184 | loadContentE.append(options.emptySearchElem);
185 | options.emptySearchElem.show().css("height","auto").fadeTo(300,0.2,function(){
186 | options.emptySearchElem.fadeTo(300,1);
187 | });
188 | }
189 |
190 | options.emptySearchCallback(ajaxCallbackObj);
191 | }
192 | });
193 | },
194 | adjustText:function(input)
195 | {
196 | var label=input.parent(),
197 | text=label.text();
198 | qtt="";
199 |
200 | text=text.replace(/\([0-9]+\)/ig,function(a){
201 | qtt=a.replace(/\(|\)/,"");
202 | return "";
203 | });
204 |
205 | label.text(text).prepend(input);
206 | },
207 | getSearchUrl:function()
208 | {
209 | var url, content, preg;
210 | jQuery("script:not([src])").each(function(){
211 | content=jQuery(this)[0].innerHTML;
212 | preg=/\/buscapagina\?.+&PageNumber=/i;
213 | if(content.search(/\/buscapagina\?/i)>-1)
214 | {
215 | url=preg.exec(content);
216 | return false;
217 | }
218 | });
219 |
220 | if(typeof(url)!=="undefined" && typeof(url[0])!=="undefined")
221 | return url[0];
222 | else
223 | {
224 | if(_console) console.log("[Erro] Não foi possível localizar a url de busca da página.\n Tente adicionar o .js ao final da página. \n[Método: getSearchUrl]");
225 | return "";
226 | }
227 | },
228 | scrollToTop:function()
229 | {
230 | var elem=body.find("#returnToTop");
231 | var windowH=_window.height();
232 | var _html=jQuery("html,body");
233 | _window.bind("resize",function(){
234 | windowH=_window.height();
235 | });
236 | _window.bind("scroll",function(){
237 | if(_window.scrollTop()>(windowH))
238 | elem.stop(true).fadeTo(300,1,function(){elem.show();});
239 | else
240 | elem.stop(true).fadeTo(300,0,function(){elem.hide();});
241 | });
242 | elem.find("a").bind("click",function(){
243 | _html.animate({scrollTop:0},"slow");
244 | return false;
245 | });
246 | },
247 | setFilterMenu:function()
248 | {
249 | if(filtersMenuE.length>0)
250 | {
251 | linksMenuE.hide();
252 | filtersMenuE.show();
253 | }
254 | },
255 | infinitScroll:function()
256 | {
257 | var elementPages=body.find(".pager:first").attr("id"),
258 | pages=(null!==options.pageLimit)?options.pageLimit:eval("pagecount_"+elementPages.split("_").pop()),
259 | currentStatus=true;
260 |
261 | // Reportando erros
262 | if("undefined"===typeof pages) console.log("[Erro] Não foi possível localizar quantidade de páginas.\n Tente adicionar o .js ao final da página. \n[Método: infinitScroll]");
263 |
264 | _window.bind('scroll',function(){
265 | var _this=jQuery(this);
266 | if(currentPage<=pages && moreResults && options.authorizeScroll(ajaxCallbackObj))
267 | {
268 | if((_this.scrollTop()+_this.height())>=(options.getShelfHeight()) && currentStatus)
269 | {
270 | var currentItems=loadContentE.find(options.shelfClass).filter(":last");
271 | currentItems.after(elemLoading);
272 | currentStatus=false;
273 | pageJqxhr=jQuery.ajax({
274 | url: fns.getUrl(true),
275 | success:function(data)
276 | {
277 | if(data.trim().length<1)
278 | {
279 | moreResults=false;
280 | if(_console) console.log("[Aviso] Não existem mais resultados a partir da página: "+currentPage);
281 | }
282 | else
283 | currentItems.after(data);
284 | currentStatus=true;
285 | elemLoading.remove();
286 | ajaxCallbackObj.requests++;
287 | options.ajaxCallback(ajaxCallbackObj);
288 | }
289 | });
290 | currentPage++;
291 | }
292 | }
293 | else
294 | return false;
295 | });
296 | }
297 | };
298 |
299 | if(null!==options.searchUrl)
300 | currentSearchUrl=searchUrl=options.searchUrl;
301 | else
302 | currentSearchUrl=searchUrl=fns.getSearchUrl();
303 |
304 | fns.exec();
305 | fns.infinitScroll();
306 | fns.scrollToTop();
307 | options.callback();
308 | };
--------------------------------------------------------------------------------
/old/vtex-smartResearch.V.2.5.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Pesquisa Inteligente
3 | * @description Execurar buscas sem recarregar a página
4 | * @author Carlos Vinicius
5 | * @author Edson Domingos Júnior
6 | * @version 2.5
7 | * @date 2012-04-10
8 | */
9 | "function"!==typeof String.prototype.trim&&(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")});
10 | jQuery.fn.vtexSmartResearch=function(opts)
11 | {
12 | $this=jQuery(this);
13 |
14 | var defaults=
15 | {
16 | pageLimit:null, // Número máximo de páginas (limite da paginação)
17 | loadContent:".prateleira[id^=ResultItems]", // Elemento que esta em volta da(s) prateleira(s) de produtos.
18 | shelfClass:".prateleira", // Pratelira de produtos (filha de "loadContent")
19 | filtersMenu:".search-multiple-navigator", // Menu com os filtros
20 | linksMenu:".search-single-navigator", // Menu de links
21 | mergeMenu:true, // Definição se o menu será mesclado na página de departamento
22 | menuDepartament:".navigation .menu-departamento", // seletor do menu da página de departamentos
23 | insertMenuAfter:".search-multiple-navigator h3:first", // O menu de departamento será inserido após este elemento
24 | emptySearchElem:jQuery(''), // Elemento Html da busca vazia
25 | elemLoading:'
Carregando ...
', // Elemento com mensagem de carregando ao iniciar a requisição da página seguinte
26 | filterErrorMsg:"Houve um erro ao tentar filtrar a página!", // Mensagem de erro
27 | emptySearchMsg:'
Esta combinação de filtros não retornou nenhum resultado!
', // Html para quando a busca retornar vazia
28 | searchUrl:null, // Url da página de busca (opicional)
29 | usePopup:false, // Opção p/ definir se deseja que a mensagem de não localizado seja exibida em um popup
30 | showLinks:true, // Exibe o menu de links caso o de filtro não seja encontrado
31 | popupAutoCloseSeconds:3, // Caso esteja utilizando popup, defina aqui o tempo para que ele feche automaticamente
32 | callback:function(){},
33 | // Cálculo do tamanho do footer para que uam nova página seja chamada antes do usuário chegar ao "final" do site
34 | getShelfHeight:function()
35 | {
36 | return (loadContentE.scrollTop()+loadContentE.height());
37 | },
38 | // Callback em cada requisição Ajax (Para requisições feitas com sucesso)
39 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
40 | ajaxCallback:function(){},
41 | // Função que é executada quando a seleção de filtros não retorna nenhum resultado
42 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
43 | emptySearchCallback:function(){},
44 | // Função para permitir ou não que a rolagem infinita execute na página esta deve retornar "true" ou "false"
45 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
46 | authorizeScroll:function(){return true;},
47 | // Função para permitir ou não que o conteúdo de "loadContent" seja atualizado. Esta deve retornar "true" ou "false"
48 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
49 | authorizeUpdate:function(){return true;}
50 | };
51 | var options=jQuery.extend(defaults, opts),
52 | _console="object"===typeof(console),
53 | $empty=jQuery("");
54 |
55 | // Reporting Errors
56 | if($this.length<1)
57 | {
58 | if(_console) console.log("[Aviso] Elemento não encontrado \n ("+$this.selector+")");
59 | if(options.showLinks) jQuery(options.linksMenu).show();
60 | return $this;
61 | }
62 |
63 | var loadContentE=jQuery(options.loadContent),
64 | filtersMenuE=jQuery(options.filtersMenu);
65 | // Reporting Errors
66 | if(loadContentE.length<1){if(_console) console.log("[Erro] Elemento para destino da requisição não foi encontrado \n ("+loadContentE.selector+")"); return false;}
67 | if(filtersMenuE.length<1 && _console) console.log("[Erro] O menu de filtros não foi encontrado \n ("+filtersMenuE.selector+")");
68 |
69 |
70 | var currentUrl=document.location.href,
71 | linksMenuE=jQuery(options.linksMenu),
72 | prodOverlay=jQuery(''),
73 | _document=jQuery(document),
74 | _window=jQuery(window),
75 | body=jQuery("body"),
76 | urlFilters="",
77 | pageNumber=1,
78 | currentPage=2,
79 | searchUrl="",
80 | currentSearchUrl="",
81 | shelfJqxhr=null,
82 | elemLoading=jQuery(options.elemLoading),
83 | pageJqxhr=null,
84 | ajaxCallbackObj={requests:0,filters:0, isEmpty:false},
85 | moreResults=true;
86 |
87 | options.emptySearchElem.append(options.emptySearchMsg);
88 | loadContentE.before(prodOverlay);
89 |
90 | var fns=
91 | {
92 | exec:function()
93 | {
94 | fns.setFilterMenu();
95 | $this.each(function(){
96 | var _this=jQuery(this);
97 |
98 | fns.adjustText(_this);
99 | filtersMenuE.css("visibility","visible");
100 |
101 | _this.bind("change",function(){
102 | fns.inputAction();
103 | if(_this.is(":checked"))
104 | fns.addFilter(_this);
105 | else
106 | fns.removeFilter(_this);
107 | ajaxCallbackObj.filters=$this.filter(":checked").length;
108 | });
109 | });
110 | },
111 | mergeMenu:function()
112 | {
113 |
114 | if(!options.mergeMenu) return false;
115 |
116 | var elem=body.find(options.menuDepartament);
117 | elem.insertAfter(options.insertMenuAfter);
118 | fns.departamentMenuFormat(elem);
119 | },
120 | departamentMenuFormat:function(elem)
121 | {
122 | elem.find("a").each(function(){
123 | var a=jQuery(this);
124 | a.text(fns.removeCounter(a.text()));
125 | });
126 | },
127 | inputAction:function()
128 | {
129 | if(null!==pageJqxhr) pageJqxhr.abort();
130 | if(null!==shelfJqxhr) shelfJqxhr.abort();
131 | currentPage=2;
132 | moreResults=true;
133 | },
134 | addFilter:function(input)
135 | {
136 | urlFilters+="&"+(input.attr("rel")||"");
137 | prodOverlay.fadeTo(300,0.6);
138 | currentSearchUrl=fns.getUrl();
139 | shelfJqxhr=jQuery.ajax({
140 | url:currentSearchUrl,
141 | success:fns.filterAjaxSuccess,
142 | error:fns.filterAjaxError
143 | });
144 | },
145 | removeFilter:function(input)
146 | {
147 | var url=(input.attr("rel")||"");
148 | prodOverlay.fadeTo(300,0.6);
149 | if(url!=="")
150 | urlFilters=urlFilters.replace("&"+url,"");
151 |
152 | currentSearchUrl=fns.getUrl();
153 | shelfJqxhr=jQuery.ajax({
154 | url:currentSearchUrl,
155 | success:fns.filterAjaxSuccess,
156 | error:fns.filterAjaxError
157 | });
158 | },
159 | getUrl:function(scroll)
160 | {
161 | var s=scroll||false;
162 | if(s)
163 | return currentSearchUrl.replace(/PageNumber=[0-9]*/,"PageNumber="+currentPage);
164 | else
165 | return (searchUrl+urlFilters).replace(/PageNumber=[0-9]*/,"PageNumber="+pageNumber);
166 | },
167 | filterAjaxSuccess:function(data)
168 | {
169 | var $data=jQuery(data);
170 | prodOverlay.fadeTo(300,0,function(){jQuery(this).hide();});
171 | fns.updateContent($data);
172 | ajaxCallbackObj.requests++;
173 | options.ajaxCallback(ajaxCallbackObj);
174 | },
175 | filterAjaxError:function()
176 | {
177 | prodOverlay.fadeTo(300,0,function(){jQuery(this).hide();});
178 | alert(options.filterErrorMsg);
179 | if(_console) console.log("[Erro] Houve um erro ao tentar fazer a requisição da página com filtros.");
180 | },
181 | updateContent:function($data)
182 | {
183 | if(!options.authorizeUpdate(ajaxCallbackObj)) return false;
184 |
185 | var shelf=$data.filter(options.shelfClass);
186 | var shelfPage=loadContentE.find(options.shelfClass);
187 |
188 | (shelfPage.length>0?shelfPage:options.emptySearchElem).slideUp(600,function(){
189 | jQuery(this).remove();
190 |
191 | // Removendo a mensagem de busca vazia, esta remoção "forçada" foi feita para
192 | // corrigir um bug encontrado ao clicar em vários filtros
193 | if(options.usePopup)
194 | body.find(".boxPopUp2").vtexPopUp2();
195 | else
196 | options.emptySearchElem.remove();
197 |
198 | if(shelf.length>0)
199 | {
200 | shelf.hide();
201 | loadContentE.append(shelf);
202 | shelf.slideDown(600);
203 | ajaxCallbackObj.isEmpty=false;
204 | }
205 | else
206 | {
207 | ajaxCallbackObj.isEmpty=true;
208 |
209 | if(options.usePopup)
210 | options.emptySearchElem.addClass("freeContent autoClose ac_"+options.popupAutoCloseSeconds).vtexPopUp2().stop(true).show();
211 | else
212 | {
213 | loadContentE.append(options.emptySearchElem);
214 | options.emptySearchElem.show().css("height","auto").fadeTo(300,0.2,function(){
215 | options.emptySearchElem.fadeTo(300,1);
216 | });
217 | }
218 |
219 | options.emptySearchCallback(ajaxCallbackObj);
220 | }
221 | });
222 | },
223 | adjustText:function(input)
224 | {
225 | var label=input.parent(),
226 | text=label.text();
227 | qtt="";
228 |
229 | text=fns.removeCounter(text);
230 |
231 | label.text(text).prepend(input);
232 | },
233 | removeCounter:function(text)
234 | {
235 | return text.replace(/\([0-9]+\)/ig,function(a){
236 | qtt=a.replace(/\(|\)/,"");
237 | return "";
238 | });
239 | },
240 | getSearchUrl:function()
241 | {
242 | var url, content, preg;
243 | jQuery("script:not([src])").each(function(){
244 | content=jQuery(this)[0].innerHTML;
245 | preg=/\/buscapagina\?.+&PageNumber=/i;
246 | if(content.search(/\/buscapagina\?/i)>-1)
247 | {
248 | url=preg.exec(content);
249 | return false;
250 | }
251 | });
252 |
253 | if(typeof(url)!=="undefined" && typeof(url[0])!=="undefined")
254 | return url[0];
255 | else
256 | {
257 | if(_console) console.log("[Erro] Não foi possível localizar a url de busca da página.\n Tente adicionar o .js ao final da página. \n[Método: getSearchUrl]");
258 | return "";
259 | }
260 | },
261 | scrollToTop:function()
262 | {
263 | var elem=body.find("#returnToTop");
264 | var windowH=_window.height();
265 | var _html=jQuery("html,body");
266 | _window.bind("resize",function(){
267 | windowH=_window.height();
268 | });
269 | _window.bind("scroll",function(){
270 | if(_window.scrollTop()>(windowH))
271 | elem.stop(true).fadeTo(300,1,function(){elem.show();});
272 | else
273 | elem.stop(true).fadeTo(300,0,function(){elem.hide();});
274 | });
275 | elem.find("a").bind("click",function(){
276 | _html.animate({scrollTop:0},"slow");
277 | return false;
278 | });
279 | },
280 | setFilterMenu:function()
281 | {
282 | if(filtersMenuE.length>0)
283 | {
284 | linksMenuE.hide();
285 | filtersMenuE.show();
286 | }
287 | },
288 | infinitScroll:function()
289 | {
290 | var elementPages=body.find(".pager:first").attr("id"),
291 | pages=(null!==options.pageLimit)?options.pageLimit:eval("pagecount_"+elementPages.split("_").pop()),
292 | currentStatus=true;
293 |
294 | // Reportando erros
295 | if("undefined"===typeof pages) console.log("[Erro] Não foi possível localizar quantidade de páginas.\n Tente adicionar o .js ao final da página. \n[Método: infinitScroll]");
296 |
297 | _window.bind('scroll',function(){
298 | var _this=jQuery(this);
299 | if(currentPage<=pages && moreResults && options.authorizeScroll(ajaxCallbackObj))
300 | {
301 | if((_this.scrollTop()+_this.height())>=(options.getShelfHeight()) && currentStatus)
302 | {
303 | var currentItems=loadContentE.find(options.shelfClass).filter(":last");
304 | currentItems.after(elemLoading);
305 | currentStatus=false;
306 | pageJqxhr=jQuery.ajax({
307 | url: fns.getUrl(true),
308 | success:function(data)
309 | {
310 | if(data.trim().length<1)
311 | {
312 | moreResults=false;
313 | if(_console) console.log("[Aviso] Não existem mais resultados a partir da página: "+(currentPage-1));
314 | }
315 | else
316 | currentItems.after(data);
317 | currentStatus=true;
318 | elemLoading.remove();
319 | ajaxCallbackObj.requests++;
320 | options.ajaxCallback(ajaxCallbackObj);
321 | }
322 | });
323 | currentPage++;
324 | }
325 | }
326 | else
327 | return false;
328 | });
329 | }
330 | };
331 |
332 | if(null!==options.searchUrl)
333 | currentSearchUrl=searchUrl=options.searchUrl;
334 | else
335 | currentSearchUrl=searchUrl=fns.getSearchUrl();
336 |
337 | if(body.hasClass("departamento"))
338 | fns.mergeMenu();
339 |
340 | fns.exec();
341 | fns.infinitScroll();
342 | fns.scrollToTop();
343 | options.callback();
344 | };
--------------------------------------------------------------------------------
/old/vtex-smartResearch.V.3.0.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Pesquisa Inteligente
3 | * @description Execurar buscas sem recarregar a página
4 | * @author Carlos Vinicius
5 | * @author Edson Domingos Júnior
6 | * @version 3.0
7 | * @date 2012-04-11
8 | */
9 | "function"!==typeof String.prototype.trim&&(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")});
10 | jQuery.fn.vtexSmartResearch=function(opts)
11 | {
12 | $this=jQuery(this);
13 |
14 | var defaults=
15 | {
16 | pageLimit:null, // Número máximo de páginas (limite da paginação)
17 | loadContent:".prateleira[id^=ResultItems]", // Elemento que esta em volta da(s) prateleira(s) de produtos.
18 | shelfClass:".prateleira", // Pratelira de produtos (filha de "loadContent")
19 | filtersMenu:".search-multiple-navigator", // Menu com os filtros
20 | linksMenu:".search-single-navigator", // Menu de links
21 | menuDepartament:".navigation .menu-departamento", // seletor do menu da página de departamentos
22 | insertMenuAfter:".search-multiple-navigator h3:first", // O menu de departamento será inserido após este elemento
23 | emptySearchElem:jQuery(''), // Elemento Html da busca vazia
24 | elemLoading:'
Carregando ...
', // Elemento com mensagem de carregando ao iniciar a requisição da página seguinte
25 | returnTopText:'voltar aoTOPO', // Texto a ser inserido
26 | emptySearchMsg:'
Esta combinação de filtros não retornou nenhum resultado!
', // Html para quando a busca retornar vazia
27 | filterErrorMsg:"Houve um erro ao tentar filtrar a página!", // Mensagem de erro
28 | searchUrl:null, // Url da página de busca (opicional)
29 | mergeMenu:true, // Definição se o menu será mesclado na página de departamento
30 | usePopup:false, // Opção p/ definir se deseja que a mensagem de não localizado seja exibida em um popup
31 | showLinks:true, // Exibe o menu de links caso o de filtro não seja encontrado
32 | popupAutoCloseSeconds:3, // Caso esteja utilizando popup, defina aqui o tempo para que ele feche automaticamente
33 | callback:function(){},
34 | // Cálculo do tamanho do footer para que uam nova página seja chamada antes do usuário chegar ao "final" do site
35 | getShelfHeight:function(container)
36 | {
37 | return (container.scrollTop()+container.height());
38 | },
39 | // Callback em cada requisição Ajax (Para requisições feitas com sucesso)
40 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
41 | ajaxCallback:function(){},
42 | // Função que é executada quando a seleção de filtros não retorna nenhum resultado
43 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
44 | emptySearchCallback:function(){},
45 | // Função para permitir ou não que a rolagem infinita execute na página esta deve retornar "true" ou "false"
46 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
47 | authorizeScroll:function(){return true;},
48 | // Função para permitir ou não que o conteúdo de "loadContent" seja atualizado. Esta deve retornar "true" ou "false"
49 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
50 | authorizeUpdate:function(){return true;}
51 | };
52 |
53 | var options=jQuery.extend(defaults, opts),
54 | _console="object"===typeof(console),
55 | $empty=jQuery(""),
56 | elemLoading=jQuery(options.elemLoading),
57 | currentPage=2,
58 | moreResults=true,
59 | _window=jQuery(window),
60 | _document=jQuery(document),
61 | _html=jQuery("html,body"),
62 | body=jQuery("body"),
63 | currentSearchUrl="",
64 | urlFilters="",
65 | searchUrl="",
66 | loadContentE=jQuery(options.loadContent),
67 | filtersMenuE=jQuery(options.filtersMenu),
68 | ajaxCallbackObj={requests:0,filters:0,isEmpty:false};
69 |
70 | var fn=
71 | {
72 | getUrl:function(scroll)
73 | {
74 | var s=scroll||false;
75 | if(s)
76 | return currentSearchUrl.replace(/PageNumber=[0-9]*/,"PageNumber="+currentPage);
77 | else
78 | return (searchUrl+urlFilters).replace(/PageNumber=[0-9]*/,"PageNumber="+pageNumber);
79 | },
80 | getSearchUrl:function()
81 | {
82 | var url, content, preg;
83 | jQuery("script:not([src])").each(function(){
84 | content=jQuery(this)[0].innerHTML;
85 | preg=/\/buscapagina\?.+&PageNumber=/i;
86 | if(content.search(/\/buscapagina\?/i)>-1)
87 | {
88 | url=preg.exec(content);
89 | return false;
90 | }
91 | });
92 |
93 | if(typeof(url)!=="undefined" && typeof(url[0])!=="undefined")
94 | return url[0];
95 | else
96 | {
97 | if(_console) console.log("[Erro] Não foi possível localizar a url de busca da página.\n Tente adicionar o .js ao final da página. \n[Método: getSearchUrl]");
98 | return "";
99 | }
100 | },
101 | scrollToTop:function()
102 | {
103 | var elem=body.find("#returnToTop");
104 |
105 | if(elem.length<1)
106 | {
107 | elem=jQuery('
', // Elemento com mensagem de carregando ao iniciar a requisição da página seguinte
25 | returnTopText:'voltar aoTOPO', // Texto a ser inserido
26 | emptySearchMsg:'
Esta combinação de filtros não retornou nenhum resultado!
', // Html para quando a busca retornar vazia
27 | filterErrorMsg:"Houve um erro ao tentar filtrar a página!", // Mensagem de erro
28 | searchUrl:null, // Url da página de busca (opicional)
29 | mergeMenu:true, // Definição se o menu será mesclado na página de departamento
30 | usePopup:false, // Opção p/ definir se deseja que a mensagem de não localizado seja exibida em um popup
31 | showLinks:true, // Exibe o menu de links caso o de filtro não seja encontrado
32 | popupAutoCloseSeconds:3, // Caso esteja utilizando popup, defina aqui o tempo para que ele feche automaticamente
33 | // Função que retorna o valor p/ onde a página deve rolar quando o usuário marca ou desmarca um filtro
34 | filterScrollTop:function(shelfOffset)
35 | {
36 | return (shelfOffset.top-20);
37 | },
38 | callback:function(){},
39 | // Cálculo do tamanho do footer para que uam nova página seja chamada antes do usuário chegar ao "final" do site
40 | getShelfHeight:function(container)
41 | {
42 | return (container.scrollTop()+container.height());
43 | },
44 | // Callback em cada requisição Ajax (Para requisições feitas com sucesso)
45 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
46 | ajaxCallback:function(){},
47 | // Função que é executada quando a seleção de filtros não retorna nenhum resultado
48 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
49 | emptySearchCallback:function(){},
50 | // Função para permitir ou não que a rolagem infinita execute na página esta deve retornar "true" ou "false"
51 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
52 | authorizeScroll:function(){return true;},
53 | // Função para permitir ou não que o conteúdo de "loadContent" seja atualizado. Esta deve retornar "true" ou "false"
54 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
55 | authorizeUpdate:function(){return true;}
56 | };
57 |
58 | var options=jQuery.extend(defaults, opts),
59 | _console="object"===typeof(console),
60 | $empty=jQuery(""),
61 | elemLoading=jQuery(options.elemLoading),
62 | currentPage=2,
63 | moreResults=true,
64 | _window=jQuery(window),
65 | _document=jQuery(document),
66 | _html=jQuery("html,body"),
67 | body=jQuery("body"),
68 | currentSearchUrl="",
69 | urlFilters="",
70 | searchUrl="",
71 | animatingFilter=false,
72 | loadContentE=jQuery(options.loadContent),
73 | filtersMenuE=jQuery(options.filtersMenu),
74 | ajaxCallbackObj={requests:0,filters:0,isEmpty:false};
75 |
76 | var fn=
77 | {
78 | getUrl:function(scroll)
79 | {
80 | var s=scroll||false;
81 | if(s)
82 | return currentSearchUrl.replace(/PageNumber=[0-9]*/,"PageNumber="+currentPage);
83 | else
84 | return (searchUrl+urlFilters).replace(/PageNumber=[0-9]*/,"PageNumber="+pageNumber);
85 | },
86 | getSearchUrl:function()
87 | {
88 | var url, content, preg;
89 | jQuery("script:not([src])").each(function(){
90 | content=jQuery(this)[0].innerHTML;
91 | preg=/\/buscapagina\?.+&PageNumber=/i;
92 | if(content.search(/\/buscapagina\?/i)>-1)
93 | {
94 | url=preg.exec(content);
95 | return false;
96 | }
97 | });
98 |
99 | if(typeof(url)!=="undefined" && typeof(url[0])!=="undefined")
100 | return url[0];
101 | else
102 | {
103 | if(_console) console.log("[Erro] Não foi possível localizar a url de busca da página.\n Tente adicionar o .js ao final da página. \n[Método: getSearchUrl]");
104 | return "";
105 | }
106 | },
107 | scrollToTop:function()
108 | {
109 | var elem=body.find("#returnToTop");
110 |
111 | if(elem.length<1)
112 | {
113 | elem=jQuery('
', // Elemento com mensagem de carregando ao iniciar a requisição da página seguinte
26 | returnTopText:'voltar aoTOPO', // Texto a ser inserido
27 | emptySearchMsg:'
Esta combinação de filtros não retornou nenhum resultado!
', // Html para quando a busca retornar vazia
28 | filterErrorMsg:"Houve um erro ao tentar filtrar a página!", // Mensagem de erro
29 | searchUrl:null, // Url da página de busca (opicional)
30 | mergeMenu:true, // Definição se o menu será mesclado na página de departamento
31 | usePopup:false, // Opção p/ definir se deseja que a mensagem de não localizado seja exibida em um popup
32 | showLinks:true, // Exibe o menu de links caso o de filtro não seja encontrado
33 | popupAutoCloseSeconds:3, // Caso esteja utilizando popup, defina aqui o tempo para que ele feche automaticamente
34 | // Função que retorna o valor p/ onde a página deve rolar quando o usuário marca ou desmarca um filtro
35 | filterScrollTop:function(shelfOffset)
36 | {
37 | return (shelfOffset.top-20);
38 | },
39 | callback:function(){},
40 | // Cálculo do tamanho do footer para que uam nova página seja chamada antes do usuário chegar ao "final" do site
41 | getShelfHeight:function(container)
42 | {
43 | return (container.scrollTop()+container.height());
44 | },
45 | // Callback em cada requisição Ajax (Para requisições feitas com sucesso)
46 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
47 | ajaxCallback:function(){},
48 | // Função que é executada quando a seleção de filtros não retorna nenhum resultado
49 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
50 | emptySearchCallback:function(){},
51 | // Função para permitir ou não que a rolagem infinita execute na página esta deve retornar "true" ou "false"
52 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
53 | authorizeScroll:function(){return true;},
54 | // Função para permitir ou não que o conteúdo de "loadContent" seja atualizado. Esta deve retornar "true" ou "false"
55 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
56 | authorizeUpdate:function(){return true;}
57 | };
58 |
59 | var options=jQuery.extend(defaults, opts),
60 | _console="object"===typeof(console),
61 | $empty=jQuery(""),
62 | elemLoading=jQuery(options.elemLoading),
63 | currentPage=2,
64 | moreResults=true,
65 | _window=jQuery(window),
66 | _document=jQuery(document),
67 | _html=jQuery("html,body"),
68 | body=jQuery("body"),
69 | currentSearchUrl="",
70 | urlFilters="",
71 | searchUrl="",
72 | animatingFilter=false,
73 | loadContentE=jQuery(options.loadContent),
74 | filtersMenuE=jQuery(options.filtersMenu),
75 | ajaxCallbackObj={requests:0,filters:0,isEmpty:false};
76 |
77 | var fn=
78 | {
79 | getUrl:function(scroll)
80 | {
81 | var s=scroll||false;
82 | if(s)
83 | return currentSearchUrl.replace(/PageNumber=[0-9]*/,"PageNumber="+currentPage);
84 | else
85 | return (searchUrl+urlFilters).replace(/PageNumber=[0-9]*/,"PageNumber="+pageNumber);
86 | },
87 | getSearchUrl:function()
88 | {
89 | var url, content, preg;
90 | jQuery("script:not([src])").each(function(){
91 | content=jQuery(this)[0].innerHTML;
92 | preg=/\/buscapagina\?.+&PageNumber=/i;
93 | if(content.search(/\/buscapagina\?/i)>-1)
94 | {
95 | url=preg.exec(content);
96 | return false;
97 | }
98 | });
99 |
100 | if(typeof(url)!=="undefined" && typeof(url[0])!=="undefined")
101 | return url[0];
102 | else
103 | {
104 | if(_console) console.log("[Erro] Não foi possível localizar a url de busca da página.\n Tente adicionar o .js ao final da página. \n[Método: getSearchUrl]");
105 | return "";
106 | }
107 | },
108 | scrollToTop:function()
109 | {
110 | var elem=body.find("#returnToTop");
111 |
112 | if(elem.length<1)
113 | {
114 | elem=jQuery('
', // Elemento com mensagem de carregando ao iniciar a requisição da página seguinte
26 | returnTopText:'voltar aoTOPO', // Texto a ser inserido
27 | emptySearchMsg:'
Esta combinação de filtros não retornou nenhum resultado!
', // Html para quando a busca retornar vazia
28 | filterErrorMsg:"Houve um erro ao tentar filtrar a página!", // Mensagem de erro
29 | searchUrl:null, // Url da página de busca (opicional)
30 | mergeMenu:true, // Definição se o menu será mesclado na página de departamento
31 | usePopup:false, // Opção p/ definir se deseja que a mensagem de não localizado seja exibida em um popup
32 | showLinks:true, // Exibe o menu de links caso o de filtro não seja encontrado
33 | popupAutoCloseSeconds:3, // Caso esteja utilizando popup, defina aqui o tempo para que ele feche automaticamente
34 | // Função que retorna o valor p/ onde a página deve rolar quando o usuário marca ou desmarca um filtro
35 | filterScrollTop:function(shelfOffset)
36 | {
37 | return (shelfOffset.top-20);
38 | },
39 | callback:function(){},
40 | // Cálculo do tamanho do footer para que uam nova página seja chamada antes do usuário chegar ao "final" do site
41 | getShelfHeight:function(container)
42 | {
43 | return (container.scrollTop()+container.height());
44 | },
45 | // Callback em cada requisição Ajax (Para requisições feitas com sucesso)
46 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
47 | ajaxCallback:function(){},
48 | // Função que é executada quando a seleção de filtros não retorna nenhum resultado
49 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
50 | emptySearchCallback:function(){},
51 | // Função para permitir ou não que a rolagem infinita execute na página esta deve retornar "true" ou "false"
52 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
53 | authorizeScroll:function(){return true;},
54 | // Função para permitir ou não que o conteúdo de "loadContent" seja atualizado. Esta deve retornar "true" ou "false"
55 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
56 | authorizeUpdate:function(){return true;}
57 | };
58 |
59 | var options=jQuery.extend(defaults, opts),
60 | _console="object"===typeof(console),
61 | $empty=jQuery(""),
62 | elemLoading=jQuery(options.elemLoading),
63 | currentPage=2,
64 | moreResults=true,
65 | _window=jQuery(window),
66 | _document=jQuery(document),
67 | _html=jQuery("html,body"),
68 | body=jQuery("body"),
69 | currentSearchUrl="",
70 | urlFilters="",
71 | searchUrl="",
72 | animatingFilter=false,
73 | loadContentE=jQuery(options.loadContent),
74 | filtersMenuE=jQuery(options.filtersMenu),
75 | ajaxCallbackObj={requests:0,filters:0,isEmpty:false};
76 |
77 | var fn=
78 | {
79 | getUrl:function(scroll)
80 | {
81 | var s=scroll||false;
82 | if(s)
83 | return currentSearchUrl.replace(/PageNumber=[0-9]*/,"PageNumber="+currentPage);
84 | else
85 | return (searchUrl+urlFilters).replace(/PageNumber=[0-9]*/,"PageNumber="+pageNumber);
86 | },
87 | getSearchUrl:function()
88 | {
89 | var url, content, preg;
90 | jQuery("script:not([src])").each(function(){
91 | content=jQuery(this)[0].innerHTML;
92 | preg=/\/buscapagina\?.+&PageNumber=/i;
93 | if(content.search(/\/buscapagina\?/i)>-1)
94 | {
95 | url=preg.exec(content);
96 | return false;
97 | }
98 | });
99 |
100 | if(typeof(url)!=="undefined" && typeof(url[0])!=="undefined")
101 | return url[0];
102 | else
103 | {
104 | if(_console) console.log("[Erro] Não foi possível localizar a url de busca da página.\n Tente adicionar o .js ao final da página. \n[Método: getSearchUrl]");
105 | return "";
106 | }
107 | },
108 | scrollToTop:function()
109 | {
110 | var elem=body.find("#returnToTop");
111 |
112 | if(elem.length<1)
113 | {
114 | elem=jQuery('
', // Elemento com mensagem de carregando ao iniciar a requisição da página seguinte
26 | returnTopText:'voltar aoTOPO', // Texto a ser inserido
27 | emptySearchMsg:'
Esta combinação de filtros não retornou nenhum resultado!
', // Html para quando a busca retornar vazia
28 | filterErrorMsg:"Houve um erro ao tentar filtrar a página!", // Mensagem de erro
29 | searchUrl:null, // Url da página de busca (opicional)
30 | mergeMenu:true, // Definição se o menu será mesclado na página de departamento
31 | usePopup:false, // Opção p/ definir se deseja que a mensagem de não localizado seja exibida em um popup
32 | showLinks:true, // Exibe o menu de links caso o de filtro não seja encontrado
33 | popupAutoCloseSeconds:3, // Caso esteja utilizando popup, defina aqui o tempo para que ele feche automaticamente
34 | // Função que retorna o valor p/ onde a página deve rolar quando o usuário marca ou desmarca um filtro
35 | filterScrollTop:function(shelfOffset)
36 | {
37 | return (shelfOffset.top-20);
38 | },
39 | callback:function(){},
40 | // Cálculo do tamanho do footer para que uam nova página seja chamada antes do usuário chegar ao "final" do site
41 | getShelfHeight:function(container)
42 | {
43 | return (container.scrollTop()+container.height());
44 | },
45 | // Callback em cada requisição Ajax (Para requisições feitas com sucesso)
46 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
47 | ajaxCallback:function(){},
48 | // Função que é executada quando a seleção de filtros não retorna nenhum resultado
49 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
50 | emptySearchCallback:function(){},
51 | // Função para permitir ou não que a rolagem infinita execute na página esta deve retornar "true" ou "false"
52 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
53 | authorizeScroll:function(){return true;},
54 | // Função para permitir ou não que o conteúdo de "loadContent" seja atualizado. Esta deve retornar "true" ou "false"
55 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
56 | authorizeUpdate:function(){return true;}
57 | };
58 |
59 | var options=jQuery.extend(defaults, opts),
60 | _console="object"===typeof(console),
61 | $empty=jQuery(""),
62 | elemLoading=jQuery(options.elemLoading),
63 | currentPage=2,
64 | moreResults=true,
65 | _window=jQuery(window),
66 | _document=jQuery(document),
67 | _html=jQuery("html,body"),
68 | body=jQuery("body"),
69 | currentSearchUrl="",
70 | urlFilters="",
71 | searchUrl="",
72 | animatingFilter=false,
73 | loadContentE=jQuery(options.loadContent),
74 | filtersMenuE=jQuery(options.filtersMenu),
75 | ajaxCallbackObj={requests:0,filters:0,isEmpty:false};
76 |
77 | var fn=
78 | {
79 | getUrl:function(scroll)
80 | {
81 | var s=scroll||false;
82 | if(s)
83 | return currentSearchUrl.replace(/PageNumber=[0-9]*/,"PageNumber="+currentPage);
84 | else
85 | return (searchUrl+urlFilters).replace(/PageNumber=[0-9]*/,"PageNumber="+pageNumber);
86 | },
87 | getSearchUrl:function()
88 | {
89 | var url, content, preg;
90 | jQuery("script:not([src])").each(function(){
91 | content=jQuery(this)[0].innerHTML;
92 | preg=/\/buscapagina\?.+&PageNumber=/i;
93 | if(content.search(/\/buscapagina\?/i)>-1)
94 | {
95 | url=preg.exec(content);
96 | return false;
97 | }
98 | });
99 |
100 | if(typeof(url)!=="undefined" && typeof(url[0])!=="undefined")
101 | return url[0];
102 | else
103 | {
104 | if(_console) console.log("[Erro] Não foi possível localizar a url de busca da página.\n Tente adicionar o .js ao final da página. \n[Método: getSearchUrl]");
105 | return "";
106 | }
107 | },
108 | scrollToTop:function()
109 | {
110 | var elem=body.find("#returnToTop");
111 |
112 | if(elem.length<1)
113 | {
114 | elem=jQuery('
', // Elemento com mensagem de carregando ao iniciar a requisição da página seguinte
26 | returnTopText:'voltar aoTOPO', // Texto a ser inserido
27 | emptySearchMsg:'
Esta combinação de filtros não retornou nenhum resultado!
', // Html para quando a busca retornar vazia
28 | filterErrorMsg:"Houve um erro ao tentar filtrar a página!", // Mensagem de erro
29 | searchUrl:null, // Url da página de busca (opicional)
30 | mergeMenu:true, // Definição se o menu será mesclado na página de departamento
31 | usePopup:false, // Opção p/ definir se deseja que a mensagem de não localizado seja exibida em um popup
32 | showLinks:true, // Exibe o menu de links caso o de filtro não seja encontrado
33 | popupAutoCloseSeconds:3, // Caso esteja utilizando popup, defina aqui o tempo para que ele feche automaticamente
34 | // Função que retorna o valor p/ onde a página deve rolar quando o usuário marca ou desmarca um filtro
35 | filterScrollTop:function(shelfOffset)
36 | {
37 | return (shelfOffset.top-20);
38 | },
39 | callback:function(){},
40 | // Cálculo do tamanho do footer para que uam nova página seja chamada antes do usuário chegar ao "final" do site
41 | getShelfHeight:function(container)
42 | {
43 | return (container.scrollTop()+container.height());
44 | },
45 | // Callback em cada requisição Ajax (Para requisições feitas com sucesso)
46 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
47 | ajaxCallback:function(){},
48 | // Função que é executada quando a seleção de filtros não retorna nenhum resultado
49 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
50 | emptySearchCallback:function(){},
51 | // Função para permitir ou não que a rolagem infinita execute na página esta deve retornar "true" ou "false"
52 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
53 | authorizeScroll:function(){return true;},
54 | // Função para permitir ou não que o conteúdo de "loadContent" seja atualizado. Esta deve retornar "true" ou "false"
55 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
56 | authorizeUpdate:function(){return true;},
57 | // Callback de cada laço percorrendo os fildsets e os labels. Retorna um objeto com algumas informações
58 | labelCallback:function(data){}
59 | };
60 |
61 | var options=jQuery.extend(defaults, opts),
62 | _console="object"===typeof(console),
63 | $empty=jQuery(""),
64 | elemLoading=jQuery(options.elemLoading),
65 | currentPage=2,
66 | moreResults=true,
67 | _window=jQuery(window),
68 | _document=jQuery(document),
69 | _html=jQuery("html,body"),
70 | body=jQuery("body"),
71 | currentSearchUrl="",
72 | urlFilters="",
73 | searchUrl="",
74 | animatingFilter=false,
75 | loadContentE=jQuery(options.loadContent),
76 | filtersMenuE=jQuery(options.filtersMenu),
77 | ajaxCallbackObj={requests:0,filters:0,isEmpty:false},
78 | labelCallbackData={};
79 |
80 | var fn=
81 | {
82 | getUrl:function(scroll)
83 | {
84 | var s=scroll||false;
85 | if(s)
86 | return currentSearchUrl.replace(/PageNumber=[0-9]*/,"PageNumber="+currentPage);
87 | else
88 | return (searchUrl+urlFilters).replace(/PageNumber=[0-9]*/,"PageNumber="+pageNumber);
89 | },
90 | getSearchUrl:function()
91 | {
92 | var url, content, preg;
93 | jQuery("script:not([src])").each(function(){
94 | content=jQuery(this)[0].innerHTML;
95 | preg=/\/buscapagina\?.+&PageNumber=/i;
96 | if(content.search(/\/buscapagina\?/i)>-1)
97 | {
98 | url=preg.exec(content);
99 | return false;
100 | }
101 | });
102 |
103 | if(typeof(url)!=="undefined" && typeof(url[0])!=="undefined")
104 | return url[0];
105 | else
106 | {
107 | if(_console) console.log("[Smart Research - Erro] Não foi possível localizar a url de busca da página.\n Tente adicionar o .js ao final da página. \n[Método: getSearchUrl]");
108 | return "";
109 | }
110 | },
111 | scrollToTop:function()
112 | {
113 | var elem=body.find("#returnToTop");
114 |
115 | if(elem.length<1)
116 | {
117 | elem=jQuery('
', // Elemento com mensagem de carregando ao iniciar a requisição da página seguinte
26 | returnTopText:'voltar aoTOPO', // Texto a ser inserido
27 | emptySearchMsg:'
Esta combinação de filtros não retornou nenhum resultado!
', // Html para quando a busca retornar vazia
28 | filterErrorMsg:"Houve um erro ao tentar filtrar a página!", // Mensagem de erro
29 | searchUrl:null, // Url da página de busca (opicional)
30 | mergeMenu:true, // Definição se o menu será mesclado na página de departamento
31 | usePopup:false, // Opção p/ definir se deseja que a mensagem de não localizado seja exibida em um popup
32 | showLinks:true, // Exibe o menu de links caso o de filtro não seja encontrado
33 | popupAutoCloseSeconds:3, // Caso esteja utilizando popup, defina aqui o tempo para que ele feche automaticamente
34 | // Função que retorna o valor p/ onde a página deve rolar quando o usuário marca ou desmarca um filtro
35 | filterScrollTop:function(shelfOffset)
36 | {
37 | return (shelfOffset.top-20);
38 | },
39 | callback:function(){},
40 | // Cálculo do tamanho do footer para que uam nova página seja chamada antes do usuário chegar ao "final" do site
41 | getShelfHeight:function(container)
42 | {
43 | return (container.scrollTop()+container.height());
44 | },
45 | // Callback em cada requisição Ajax (Para requisições feitas com sucesso)
46 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
47 | ajaxCallback:function(){},
48 | // Função que é executada quando a seleção de filtros não retorna nenhum resultado
49 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
50 | emptySearchCallback:function(){},
51 | // Função para permitir ou não que a rolagem infinita execute na página esta deve retornar "true" ou "false"
52 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
53 | authorizeScroll:function(){return true;},
54 | // Função para permitir ou não que o conteúdo de "loadContent" seja atualizado. Esta deve retornar "true" ou "false"
55 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
56 | authorizeUpdate:function(){return true;},
57 | // Callback de cada laço percorrendo os fildsets e os labels. Retorna um objeto com algumas informações
58 | labelCallback:function(data){}
59 | };
60 |
61 | var options=jQuery.extend(defaults, opts),
62 | _console="object"===typeof(console),
63 | $empty=jQuery(""),
64 | elemLoading=jQuery(options.elemLoading),
65 | currentPage=2,
66 | moreResults=true,
67 | _window=jQuery(window),
68 | _document=jQuery(document),
69 | _html=jQuery("html,body"),
70 | body=jQuery("body"),
71 | currentSearchUrl="",
72 | urlFilters="",
73 | searchUrl="",
74 | animatingFilter=false,
75 | loadContentE=jQuery(options.loadContent),
76 | filtersMenuE=jQuery(options.filtersMenu),
77 | ajaxCallbackObj={requests:0,filters:0,isEmpty:false},
78 | labelCallbackData={};
79 |
80 | var fn=
81 | {
82 | getUrl:function(scroll)
83 | {
84 | var s=scroll||false;
85 | if(s)
86 | return currentSearchUrl.replace(/PageNumber=[0-9]*/,"PageNumber="+currentPage);
87 | else
88 | return (searchUrl+urlFilters).replace(/PageNumber=[0-9]*/,"PageNumber="+pageNumber);
89 | },
90 | getSearchUrl:function()
91 | {
92 | var url, content, preg;
93 | jQuery("script:not([src])").each(function(){
94 | content=jQuery(this)[0].innerHTML;
95 | preg=/\/buscapagina\?.+&PageNumber=/i;
96 | if(content.search(/\/buscapagina\?/i)>-1)
97 | {
98 | url=preg.exec(content);
99 | return false;
100 | }
101 | });
102 |
103 | if(typeof(url)!=="undefined" && typeof(url[0])!=="undefined")
104 | return url[0];
105 | else
106 | {
107 | if(_console) console.log("[Smart Research - Erro] Não foi possível localizar a url de busca da página.\n Tente adicionar o .js ao final da página. \n[Método: getSearchUrl]");
108 | return "";
109 | }
110 | },
111 | scrollToTop:function()
112 | {
113 | var elem=body.find("#returnToTop");
114 |
115 | if(elem.length<1)
116 | {
117 | elem=jQuery('
', // Elemento com mensagem de carregando ao iniciar a requisição da página seguinte
26 | returnTopText:'voltar aoTOPO', // Texto a ser inserido
27 | emptySearchMsg:'
Esta combinação de filtros não retornou nenhum resultado!
', // Html para quando a busca retornar vazia
28 | filterErrorMsg:"Houve um erro ao tentar filtrar a página!", // Mensagem de erro
29 | searchUrl:null, // Url da página de busca (opicional)
30 | mergeMenu:true, // Definição se o menu será mesclado na página de departamento
31 | usePopup:false, // Opção p/ definir se deseja que a mensagem de não localizado seja exibida em um popup
32 | showLinks:true, // Exibe o menu de links caso o de filtro não seja encontrado
33 | popupAutoCloseSeconds:3, // Caso esteja utilizando popup, defina aqui o tempo para que ele feche automaticamente
34 | // Função que retorna o valor p/ onde a página deve rolar quando o usuário marca ou desmarca um filtro
35 | filterScrollTop:function(shelfOffset)
36 | {
37 | return (shelfOffset.top-20);
38 | },
39 | callback:function(){},
40 | // Cálculo do tamanho do footer para que uam nova página seja chamada antes do usuário chegar ao "final" do site
41 | getShelfHeight:function(container)
42 | {
43 | return (container.scrollTop()+container.height());
44 | },
45 | // Callback após inserir a prateleira na página
46 | shelfCallback:function(){},
47 | // Callback em cada requisição Ajax (Para requisições feitas com sucesso)
48 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
49 | ajaxCallback:function(){},
50 | // Função que é executada quando a seleção de filtros não retorna nenhum resultado
51 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
52 | emptySearchCallback:function(){},
53 | // Função para permitir ou não que a rolagem infinita execute na página esta deve retornar "true" ou "false"
54 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
55 | authorizeScroll:function(){return true;},
56 | // Função para permitir ou não que o conteúdo de "loadContent" seja atualizado. Esta deve retornar "true" ou "false"
57 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
58 | authorizeUpdate:function(){return true;},
59 | // Callback de cada laço percorrendo os fildsets e os labels. Retorna um objeto com algumas informações
60 | labelCallback:function(data){}
61 | };
62 |
63 | var options=jQuery.extend(defaults, opts),
64 | _console="object"===typeof(console),
65 | $empty=jQuery(""),
66 | elemLoading=jQuery(options.elemLoading),
67 | currentPage=2,
68 | moreResults=true,
69 | _window=jQuery(window),
70 | _document=jQuery(document),
71 | _html=jQuery("html,body"),
72 | body=jQuery("body"),
73 | currentSearchUrl="",
74 | urlFilters="",
75 | searchUrl="",
76 | animatingFilter=false,
77 | loadContentE=jQuery(options.loadContent),
78 | filtersMenuE=jQuery(options.filtersMenu),
79 | ajaxCallbackObj={requests:0,filters:0,isEmpty:false},
80 | labelCallbackData={};
81 |
82 | var fn=
83 | {
84 | getUrl:function(scroll)
85 | {
86 | var s=scroll||false;
87 | if(s)
88 | return currentSearchUrl.replace(/PageNumber=[0-9]*/,"PageNumber="+currentPage);
89 | else
90 | return (searchUrl+urlFilters).replace(/PageNumber=[0-9]*/,"PageNumber="+pageNumber);
91 | },
92 | getSearchUrl:function()
93 | {
94 | var url, content, preg;
95 | jQuery("script:not([src])").each(function(){
96 | content=jQuery(this)[0].innerHTML;
97 | preg=/\/buscapagina\?.+&PageNumber=/i;
98 | if(content.search(/\/buscapagina\?/i)>-1)
99 | {
100 | url=preg.exec(content);
101 | return false;
102 | }
103 | });
104 |
105 | if(typeof(url)!=="undefined" && typeof(url[0])!=="undefined")
106 | return url[0];
107 | else
108 | {
109 | if(_console) console.log("[Smart Research - Erro] Não foi possível localizar a url de busca da página.\n Tente adicionar o .js ao final da página. \n[Método: getSearchUrl]");
110 | return "";
111 | }
112 | },
113 | scrollToTop:function()
114 | {
115 | var elem=body.find("#returnToTop");
116 |
117 | if(elem.length<1)
118 | {
119 | elem=jQuery('
', // Elemento com mensagem de carregando ao iniciar a requisição da página seguinte
31 | returnTopText:'voltar aoTOPO', // Texto a ser inserido
32 | emptySearchMsg:'
Esta combinação de filtros não retornou nenhum resultado!
', // Html para quando a busca retornar vazia
33 | filterErrorMsg:"Houve um erro ao tentar filtrar a página!", // Mensagem de erro
34 | searchUrl:null, // Url da página de busca (opicional)
35 | mergeMenu:true, // Definição se o menu será mesclado na página de departamento
36 | usePopup:false, // Opção p/ definir se deseja que a mensagem de não localizado seja exibida em um popup
37 | showLinks:true, // Exibe o menu de links caso o de filtro não seja encontrado
38 | popupAutoCloseSeconds:3, // Caso esteja utilizando popup, defina aqui o tempo para que ele feche automaticamente
39 | // Função que retorna o valor p/ onde a página deve rolar quando o usuário marca ou desmarca um filtro
40 | filterScrollTop:function(shelfOffset)
41 | {
42 | return (shelfOffset.top-20);
43 | },
44 | callback:function(){},
45 | // Cálculo do tamanho do footer para que uam nova página seja chamada antes do usuário chegar ao "final" do site
46 | getShelfHeight:function(container)
47 | {
48 | return (container.scrollTop()+container.height());
49 | },
50 | // Callback após inserir a prateleira na página
51 | shelfCallback:function(){},
52 | // Callback em cada requisição Ajax (Para requisições feitas com sucesso)
53 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
54 | ajaxCallback:function(){},
55 | // Função que é executada quando a seleção de filtros não retorna nenhum resultado
56 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
57 | emptySearchCallback:function(){},
58 | // Função para permitir ou não que a rolagem infinita execute na página esta deve retornar "true" ou "false"
59 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
60 | authorizeScroll:function(){return true;},
61 | // Função para permitir ou não que o conteúdo de "loadContent" seja atualizado. Esta deve retornar "true" ou "false"
62 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
63 | authorizeUpdate:function(){return true;},
64 | // Callback de cada laço percorrendo os fildsets e os labels. Retorna um objeto com algumas informações
65 | labelCallback:function(data){}
66 | };
67 |
68 | var options=jQuery.extend(defaults, opts),
69 | _console="object"===typeof(console),
70 | $empty=jQuery(""),
71 | elemLoading=jQuery(options.elemLoading),
72 | currentPage=2,
73 | moreResults=true,
74 | _window=jQuery(window),
75 | _document=jQuery(document),
76 | _html=jQuery("html,body"),
77 | body=jQuery("body"),
78 | currentSearchUrl="",
79 | urlFilters="",
80 | searchUrl="",
81 | animatingFilter=false,
82 | loadContentE=jQuery(options.loadContent),
83 | filtersMenuE=jQuery(options.filtersMenu),
84 | ajaxCallbackObj={requests:0,filters:0,isEmpty:false},
85 | labelCallbackData={};
86 |
87 | var fn=
88 | {
89 | getUrl:function(scroll)
90 | {
91 | var s=scroll||false;
92 | if(s)
93 | return currentSearchUrl.replace(/PageNumber=[0-9]*/,"PageNumber="+currentPage);
94 | else
95 | return (searchUrl+urlFilters).replace(/PageNumber=[0-9]*/,"PageNumber="+pageNumber);
96 | },
97 | getSearchUrl:function()
98 | {
99 | var url, content, preg;
100 | jQuery("script:not([src])").each(function(){
101 | content=jQuery(this)[0].innerHTML;
102 | preg=/\/buscapagina\?.+&PageNumber=/i;
103 | if(content.search(/\/buscapagina\?/i)>-1)
104 | {
105 | url=preg.exec(content);
106 | return false;
107 | }
108 | });
109 |
110 | if(typeof(url)!=="undefined" && typeof(url[0])!=="undefined")
111 | return url[0];
112 | else
113 | {
114 | log("Não foi possível localizar a url de busca da página.\n Tente adicionar o .js ao final da página. \n[Método: getSearchUrl]");
115 | return "";
116 | }
117 | },
118 | scrollToTop:function()
119 | {
120 | var elem=body.find("#returnToTop");
121 |
122 | if(elem.length<1)
123 | {
124 | elem=jQuery('
', // Elemento com mensagem de carregando ao iniciar a requisição da página seguinte
32 | returnTopText:'voltar aoTOPO', // Mensagem de "retornar ao topo"
33 | emptySearchMsg:'
Esta combinação de filtros não retornou nenhum resultado!
', // Html com a mensagem para ser apresentada quando não existirem resultados para os filtros selecionados
34 | filterErrorMsg:"Houve um erro ao tentar filtrar a página!", // Mensagem de erro exibida quando existe algum erro de servidor ao aplicar os filtros
35 | searchUrl:null, // Url da página de busca (opicional)
36 | usePopup:false, // Opção p/ definir se deseja que a mensagem de não localizado seja exibida em um popup
37 | showLinks:true, // Exibe o menu de links caso o de filtro não seja encontrado
38 | popupAutoCloseSeconds:3, // Caso esteja utilizando popup, defina aqui o tempo para que ele feche automaticamente
39 | // Função que retorna o valor p/ onde a página deve rolar quando o usuário marca ou desmarca um filtro
40 | filterScrollTop:function(shelfOffset)
41 | {
42 | return (shelfOffset.top-20);
43 | },
44 | callback:function(){},
45 | // Cálculo do tamanho do conteúdo/vitrine para que uma nova página seja chamada antes do usuário chegar ao "final" do site
46 | getShelfHeight:function(container)
47 | {
48 | return (container.scrollTop()+container.height());
49 | },
50 | // Callback após inserir a prateleira na página
51 | shelfCallback:function(){},
52 | // Callback em cada requisição Ajax (Para requisições feitas com sucesso)
53 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
54 | ajaxCallback:function(){},
55 | // Função que é executada quando a seleção de filtros não retorna nenhum resultado
56 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
57 | emptySearchCallback:function(){},
58 | // Função para permitir ou não que a rolagem infinita execute na página esta deve retornar "true" ou "false"
59 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
60 | authorizeScroll:function(){return true;},
61 | // Função para permitir ou não que o conteúdo de "loadContent" seja atualizado. Esta deve retornar "true" ou "false"
62 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
63 | authorizeUpdate:function(){return true;},
64 | // Callback de cada laço percorrendo os fildsets e os labels. Retorna um objeto com algumas informações
65 | labelCallback:function(data){}
66 | };
67 |
68 | var options=jQuery.extend(defaults, opts),
69 | _console="object"===typeof(console),
70 | $empty=jQuery(""),
71 | elemLoading=jQuery(options.elemLoading),
72 | currentPage=2,
73 | moreResults=true,
74 | _window=jQuery(window),
75 | _document=jQuery(document),
76 | _html=jQuery("html,body"),
77 | body=jQuery("body"),
78 | currentSearchUrl="",
79 | urlFilters="",
80 | searchUrl="",
81 | animatingFilter=false,
82 | loadContentE=jQuery(options.loadContent),
83 | filtersMenuE=jQuery(options.filtersMenu),
84 | ajaxCallbackObj={requests:0,filters:0,isEmpty:false},
85 | labelCallbackData={};
86 |
87 | var fn=
88 | {
89 | getUrl:function(scroll)
90 | {
91 | var s=scroll||false;
92 | if(s)
93 | return currentSearchUrl.replace(/PageNumber=[0-9]*/,"PageNumber="+currentPage);
94 | else
95 | return (searchUrl+urlFilters).replace(/PageNumber=[0-9]*/,"PageNumber="+pageNumber);
96 | },
97 | getSearchUrl:function()
98 | {
99 | var url, content, preg;
100 | jQuery("script:not([src])").each(function(){
101 | content=jQuery(this)[0].innerHTML;
102 | preg=/\/buscapagina\?.+&PageNumber=/i;
103 | if(content.search(/\/buscapagina\?/i)>-1)
104 | {
105 | url=preg.exec(content);
106 | return false;
107 | }
108 | });
109 |
110 | if(typeof(url)!=="undefined" && typeof(url[0])!=="undefined")
111 | return url[0];
112 | else
113 | {
114 | log("Não foi possível localizar a url de busca da página.\n Tente adicionar o .js ao final da página. \n[Método: getSearchUrl]");
115 | return "";
116 | }
117 | },
118 | scrollToTop:function()
119 | {
120 | var elem=body.find("#returnToTop");
121 |
122 | if(elem.length<1)
123 | {
124 | elem=jQuery('
', // Elemento com mensagem de carregando ao iniciar a requisição da página seguinte
32 | returnTopText:'voltar aoTOPO', // Texto a ser inserido
33 | emptySearchMsg:'
Esta combinação de filtros não retornou nenhum resultado!
', // Html para quando a busca retornar vazia
34 | filterErrorMsg:"Houve um erro ao tentar filtrar a página!", // Mensagem de erro
35 | filterPage:"pagina-teste", // caminho para a página de filtros
36 | searchUrl:null, // Url da página de busca (opicional)
37 | removeCounter:false, // Define se será exibido o contador de resultados
38 | mergeMenu:true, // Definição se o menu será mesclado na página de departamento
39 | usePopup:false, // Opção p/ definir se deseja que a mensagem de não localizado seja exibida em um popup
40 | showLinks:true, // Exibe o menu de links caso o de filtro não seja encontrado
41 | popupAutoCloseSeconds:3, // Caso esteja utilizando popup, defina aqui o tempo para que ele feche automaticamente
42 | // Função que retorna o valor p/ onde a página deve rolar quando o usuário marca ou desmarca um filtro
43 | filterScrollTop:function(shelfOffset)
44 | {
45 | return (shelfOffset.top-20);
46 | },
47 | callback:function(){},
48 | // Cálculo do tamanho do conteúdo/vitrine para que uma nova página seja chamada antes do usuário chegar ao "final" do site
49 | getShelfHeight:function(container)
50 | {
51 | return (container.scrollTop()+container.height());
52 | },
53 | // Callback após inserir a prateleira na página
54 | shelfCallback:function(){},
55 | // Callback em cada requisição Ajax (Para requisições feitas com sucesso)
56 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
57 | ajaxCallback:function(){},
58 | // Função que é executada quando a seleção de filtros não retorna nenhum resultado
59 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
60 | emptySearchCallback:function(){},
61 | // Função para permitir ou não que a rolagem infinita execute na página esta deve retornar "true" ou "false"
62 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
63 | authorizeScroll:function(){return true;},
64 | // Função para permitir ou não que o conteúdo de "loadContent" seja atualizado. Esta deve retornar "true" ou "false"
65 | // Recebe como parâmetro um objeto contendo a quantidade total de requisições feitas e a quantidade de filtros selecionados
66 | authorizeUpdate:function(){return true;},
67 | // Callback de cada laço percorrendo os fildsets e os labels. Retorna um objeto com algumas informações
68 | labelCallback:function(data){}
69 | };
70 |
71 | var options=jQuery.extend(defaults, opts),
72 | _console="object"===typeof(console),
73 | $empty=jQuery(""),
74 | elemLoading=jQuery(options.elemLoading),
75 | currentPage=2,
76 | moreResults=true,
77 | _window=jQuery(window),
78 | _document=jQuery(document),
79 | _html=jQuery("html,body"),
80 | body=jQuery("body"),
81 | currentSearchUrl="",
82 | urlFilters="",
83 | searchUrl="",
84 | animatingFilter=false,
85 | loadContentE=jQuery(options.loadContent),
86 | filtersMenuE=jQuery(options.filtersMenu),
87 | ajaxCallbackObj={requests:0,filters:0,isEmpty:false},
88 | labelCallbackData={};
89 |
90 | var fn=
91 | {
92 | getUrl:function(option)
93 | {
94 | var s=option||false; // false => filtros | true => rolagem da página | 2 => pág. com os filtros
95 | if(s===true)
96 | return currentSearchUrl.replace(/PageNumber=[0-9]*/,"PageNumber="+currentPage);
97 | else if(s==2)
98 | return currentSearchUrl.replace(/PageNumber=[0-9]*/,"PageNumber=1").replace("buscapagina",options.filterPage);
99 | else
100 | return (searchUrl+urlFilters).replace(/PageNumber=[0-9]*/,"PageNumber="+pageNumber);
101 | },
102 | getSearchUrl:function()
103 | {
104 | var url, content, preg;
105 | jQuery("script:not([src])").each(function(){
106 | content=jQuery(this)[0].innerHTML;
107 | preg=/\/buscapagina\?.+&PageNumber=/i;
108 | if(content.search(/\/buscapagina\?/i)>-1)
109 | {
110 | url=preg.exec(content);
111 | return false;
112 | }
113 | });
114 |
115 | if(typeof(url)!=="undefined" && typeof(url[0])!=="undefined")
116 | return url[0];
117 | else
118 | {
119 | log("Não foi possível localizar a url de busca da página.\n Tente adicionar o .js ao final da página. \n[Método: getSearchUrl]");
120 | return "";
121 | }
122 | },
123 | scrollToTop:function()
124 | {
125 | var elem=body.find("#returnToTop");
126 |
127 | if(elem.length<1)
128 | {
129 | elem=jQuery('