X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=mkdru.client.js;h=a80a58dec865365bf7679c9ab6c2b1598760f056;hb=c91f32e85a33069730fb24c71db521e1e9f6cfa6;hp=ce5637ee5bf0d2ea3c217334726d795c6e29f208;hpb=f1795ec17ae3999b5e652bdabb4016345533b35b;p=mkdru-moved-to-drupal.org.git diff --git a/mkdru.client.js b/mkdru.client.js index ce5637e..a80a58d 100644 --- a/mkdru.client.js +++ b/mkdru.client.js @@ -34,12 +34,11 @@ var mkdru = { limiter: 'au' } }, - // State + // State; Keys limit_{facet key} will also be initialised defaultState: { page: 1, perpage: 20, sort: 'relevance', - filter: null, query:'', recid:null }, @@ -138,16 +137,12 @@ mkdru.contains = function (hash, key, value) { } mkdru.pz2Term = function (data) { - // if signaled, prepare container client-side - if (mkdru.facetContainerSelector) { - $(mkdru.facetContainerSelector).html(Drupal.theme('mkdruFacetContainer', - data, mkdru.facets)); - } // map all facets against selected, for simple rendering var hash = $.deparam.fragment(); for (var key in hash) { - if (key.indexOf('limit') == 0) //always wrap in array - hash[key.substr(6)] = hash[key].split(';'); + if (key.indexOf('limit') == 0 && hash[key]) + //always wrap in array + hash[key.substr(6)] = hash[key].split(/;+/); delete hash[key]; } for (var facet in mkdru.facets) { @@ -164,7 +159,8 @@ mkdru.pz2Term = function (data) { } } $('.mkdru-facet-' + facet).html( - Drupal.theme('mkdruFacet', terms, facet, mkdru.facets[facet].max, hash)); + Drupal.theme('mkdruFacet', terms, facet, mkdru.facets[facet].max, + hash[facet])); } }; @@ -228,21 +224,28 @@ mkdru.uiFromState = function () { }; mkdru.hashChange = function () { + // do we need to restart the search? + var searchTrigger = false; + // shallow copy of state so we can see what changed. + var oldState = $.extend({}, mkdru.state); mkdru.stateFromHash(); - // Request for details - if (mkdru.state.recid) { + // only have to compare values since all keys are initialised + for (key in mkdru.state) { + var changed = (mkdru.state[key] != oldState[key]); + if (key.substring(0,5) === 'limit' && changed) + searchTrigger = true; + if (key === 'page' && changed) + mkdru.pz2.showPage(mkdru.state.page-1); + if (key === 'query' && changed) + searchTrigger = true; + } + if (searchTrigger) + mkdru.search(); + // request for record detail + if (mkdru.state.recid && (mkdru.state.recid != oldState.recid)) { mkdru.pz2.record(mkdru.state.recid); } - // Other internal link else { - // may need to run search again to limit targets - for (key in mkdru.state) { - if (key.substring(0,5) === 'limit' && mkdru.state[key]) { - mkdru.search(); - break; - } - } - mkdru.pz2.showPage(mkdru.state.page-1); $('.mkdru-detail').hide(); $('.mkdru-results').show(); } @@ -266,7 +269,8 @@ mkdru.addLimit = function (facet, limit) { mkdru.removeLimit = function (facet, limit) { var newHash = $.deparam.fragment(); delete newHash['page']; - if (!newHash['limit_' + facet].indexOf(';') || !mkdru.facets[facet].multiLimit) { + if (!newHash['limit_' + facet].indexOf(';') + || !mkdru.facets[facet].multiLimit) { delete newHash['limit_' + facet]; } else { @@ -274,7 +278,10 @@ mkdru.removeLimit = function (facet, limit) { for (var i = 0; i < limits.length; i++) { if (limits[i] == limit) { limits.splice(i, 1); - newHash['limit_' + facet] = limits.join(';'); + if (limits.length < 1) + delete newHash['limit_' + facet]; + else + newHash['limit_' + facet] = limits.join(';'); break; } } @@ -320,11 +327,12 @@ mkdru.search = function () { filter = 'pz:id=' + mkdru.state.limit_source; } else { - var limits = mkdru.state['limit_' + facet].split(';'); + var limits = mkdru.state['limit_' + facet].split(/;+/); for (var i = 0; i < limits.length; i++) { // ex. query + and au="{limit_author}" - query += ' and ' + mkdru.facets[facet]['limiter'] + '="' - + mkdru.state['limit_' + facet] + '"'; + if (limits[i]) + query += ' and ' + mkdru.facets[facet]['limiter'] + '="' + + limits[i] + '"'; } } } @@ -389,6 +397,12 @@ $(document).ready(function () { mkdru.defaultState['limit_' + key] = null; } + // if signaled, prepare facet container client-side + if (mkdru.facetContainerSelector) { + $(mkdru.facetContainerSelector).html(Drupal.theme('mkdruFacetContainer', + mkdru.facets)); + } + mkdru.pz2 = new pz2( { "onshow": mkdru.pz2Show, "showtime": 500, //each timer (show, stat, term, bytarget) can be specified this way "pazpar2path": mkdru.pazpar2Path,