version 1.1, 2004/05/05 12:29:08
|
version 1.2, 2004/06/02 17:32:54
|
Line 43 function setParamFromArea(rect) {
|
Line 43 function setParamFromArea(rect) {
|
|
|
var dlTrafo = new Transform(); |
var dlTrafo = new Transform(); |
|
|
function parseTrafo() { |
function parseTrafo(elem) { |
// returns Transform from current dlArea and picsize |
// returns Transform from current dlArea and picsize |
var picsize = getElementSize("pic"); |
var picsize = getElementRect(elem); |
var trafo = new Transform(); |
var trafo = new Transform(); |
// subtract area offset and size |
// subtract area offset and size |
trafo.concat(getTranslation(new Position(-dlArea.x, -dlArea.y))); |
trafo.concat(getTranslation(new Position(-dlArea.x, -dlArea.y))); |
Line 71 var dlMarks = new Array();
|
Line 71 var dlMarks = new Array();
|
function parseMarks() { |
function parseMarks() { |
// returns marks array from current parameters |
// returns marks array from current parameters |
var marks = new Array(); |
var marks = new Array(); |
var ma = getParameter("mk").split(";"); |
var ma; |
|
var mk = getParameter("mk"); |
|
if (mk.indexOf(";") >= 0) { |
|
// old format with ";" |
|
ma = mk.split(";"); |
|
} else { |
|
ma = mk.split(","); |
|
} |
for (var i = 0; i < ma.length ; i++) { |
for (var i = 0; i < ma.length ; i++) { |
var pos = ma[i].split("/"); |
var pos = ma[i].split("/"); |
if (pos.length > 1) { |
if (pos.length > 1) { |
Line 87 function getAllMarks() {
|
Line 94 function getAllMarks() {
|
for (var i = 0; i < dlMarks.length; i++) { |
for (var i = 0; i < dlMarks.length; i++) { |
marks.push(cropFloat(dlMarks[i].x) + "/" + cropFloat(dlMarks[i].y)); |
marks.push(cropFloat(dlMarks[i].x) + "/" + cropFloat(dlMarks[i].y)); |
} |
} |
return marks.join(";"); |
return marks.join(","); |
} |
} |
|
|
function addMark(pos) { |
function addMark(pos) { |
Line 160 function parseFlags() {
|
Line 167 function parseFlags() {
|
} |
} |
|
|
|
|
function bestPicSize(tagid) { |
function bestPicSize(elem, inset) { |
// returns a Size with the best image size for the given tagid |
// returns a Size with the best image size for the given element |
var inset = 0; |
if (! defined(inset)) { |
|
inset = 25; |
|
} |
var ws = getWinSize(); |
var ws = getWinSize(); |
var es = getElementSize(tagid); |
var es = getElementPosition(elem); |
if (es) { |
if (es) { |
ws.width = ws.width - es.x - inset; |
ws.width = ws.width - es.x - inset; |
ws.height = ws.height - es.y - inset; |
ws.height = ws.height - es.y - inset; |
Line 177 function bestPicSize(tagid) {
|
Line 186 function bestPicSize(tagid) {
|
* digilib specific routines |
* digilib specific routines |
* ******************************************** */ |
* ******************************************** */ |
|
|
function init() { |
var elemScaler = null; |
if (document.layers) { |
var picElem = null; |
alert("Sorry Netscape4 is not supported!"); |
|
|
function dl_init() { |
|
elemScaler = getElement("scaler"); |
|
if (! elemScaler) { |
return false; |
return false; |
} |
} |
// give a name to the window containing digilib - this way one can test if there is already a |
picElem = getElement("pic", true); |
// digilib-window open and replace the contents of it (ex. digicat) |
if (picElem == null) { |
|
// in N4 pic is in the layer scaler |
|
picElem = elemScaler.document.images[0]; |
|
} |
|
// give a name to the window containing digilib |
top.window.name = "digilib"; |
top.window.name = "digilib"; |
// put the query parameters (sans "&") in the parameters array |
// put the query parameters (sans "?") in the parameters array |
parseParameters(location.search.slice(1)); |
parseParameters(location.search.slice(1)); |
// treat special parameters |
// treat special parameters |
dlMarks = parseMarks(); |
dlMarks = parseMarks(); |
dlArea = parseArea(); |
dlArea = parseArea(); |
dlFlags = parseFlags(); |
dlFlags = parseFlags(); |
|
// wait for image to load and display marks |
//registerKeyDown(parseKeypress); |
|
|
|
renderMarks(); |
renderMarks(); |
|
// done |
focus(); |
focus(); |
return null; |
return null; |
} |
} |
|
|
function display(detail) { |
function display(detail) { |
// redisplay the page |
// redisplay the page |
|
if (! detail) { |
|
detail = 9; |
|
} |
var queryString = getAllParameters(detail); |
var queryString = getAllParameters(detail); |
location.href = location.protocol + "//" + location.host + location.pathname + "?" + queryString; |
location.href = location.protocol + "//" + location.host + location.pathname + "?" + queryString; |
} |
} |
|
|
|
function openWin(url, title, params) { |
|
// open browser window |
|
var ow = window.open(url, title, params); |
|
ow.focus(); |
|
} |
|
|
/* ********************************************** |
/* ********************************************** |
* interactive digilib functions |
* interactive digilib functions |
* ******************************************** */ |
* ******************************************** */ |
|
|
function ref(select) { |
function getRef(select) { |
// open a dialog with a reference to the current digilib set |
// open a dialog with a reference to the current digilib set |
var hyperlinkRef = baseUrl + "?" + getAllParameters(9); |
var hyperlinkRef = baseUrl + "?" + getAllParameters(9); |
if ( select == 0 ) { |
if ( select == 0 ) { |
Line 224 function ref(select) {
|
Line 246 function ref(select) {
|
function renderMarks() { |
function renderMarks() { |
// put the visible marks on the image |
// put the visible marks on the image |
var mark_count = dlMarks.length; |
var mark_count = dlMarks.length; |
var picelem = getElement("pic"); |
|
// make shure the image is loaded so we know its size |
// make shure the image is loaded so we know its size |
if (picelem && picelem.complete == false) { |
if (defined(picElem.complete) && picElem.complete == false && ! browserType.isN4 ) { |
setTimeout("placeMarks()", 100); |
setTimeout("renderMarks()", 100); |
} else { |
} else { |
var picsize = getElementSize("pic"); |
//alert("rendermarks!"); |
dlTrafo = parseTrafo(); |
dlTrafo = parseTrafo(picElem); |
for (var i = 0; i < 8; i++) { |
for (var i = 0; i < 8; i++) { |
|
var me = getElement("dot"+i); |
if (i < mark_count) { |
if (i < mark_count) { |
if (dlArea.containsPosition(dlMarks[i])) { |
if (dlArea.containsPosition(dlMarks[i])) { |
var mpos = dlTrafo.transform(dlMarks[i]); |
var mpos = dlTrafo.transform(dlMarks[i]); |
// suboptimal to place -5 pixels and not half size of mark-image |
// suboptimal to place -5 pixels and not half size of mark-image |
mpos.x = mpos.x -5; |
mpos.x = mpos.x -5; |
mpos.y = mpos.y -5; |
mpos.y = mpos.y -5; |
moveElement("dot"+i, mpos); |
moveElement(me, mpos); |
showElement("dot"+i, true); |
showElement(me, true); |
} |
} |
} else { |
} else { |
// hide the other marks |
// hide the other marks |
showElement("dot"+i, false); |
showElement(me, false); |
} |
} |
} |
} |
} |
} |
} |
} |
|
|
function mark() { |
function setMark() { |
// add a mark where clicked |
// add a mark where clicked |
if ( dlMarks.length > 7 ) { |
if ( dlMarks.length > 7 ) { |
alert("Only 8 marks are possible at the moment!"); |
alert("Only 8 marks are possible at the moment!"); |
Line 258 function mark() {
|
Line 280 function mark() {
|
|
|
function markEvent(evt) { |
function markEvent(evt) { |
// event handler adding a new mark |
// event handler adding a new mark |
unregisterMouseDown("scaler", markEvent); |
|
var p = dlTrafo.invtransform(evtPosition(evt)); |
var p = dlTrafo.invtransform(evtPosition(evt)); |
|
unregisterMouseDown(elemScaler, markEvent); |
addMark(p); |
addMark(p); |
placeMarks(); |
display(); |
} |
} |
|
|
// starting event capture |
// starting event capture |
registerMouseDown("scaler", markEvent); |
registerMouseDown(elemScaler, markEvent); |
} |
|
|
|
function unmark() { |
|
// remove the last mark |
|
deleteMark(); |
|
placeMarks(); |
|
} |
} |
|
|
var ZOOMFACTOR = Math.sqrt(2); |
var ZOOMFACTOR = Math.sqrt(2); |
Line 297 function zoomPoint(inout) {
|
Line 313 function zoomPoint(inout) {
|
// set parameters |
// set parameters |
setParamFromArea(zoomarea); |
setParamFromArea(zoomarea); |
parseArea(); |
parseArea(); |
display(3); |
// zoomed is always fit |
|
setParameter("ws", 1); |
|
display(); |
} |
} |
|
|
// starting event capture |
// starting event capture |
registerMouseDown("scaler", zoomPointEvent); |
registerMouseDown(elemScaler, zoomPointEvent); |
} |
} |
|
|
|
|
Line 310 function zoomArea() {
|
Line 328 function zoomArea() {
|
var pt1, pt2; |
var pt1, pt2; |
var eck1pos, eck2pos, eck3pos, eck4pos; |
var eck1pos, eck2pos, eck3pos, eck4pos; |
window.focus(); |
window.focus(); |
|
var eck1 = getElement("eck1"); |
|
var eck2 = getElement("eck2"); |
|
var eck3 = getElement("eck3"); |
|
var eck4 = getElement("eck4"); |
|
|
function zoomClick(evt) { |
function zoomClick(evt) { |
// mouse click handler |
// mouse click handler |
Line 322 function zoomArea() {
|
Line 344 function zoomArea() {
|
eck2pos = new Position(pt1.x - 12, pt1.y); |
eck2pos = new Position(pt1.x - 12, pt1.y); |
eck3pos = new Position(pt1.x, pt1.y - 12); |
eck3pos = new Position(pt1.x, pt1.y - 12); |
eck4pos = new Position(pt1.y - 12, pt1.y - 12); |
eck4pos = new Position(pt1.y - 12, pt1.y - 12); |
moveElement("eck1", eck1pos); |
moveElement(eck1, eck1pos); |
moveElement("eck2", eck2pos); |
moveElement(eck2, eck2pos); |
moveElement("eck3", eck3pos); |
moveElement(eck3, eck3pos); |
moveElement("eck4", eck4pos); |
moveElement(eck4, eck4pos); |
showElement("eck1", true); |
showElement(eck1, true); |
showElement("eck2", true); |
showElement(eck2, true); |
showElement("eck3", true); |
showElement(eck3, true); |
showElement("eck4", true); |
showElement(eck4, true); |
registerMouseMove("scaler", zoomMove); |
registerMouseMove(elemScaler, zoomMove); |
registerMouseMove("eck4", zoomMove); |
registerMouseMove(eck4, zoomMove); |
} else { |
} else { |
// second click -- end moving |
// second click -- end moving |
pt2 = evtPosition(evt); |
pt2 = evtPosition(evt); |
showElement("eck1", false); |
showElement(eck1, false); |
showElement("eck2", false); |
showElement(eck2, false); |
showElement("eck3", false); |
showElement(eck3, false); |
showElement("eck4", false); |
showElement(eck4, false); |
unregisterMouseMove("scaler", zoomMove); |
unregisterMouseMove(elemScaler, zoomMove); |
unregisterMouseMove("eck4", zoomMove); |
unregisterMouseMove(eck4, zoomMove); |
unregisterMouseDown("scaler", zoomClick); |
unregisterMouseDown(elemScaler, zoomClick); |
unregisterMouseDown("eck4", zoomClick); |
unregisterMouseDown(eck4, zoomClick); |
var p1 = dlTrafo.invtransform(pt1); |
var p1 = dlTrafo.invtransform(pt1); |
var p2 = dlTrafo.invtransform(pt2); |
var p2 = dlTrafo.invtransform(pt2); |
var ww = p2.x-p1.x; |
var ww = p2.x-p1.x; |
Line 353 function zoomArea() {
|
Line 375 function zoomArea() {
|
setParameter("ww", cropFloat(ww)); |
setParameter("ww", cropFloat(ww)); |
setParameter("wh", cropFloat(wh)); |
setParameter("wh", cropFloat(wh)); |
parseArea(); |
parseArea(); |
display(3); |
// zoomed is always fit |
|
setParameter("ws", 1); |
|
display(); |
} |
} |
} |
} |
} |
} |
Line 366 function zoomArea() {
|
Line 390 function zoomArea() {
|
eck2pos = new Position(Math.max(pt1.x, pt2.x)-12, pt1.y); |
eck2pos = new Position(Math.max(pt1.x, pt2.x)-12, pt1.y); |
eck3pos = new Position(pt1.x, Math.max(pt1.y, pt2.y)-12); |
eck3pos = new Position(pt1.x, Math.max(pt1.y, pt2.y)-12); |
eck4pos = new Position(Math.max(pt1.x, pt2.x)-12, Math.max(pt1.y, pt2.y)-12); |
eck4pos = new Position(Math.max(pt1.x, pt2.x)-12, Math.max(pt1.y, pt2.y)-12); |
moveElement("eck1", eck1pos); |
moveElement(eck1, eck1pos); |
moveElement("eck2", eck2pos); |
moveElement(eck2, eck2pos); |
moveElement("eck3", eck3pos); |
moveElement(eck3, eck3pos); |
moveElement("eck4", eck4pos); |
moveElement(eck4, eck4pos); |
} |
} |
|
|
// starting event capture |
// starting event capture |
registerMouseDown("scaler", zoomClick); |
registerMouseDown(elemScaler, zoomClick); |
registerMouseDown("eck4", zoomClick); |
registerMouseDown(eck4, zoomClick); |
} |
} |
|
|
|
|
Line 391 function moveTo() {
|
Line 415 function moveTo() {
|
var newarea = new Rectangle(pt.x-0.5*dlArea.width, pt.y-0.5*dlArea.height, dlArea.width, dlArea.height); |
var newarea = new Rectangle(pt.x-0.5*dlArea.width, pt.y-0.5*dlArea.height, dlArea.width, dlArea.height); |
newarea = dlMaxArea.fit(newarea); |
newarea = dlMaxArea.fit(newarea); |
// stopping event capture |
// stopping event capture |
unregisterMouseDown("scaler", moveToEvent); |
unregisterMouseDown(elemScaler, moveToEvent); |
// set parameters |
// set parameters |
setParameter("wx", cropFloat(newarea.x)); |
setParameter("wx", cropFloat(newarea.x)); |
setParameter("wy", cropFloat(newarea.y)); |
setParameter("wy", cropFloat(newarea.y)); |
setParameter("ww", cropFloat(newarea.width)); |
setParameter("ww", cropFloat(newarea.width)); |
setParameter("wh", cropFloat(newarea.height)); |
setParameter("wh", cropFloat(newarea.height)); |
display(3); |
display(); |
} |
} |
|
|
// starting event capture |
// starting event capture |
registerMouseDown("scaler", moveToEvent); |
registerMouseDown(elemScaler, moveToEvent); |
} |
|
|
|
function parseKeypress(evt) { |
|
// capturing keypresses for next and previous page |
|
if ( document.all ) { |
|
if ( event.keyCode == 110 ) { |
|
page('+1'); |
|
} |
|
if ( event.keyCode == 98 ) { |
|
page('-1'); |
|
} |
|
document.cancelBubble = true; |
|
} else { |
|
if ( evt.charCode == 110 ) { |
|
page('+1'); |
|
} else if ( evt.charCode == 98 ) { |
|
page('-1'); |
|
} else if ( evt.which == 110 ) { |
|
page('+1'); |
|
} else if ( evt.which == 98 ) { |
|
// does not work currentlyfor Opera, because it catches the 'b'-key on it's own |
|
// have to change the key or find another way - luginbuehl |
|
page('-1'); |
|
} |
|
} |
|
} |
} |
|
|
|
|
/* ********************************************** |
// debuggin' |
* digilib parameter-only functions |
function showcoordsN4() { |
* ******************************************** */ |
var s = ""; |
|
for (var l in document.layers) { |
function setSize(factor) { |
if (l == "length") continue; |
// change the size of the image |
e = document.layers[l]; |
setParameter("ws", cropFloat(factor)); |
if (e) { |
display(3); |
s += " [" + e.name + "]: pageX:" + e.pageX + " pageY:" + e.pageY + " width:" + e.clip.width + " height:" + e.clip.height + " visibility:" + e.visibility + " zindex:" + e.zIndex + "<br>\n"; |
} |
|
|
|
function setQuality(qual) { |
|
// set the image quality |
|
for (var i = 0; i < 3; i++) { |
|
removeFlag("q"+i); |
|
if (i == qual) { |
|
addFlag("q"+i); |
|
} |
|
} |
|
setParameter("mo", getAllFlags()); |
|
display(3); |
|
} |
|
|
|
function mirror(dir) { |
|
// mirror the image horizontally or vertically |
|
if (dir == "h") { |
|
toggleFlag("hmir"); |
|
} else { |
|
toggleFlag("vmir"); |
|
} |
|
setParameter("mo", getAllFlags()); |
|
display(3); |
|
} |
|
|
|
function page(page, details) { |
|
|
|
if ( details == null ) { |
|
details = 1; |
|
} |
|
|
|
if ( page.indexOf('-') == 0 ) { |
|
if ( dlParams.pn.value > 1 ) { |
|
page = Math.max(parseInt(dlParams.pn.value) - parseInt(page.slice(1)), 1); |
|
dlParams.pn.value = page; |
|
display(details); |
|
} else { |
} else { |
alert("You are already on the first page!"); |
s += " {" + l + "}<br>\n"; |
} |
|
|
|
} else if ( page.indexOf('+') == 0 ) { |
|
page = parseInt(dlParams.pn.value) + parseInt(page.slice(1)); |
|
dlParams.pn.value = page; |
|
display(details); |
|
} else if ( page == parseInt(page) ) { |
|
dlParams.pn.value = parseInt(page); |
|
display(details); |
|
} |
} |
|
|
} |
} |
|
return s; |
function zoomFullpage() { |
|
// zooms out to show the whole image |
|
setParameter("wx", 0.0); |
|
setParameter("wy", 0.0); |
|
setParameter("ww", 1.0); |
|
setParameter("wh", 1.0); |
|
parseArea(); |
|
display(3); |
|
} |
} |
|
|