X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=mkdru.client.js;h=5c2d0d029e610af495a298f2a1d9c0f84ab2cd23;hb=db5b797778922d50919364399c90411dfdfb712a;hp=ce5637ee5bf0d2ea3c217334726d795c6e29f208;hpb=f1795ec17ae3999b5e652bdabb4016345533b35b;p=mkdru-moved-to-drupal.org.git diff --git a/mkdru.client.js b/mkdru.client.js index ce5637e..5c2d0d0 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 }, @@ -228,21 +227,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 +272,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 +281,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; } }