X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=mkdru.client.js;h=c73e8751cf603d2f2ae447a4df220cab8472bb14;hb=49f8894f932cb93c328d13260fb9e773b39a1a6c;hp=add8bd1cfd3a4736d72be53dda4f42bade6cf68e;hpb=2b5e7db83479b99d46023a9e832d374f66fad453;p=mkdru-moved-to-drupal.org.git diff --git a/mkdru.client.js b/mkdru.client.js index add8bd1..c73e875 100644 --- a/mkdru.client.js +++ b/mkdru.client.js @@ -2,7 +2,6 @@ var mkdru = { // Settings to pass to pz2.js useSessions: Drupal.settings.mkdru.use_sessions === '1', - // showResponseType: 'json', // Variables active: false, pz2: null, @@ -17,11 +16,15 @@ var mkdru = { }, subject: { pz2Name: 'subject', - max: Drupal.settings.mkdru.subject_max + max: Drupal.settings.mkdru.subject_max, + multiLimit: true, + limiter: 'su' }, author: { pz2Name: 'author', - max: Drupal.settings.mkdru.author_max + max: Drupal.settings.mkdru.author_max, + multiLimit: false, + limiter: 'au' } }, // State @@ -30,14 +33,18 @@ var mkdru = { perpage: 20, sort: 'relevance', filter: null, - query:null, + query:'', recid:null }, - state: {} + state: {}, + realm: '' }; +// Wrapper for jQuery +(function ($) { + // So we can use jQuery BBQ with Drupal 6 and its 1.2.6 jQuery if (!$.isArray) $.isArray = function(obj) { return Object.prototype.toString.call(obj) === "[object Array]"; @@ -78,18 +85,15 @@ mkdru.pz2Init = function () { if (mkdru.state.query) { mkdru.search(); } - //mkdru.pz2.stat(); + mkdru.pz2.stat(); //mkdru.pz2.bytarget(); }; mkdru.pz2Show = function (data) { mkdru.totalRec = data.merged; $('.mkdru-pager').html(mkdru.generatePager()); - var countsHtml = Drupal.t('Displaying: ') + (data.start + 1) + - Drupal.t(' to ') + (data.start + data.num) + Drupal.t(' of ') - + data.merged + Drupal.t(' (found: ') + data.total + ')'; - $('.mkdru-counts').html(countsHtml); - + $('.mkdru-counts').html(Drupal.theme('mkdruCounts', data.start + 1, + data.num, data.merged, data.total)); var html = ""; for (var i = 0; i < data.hits.length; i++) { html += Drupal.theme('mkdruResult', data.hits[i], @@ -108,6 +112,7 @@ mkdru.pz2Show = function (data) { }; mkdru.pz2Status = function (data) { + $('.mkdru-status').html(Drupal.theme('mkdruStatus', data.activeclients, data.clients)); }; mkdru.pz2Term = function (data) { @@ -132,8 +137,8 @@ mkdru.pz2ByTarget = function (data) { mkdru.pz2Record = function (data) { clearTimeout(mkdru.pz2.showTimer); $('.mkdru-results').hide(); - $('.mkdru-detail').html(Drupal.theme('mkdruDetail', data)); - $('.mkdru-detail-back').bind('click', function () {$.bbq.removeState('recid');}); + $('.mkdru-detail').html(Drupal.theme('mkdruDetail', data, + mkdru.hashAddDelOne(null, null, 'recid'))); $('.mkdru-detail').show(); clearTimeout(mkdru.pz2.recordTimer); }; @@ -192,9 +197,9 @@ mkdru.hashChange = function () { } // Other internal link else { - // need to run search again to limit targets + // 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; } @@ -205,9 +210,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); @@ -219,7 +258,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 @@ -236,17 +275,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; }; @@ -256,7 +302,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); } @@ -264,7 +310,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 = []; @@ -307,7 +353,7 @@ $(document).ready(function () { mkdru.pz2 = new pz2( { "onshow": mkdru.pz2Show, "showtime": 500, //each timer (show, stat, term, bytarget) can be specified this way - "pazpar2path": mkdru.pazpar2path, + "pazpar2path": mkdru.pazpar2Path, "oninit": mkdru.pz2Init, "onstat": mkdru.pz2Status, "onterm": mkdru.pz2Term, @@ -328,13 +374,39 @@ $(document).ready(function () { mkdru.state.query = Drupal.settings.mkdru.query } + //not running against SP? init, otherwise authenticate if (mkdru.useSessions) { mkdru.pz2.init(); - } - else if (mkdru.state.recid) { - mkdru.pz2.record(mkdru.state.recid); - } - else if (mkdru.state.query) { - mkdru.search(); + } else { + //runnin against SP + var user = Drupal.settings.mkdru.sp_user; + var pass = Drupal.settings.mkdru.sp_pass; + var params = {}; + params['command'] = 'auth'; + if (user && pass) { + params['action'] = 'login'; + params['username'] = user; + params['password'] = pass; + } else { + params['action'] = 'ipauth'; + } + var authReq = new pzHttpRequest(mkdru.pazpar2Path, + function (err) { + alert("Authentication against metasearch gateway failed: " +err); + } + ); + authReq.get(params, + function (data) { + var s = data.getElementsByTagName('status'); + if (s.length && Element_getTextContent(s[0]) == "OK") { + mkdru.realm = data.getElementsByTagName('realm'); + mkdru.pz2Init(); + } else { + alert("Malformed response when authenticating against the metasearch" + + " gateway"); + } + } + ); } }); +})(jQuery); \ No newline at end of file