X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=mkdru.client.js;h=5c2d0d029e610af495a298f2a1d9c0f84ab2cd23;hb=db5b797778922d50919364399c90411dfdfb712a;hp=f931c3ea0c13c3cef747d2010d00837d1268bbe9;hpb=2114cf859f1f8471b148739f7cd930cadc4cc8c4;p=mkdru-moved-to-drupal.org.git diff --git a/mkdru.client.js b/mkdru.client.js index f931c3e..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 }, @@ -146,7 +145,7 @@ mkdru.pz2Term = function (data) { // map all facets against selected, for simple rendering var hash = $.deparam.fragment(); for (var key in hash) { - if (key.indexOf('limit') == 0 && hash[key].indexOf(';')) + if (key.indexOf('limit') == 0) //always wrap in array hash[key.substr(6)] = hash[key].split(';'); delete hash[key]; } @@ -164,7 +163,7 @@ mkdru.pz2Term = function (data) { } } $('.mkdru-facet-' + facet).html( - Drupal.theme('mkdruFacet', terms, facet, mkdru.facets[facet].max)); + Drupal.theme('mkdruFacet', terms, facet, mkdru.facets[facet].max, hash)); } }; @@ -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; } }