From: Wolfram Schneider Date: Wed, 7 May 2014 12:38:24 +0000 (+0000) Subject: Merge remote branch 'origin/master' into wosch X-Git-Tag: 1.0.0~621^2~12 X-Git-Url: http://lists.indexdata.dk/cgi-bin?a=commitdiff_plain;h=9c4f25d2a63f2d9d51bf8cc6d5a6293ff4d348cc;hp=40c4cf423007caf35606c53b39f16958e0c55010;p=mkws-moved-to-github.git Merge remote branch 'origin/master' into wosch --- diff --git a/examples/htdocs/mkws-widget-reference.js b/examples/htdocs/mkws-widget-reference.js index 20e701a..7bccbcf 100644 --- a/examples/htdocs/mkws-widget-reference.js +++ b/examples/htdocs/mkws-widget-reference.js @@ -1,9 +1,9 @@ mkws.registerWidgetType('Reference', function() { - mkws.promotionFunction('Record').call(this); - if (!this.config.target) this.config.target = 'wikimedia_wikipedia_single_result'; - if (!this.config.template) this.config.template = 'Reference'; + mkws.promotionFunction('Record').call(this); + if (!this.config.target) this.config.target = 'wikimedia_wikipedia_single_result'; + if (!this.config.template) this.config.template = 'Reference'; - this.team.registerTemplate('Reference', '\ + this.team.registerTemplate('Reference', '\ {{md-title}}\

{{md-title}}

