X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=mkdru.client.js;h=f2cd5ef1e6200f3737ed02e674001d87f093d1c8;hb=b025d9a4672722b2ef5dff718fd6a107f2c58982;hp=f6188eabff6b4ccacb87a7ac1c03072b9daa9092;hpb=27c48ae45b8367452d21dead4e71148cf62c9994;p=mkdru-moved-to-drupal.org.git diff --git a/mkdru.client.js b/mkdru.client.js index f6188ea..f2cd5ef 100644 --- a/mkdru.client.js +++ b/mkdru.client.js @@ -1,40 +1,12 @@ // Set up namespace and some state. var mkdru = { - // Settings to pass to pz2.js - useSessions: Drupal.settings.mkdru.use_sessions === '1', + settings: JSON.parse(Drupal.settings.mkdru.settings), // 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 || 10 - }, - subject: { - displayName: Drupal.settings.mkdru.subject_dname || "Subject", - orderWeight: Drupal.settings.mkdru.source_weight || 2, - pz2Name: 'subject', - 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 || 10, - multiLimit: false, - limiter: 'au' - } - }, - // State; Keys limit_{facet key} will also be initialised + facetContainerSelector: '#mkdru-raw-facet-container', defaultState: { page: 1, perpage: 20, @@ -45,8 +17,8 @@ var mkdru = { state: {}, realm: '' }; - - +// Convenient references +mkdru.facets = mkdru.settings.facets; // Wrapper for jQuery (function ($) { @@ -92,7 +64,6 @@ mkdru.pz2Init = function () { mkdru.search(); } mkdru.pz2.stat(); - //mkdru.pz2.bytarget(); }; mkdru.pz2Show = function (data) { @@ -137,16 +108,12 @@ mkdru.contains = function (hash, key, value) { } 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(';'); + 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) { @@ -155,15 +122,16 @@ mkdru.pz2Term = function (data) { 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.toggleLink = mkdru.removeLimit(facet, value); term.selected = true; } else { //disabled - term.hashQuery = mkdru.addLimit(facet, value); + term.toggleLink = mkdru.addLimit(facet, value); term.selected = false; } } $('.mkdru-facet-' + facet).html( - Drupal.theme('mkdruFacet', terms, facet, mkdru.facets[facet].max, hash)); + Drupal.theme('mkdruFacet', terms, facet, mkdru.facets[facet].max, + hash[facet])); } }; @@ -272,7 +240,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 { @@ -280,7 +249,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; } } @@ -326,11 +298,12 @@ mkdru.search = function () { 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] + '"'; } } } @@ -395,18 +368,24 @@ $(document).ready(function () { 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, + "pazpar2path": mkdru.settings.pz2_path, "oninit": mkdru.pz2Init, "onstat": mkdru.pz2Status, "onterm": mkdru.pz2Term, "termlist": termlist.join(','), - "onbytarget": mkdru.pz2ByTarget, - "usesessions" : mkdru.useSessions, + "usesessions" : mkdru.settings.use_sessions, "showResponseType": mkdru.showResponseType, "onrecord": mkdru.pz2Record, "autoInit": false } ); + mkdru.pz2.showFastCount = 1; // initialise state to hash string or defaults mkdru.stateFromHash(); @@ -421,12 +400,12 @@ $(document).ready(function () { } //not running against SP? init, otherwise authenticate - if (mkdru.useSessions) { + if (mkdru.settings.use_sessions) { mkdru.pz2.init(); } else { //runnin against SP - var user = Drupal.settings.mkdru.sp_user; - var pass = Drupal.settings.mkdru.sp_pass; + var user = mkdru.settings.sp.user; + var pass = mkdru.settings.sp.pass; var params = {}; params['command'] = 'auth'; if (user && pass) { @@ -436,7 +415,7 @@ $(document).ready(function () { } else { params['action'] = 'ipauth'; } - var authReq = new pzHttpRequest(mkdru.pazpar2Path, + var authReq = new pzHttpRequest(mkdru.settings.pz2_path, function (err) { alert("Authentication against metasearch gateway failed: " +err); }