limiter: 'au'
}
},
- // State
+ // State; Keys limit_{facet key} will also be initialised
defaultState: {
page: 1,
perpage: 20,
sort: 'relevance',
- filter: null,
query:'',
recid:null
},
$('.mkdru-status').html(Drupal.theme('mkdruStatus', data.activeclients, data.clients));
};
+mkdru.contains = function (hash, key, value) {
+ if (hash[key]) {
+ if (hash[key].length) {
+ for (var i=0; i<hash[key].length; i++) {
+ if (hash[key][i] === value) {
+ return true;
+ }
+ }
+ } else {
+ return hash[key] === value;
+ }
+ }
+ return false;
+}
+
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(';');
+ delete hash[key];
+ }
for (var facet in mkdru.facets) {
- // facet is limited
- if (mkdru.state['limit_' + facet]) {
- $('.mkdru-facet-' + facet).html(Drupal.theme('mkdruFacetLimit',
- data[mkdru.facets[facet].pz2Name][0],
- mkdru.hashAddDelOne(null, null, 'limit_' + facet)));
- } else {
- $('.mkdru-facet-' + facet).html(Drupal.theme('mkdruFacet',
- data[mkdru.facets[facet].pz2Name],
- facet, mkdru.facets[facet].max));
+ var terms = data[mkdru.facets[facet].pz2Name];
+ for (var i=0; i<terms.length; i++) {
+ var term = terms[i];
+ var value = facet == "source" ? term.id : term.name;
+ if (mkdru.contains(hash, facet, value)) { //enabled
+ term.hashQuery = mkdru.removeLimit(facet, value);
+ term.selected = true;
+ } else { //disabled
+ term.hashQuery = mkdru.addLimit(facet, value);
+ term.selected = false;
+ }
}
+ $('.mkdru-facet-' + facet).html(
+ Drupal.theme('mkdruFacet', terms, facet, mkdru.facets[facet].max, hash));
}
};
};
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();
}