# HG changeset patch
# User robcast
# Date 1313003836 -7200
# Node ID ad071f122164cca7b0f04224711e2dec33e80222
# Parent cbfc94584d3b0d1e1363ce1a9fc7ea98815ef964
make dirInfo crash less. make digilib better for half-embedded use.
diff -r cbfc94584d3b -r ad071f122164 webapp/src/main/webapp/dirInfo-xml.jsp
--- a/webapp/src/main/webapp/dirInfo-xml.jsp Wed Jun 08 17:49:01 2011 +0200
+++ b/webapp/src/main/webapp/dirInfo-xml.jsp Wed Aug 10 21:17:16 2011 +0200
@@ -23,7 +23,7 @@
// get directory
digilib.io.DocuDirectory dir = dirCache.getDirectory(dlRequest.getFilePath());
FileOps.FileClass fc = FileOps.FileClass.IMAGE;
-int dirSize = dir.size(fc);
+int dirSize = dir != null ? dir.size(fc) : 0;
%>
<% if (dir != null) { %>
diff -r cbfc94584d3b -r ad071f122164 webapp/src/main/webapp/jquery/jquery.digilib.js
--- a/webapp/src/main/webapp/jquery/jquery.digilib.js Wed Jun 08 17:49:01 2011 +0200
+++ b/webapp/src/main/webapp/jquery/jquery.digilib.js Wed Aug 10 21:17:16 2011 +0200
@@ -193,14 +193,14 @@
var defaults = {
// version of this script
- 'version' : 'jquery.digilib.js 0.9',
+ 'version' : 'jquery.digilib.js 2.0a1',
// logo url
- 'logoUrl' : '../img/digilib-logo-text1.png',
+ 'logoUrl' : 'img/digilib-logo-text1.png',
// homepage url (behind logo)
'homeUrl' : 'http://digilib.berlios.de',
- // base URL to digilib viewer (for reference URLs)
+ // base URL to digilib (e.g. 'http://digilib.mpiwg-berlin.mpg.de/digitallibrary')
'digilibBaseUrl' : null,
- // base URL to Scaler servlet
+ // base URL to Scaler servlet (usually digilibBaseUrl+'/servlet/Scaler')
'scalerBaseUrl' : null,
// list of Scaler parameters
'scalerParamNames' : ['fn','pn','dw','dh','ww','wh','wx','wy','ws','mo',
@@ -226,6 +226,8 @@
// digilib parameter defaults
'mk' : '',
'clop' : '',
+ // list of additional parameters (for page outside of digilib)
+ 'additionalParamNames' : [],
// mode of operation:
// fullscreen = take parameters from page URL, keep state in page URL
// embedded = take parameters from Javascript options, keep state inside object
@@ -303,20 +305,13 @@
var isFullscreen = settings.interactionMode === 'fullscreen';
var queryParams = {};
if (isFullscreen) {
- queryParams = parseQueryParams();
- // check scalerBaseUrl
- if (settings.scalerBaseUrl == null) {
- // try the host this came from
- var h = window.location.host;
- if (window.location.host) {
- var url = window.location.href;
- // assume the page lives in [webapp]/jquery/
- var pos = url.indexOf('jquery/');
- if (pos > 0) {
- settings.scalerBaseUrl = url.substring(0, pos) + 'servlet/Scaler';
- }
- }
- }
+ queryParams = parseQueryParams();
+ // filter additional parameters
+ for (var p in queryParams) {
+ if ($.inArray(p, settings.digilibParamNames) < 0) {
+ settings.additionalParamNames.push(p);
+ }
+ }
}
return this.each(function() {
var $elem = $(this);
@@ -372,17 +367,27 @@
if (isFullscreen) {
// take current host
var url = window.location.toString();
- var pos = url.indexOf('?');
- elemSettings.digilibBaseUrl = url.substring(0, pos);
+ // assume the page lives in [webapp]/jquery/
+ var pos = url.indexOf('jquery/');
+ if (pos > 0) {
+ elemSettings.digilibBaseUrl = url.substring(0, pos);
+ }
} else {
+ // may be we got the scaler URL from the img
var url = elemSettings.scalerBaseUrl;
if (url) {
// build it from scaler URL
- var bp = url.indexOf('/servlet/Scaler');
- elemSettings.digilibBaseUrl = url.substring(0, bp) + '/digilib.jsp';
+ var pos = url.indexOf('/servlet/Scaler');
+ elemSettings.digilibBaseUrl = url.substring(0, pos);
}
}
}
+ // check scaler base URL
+ if (elemSettings.scalerBaseUrl == null) {
+ if (elemSettings.digilibBaseUrl) {
+ elemSettings.scalerBaseUrl = elemSettings.digilibBaseUrl + '/servlet/Scaler';
+ }
+ }
// initialise plugins
for (n in plugins) {
var p = plugins[n];
@@ -710,7 +715,7 @@
var getParamString = function (settings, keys, defaults) {
var paramString = '';
var nx = false;
- for (i = 0; i < keys.length; ++i) {
+ for (var i = 0; i < keys.length; ++i) {
var key = keys[i];
if ((settings[key] != null) && ((defaults == null) || (settings[key] != defaults[key]))) {
// first param gets no '&'
@@ -767,8 +772,15 @@
var getDigilibUrl = function (data) {
packParams(data);
var settings = data.settings;
- var queryString = getParamString(settings, settings.digilibParamNames, defaults);
- return settings.digilibBaseUrl + '?' + queryString;
+ var paramList = settings.additionalParamNames.concat(settings.digilibParamNames);
+ var queryString = getParamString(settings, paramList, defaults);
+ // take url from current location
+ var url = window.location.href;
+ var pos = url.indexOf('?');
+ if (pos > -1) {
+ url = url.substring(0, pos);
+ }
+ return url + '?' + queryString;
};
// loads image information from digilib server via HTTP
@@ -928,17 +940,23 @@
// update location.href (browser URL) in fullscreen mode
var url = getDigilibUrl(data);
var history = window.history;
- if (typeof history.pushState === 'function') {
+ if (typeof history.replaceState === 'function') {
console.debug("faking reload to "+url);
// change url without reloading (stateObj, title, url)
// TODO: we really need to push the state in stateObj and listen to pop-events
- history.replaceState({}, '', url);
- // change img src
- var imgurl = getScalerUrl(data);
- data.$img.attr('src', imgurl);
- highlightButtons(data);
- // send event
- $(data).trigger('redisplay');
+ try {
+ history.replaceState({}, '', url);
+ // change img src
+ var imgurl = getScalerUrl(data);
+ data.$img.attr('src', imgurl);
+ highlightButtons(data);
+ // send event
+ $(data).trigger('redisplay');
+ } catch (e) {
+ console.error("replaceState("+url+") didn't work: "+e);
+ // reload window
+ window.location = url;
+ }
} else {
// reload window
window.location = url;
@@ -950,7 +968,7 @@
highlightButtons(data);
// send event
$(data).trigger('redisplay');
- }
+ }
};
// update display (overlays etc.)
@@ -1057,6 +1075,10 @@
var settings = data.settings;
var mode = settings.interactionMode;
var imagePath = settings.buttonSettings[mode].imagePath;
+ // make relative imagePath absolute
+ if (imagePath.charAt(0) !== '/' && imagePath.substring(0,3) !== 'http') {
+ imagePath = settings.digilibBaseUrl + '/jquery/' + imagePath;
+ }
var buttonConfig = settings.buttons[buttonName];
// button properties
var action = buttonConfig.onclick;
@@ -1224,7 +1246,12 @@
$aboutDiv.append($link);
$aboutDiv.append($content);
$link.append($logo);
- $logo.attr('src', settings.logoUrl);
+ logoUrl = settings.logoUrl;
+ // make relative logoUrl absolute
+ if (logoUrl.charAt(0) !== '/' && logoUrl.substring(0,3) !== 'http') {
+ logoUrl = settings.digilibBaseUrl + '/' + logoUrl;
+ }
+ $logo.attr('src', logoUrl);
$link.attr('href', settings.homeUrl);
$content.text('Version: ' + settings.version);
data.$aboutDiv = $aboutDiv;