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.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 && hash[key].indexOf(';'))
- 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) {
}
}
$('.mkdru-facet-' + facet).html(
- Drupal.theme('mkdruFacet', terms, facet, mkdru.facets[facet].max));
+ Drupal.theme('mkdruFacet', terms, facet, mkdru.facets[facet].max,
+ hash[facet]));
}
};
};
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();
}
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 {
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;
}
}
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] + '"';
}
}
}
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,