X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=mkdru.client.js;h=9365e78125fdca67c8bb9b2dba714105daa480fb;hb=ae2619caecfb844e4e1792705780bbc87d294bff;hp=7f83e3c03900053246b208036e617887fa45ffb2;hpb=7e8718e6762ff015a78e1e9ec93c03b7c67c6abb;p=mkdru-moved-to-drupal.org.git diff --git a/mkdru.client.js b/mkdru.client.js index 7f83e3c..9365e78 100644 --- a/mkdru.client.js +++ b/mkdru.client.js @@ -2,26 +2,36 @@ var mkdru = { // Settings to pass to pz2.js useSessions: Drupal.settings.mkdru.use_sessions === '1', - // showResponseType: 'json', // Variables active: false, pz2: null, totalRec: 0, pagerRange: 6, pazpar2Path: Drupal.settings.mkdru.pz2_path, + facetContainerSelector: Drupal.settings.mkdru.facetContainerSelector, // Facets facets: { source: { + displayName: Drupal.settings.mkdru.source_dname || "Source", + orderWeight: Drupal.settings.mkdru.source_weight || 1, pz2Name: 'xtargets', - max: Drupal.settings.mkdru.source_max + max: Drupal.settings.mkdru.source_max || 10 }, subject: { + displayName: Drupal.settings.mkdru.subject_dname || "Subject", + orderWeight: Drupal.settings.mkdru.source_weight || 2, pz2Name: 'subject', - max: Drupal.settings.mkdru.subject_max + max: Drupal.settings.mkdru.subject_max || 10, + multiLimit: true, + limiter: 'su' }, author: { + displayName: Drupal.settings.mkdru.author_dname || "Author", + orderWeight: Drupal.settings.mkdru.source_weight || 3, pz2Name: 'author', - max: Drupal.settings.mkdru.author_max + max: Drupal.settings.mkdru.author_max || 10, + multiLimit: false, + limiter: 'au' } }, // State @@ -113,6 +123,11 @@ mkdru.pz2Status = function (data) { }; mkdru.pz2Term = function (data) { + // if signaled, prepare container client-side + if (mkdru.facetContainerSelector) { + $(mkdru.facetContainerSelector).html(Drupal.theme('mkdruFacetContainer', + data, mkdru.facets)); + } for (var facet in mkdru.facets) { // facet is limited if (mkdru.state['limit_' + facet]) { @@ -196,7 +211,7 @@ mkdru.hashChange = function () { else { // may need to run search again to limit targets for (key in mkdru.state) { - if (key.substring(0,5) === 'limit') { + if (key.substring(0,5) === 'limit' && mkdru.state[key]) { mkdru.search(); break; } @@ -207,9 +222,43 @@ mkdru.hashChange = function () { } }; +// return link to limit facet +mkdru.addLimit = function (facet, limit) { + var newHash = $.deparam.fragment(); + delete newHash['page']; + if ((typeof(newHash['limit_' + facet]) === 'undefined') + || !mkdru.facets[facet].multiLimit) { + newHash['limit_' + facet] = limit; + } + else { + newHash['limit_' + facet] += ';' + limit; + } + return $.param.fragment("#", newHash); +}; + +// return link to remove limit from facet +mkdru.removeLimit = function (facet, limit) { + var newHash = $.deparam.fragment(); + delete newHash['page']; + if (!newHash['limit_' + facet].indexOf(';') || !mkdru.facets[facet].multiLimit) { + delete newHash['limit_' + facet]; + } + else { + var limits = newHash['limit_' + facet].split(';'); + for (var i = 0; i < limits.length; i++) { + if (limits[i] == limit) { + limits.splice(i, 1); + newHash['limit_' + facet] = limits.join(';'); + break; + } + } + } + return $.param.fragment("#", newHash); +}; + -//form submit handler +// form submit handler mkdru.submitQuery = function () { // new query, back to defaults (shallow copy) mkdru.state = $.extend({}, mkdru.defaultState); @@ -221,7 +270,7 @@ mkdru.submitQuery = function () { return false; }; -//criteria drop-down (perpage, sort) handler +// criteria drop-down (perpage, sort) handler mkdru.submitCriteria = function () { mkdru.pollDropDowns(); //search is not ON, do nothing @@ -238,17 +287,24 @@ mkdru.search = function () { var query = mkdru.state.query; // facet limit implementation - if (mkdru.state.limit_source) { - filter = 'pz:id=' + mkdru.state.limit_source; - } - if (mkdru.state.limit_subject) { - query += ' and su="' + mkdru.state.limit_subject + '"'; - } - if (mkdru.state.limit_author) { - query += ' and au="' + mkdru.state.limit_author + '"'; + for (var facet in mkdru.facets) { + // facet is limited + if (mkdru.state['limit_' + facet]) { + if (facet == "source") { + filter = 'pz:id=' + mkdru.state.limit_source; + } + else { + 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] + '"'; + } + } + } } + mkdru.pz2.search(query, mkdru.state.perpage, mkdru.state.sort, filter); - //inform others that the search is ON mkdru.active = true; }; @@ -258,7 +314,7 @@ mkdru.pollDropDowns = function () { }; mkdru.generatePager = function () { - // make sure page param is a number, otherwise pageing frwd will be broken + // cast page parameter to numeric so we can add to it if (typeof mkdru.state.page == "string") { mkdru.state.page = Number(mkdru.state.page); } @@ -266,7 +322,7 @@ mkdru.generatePager = function () { var first = (mkdru.state.page - mkdru.pagerRange > 0) ? mkdru.state.page - mkdru.pagerRange : 1; var last = first + 2 * mkdru.pagerRange < total - ? first + 2 * mkdru.pagerRange : total; + ? first + 2 * mkdru.pagerRange : total; var prev = null; var next = null; var pages = []; @@ -328,8 +384,10 @@ $(document).ready(function () { // ting thing if (typeof(Drupal.settings.mkdru.query) !== "undefined") { mkdru.state.query = Drupal.settings.mkdru.query + //force the hash to contain query + mkdru.hashFromState(); } - + //not running against SP? init, otherwise authenticate if (mkdru.useSessions) { mkdru.pz2.init(); @@ -365,4 +423,4 @@ $(document).ready(function () { ); } }); -})(jQuery); \ No newline at end of file +})(jQuery);