\ {{#if md-title-remainder}}\ diff --git a/src/mkws-core.js b/src/mkws-core.js index 1e84fca..87070f8 100644 --- a/src/mkws-core.js +++ b/src/mkws-core.js @@ -10,156 +10,156 @@ // authentication, and a hash of team objects, indexed by team-name. // var mkws = { - authenticated: false, - log_level: 1, // Will be overridden from mkws.config, but - // initial value allows jQuery popup to use logging. - teams: {}, - widgetType2function: {}, - - locale_lang: { - "de": { - "Authors": "Autoren", - "Subjects": "Schlagwörter", - "Sources": "Daten und Quellen", - "source": "datenquelle", - "Termlists": "Termlisten", - "Next": "Weiter", - "Prev": "Zurück", - "Search": "Suche", - "Sort by": "Sortieren nach", - "and show": "und zeige", - "per page": "pro Seite", - "Displaying": "Zeige", - "to": "von", - "of": "aus", - "found": "gefunden", - "Title": "Titel", - "Author": "Autor", - "author": "autor", - "Date": "Datum", - "Subject": "Schlagwort", - "subject": "schlagwort", - "Location": "Ort", - "Records": "Datensätze", - "Targets": "Datenbanken", - - "dummy": "dummy" - }, - - "da": { - "Authors": "Forfattere", - "Subjects": "Emner", - "Sources": "Kilder", - "source": "kilder", - "Termlists": "Termlists", - "Next": "Næste", - "Prev": "Forrige", - "Search": "Søg", - "Sort by": "Sorter efter", - "and show": "og vis", - "per page": "per side", - "Displaying": "Viser", - "to": "til", - "of": "ud af", - "found": "fandt", - "Title": "Title", - "Author": "Forfatter", - "author": "forfatter", - "Date": "Dato", - "Subject": "Emneord", - "subject": "emneord", - "Location": "Lokation", - "Records": "Poster", - "Targets": "Baser", - - "dummy": "dummy" - } + authenticated: false, + log_level: 1, // Will be overridden from mkws.config, but + // initial value allows jQuery popup to use logging. + teams: {}, + widgetType2function: {}, + + locale_lang: { + "de": { + "Authors": "Autoren", + "Subjects": "Schlagwörter", + "Sources": "Daten und Quellen", + "source": "datenquelle", + "Termlists": "Termlisten", + "Next": "Weiter", + "Prev": "Zurück", + "Search": "Suche", + "Sort by": "Sortieren nach", + "and show": "und zeige", + "per page": "pro Seite", + "Displaying": "Zeige", + "to": "von", + "of": "aus", + "found": "gefunden", + "Title": "Titel", + "Author": "Autor", + "author": "autor", + "Date": "Datum", + "Subject": "Schlagwort", + "subject": "schlagwort", + "Location": "Ort", + "Records": "Datensätze", + "Targets": "Datenbanken", + + "dummy": "dummy" + }, + + "da": { + "Authors": "Forfattere", + "Subjects": "Emner", + "Sources": "Kilder", + "source": "kilder", + "Termlists": "Termlists", + "Next": "Næste", + "Prev": "Forrige", + "Search": "Søg", + "Sort by": "Sorter efter", + "and show": "og vis", + "per page": "per side", + "Displaying": "Viser", + "to": "til", + "of": "ud af", + "found": "fandt", + "Title": "Title", + "Author": "Forfatter", + "author": "forfatter", + "Date": "Dato", + "Subject": "Emneord", + "subject": "emneord", + "Location": "Lokation", + "Records": "Poster", + "Targets": "Baser", + + "dummy": "dummy" } + } }; mkws.log = function(string) { - if (!mkws.log_level) - return; - - if (typeof console === "undefined" || typeof console.log === "undefined") { /* ARGH!!! old IE */ - return; - } - - // you need to disable use strict at the top of the file!!! - if (mkws.log_level >= 3) { - // Works in Chrome; not sure about elsewhere - console.trace(); - } else if (mkws.log_level >= 2) { - console.log(">>> called from function " + arguments.callee.caller.name + ' <<<'); - } - console.log(string); + if (!mkws.log_level) + return; + + if (typeof console === "undefined" || typeof console.log === "undefined") { /* ARGH!!! old IE */ + return; + } + + // you need to disable use strict at the top of the file!!! + if (mkws.log_level >= 3) { + // Works in Chrome; not sure about elsewhere + console.trace(); + } else if (mkws.log_level >= 2) { + console.log(">>> called from function " + arguments.callee.caller.name + ' <<<'); + } + console.log(string); }; // Translation function. -mkws.M = function (word) { - var lang = mkws.config.lang; +mkws.M = function(word) { + var lang = mkws.config.lang; - if (!lang || !mkws.locale_lang[lang]) - return word; + if (!lang || !mkws.locale_lang[lang]) + return word; - return mkws.locale_lang[lang][word] || word; + return mkws.locale_lang[lang][word] || word; }; // This function is taken from a StackOverflow answer // http://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript/901144#901144 mkws.getParameterByName = function(name) { - name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); - var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"), - results = regex.exec(location.search); - return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); + name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); + var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"), + results = regex.exec(location.search); + return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); } mkws.registerWidgetType = function(name, fn) { - mkws.widgetType2function[name] = fn; - mkws.log("registered widget-type '" + name + "'"); + mkws.widgetType2function[name] = fn; + mkws.log("registered widget-type '" + name + "'"); }; mkws.promotionFunction = function(name) { - return mkws.widgetType2function[name]; + return mkws.widgetType2function[name]; }; mkws.setMkwsConfig = function(overrides) { - // Set global log_level flag early so that mkws.log() works - // Fall back to old "debug_level" setting for backwards compatibility - var tmp = overrides.log_level; - if (typeof(tmp) === 'undefined') tmp = overrides.debug_level; - if (typeof(tmp) !== 'undefined') mkws.log_level = tmp; - - var config_default = { - use_service_proxy: true, - pazpar2_url: "//mkws.indexdata.com/service-proxy/", - service_proxy_auth: "//mkws.indexdata.com/service-proxy-auth", - lang: "", - sort_options: [["relevance"], ["title:1", "title"], ["date:0", "newest"], ["date:1", "oldest"]], - perpage_options: [10, 20, 30, 50], - sort_default: "relevance", - perpage_default: 20, - query_width: 50, - show_lang: true, /* show/hide language menu */ - show_sort: true, /* show/hide sort menu */ - show_perpage: true, /* show/hide perpage menu */ - lang_options: [], /* display languages links for given languages, [] for all */ - facets: ["xtargets", "subject", "author"], /* display facets, in this order, [] for none */ - responsive_design_width: undefined, /* a page with less pixel width considered as narrow */ - log_level: 1, /* log level for development: 0..2 */ - - dummy: "dummy" - }; - - mkws.config = mkws.objectInheritingFrom(config_default); - for (var k in overrides) { - mkws.config[k] = overrides[k]; - } + // Set global log_level flag early so that mkws.log() works + // Fall back to old "debug_level" setting for backwards compatibility + var tmp = overrides.log_level; + if (typeof(tmp) === 'undefined') tmp = overrides.debug_level; + if (typeof(tmp) !== 'undefined') mkws.log_level = tmp; + + var config_default = { + use_service_proxy: true, + pazpar2_url: "//mkws.indexdata.com/service-proxy/", + service_proxy_auth: "//mkws.indexdata.com/service-proxy-auth", + lang: "", + sort_options: [["relevance"], ["title:1", "title"], ["date:0", "newest"], ["date:1", "oldest"]], + perpage_options: [10, 20, 30, 50], + sort_default: "relevance", + perpage_default: 20, + query_width: 50, + show_lang: true, /* show/hide language menu */ + show_sort: true, /* show/hide sort menu */ + show_perpage: true, /* show/hide perpage menu */ + lang_options: [], /* display languages links for given languages, [] for all */ + facets: ["xtargets", "subject", "author"], /* display facets, in this order, [] for none */ + responsive_design_width: undefined, /* a page with less pixel width considered as narrow */ + log_level: 1, /* log level for development: 0..2 */ + + dummy: "dummy" + }; + + mkws.config = mkws.objectInheritingFrom(config_default); + for (var k in overrides) { + mkws.config[k] = overrides[k]; + } }; @@ -169,25 +169,25 @@ mkws.setMkwsConfig = function(overrides) { // but since the latter is not available in IE8 we can't use it. // mkws.objectInheritingFrom = function(o) { - function F() {} - F.prototype = o; - return new F(); + function F() {} + F.prototype = o; + return new F(); } mkws.defaultTemplate = function(name) { - if (name === 'Record') { - return '\ + if (name === 'Record') { + return '\ \ \ \ \ \ @@ -208,7 +208,7 @@ mkws.defaultTemplate = function(name) { \ \ \ @@ -218,10 +218,10 @@ mkws.defaultTemplate = function(name) { \ \ \ @@ -230,13 +230,13 @@ mkws.defaultTemplate = function(name) { \ \ \
{{mkws-translate "Title"}}\ {{md-title}}\ {{#if md-title-remainder}}\ - ({{md-title-remainder}})\ + ({{md-title-remainder}})\ {{/if}}\ {{#if md-title-responsibility}}\ - {{md-title-responsibility}}\ + {{md-title-responsibility}}\ {{/if}}\
{{mkws-translate "Links"}}\ {{#each md-electronic-url}}\ - Link{{mkws-index1}}\ + Link{{mkws-index1}}\ {{/each}}\
{{mkws-translate "Subject"}}\ {{#mkws-first location having="md-subject"}}\ - {{#if md-subject}}\ - {{#mkws-commaList md-subject}}\ - {{this}}{{/mkws-commaList}}\ - {{/if}}\ + {{#if md-subject}}\ + {{#mkws-commaList md-subject}}\ + {{this}}{{/mkws-commaList}}\ + {{/if}}\ {{/mkws-first}}\
{{mkws-translate "Locations"}}\ {{#mkws-commaList location}}\ - {{mkws-attr "@name"}}{{/mkws-commaList}}\ + {{mkws-attr "@name"}}{{/mkws-commaList}}\
\ '; - } else if (name === "Summary") { - return '\ + } else if (name === "Summary") { + return '\ \ {{md-title}}\ \ @@ -247,20 +247,20 @@ mkws.defaultTemplate = function(name) { {{md-title-responsibility}}\ {{/if}}\ '; - } else if (name === "Image") { - return '\ + } else if (name === "Image") { + return '\ \ {{#mkws-first md-thumburl}}\ - {{../md-title}}\ + {{../md-title}}\ {{/mkws-first}}\ -
\ +
\
\ '; - } + } - var s = "There is no default '" + name +"' template!"; - alert(s); - return s; + var s = "There is no default '" + name +"' template!"; + alert(s); + return s; }; @@ -268,280 +268,280 @@ mkws.defaultTemplate = function(name) { // are called from the UI using a team-name rather than implicit // context. mkws.switchView = function(tname, view) { - mkws.teams[tname].switchView(view); + mkws.teams[tname].switchView(view); }; mkws.showDetails = function(tname, prefixRecId) { - mkws.teams[tname].showDetails(prefixRecId); + mkws.teams[tname].showDetails(prefixRecId); }; mkws.limitTarget = function(tname, id, name) { - mkws.teams[tname].limitTarget(id, name); + mkws.teams[tname].limitTarget(id, name); }; mkws.limitQuery = function(tname, field, value) { - mkws.teams[tname].limitQuery(field, value); + mkws.teams[tname].limitQuery(field, value); }; mkws.limitCategory = function(tname, id) { - mkws.teams[tname].limitCategory(id); + mkws.teams[tname].limitCategory(id); }; mkws.delimitTarget = function(tname, id) { - mkws.teams[tname].delimitTarget(id); + mkws.teams[tname].delimitTarget(id); }; mkws.delimitQuery = function(tname, field, value) { - mkws.teams[tname].delimitQuery(field, value); + mkws.teams[tname].delimitQuery(field, value); }; mkws.showPage = function(tname, pageNum) { - mkws.teams[tname].showPage(pageNum); + mkws.teams[tname].showPage(pageNum); }; mkws.pagerPrev = function(tname) { - mkws.teams[tname].pagerPrev(); + mkws.teams[tname].pagerPrev(); }; mkws.pagerNext = function(tname) { - mkws.teams[tname].pagerNext(); + mkws.teams[tname].pagerNext(); }; // wrapper to call team() after page load (function(j) { - var log = mkws.log; - - function handleNodeWithTeam(node, callback) { - // First branch for DOM objects; second branch for jQuery objects - var classes = node.className || node.attr('class'); - if (!classes) { - // For some reason, if we try to proceed when classes is - // undefined, we don't get an error message, but this - // function and its callers, up several stack level, - // silently return. What a crock. - log("handleNodeWithTeam() called on node with no classes"); - return; - } - var list = classes.split(/\s+/) - var teamName, type; - - for (var i = 0; i < list.length; i++) { - var cname = list[i]; - if (cname.match(/^mkwsTeam_/)) { - teamName = cname.replace(/^mkwsTeam_/, ''); - } else if (cname.match(/^mkws/)) { - type = cname.replace(/^mkws/, ''); - } - } - - if (!teamName) teamName = "AUTO"; - callback.call(node, teamName, type); + var log = mkws.log; + + function handleNodeWithTeam(node, callback) { + // First branch for DOM objects; second branch for jQuery objects + var classes = node.className || node.attr('class'); + if (!classes) { + // For some reason, if we try to proceed when classes is + // undefined, we don't get an error message, but this + // function and its callers, up several stack level, + // silently return. What a crock. + log("handleNodeWithTeam() called on node with no classes"); + return; + } + var list = classes.split(/\s+/) + var teamName, type; + + for (var i = 0; i < list.length; i++) { + var cname = list[i]; + if (cname.match(/^mkwsTeam_/)) { + teamName = cname.replace(/^mkwsTeam_/, ''); + } else if (cname.match(/^mkws/)) { + type = cname.replace(/^mkws/, ''); + } } + if (!teamName) teamName = "AUTO"; + callback.call(node, teamName, type); + } - function resizePage() { - var threshhold = mkws.config.responsive_design_width; - var width = $(window).width(); - var from, to, method; - - if ((mkws.width === undefined || mkws.width > threshhold) && - width <= threshhold) { - from = "wide"; to = "narrow"; method = "hide"; - } else if ((mkws.width === undefined || mkws.width <= threshhold) && - width > threshhold) { - from = "narrow"; to = "wide"; method = "show"; - } - mkws.width = width; - - if (from) { - log("changing from " + from + " to " + to + ": " + width); - for (var tname in mkws.teams) { - var team = mkws.teams[tname]; - team.visitWidgets(function (t, w) { - var w1 = team.widget(t + "-Container-" + from); - var w2 = team.widget(t + "-Container-" + to); - if (w1) { - $(w1.node).hide(); - } - if (w2) { - $(w2.node).show(); - $(w.node).appendTo($(w2.node)); - } - }); - team.queue("resize-" + to).publish(); - } - } - }; + function resizePage() { + var threshhold = mkws.config.responsive_design_width; + var width = $(window).width(); + var from, to, method; - /* - * Run service-proxy authentication in background (after page load). - * The username/password is configured in the apache config file - * for the site. - */ - function authenticateSession(auth_url, auth_domain, pp2_url) { - log("Run service proxy auth URL: " + auth_url); - - if (!auth_domain) { - auth_domain = pp2_url.replace(/^(https?:)?\/\/(.*?)\/.*/, '$2'); - log("guessed auth_domain '" + auth_domain + "' from pp2_url '" + pp2_url + "'"); - } - - var request = new pzHttpRequest(auth_url, function(err) { - alert("HTTP call for authentication failed: " + err) - return; - }, auth_domain); - - request.get(null, function(data) { - if (!$.isXMLDoc(data)) { - alert("service proxy auth response document is not valid XML document, give up!"); - return; - } - var status = $(data).find("status"); - if (status.text() != "OK") { - alert("service proxy auth response status: " + status.text() + ", give up!"); - return; - } - - log("Service proxy auth successfully done"); - mkws.authenticated = true; - var authName = $(data).find("displayName").text(); - // You'd think there would be a better way to do this: - var realm = $(data).find("realm:not(realmAttributes realm)").text(); - for (var teamName in mkws.teams) { - mkws.teams[teamName].queue("authenticated").publish(authName, realm); - } - - runAutoSearches(); - }); + if ((mkws.width === undefined || mkws.width > threshhold) && + width <= threshhold) { + from = "wide"; to = "narrow"; method = "hide"; + } else if ((mkws.width === undefined || mkws.width <= threshhold) && + width > threshhold) { + from = "narrow"; to = "wide"; method = "show"; + } + mkws.width = width; + + if (from) { + log("changing from " + from + " to " + to + ": " + width); + for (var tname in mkws.teams) { + var team = mkws.teams[tname]; + team.visitWidgets(function(t, w) { + var w1 = team.widget(t + "-Container-" + from); + var w2 = team.widget(t + "-Container-" + to); + if (w1) { + $(w1.node).hide(); + } + if (w2) { + $(w2.node).show(); + $(w.node).appendTo($(w2.node)); + } + }); + team.queue("resize-" + to).publish(); + } } + }; - function runAutoSearches() { - log("running auto searches"); + /* + * Run service-proxy authentication in background (after page load). + * The username/password is configured in the apache config file + * for the site. + */ + function authenticateSession(auth_url, auth_domain, pp2_url) { + log("Run service proxy auth URL: " + auth_url); - for (var teamName in mkws.teams) { - mkws.teams[teamName].queue("ready").publish(); - } + if (!auth_domain) { + auth_domain = pp2_url.replace(/^(https?:)?\/\/(.*?)\/.*/, '$2'); + log("guessed auth_domain '" + auth_domain + "' from pp2_url '" + pp2_url + "'"); } + var request = new pzHttpRequest(auth_url, function(err) { + alert("HTTP call for authentication failed: " + err) + return; + }, auth_domain); + + request.get(null, function(data) { + if (!$.isXMLDoc(data)) { + alert("service proxy auth response document is not valid XML document, give up!"); + return; + } + var status = $(data).find("status"); + if (status.text() != "OK") { + alert("service proxy auth response status: " + status.text() + ", give up!"); + return; + } + + log("Service proxy auth successfully done"); + mkws.authenticated = true; + var authName = $(data).find("displayName").text(); + // You'd think there would be a better way to do this: + var realm = $(data).find("realm:not(realmAttributes realm)").text(); + for (var teamName in mkws.teams) { + mkws.teams[teamName].queue("authenticated").publish(authName, realm); + } + + runAutoSearches(); + }); + } - function makeWidgetsWithin(level, node) { - node.find('[class^="mkws"],[class*=" mkws"]').each(function() { - handleNodeWithTeam(this, function(tname, type) { - var oldHTML = this.innerHTML; - var myTeam = mkws.teams[tname]; - var myWidget = widget(j, myTeam, type, this); - myTeam.addWidget(myWidget); - var newHTML = this.innerHTML; - if (newHTML !== oldHTML) { - log("widget " + tname + ":" + type + " HTML changed: reparsing"); - makeWidgetsWithin(level+1, $(this)); - } - }); - }); + + function runAutoSearches() { + log("running auto searches"); + + for (var teamName in mkws.teams) { + mkws.teams[teamName].queue("ready").publish(); } + } + + + function makeWidgetsWithin(level, node) { + node.find('[class^="mkws"],[class*=" mkws"]').each(function() { + handleNodeWithTeam(this, function(tname, type) { + var oldHTML = this.innerHTML; + var myTeam = mkws.teams[tname]; + var myWidget = widget(j, myTeam, type, this); + myTeam.addWidget(myWidget); + var newHTML = this.innerHTML; + if (newHTML !== oldHTML) { + log("widget " + tname + ":" + type + " HTML changed: reparsing"); + makeWidgetsWithin(level+1, $(this)); + } + }); + }); + } - $(document).ready(function() { - var saved_config; - if (typeof mkws_config === 'undefined') { - log("setting empty config"); - saved_config = {}; - } else { - log("using config: " + $.toJSON(mkws_config)); - saved_config = mkws_config; - } - mkws.setMkwsConfig(saved_config); - - for (var key in mkws.config) { - if (mkws.config.hasOwnProperty(key)) { - if (key.match(/^language_/)) { - var lang = key.replace(/^language_/, ""); - // Copy custom languages into list - mkws.locale_lang[lang] = mkws.config[key]; - log("Added locally configured language '" + lang + "'"); - } - } - } - - var lang = mkws.getParameterByName("lang") || mkws.config.lang; - if (!lang || !mkws.locale_lang[lang]) { - mkws.config.lang = "" - } else { - mkws.config.lang = lang; + $(document).ready(function() { + var saved_config; + if (typeof mkws_config === 'undefined') { + log("setting empty config"); + saved_config = {}; + } else { + log("using config: " + $.toJSON(mkws_config)); + saved_config = mkws_config; + } + mkws.setMkwsConfig(saved_config); + + for (var key in mkws.config) { + if (mkws.config.hasOwnProperty(key)) { + if (key.match(/^language_/)) { + var lang = key.replace(/^language_/, ""); + // Copy custom languages into list + mkws.locale_lang[lang] = mkws.config[key]; + log("Added locally configured language '" + lang + "'"); } + } + } + + var lang = mkws.getParameterByName("lang") || mkws.config.lang; + if (!lang || !mkws.locale_lang[lang]) { + mkws.config.lang = "" + } else { + mkws.config.lang = lang; + } + + log("Locale language: " + (mkws.config.lang ? mkws.config.lang : "none")); + + if (mkws.config.query_width < 5 || mkws.config.query_width > 150) { + log("Reset query width: " + mkws.config.query_width); + mkws.config.query_width = 50; + } + + // protocol independent link for pazpar2: "//mkws/sp" -> "https://mkws/sp" + if (mkws.config.pazpar2_url.match(/^\/\//)) { + mkws.config.pazpar2_url = document.location.protocol + mkws.config.pazpar2_url; + log("adjust protocol independent links: " + mkws.config.pazpar2_url); + } - log("Locale language: " + (mkws.config.lang ? mkws.config.lang : "none")); - - if (mkws.config.query_width < 5 || mkws.config.query_width > 150) { - log("Reset query width: " + mkws.config.query_width); - mkws.config.query_width = 50; - } - - // protocol independent link for pazpar2: "//mkws/sp" -> "https://mkws/sp" - if (mkws.config.pazpar2_url.match(/^\/\//)) { - mkws.config.pazpar2_url = document.location.protocol + mkws.config.pazpar2_url; - log("adjust protocol independent links: " + mkws.config.pazpar2_url); - } - - if (mkws.config.responsive_design_width) { - // Responsive web design - change layout on the fly based on - // current screen width. Required for mobile devices. - $(window).resize(resizePage); - // initial check after page load - $(document).ready(resizePage); - } - - // Backwards compatibility: set new magic class names on any - // elements that have the old magic IDs. - var ids = [ "Switch", "Lang", "Search", "Pager", "Navi", - "Results", "Records", "Targets", "Ranking", - "Termlists", "Stat", "MOTD" ]; - for (var i = 0; i < ids.length; i++) { - var id = 'mkws' + ids[i]; - var node = $('#' + id); - if (node.attr('id')) { - node.addClass(id); - log("added magic class to '" + node.attr('id') + "'"); - } - } - - // Find all nodes with an MKWS class, and determine their team from - // the mkwsTeam_* class. Make all team objects. - var then = $.now(); - $('[class^="mkws"],[class*=" mkws"]').each(function() { - handleNodeWithTeam(this, function(tname, type) { - if (!mkws.teams[tname]) { - mkws.teams[tname] = team(j, tname); - log("Made MKWS team '" + tname + "'"); - } - }); - }); - - makeWidgetsWithin(1, $(':root')); - - var now = $.now(); - log("Walking MKWS nodes took " + (now-then) + " ms"); - - /* - for (var tName in mkws.teams) { - var myTeam = mkws.teams[tName] - log("TEAM '" + tName + "' = " + myTeam + " ..."); - myTeam.visitWidgets(function(t, w) { - log(" has widget of type '" + t + "': " + w); - }); + if (mkws.config.responsive_design_width) { + // Responsive web design - change layout on the fly based on + // current screen width. Required for mobile devices. + $(window).resize(resizePage); + // initial check after page load + $(document).ready(resizePage); + } + + // Backwards compatibility: set new magic class names on any + // elements that have the old magic IDs. + var ids = [ "Switch", "Lang", "Search", "Pager", "Navi", + "Results", "Records", "Targets", "Ranking", + "Termlists", "Stat", "MOTD" ]; + for (var i = 0; i < ids.length; i++) { + var id = 'mkws' + ids[i]; + var node = $('#' + id); + if (node.attr('id')) { + node.addClass(id); + log("added magic class to '" + node.attr('id') + "'"); + } + } + + // Find all nodes with an MKWS class, and determine their team from + // the mkwsTeam_* class. Make all team objects. + var then = $.now(); + $('[class^="mkws"],[class*=" mkws"]').each(function() { + handleNodeWithTeam(this, function(tname, type) { + if (!mkws.teams[tname]) { + mkws.teams[tname] = team(j, tname); + log("Made MKWS team '" + tname + "'"); } - */ - - if (mkws.config.use_service_proxy) { - authenticateSession(mkws.config.service_proxy_auth, - mkws.config.service_proxy_auth_domain, - mkws.config.pazpar2_url); - } else { - // raw pp2 - runAutoSearches(); - } + }); }); + + makeWidgetsWithin(1, $(':root')); + + var now = $.now(); + log("Walking MKWS nodes took " + (now-then) + " ms"); + + /* + for (var tName in mkws.teams) { + var myTeam = mkws.teams[tName] + log("TEAM '" + tName + "' = " + myTeam + " ..."); + myTeam.visitWidgets(function(t, w) { + log(" has widget of type '" + t + "': " + w); + }); + } + */ + + if (mkws.config.use_service_proxy) { + authenticateSession(mkws.config.service_proxy_auth, + mkws.config.service_proxy_auth_domain, + mkws.config.pazpar2_url); + } else { + // raw pp2 + runAutoSearches(); + } + }); })(jQuery); diff --git a/src/mkws-filter.js b/src/mkws-filter.js index 2266993..2be1bd9 100644 --- a/src/mkws-filter.js +++ b/src/mkws-filter.js @@ -1,129 +1,129 @@ // Factory function for sets of filters. function filterSet(team) { - var m_team = team; - var m_list = []; - - var that = {}; - - that.toJSON = function() { - return $.toJSON(m_list); - }; - - that.add = function(filter) { - m_list.push(filter); - }; - - that.visitTargets = function(callback) { - for (var i in m_list) { - var filter = m_list[i]; - if (filter.type === 'target') { - callback(filter.id, filter.name); - } - } - }; - - that.visitFields = function(callback) { - for (var i in m_list) { - var filter = m_list[i]; - if (filter.type === 'field') { - callback(filter.field, filter.value); - } - } - }; - - that.visitCategories = function(callback) { - for (var i in m_list) { - var filter = m_list[i]; - if (filter.type === 'category') { - callback(filter.id); - } - } - }; - - that.removeMatching = function(matchFn) { - var newList = []; - for (var i in m_list) { - var filter = m_list[i]; - if (matchFn(filter)) { - m_team.log("removeMatching() removing filter " + $.toJSON(filter)); - } else { - m_team.log("removeMatching() keeping filter " + $.toJSON(filter)); - newList.push(filter); - } - } - m_list = newList; - }; - - that.targetFiltered = function(id) { - for (var i = 0; i < m_list.length; i++) { - if (m_list[i].type === 'target' || - m_list[i].id === 'pz:id=' + id) { - return true; - } - } - return false; - }; - - that.pp2filter = function() { - var res = ""; - - that.visitTargets(function(id, name) { - if (res) res += ","; - if (id.match(/^[a-z:]+[=~]/)) { - m_team.log("filter '" + id + "' already begins with SETTING OP"); - } else { - id = 'pz:id=' + id; - } - res += id; - }); - - return res; - }; - - that.pp2limit = function(initial) { - var res = initial || ""; - - that.visitFields(function(field, value) { - if (res) res += ","; - res += field + "=" + value.replace(/[\\|,]/g, '\\$&'); - }); - return res; - } + var m_team = team; + var m_list = []; - that.pp2catLimit = function() { - var res = ""; + var that = {}; - that.visitCategories(function(id) { - if (res) res += ","; - res += "category~" + id.replace(/[\\|,]/g, '\\$&'); - }); - return res; - } + that.toJSON = function() { + return $.toJSON(m_list); + }; - return that; + that.add = function(filter) { + m_list.push(filter); + }; + + that.visitTargets = function(callback) { + for (var i in m_list) { + var filter = m_list[i]; + if (filter.type === 'target') { + callback(filter.id, filter.name); + } + } + }; + + that.visitFields = function(callback) { + for (var i in m_list) { + var filter = m_list[i]; + if (filter.type === 'field') { + callback(filter.field, filter.value); + } + } + }; + + that.visitCategories = function(callback) { + for (var i in m_list) { + var filter = m_list[i]; + if (filter.type === 'category') { + callback(filter.id); + } + } + }; + + that.removeMatching = function(matchFn) { + var newList = []; + for (var i in m_list) { + var filter = m_list[i]; + if (matchFn(filter)) { + m_team.log("removeMatching() removing filter " + $.toJSON(filter)); + } else { + m_team.log("removeMatching() keeping filter " + $.toJSON(filter)); + newList.push(filter); + } + } + m_list = newList; + }; + + that.targetFiltered = function(id) { + for (var i = 0; i < m_list.length; i++) { + if (m_list[i].type === 'target' || + m_list[i].id === 'pz:id=' + id) { + return true; + } + } + return false; + }; + + that.pp2filter = function() { + var res = ""; + + that.visitTargets(function(id, name) { + if (res) res += ","; + if (id.match(/^[a-z:]+[=~]/)) { + m_team.log("filter '" + id + "' already begins with SETTING OP"); + } else { + id = 'pz:id=' + id; + } + res += id; + }); + + return res; + }; + + that.pp2limit = function(initial) { + var res = initial || ""; + + that.visitFields(function(field, value) { + if (res) res += ","; + res += field + "=" + value.replace(/[\\|,]/g, '\\$&'); + }); + return res; + } + + that.pp2catLimit = function() { + var res = ""; + + that.visitCategories(function(id) { + if (res) res += ","; + res += "category~" + id.replace(/[\\|,]/g, '\\$&'); + }); + return res; + } + + return that; } // Factory functions for filters. These can be of several types. function targetFilter(id, name) { - return { - type: 'target', - id: id, - name: name - }; + return { + type: 'target', + id: id, + name: name + }; } function fieldFilter(field, value) { - return { - type: 'field', - field: field, - value: value - }; + return { + type: 'field', + field: field, + value: value + }; } function categoryFilter(id) { - return { - type: 'category', - id: id, - }; + return { + type: 'category', + id: id, + }; } diff --git a/src/mkws-handlebars.js b/src/mkws-handlebars.js index 58c95a1..916ddba 100644 --- a/src/mkws-handlebars.js +++ b/src/mkws-handlebars.js @@ -1,26 +1,26 @@ // Handlebars helpers Handlebars.registerHelper('mkws-json', function(obj) { - return $.toJSON(obj); + return $.toJSON(obj); }); Handlebars.registerHelper('mkws-paragraphs', function(obj) { - var acc = []; - for (var i = 0; i < obj.length; i++) { - acc.push('

', obj[i], '

'); - } - return acc.join(''); + var acc = []; + for (var i = 0; i < obj.length; i++) { + acc.push('

', obj[i], '

'); + } + return acc.join(''); }); Handlebars.registerHelper('mkws-translate', function(s) { - return mkws.M(s); + return mkws.M(s); }); // We need {{mkws-attr '@name'}} because Handlebars can't parse {{@name}} Handlebars.registerHelper('mkws-attr', function(attrName) { - return this[attrName]; + return this[attrName]; }); @@ -31,41 +31,41 @@ Handlebars.registerHelper('mkws-attr', function(attrName) { * array has a subelement called NAME2. */ Handlebars.registerHelper('mkws-if-any', function(items, options) { - var having = options.hash.having; - for (var i in items) { - var item = items[i] - if (!having || item[having]) { - return options.fn(this); - } + var having = options.hash.having; + for (var i in items) { + var item = items[i] + if (!having || item[having]) { + return options.fn(this); } - return ""; + } + return ""; }); Handlebars.registerHelper('mkws-first', function(items, options) { - var having = options.hash.having; - for (var i in items) { - var item = items[i] - if (!having || item[having]) { - return options.fn(item); - } + var having = options.hash.having; + for (var i in items) { + var item = items[i] + if (!having || item[having]) { + return options.fn(item); } - return ""; + } + return ""; }); Handlebars.registerHelper('mkws-commaList', function(items, options) { - var out = ""; + var out = ""; - for (var i in items) { - if (i > 0) out += ", "; - out += options.fn(items[i]) - } + for (var i in items) { + if (i > 0) out += ", "; + out += options.fn(items[i]) + } - return out; + return out; }); Handlebars.registerHelper('mkws-index1', function(obj) { - return obj.data.index + 1; + return obj.data.index + 1; }); diff --git a/src/mkws-jquery.js b/src/mkws-jquery.js index 2f79db4..90e43e4 100644 --- a/src/mkws-jquery.js +++ b/src/mkws-jquery.js @@ -10,61 +10,61 @@ * implement jQuery plugin $.pazpar2({}) */ function _mkws_jquery_plugin($) { - function debug (string) { - mkws.log("jquery.pazpar2: " + string); + function debug(string) { + mkws.log("jquery.pazpar2: " + string); + } + + function init_popup(obj) { + var config = obj ? obj : {}; + + var height = config.height || 760; + var width = config.width || 880; + var id_button = config.id_button || "input.mkwsButton"; + var id_popup = config.id_popup || ".mkwsPopup"; + + debug("popup height: " + height + ", width: " + width); + + // make sure that jquery-ui was loaded afte jQuery core lib, e.g.: + // + if (!$.ui) { + debug("Error: jquery-ui.js is missing, did you include it after jQuery core in the HTML file?"); + return; } - function init_popup(obj) { - var config = obj ? obj : {}; - - var height = config.height || 760; - var width = config.width || 880; - var id_button = config.id_button || "input.mkwsButton"; - var id_popup = config.id_popup || ".mkwsPopup"; - - debug("popup height: " + height + ", width: " + width); - - // make sure that jquery-ui was loaded afte jQuery core lib, e.g.: - // - if (!$.ui) { - debug("Error: jquery-ui.js is missing, did you include it after jQuery core in the HTML file?"); - return; - } - - $(id_popup).dialog({ - closeOnEscape: true, - autoOpen: false, - height: height, - width: width, - modal: true, - resizable: true, - buttons: { - Cancel: function() { - $(this).dialog("close"); - } - }, - close: function() { } - }); - - $(id_button) - .button() - .click(function() { - $(id_popup).dialog("open"); - }); - }; - - $.extend({ - - // service-proxy or pazpar2 - pazpar2: function(config) { - if (config == null || typeof config != 'object') { - config = {}; - } - var id_popup = config.id_popup || ".mkwsPopup"; - id_popup = id_popup.replace(/^[#\.]/, ""); - - // simple layout - var div = '\ + $(id_popup).dialog({ + closeOnEscape: true, + autoOpen: false, + height: height, + width: width, + modal: true, + resizable: true, + buttons: { + Cancel: function() { + $(this).dialog("close"); + } + }, + close: function() { } + }); + + $(id_button) + .button() + .click(function() { + $(id_popup).dialog("open"); + }); + }; + + $.extend({ + + // service-proxy or pazpar2 + pazpar2: function(config) { + if (config == null || typeof config != 'object') { + config = {}; + } + var id_popup = config.id_popup || ".mkwsPopup"; + id_popup = id_popup.replace(/^[#\.]/, ""); + + // simple layout + var div = '\
\
\
\ @@ -72,8 +72,8 @@ function _mkws_jquery_plugin($) {
\
'; - // new table layout - var table = '\ + // new table layout + var table = '\