From 266d0462185aa4fede11cce99a0561bfb43fe4af Mon Sep 17 00:00:00 2001 From: Mateus Rambo Strey <mars11@inf.ufpr.br> Date: Thu, 15 Oct 2015 11:00:18 -0300 Subject: [PATCH] fix search history back --- app/assets/javascripts/application/search.js | 60 +++++------- .../stylesheets/application/search.scss | 97 +------------------ app/views/layouts/application.html.erb | 2 +- app/views/search/_fetch.html.erb | 3 +- app/views/search/index.html.erb | 21 ++-- 5 files changed, 38 insertions(+), 145 deletions(-) diff --git a/app/assets/javascripts/application/search.js b/app/assets/javascripts/application/search.js index 967cc5ce5..d13ca48cc 100644 --- a/app/assets/javascripts/application/search.js +++ b/app/assets/javascripts/application/search.js @@ -12,7 +12,8 @@ var search = function() { } // change url with new parameters - searchState(params); + if (!fetch_init) { fetch_init = true} + else if (!append) { searchState(params); } $.ajax({ url:"/search/fetch", @@ -23,6 +24,7 @@ var search = function() { $('.search-more').remove(); } else { + $('.result-info').hide(); $("#search-fetch").empty(); } $('#search-fetch').append('<div class="search-loading" style="text-align:center;"><br><div class="pong-loader">Carregando...</div></div>'); @@ -34,6 +36,8 @@ var search = function() { } else { $("#search-fetch").empty(); + $('.result-info-count').html($(data).filter('input:hidden[name="learning-objects-count"]').val()); + $('.result-info').show(); } $("#search-fetch").append(data); @@ -49,15 +53,12 @@ var search = function() { var has_init = false; function init() { - // init when document is ready - $(document).ready(function () { - // check url and set inputs with params - checkUrl(); - - watchSearchInput(); - watchOrder(); - watchFilters(); - }); + // check url and set inputs with params + checkUrl(); + + watchSearchInput(); + watchOrder(); + watchFilters(); } // get parameters from url when page is loaded @@ -107,6 +108,7 @@ var search = function() { watchCheckbox('school_year', 'filter-school-year'); } + // control ajax requisitions (fetch) of filters function filtersFetchInterval() { // cancel previous function call clearInterval(intervalId); @@ -114,7 +116,7 @@ var search = function() { searchFetch(); // cancel to not loop (interval) clearInterval(intervalId); - }, 800 ); + }, 800); } function watchFilterSubject() { @@ -174,7 +176,7 @@ var search = function() { $('.search-more').on('click', function (event) { event.preventDefault(); params.add('page', params.get('page') + 1); - searchFetch(true); + searchFetch(); }); } } @@ -183,38 +185,24 @@ var search = function() { //// INIT // initiate params var params = searchParameters(); + var fetch_init = false; - // init when document is ready - $(document).ready(function () { - // return previous state when back - $(window).on("popstate", function(e) { - var original = e.originalEvent.state; - history.replaceState(original, original.url, original.url); - searchFetch(); - }); + // run watchers + searchWatchers().init(); - // run watchers - searchWatchers().init(); - }); + // TODO: find a way to manage all requisitions without page reload }; //// SEARCH STATE // take care of History API var searchState = function(params, replace) { - if (replace === undefined) { - replace = false; - } - - var newState = history.state; + if ((replace === undefined) || (replace !== true)) { replace = false; } + var newState = JSON.parse(JSON.stringify(history.state)); newState.url = params.url(); newState.search_params = params.get(); - if (replace) { - history.replaceState(newState, newState.url, newState.url); - } - else { - history.pushState(newState, newState.url, newState.url); - } + if (replace) { history.replaceState(newState, location.href, location.href); } + else { history.pushState(newState, newState.url, newState.url); } } //// SEARCH PARAMETERS @@ -318,12 +306,14 @@ var searchParameters = function() { //// DROPDOWN var runDropdown = function(element) { - if ($(element).next().is(':hidden')) { + if (($(element).next().data('dropdown') === 'closed')) { $('> .caret', element).addClass('caret-up'); $(element).next().slideDown(); + $(element).next().data('dropdown', 'open'); } else { $('> .caret', element).removeClass('caret-up'); $(element).next().slideUp(); + $(element).next().data('dropdown', 'closed'); } }; diff --git a/app/assets/stylesheets/application/search.scss b/app/assets/stylesheets/application/search.scss index c955e0154..440e34380 100644 --- a/app/assets/stylesheets/application/search.scss +++ b/app/assets/stylesheets/application/search.scss @@ -1,12 +1,12 @@ .search-sidebar { margin-top: 40px; + display: none; .dropdown-element { width: 95%; margin-left: 3%; } - } .nestedAccordion { @@ -31,98 +31,3 @@ color: #59585A; padding-right: 20px; } - -// #nestedAccordion{ -// width:100%; -// } -// #nestedAccordion h2, #nestedAccordion h3, -// #nestedAccordion div, #nestedAccordion ol, -// #nestedAccordion li{ -// /* reset styles for accordion */ -// margin:0; -// padding:0; -// font-size:1em; -// font-weight:normal; -// list-style:none; -// } -// #nestedAccordion div{ -// color:#555;/*#555 #003300*/ -// overflow:hidden; -// display:none; -// } -// -// #nestedAccordion h2{ -// cursor:pointer; -// color:#fff; -// font-size:1.1em; -// moz-border-radius: 5px 5px 0 0; -// -webkit-border-radius: 5px 5px 0 0; -// border-radius: 5px 5px 0 0; -// padding:3px; -// margin-top:5px; -// background-color: #3F434F; -// background-image: -webkit-gradient(linear, left top, left bottom, from(#4B8CFF), to(#447FE8)); -// background-image: -webkit-linear-gradient(top, #4B8CFF, #447FE8);/*#4B8CFF, #447FE8*/ -// background-image: -moz-linear-gradient(top, #4B8CFF, #447FE8); -// background-image: -ms-linear-gradient(top, #4B8CFF, #447FE8); -// background-image: -o-linear-gradient(top, #4B8CFF, #447FE8); -// background-image: linear-gradient(to bottom, #4B8CFF, #447FE8); -// background-image: url("arrow.ico"); -// background-repeat: no-repeat; -// background-position: right bottom; -// } -// #nestedAccordion h3{ -// cursor:pointer; -// padding:4px; -// color: #666; -// text-shadow: 0 1px 0 rgba(255, 255, 255, .5); -// background-color: #f5f5f5; -// background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#ededed)); -// background-image: -webkit-linear-gradient(top, #f5f5f5, #ededed); -// background-image: -moz-linear-gradient(top, #f5f5f5, #ededed); -// background-image: -ms-linear-gradient(top, #f5f5f5, #ededed); -// background-image: -o-linear-gradient(top, #f5f5f5, #ededed); -// background-image: linear-gradient(to bottom, #f5f5f5, #ededed); -// -// } -// #nestedAccordion h3:hover{ -// color:#000; -// } -// #nestedAccordion h3 + div{ -// display:none; -// background-color:#F5F5F5; -// padding:5px 5px 5px 30px; -// } -// #nestedAccordion li:hover{ -// color:#000; -// cursor:pointer; -// } -// #nestedAccordion h2 +div.aberto{ -// display:inherit; -// } -// ///Contrast -// .contraste{ -// .thumbnail{ -// background-color: black !important; -// } -// .navbar{ -// select{ -// color: black; -// } -// } -// #nestedAccordion{ -// div{ -// background-color: black !important; -// color: white !important; -// } -// h3{ -// color: white; -// background-color: black !important; -// background-image: none !important; -// border-bottom: 1px solid white; -// } -// h3:hover{ -// color: white; -// } -// } -// } diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 0b1b153b9..4bf39a06f 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -8,7 +8,7 @@ <%= csrf_meta_tags %> <meta property="creator.productor" content="http://estruturaorganizacional.dados.gov.br/id/unidade-organizacional/1"> </head> -<body> +<body <%= yield(:body_attributes) %>> <%= render 'shared/application/header' %> <% if user_signed_in? %> diff --git a/app/views/search/_fetch.html.erb b/app/views/search/_fetch.html.erb index 64b030930..c13adc834 100644 --- a/app/views/search/_fetch.html.erb +++ b/app/views/search/_fetch.html.erb @@ -1,2 +1,3 @@ +<input type="hidden" name="learning-objects-count" value="<%= @result.total_count %>"/> <%= render @objects, orientation: "horizontal" %> -<a href="javascript:void(0);" class="btn btn-primary search-more">Ver mais</a> +<%= link_to "ver mais", "javascript:void(0);", class: "btn btn-primary search-more" unless @objects.blank? %> diff --git a/app/views/search/index.html.erb b/app/views/search/index.html.erb index 38ebb7b42..9b24323a1 100644 --- a/app/views/search/index.html.erb +++ b/app/views/search/index.html.erb @@ -1,3 +1,4 @@ +<%= content_for(:body_attributes) do %> data-no-turbolink <% end %> <div class="row"> <div class="col-sm-4 search-sidebar" id="menu-left"> <!-- <h2>Busca Avançada</h2> --> @@ -265,7 +266,7 @@ <form method="get"> <input type="hidden" name="qry" value="<%= params["qry"] %>"> - <select class="order" class="sort-dropdown" name="order"> + <select class="order sort-dropdown" name="order"> <option value="">ordenar resultados</option> <option value="author">autores</option> <option value="publicationasc">mais novos</option> @@ -283,17 +284,13 @@ </div> </div> - <script type="text/javascript"> - $(document).ready(function () { - runDropdown($('.nestedAccordion .dropdown')); - - $(".select-tag-container").select2(); - - search(); - - $('.nestedAccordion .dropdown').click(function () { - runDropdown(this); - }); + $(".select-tag-container").select2(); + runDropdown($('.nestedAccordion .dropdown')); + $('.nestedAccordion .dropdown').click(function () { + runDropdown(this); }); + $('.search-sidebar').show(); + + search(); </script> -- GitLab