changeset 35:aa19a358e58e

added documentation for new digilib/client version
author luginbue
date Thu, 21 Feb 2002 02:29:51 +0100
parents 84a481a388bb
children 232fd1231217
files client/doc/digilib_client.txt client/doc/dokumentation_digilib.html client/doc/dokumentation_digilib.txt
diffstat 3 files changed, 186 insertions(+), 441 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/doc/digilib_client.txt	Thu Feb 21 02:29:51 2002 +0100
@@ -0,0 +1,186 @@
+DIGILIB-CLIENT
+==============
+
+
+Table of contents
+-----------------
+
+1 Introduction
+
+2 Files
+
+2.1 digilib.jsp
+2.2 dlImage.jsp
+2.3 navigation_XX.js
+2.4 dlMenu.html
+
+2.5 Modules
+2.5.1 pdfMaker.js
+2.5.2 pagesTotal.js
+
+3 Future
+
+4 Information
+
+4.1 Supported browsers and platforms
+
+1 Introduction
+--------------
+
+Digilib is a client-server-software that transforms high-resolution images to formats that are acceptable for internet network connetions. the client software is based on HTML and JavaScript so that everybody can use it with a normal browser. To see in full detail which browsers and platforms are supported check chapter 4.1. This software provides lots of features like zooming areas of pictures, setting marks to the pictures, jumping to different pictures while always being able to generate URLs so that people can distibute these and everybody can see the same picture with ist marks.
+It has been put lots of attention providing files that are as intependant of each other as possible so that embedding it in other kind of pages will be as simple as it can be. Stuff like providing modules or a different menubar are just some of the stuff you can easily do without having to change the files provided.
+
+Some of the the client-files contain JSP code, to do some serverside configuration. Because of the fact that the serverside software has to use a java module for the web-server there is no need to install more stuff than what is needed by the server-scripts.
+
+This software is still work in progress and it is quite probable that lots of stuff will change in the future, so check this file with every new version of software you downloaded.
+
+
+2 Files
+-------
+
+There are quite some files the client software needs to run all the interactive user-interface. To give you a detailed view of the files there is a subsection provided in this document explaining what each file does and how it interacts with the others.
+
+2.1 digilib.jsp
+---------------
+
+This is the file you will request from the server and which will call the other files. The main purposes of this file are:
+	- User authentication when wanting to access restriced documents. Check out the
+	  serverside documentation for detailed explanation of how to set it up.
+	- Converting the query-string to the servlet style parameters (because of some 
+	  historical reasons the two parameter-sets are not equal and a project at the 
+	  Univerity of Berne based on digilib requires the first kind of parameters. So
+	  for the moment we have to live with it...)
+	- Building the frameset for the different frames like the one actually holding
+	  the image, one for navigation, etc. . It's up to the developer of a certain
+	  application to change it to its needs.
+
+The crutial point in this file is the way the query on the URL (get-method) is made. After 'digilib.jsp?' there is a comma-separated list of parameters. It is to say that principally all of them are optional, but the first of them describing the url of the image-directory should really be set. Here is the list of the diffenent attributes in digilib.jsp?[att0]+[att1]+[att2]+[att3]+[att4]+ ... +[att8]
+
+	[att0]   Directory where the image can be found (check the documentation for
+	         serverside).
+	[att1]   The page number (equals the index of the image in the sorted directory).
+	[att2]   The dimension relative to the visible height/width in the frame (1.0 means 
+	         that the image fits exactly into the frame, while 2.0 means twice that size).
+	[att3]   Attribute to pass extra options to the servlet (for example 'fit' means that 
+	         normally not resized gif-images will be scaled).
+	[att4]   Here are the marks passed separated by ';', while the coordinates are 
+	         separated with '/'. The cooridnates are in a relative format (0.0 - 1.0). 
+	         Example ... +0.33/0.5;0.25/0.25+ ... means that there are two marks one a
+ 	         third from the left and half down the image and the second a quarter from left
+	         and top of the image.
+	[att5]   Relative (0.0 - 1.0) value giving the most left pixels visible in the zoomed 
+	         image.
+	[att6]   Dito with the topmost pixels.
+	[att7]   Gives the visible width of the image (also 0.0 - 1.0).
+	[att8]   Same with the height.
+
+It is important to understand that all cooridnates that are used by digilib are passed as relative values where the width/height of an image is 1. This way it is possible that the images are displayed the same way on all kind of different screen-sizes and so making opening the possibility of sharing a url between people that will see the same on their screens.
+
+2.2 dlImage.jsp
+---------------
+
+The parameterlist in 'dlImage.jsp' is quite the same as in 'digilib.jsp' but is represented in another format. As in chapter 2.1 we are discussing here the parameterlist. The parameters are no longer separated with the plus-sign put with an ampersand '&', which is the official way of passing different parameters through the URL. The parameters have all a name followed by a value, like ' .../dlImage.jsp?fn=histbot/botany&pn=3& ... '. I will give you now a list of parameters dlImage.jsp understands by default by indication the name and its equivalent in digilib.jsp and if needed some special comments. It is possible and the somehow the aim of dlImage to pass more parameters to this file for additional functionality. Check out section 2.5.1 where is a good example of how to modify dlImage.jsp for adding new functionality.
+
+	fn		= att0
+	pn		= att1
+	ws		= att2
+	mo		= att3
+	mk		= att4
+	wx		= att5
+	wy		= att6
+	ww		= att7
+	wh		= att8
+
+	dx		= Width of the frame containing the to be displayed image in pixels.
+	dh		= Dito with the height.
+	
+DlImage.jsp can react in two completely different ways on a request. When requesting the file it checks whether the width and height of the frame are passed as parameters in the URL. This is not the case on every first view of a session. If the dimensions are not set, then dlImage sends a dummy page to the client, calculates the width and height of the frame (which is only possible with a correct html-file) and resends the request to dlImage.jsp this time with the indicated dimensions.
+
+The other way dlImage.jsp reacts is its noraml reaction. This means that it parses the parameterslist and fills in some default values if they are missing (check out the source-code to see them). Then the file is going to include some script files that do offer the functionality. Part of these JavaScript-files are browser dependant, some are not. The most important files are named with navigation_XX.js where XX is a shortcut for the browser. The other files (the ones not browser-dependant) are some sample modules that are discussed in section 2.5.
+Then it is time to build the actual HTML for the frame. There is one layer holding the picture (the way the parameters should be passed is described in the serverside dokumentaion). The layers named 'dotX' are the layers holding the marks, the ones named 'eckX' are the corners when zooming a rectangle.
+Last but not least the parameters are passed to the navigation-script or the the module using them (<body bgcolor="#666666" onload='init_XXXXX("<%= fn ... ")'>).
+
+2.3 navigation_XX.js
+--------------------
+
+Let's look at the crucail points about navigation_XX.js-files. Most important is that the parameters passed to the init-function are stored in an array globally accesible (the code in init shows this). The name of the array is 'att'. There is also a function called 'loadPicture' that puts together a new URL (dlImage.jsp?...) for loading a new picture or another part of the same. Then we have lots of functions dealing with different parts of the digilib functionality:
+
+	backPage     Loading the previous picture in the directory
+	nextPage     Loading the next picture in the directory
+	page         Loading a picture in the same directory by index
+	digicat      Loading a new window containing thumbnails of images in the directoy
+	             (some closely related project called 'digiCat')
+	ref          Generating HTML- or LaTeX-style links for the special part of picture
+	             including marks to build into other documents. The URL is made with 
+	             digilib.jsp?...+... .
+	mark         Sets a mark to the current picture
+	zoomArea     Zooms an area of the current picture
+	zoomPoint    Zooms in around the selected point on the picture
+	moveTo       Moves the center of a image area to this point while maintaining the same
+	             zooming grade (sometimes this is known as 'pan')
+	scale        Scales an image relative to the dimensions of the image-frame (normally
+	             the image fits right into it)
+
+The other functions are helpers that are should not be directly accessed from outside the frame.
+
+2.4 dlMenu.html
+---------------
+
+This file generates the navigation-frame with buttons and menus. From this point the calls are made to navigation_XX.js. Please consider this frame as a sample the we at the University of Berne are currently using. If you are good in graphics design feel free to create your own buttons.
+The files related to dlMenu.html are in a subdirectory called 'buttons' where the gif-images are stored and also the menu.js-scripts handling the menus.
+
+2.5 Modules
+-----------
+
+The modules form a very important part of the whole project. This software aims to be easy to upgrade with new functionality. Because of the fact that JavaScript is not a full featured programming language modularisation  in so that intuitive and simple. Still we have found a way of providing enough freedom to build new modules and adding features to digilib. The example of two sample modules (that are nevertheless useful), we would like to show how we think one should implement another module to add new functionality.
+
+2.5.1 pdfMaker.js
+
+In the subdirectory 'modules' is a very simple module called pdfMaker.js. This very basic module only has one function (makePDF) that does nothing more than giving a prompt where one can enter a number of image-indices and call a serverside script that creates a PDF-file with the different picures. To make this module work it has first to be loaded by dlImage.jsp. Because it is browser-independant there is only one version of it. Aften being loaded it has access to the whole 'att'-array which is quite stupidely shown in makePDF by giving the index of the currently displayed image as default value.
+One other thing that has to be done is to enter a new button to navigation.html so that the new function can be called... quite logic i know.
+
+2.5.2 pagesTotal.js
+
+'pagesTotal.js' is a lot more complicated than the first module and shows some more things to think of when making a module. It aims to show the current pagenumber (index) and the total number of images in the directory in a separated frame. The first thing that has to be done is implementing a new frame in diglib.jsp to provide space to write down the information.
+As we know the current index is stored in the parameter 'pn' in dlImage.jsp and easily accessible in the scripts with 'att[1]', where as the total number of pages is only known by the server. To get this information one has to make a call to a server function. This is done in digilib.jsp (query += "&pt=" + DB.getNumPages(request);) the resulting number that should not cheange during a session is stored in a new parameter 'pt' that is sent in the parameter-list to dlImage.jsp.
+In dlImage we have to load the module (configure 2.5.1). Next thing is to make the 'pt' accessible through all the scripts (adding a new cell to the 'att'-array) by creating an init'function in the module. While the original function is called 'init' the one in pagesTotal is called 'init_pagesTotal' and acception the additional parameter 'pt'. In 'init_pagesTotal' there is a call to the original 'init' with all parameters but 'pt' and so filling the first nine cells of the att-array. Then it's time to add a new cell with 'pt' as its value. Further on there is a call to function 'pagesTotal' that writes the data into the new frame.
+As you can see there are some functions overriding the original ones. 'nextPage', 'page' and 'loadPicture' are rewritten in the module to make use of the new functionality. In the first two functions we can make now some additional checks that we cannot run past the last image. 'loadPicture' has to be improved so that 'pt' will be in the URL sent when loading a new picture or area.
+
+
+3 Future
+--------
+
+There are some future plans concerning the cilent software. While there is no actual list of things that have to be done, but some vague ideas of improvements:
+
+	- Cleaning up the different stiles of holding the parameters.
+	- Makeing some handy generic functions like mouseclicks or mousemoves so that they can 
+	  be used in modules.
+	- Makeing the implementation of modules clearer, easier and safer than it is now. In
+	  JavaScript there are some (rudimentary?) object-oriented ideas that might help
+	  improving it - but I didn't got it until now.
+	- Make it work on more platforms/browsers. Lots of trial and error has to be done to
+	  make it work with 'Opera'.
+	- You can always make the code clearer, smaller, better, faster, ... :-)
+
+
+4 Information
+-------------
+
+4.1 Supported browsers and platforms
+------------------------------------
+
+Here is a very incomplete list of browsers and platforms known to work with digilib. We provide three different navigation-scripts to work with different implementations of JavaScript in different browsers. These are Netscape 4, Internet Explorer (working on versions 4 - 6) and the Mozilla5-engine. Due to some bugs in the browsers and special behaviours of different platforms we cannot garantee that digilib works on every platform supported by for example the Mozilla5-engine. Anyone having success on a different platform than the ones indicated below, please send a note.
+
+- Netscape 4.7x (Windows, MacOS 9.0/9.1, MacOS X, Linux, Solaris)
+- Mozilla 0.9.x (Windows, Linux, MacOS X)
+- Internet Explorer 4.01+ (Windows)
+- Internet Explorer 5 (MacOS 9.0/9.1, MacOS X)
+
+It is known and already mentioned that 'Opera' is currently not supported by digilib, but still this is some task that is planned for the future.
+
+
+-------------------------------------------------------------------------------------------
+University of Berne - Switzerland
+History and Philosophy of Science
+
+18.02.2002    Christian Luginbuehl (luginbuehl@student.unibe.ch)						
--- a/client/doc/dokumentation_digilib.html	Thu Feb 21 02:27:06 2002 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,153 +0,0 @@
-<html>
-<head>
-<title>Untitled Document</title>
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-</head>
-
-<body bgcolor="#FFFFFF" text="#000000">
-<h1>Digital Document Library</h1>
-<h4>&nbsp; </h4>
-<table border="0" cellspacing="3" width="573">
-  <tr> 
-    <td> 
-      <h4>Stand:</h4>
-    </td>
-    <td> 
-      <h4>27. M&auml;rz 2001</h4>
-    </td>
-  </tr>
-  <tr> 
-    <td> 
-      <h4>&nbsp;</h4>
-    </td>
-    <td> 
-      <h4>&nbsp;</h4>
-    </td>
-  </tr>
-  <tr> 
-    <td> 
-      <h4>Leitung:</h4>
-    </td>
-    <td> 
-      <h4>Gerd Grasshoff (<a href="mailto:gerd.grasshoff@philo.unibe.ch">gerd.grasshoff@philo.unibe.ch</a>)</h4>
-    </td>
-  </tr>
-  <tr> 
-    <td> 
-      <h4>Autor:</h4>
-    </td>
-    <td> 
-      <h4>Christian Luginb&uuml;hl (<a href="mailto:luginbuehl@student.unibe.ch">luginbuehl@student.unibe.ch</a>)</h4>
-    </td>
-  </tr>
-</table>
-<h3>Inhalt</h3>
-<ol>
-  <li>Einf&uuml;hrung</li>
-  <li>Filestruktur</li>
-  <li>Files</li>
-</ol>
-<h3>1. Einf&uuml;hrung</h3>
-<p>Das Projekt Digital Document Library hat zum Ziel, &quot;Dokumente&quot;mit 
-  Heilfe eines Web-Browsers anschauen zu k&ouml;nnen. Diese Dokumente sind hochaufgel&ouml;ste 
-  Bilddateien, die auf einem Server gespeichert sind. Um der Benutzerin, dem Benutzer 
-  die M&ouml;glichkeit einer raschen Konsultation der Daten liefern zu k&ouml;nnen, 
-  m&uuml;ssen diese Bilddaten auf eine vern&uuml;nftige Gr&ouml;sse verkleinert 
-  und an die Anfragenden geschickt werden. Weiter sollen den Usern Hilfsmittel 
-  zur Verf&uuml;gung stehen um in diesen Seiten zu navigieren. Diese Hilfsmittel 
-  bestehen aus Funktionen um zwischen verschiedenen Seiten hin und her zu wechseln, 
-  Ausschnitte aus einem Bild zu zoomen und der M&ouml;glichkeit Markierungen zu 
-  setzen. Ein weiter wichtiges Feature dieses Programms ist es, Referenzen von 
-  Seiten (inkl. Ausschnitte und Markierungen) verf&uuml;gbar zu machen, die dann 
-  in beliebiegen anderen Dokumenten eingebaut werden k&ouml;nnen. Sofern die Lesenden 
-  dieser Dokumente dann &uuml;ber einen Anschluss ins Internet verf&uuml;gen, 
-  k&ouml;nnen diese Referenzen direkt konsultiert werden und so die Digital Document 
-  Library als grosse Quelltextsammlung gebraucht werden.</p>
-<h3>2. Filestruktur</h3>
-<p>Die Digital Document Library ist als Client/Server-Modell aufgebaut, wobei 
-  an dieser Stelle haupts&auml;chlich die Clientseite beschrieben wird. Zu einem 
-  besseren Verst&auml;ndnis ist nun folgend eine Skizze mit den verschiedenen 
-  Files und Verzeichnissen anf&uuml;gt.</p>
-<p align="left"><img src="Digilib.gif" width="691" height="603" border="0" vspace="20" hspace="20"></p>
-<p align="left">Da JavaScript auf den verschiedenen verf&uuml;gbaren Browsern 
-  nicht genau gleich implementiert wurde und Digilib auf dieser Scriptsprache 
-  aufsetzt, ist es wichtig in digilib.html eine geeignete Version von navigation_XX.js 
-  zu finden. Das XX wird als Variable f&uuml;r unterschiedliche Anpassungen an 
-  die Browser. Momentan sind Netscape 4 (navigation_n4.js) und Netscape 6 (navigation_n6.js) 
-  unterst&uuml;tzt.<br>
-  Beim Erstellen der Struktur wurde darauf geachtet, dass das Layout und die tats&auml;chliche 
-  Funktionalit&auml;t voneinander getrennt sind. Dies erm&ouml;glicht eine besstm&ouml;gliche 
-  Portabilit&auml;t des Codes, so dass es m&ouml;glich ist, Digilib f&uuml;r spezielle 
-  Anwendungen anzupassen (vgl. Compago, Universit&auml;t Bern).</p>
-<h3 align="left">3. Files</h3>
-<h4>3.1 digilib.html</h4>
-<p>Dies ist die Schnittstelle zwischen Layout und Funktion von Digilib. Die Aufgaben 
-  dieser Datei sind, das Laden der richtigen navigation_XX.js-Datei und das Anpassen 
-  des Layouts. Hauptaufgabe jedoch ist das Lesen der Parameter aus der URL. digilib.html 
-  ist so aufgebaut, dass ein Bild (inkl. Ausschnitte und Markierungen) vollst&auml;ndig 
-  &uuml;ber Parameter in der URL angegeben werden kann. Nun folgend ist eine Liste 
-  mit allen m&ouml;glichen Parametern, wobei nur gerade der erste gegeben sein 
-  muss - alle andern haben Defaultwerte, die in Klammern angegeben sind:</p>
-<pre>http://penelope.uni.../digitallibrary/digilib.html?att0+[att1]+[att2]+...+[att8]</pre>
-<ul>
-  <li><b>att0</b> gibt das Verzeichnis an, in dem das Bild gespeichert ist.</li>
-  <li><b>att1</b> (1) gibt die Seitenzahl des Bildes an. Diese Zahl bezieht sich 
-    nicht auf die Buchseite, sondern zeigt auf die x-te Datei im unter att0 angegebenen 
-    Verzeichnis.</li>
-  <li><b>att2</b> (1) ist der Skalierungsfaktor. Ein Faktor von 1 zoomt das Bild 
-    auf Framegr&ouml;sse, 2 macht das Bild doppelt so hoch und breit.</li>
-  <li><b>att3</b> (&quot;&quot;) ist f&uuml;r zus&auml;tzliche Kommandos an das 
-    Servlet gedacht und per default leer. Einziges unterst&uuml;tztes Argument 
-    ist hier &quot;f&quot; um das Servlet anzuweisen auch gif-Images zu zoomen.</li>
-  <li><b>att4</b> (0/0) enth&auml;lt die Informationen f&uuml;r Markierungspunkte. 
-    Die x- und y-Koordinate verden mit &quot;/&quot; getrennt, verschiedene Markierungen 
-    mit &quot;;&quot; (es sind bis zu 8 m&ouml;glich). Die Makrierungen werden 
-    relativ zur Bildbreite und -h&ouml;he von 0 bis 1 angegeben (0/0 wird nicht 
-    gezeichnet).</li>
-  <li><b>att5, att6</b> (0, 0) geben die linke ober Ecke des gew&uuml;nschten 
-    Ausschnitts an (ebenfalls relativ - vgl. att4).</li>
-  <li><b>att7, att8</b> (1, 1) geben die relative Breite bzw. H&ouml;he des Ausschnitts 
-    an. (Standardm&auml;ssig sind die Parameter so gesetzt, dass das ganze Bild 
-    angezeigt wird).</li>
-</ul>
-<p>Diese Parameter werden von digilib.html als ein Block gelesen und an navigation_XX 
-  weitergeleitet, wo dieser Block dann auseinander genommen und im richitgen Format 
-  gespeichert wird.</p>
-<h4>3.2 navigation.html</h4>
-<p>Diese Datei l&auml;dt fw_menu.js, mit Funktionen f&uuml;r Events bei den Kn&ouml;pfen 
-  und Menus. Weiter ist hier das Layout der Navigationsleiste festgelegt und die 
-  Texte f&uuml;r die Kontexthilfe sind hier gespeichert.</p>
-<h4>3.3 fw_menu.js</h4>
-<p>In dieser von Fireworks generierten JavaScript-Datei werden die Events abgearbeitet, 
-  die bei Mausbewegungen und -klicks &uuml;ber den Kn&ouml;pfen gesendet werden. 
-  In dieser Datei ist auch eine Funktion f&uuml;r die kantextsensitive Hilfe der 
-  einzelnen Kn&ouml;pfe gespeichert. Wenn sie eingeschaltet ist, dann wird beim 
-  &Uuml;berfahren der Kn&ouml;pfe ein kleines Fenster ge&ouml;ffnet, in dem kurz 
-  die Funktion und der Gebrauch dieses Knopfes erl&auml;utert.<br>
-</p>
-<h4>3.4 navigation_XX.js</h4>
-<p>Diese Datei bildet das Kernst&uuml;ck des Digilib-Clients. Hier werden die 
-  Funktionen angeboten um Seiten zu wechseln, Makierungen zu setzen, Referenzen 
-  zu erzeugen und Ausschnitte zu zoomen. Weiter werden hier die Parameter aus 
-  digilib.html &uuml;berpr&uuml;ft und gespeichert, die Anfrage ans Servlet gemacht, 
-  wenn ein neuer Ausschnitt bzw ein neues Bild gew&uuml;nscht wird und dieses 
-  wird dann ebenfalls von dieser Datei aus im Browser ausgegeben.<br>
-  Es gibt zwei wichtige globale Variablen in dieser Datei:</p>
-<ul>
-  <li><b>whichFrame:</b> Diese Variable gibt an, in welchem Frame die erhaltenen 
-    Bilder dargestellt werden sollen. Man hat so die M&ouml;glichkeit von aussen 
-    auf diese Variable zuzugreiffen und so Anpassungen machen, wenn man ein anderes 
-    Layout will (Bsp. Vergleichsbildschirm von Compago, Universit&auml;t Bern). 
-    Das Format ist nach passendem DOM (Document Object Model - vgl. <a href="http://www.w3c.org">www.w3c.org</a>) 
-    als relativer Pfad von der Stelle anzugeben, wo navigation_XX.js geladen wurde.</li>
-  <li><b>att-Array: </b>In diesem Array sind die einzelnen Parameter gespeichert 
-    wie sie in Kapitel 3.1 aufgef&uuml;hrt wurden. Der Grund weshalb diese Variable 
-    global gehalten wurde, ist der, dass ein modifizierter Client Informationen 
-    &uuml;ber eine Seite speichern und weiterverarbeiten kann (auch hier sei auf 
-    den &quot;Vergleichsbildschirm&quot; des Projektes Compago der Universit&auml;t 
-    Bern hingewiesen).</li>
-</ul>
-<p>&nbsp;</p>
-<p>Christian Luginb&uuml;hl</p>
-</body>
-</html>
--- a/client/doc/dokumentation_digilib.txt	Thu Feb 21 02:27:06 2002 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,288 +0,0 @@
-DIGITAL DOCUMENT LIBRARY
-------------------------
-
-Stand   : 21. Januar 2001
-
-
-Leitung : Gerd Grasshoff (gerd.grasshoff@philo.unibe.ch)
-
-Autor   : Christian Luginbühl (luginbuehl@student.unibe.ch)
-
-
-
-Inhalt
-------
-
-1. Einführung
-
-2. digilib3.jsp
-
-3. navigation3XXX.js
-
-4. ScaleServlet.java
-
-
-
-1. Einführung
--------------
-
-Das Projekt Digital Document Library  hat zum Ziel, "Dokumente" mit  Hilfe eines
-Browsers anschauen zu können.  Diese Dokumente sind hochaufgelöste  Bilddateien,
-die  auf einem  Server gespeichert  sind. Um  der Benutzerin,  dem Benutzer  die
-Möglichkeit einer raschen Konsultation der Daten liefern zu können, müssen diese
-Bilddaten auf eine vernünftige Grösse verkleinert und in dieser Form dann an die
-Anfragenden  geschickt werden.  Weiten sollen  den Benutzenden  Hilfsmittel zur
-Verfügung stehen um in diesen  Seiten zu navigieren. Diese Hilfsmittel  bestehen
-aus  Funktionen  um  zwischen  verschieden  Seiten  hin  und  her  zu  wechseln,
-Ausschnitte aus einem Bild zu zoomen und der Möglichkeit Markierungen zu setzen.
-Ein  weiteres  wichtiges  Feature  dieses  Programms  ist  es,  Referenzen  ganz
-bestimmter Seiten (inkl. Ausschnitte  und Markierungen) auszugeben, die  dann in
-beliebigen  anderen  Dokumenten  eingebaut werden  können.  Sofern  die Lesenden
-dieser Dokumente dann über einen  Anschluss ins Internet verfügen, können  diese
-Referenzen direkt  angeschaut werden  und so  die Digital  Document Library  als
-grosse Quelltextsammlung gebraucht werden.
-
-Das Programm  nun ist  ein Client/Server-Modell.  Einerseits haben  wir das User
--Interface (also den  Client), wo die  Darstellung und die  Navigation aufgebaut
-und berechnet werden. Dieser Teil des Programms umfasst im Prinzip zwei Dateien.
-Mit der Frage des Layouts beschäftigt  sich digilib3.jsp. Es ist die Datei,  die
-im Browser aufgerufen wird (mit  den verschiedenen Parametern, die in  Kapitel 2
-erläutert werden) und die nötigen Aufrufe macht für die Skalierung der Bilddaten
-und der  entsprechenden Navigationselemente.  Die zweite  Datei des  Clients ist
-eine dynamisch ausgerufene JavaScript-Datei namens navigation3XXX.js, wobei  die
-XXX  für  die  verschidenen   Borwservarianten  stehen.  Da  die   Scriptsprache
-JavaScript in den  verschiedenen Browsern nicht  ganz gleich implementiert  ist,
-ist es nötig  diese Datei an  die verschidenen Umgebungen  anzupassen. Das Laden
-dieser Dateien übernimmt  digilib3.jsp, indem es  erst abfragt, welchen  Browser
-von Client gebraucht wird und dann die entsprechende navigation-Datei vom Server
-verlangt. Auf der Serverseite ist ein Programm namens ScaleServlet sehr wichtig.
-Dieses Servlet  handelt die  Anfragen der  Clients und  macht die  verschiedenen
-Skalierungen an dem Bildern und  schickt, dann den entsprechenden Ausschnitt  an
-den Client.
-
-In  den  nächsten  Kapitel  sind  die  einzelnen  Files  mit  ihren verschidenen
-Parametern der Aufrufe erläutert.
-
-
-2. digilib3.jsp
----------------
-
-Bei einem Request von digilib3.jsp werden auf der Serverseite die  verschiedenen
-Parameter des Aufrufs in die zurückgesendete Datei eingefüllt und dann vor allem
-für  den  von  'digilib' ausgehenden  Aufruf  des  ScaleServlets verwendet.  Die
-verschiedenen  Parameter  beim   Request  sind  durch   Pluszeichen  voneinander
-getrennt. Beispiel:
-
-http://pene ... /digilib3.jsp?histast/eastwood-collection/AF+3+s1.2+r:3852+12/30
-                              ------------------------------ - ---- ------ -----
-                              Parameter 1                    2 3    4      5
-
-Die verschiedenen Parameter werden in digilib3.jsp in ein Array mit 11 Elementen
-(1 - 11) aufgenommen. Folgend ist nun eine Auflistung aller Parameter und  ihrer
-Bedeutung. Es  ist absolut  zwingend, dass  diese in  der richtigen  Reihenfolge
-aufgerufen werden.
-
-- att[1] = '<%= docuurl %>'
-
-Dieser  Parameter  gibt  den  Pfad  ohne  Hostnamen  zum  Verzeichnis  mit   dem
-gewünschten Werk an.  Wichtig zu verstehen  ist, dass hier  nicht ein bestimmtes
-Bild angesprochen wird, sondern nur ein Verzeichnis.
-
-- att[2] = '<%= startPage %>'
-
-Dies ist die Nummer des Bildes  im von Parameter 1 gewählten Verzeichnis.  Falls
-dieser Parameter leer ist, wird er automatisch auf '1' gesetzt.
-
-- att[3] = '<%= scalefact %>'
-
-Scalefact  gibt den  Vergrösserungsfaktor der  Bildes an,  im Vergleich  zur in
-ScaleServlet angegebenen Standardgrösse. Die Syntax diese Parameters ist 'sx.x',
-wobei x.x für die Werte 0.6, 0.8,  1.0, 1.2, 1.4, 1.6, 2.0, 2.5 oder  3.0 stehen
-kann. Standardwert ist 's1.0'.
-
-(Anm: Serverseitig wird an diesem Teil noch gearbeitet, damit die Standardgrösse
-auf verschidenen Bildschirmen auch verschieden gross ist)
-
-- att[4] = '<%= commandostring %>'
-
-Gebraucht  wird  dieser  Parameter  dafür,   dass  die  Bilder  nicht  aus   dem
-Browsercache genommen werden, sondern auf dem Server dann neu berechnet  werden.
-Bei  einem "Zoom  Out" wird  hier eine  Zufallszahl generiert.  Die Syntax  ist
-'r:xxxx', wobei x irgend eine höchstens vierstellige Zahl. Standardwert ist r:1.
-
-- att[5] = '<%= remarkcoord %>'
-
-In diesem Parameter werden  die Koordinaten der Markierungspunkte  festgehalten.
-Syntax ist 'xxx/yyy;zzz/ttt; ... aaa/bbb'. Die Koordinatenpaare um "/" geben an,
-wo eine  Markierung gesetzt  werden soll,  wobei Werte  von 0  bis zur aktuellen
-Bildgrösse erlaubt sind.  Durch ";" werden  die einzelnen Markierungen  getrennt
-(maximal 5 sind  möglich). Standardwerte sind  hier '' (leer)  oder '0/0' (keine
-Markierung wird gesetzt).
-
-- att[6] = '<%= windowwidth %>' / att[7]   = '<%= windowheight %>'
-
-Windowwidth gibt an,  wie breit/hoch das  Bild auf dem  Bildschirm ist. Standard
-ist '' (leer).
-
-- att[8] = '<%= xoffset %>' / att[9] = '<%= yoffset %>'
-
-Diese Attribute  haben zwei  Bedeutungen. Falls  att[10] und  att[11] leer sind,
-gibt xoffset  bzw. yoffset  an, um  welchen Punkt  im Bild  gezoomt werden soll.
-Falls att[10],  att[11] nicht  leer sind,  geben sie  die Koordinaten  der linke
-oberen  Ecke des  zu vergrössernden  Bildausschnitts an.  Standard ist  hier ''
-(leer).
-
-- att[10] = '<%= width %>' / att[11] = '<%= height %>'
-
-Falls diese Attribute verschieden von '' (leer) sind, geben sie die  Breite/Höhe
-des Bildaussschnittes an, der gezoom werden soll.
-
-
-Die weiteren Funktionen von digilib3.jsp sind:
-
-- Laden des navigation3XXX.js-Files für den entsprechenden Browser.
-- Erstellen eines Framesets (kleiner Frame mit den Navigationsbuttons und
-  Frame mit dem Bild).
-- Erstellen der Navigationsbuttons.
-- Zusammenstellen der korrekten Parameterliste für den Aufruf von ScaleServlet.
-- Erstellen der verschiedenen Layers mit dem Bild (Aufruf), den Markierungen und
-  den Zeichen für die Eckpunkte beim Vergrössern.
-- Aufruf an navigation3XXX.js für Intialbefehle wie Setzen der Markierungspunkte.
-
-
-3. navigation3XXX.js
---------------------
-
-Navigation3XXX.js ist eine Sammlung von Funktionen zur Navigation in der Digital
-Document Library. Die verschidenen Funktionen werden zum Beispiel durch  klicken
-auf   einen   in  digilib3.jsp   erstellten   Navigationsknopf  aufgerufen.   Um
-verschiedene Browser zu unterstützen (die Implementierung von Javascript und das
-Document  Object Model  sind unterschiedlich),  gibt es  angepasste navigation3
--files,  die  von  digilib3.jsp entsprechend  des  verwendeten  Browsers geladen
-werden. Momentan sind Versionen für Netscape Communicator 4.xx  (navigation3.js)
-und Netscape 6 (navigation3_n6.js) verfügbar. Bei der Programmierung des Clients
-wurde darauf geschaut,  dass digilib3.jsp für  möglichst alle Browser  das selbe
-ist und somit nur navigation3XXX.js angepasst werden muss. Voraussetzung  hierzu
-ist, dass ein Brwoser mit Layern (<div>-Tags) umgehen kann. Nachstehend ist ganz
-kurz erläutert, welche Funktionen in navigation3XXX.js welche Aufgaben erfüllen:
-
-- genString(detail)
-
-Anhand von 'detail' generiert diese Funktion die Parameterliste für einen Aufruf
-eines   neuen   Bildes,   eines  Ausschnittes   oder   des   Strings  für   eine
-Referenzabfrage. 'detail' wird  gebraucht, um die  Anzahl der nötigen  Parameter
-für das  Ausführen der  aufrufenden Funktion  zu bestimmen.  Diese Funktion wird
-immer indirekt, d.h. in  anderen Funktionen von navigation3XXX.js  aufgrufen und
-liefert eine Stringrückgabe.
-
-- Backpage(), Nextpage(), Page()
-
-Diese Funktionen handeln die  Navigation durch die Seiten  eines Verzeichnisses.
-Diese Funktionen werden  mit einem Klick  auf die Navigationsbuttons  aufgerufen
-und Laden eine neue Seite.
-
-- Ref(refselect)
-
-Hier wird ein PopUp-Fenster erzeugt, das die komplette URL der momentanen  Seite
-zurückgibt. Mit 'refselect'  wird bestimmt, ob  die Formatierung der  Ausgabe in
-HTML-  oder  LaTeX-Form sein  soll.  Diese Funktion  wird  mit dem  "Ref"-Button
-aufgerufen.
-
-- Mark()
-
-Diese Funktion plaziert eine Markierung auf  dem Bild, wobei sie zuerst nur  die
-Maus-koordinaten bei  einem Klick  auf das  Bild abfängt  und dann  die Funktion
-'setmark()' aufruft.  Es können  bis zu  fünf Markierungen  auf ein Bild gesetzt
-werden. Auch diese Funktion wird direkt über die Navbuttons aufgerufen.
-
-- Zoomrect(), Zoomin(), Zoomout()
-
-Direkt aufgerufene  Funktionen die  sich mit  dem Zoomen  innerhalb eines Bildes
-beschäftigen. Die Rückgabe ist bei allen drei Funktionen ein Aufruf eines  neuen
-Bildes.
-
-- Moveto()
-
-Diese  Funktion  verändert  das  Zentrum bei  einem  schon  gezoomten  Bild. Die
-geklickten Koordinaten entsprechen dann dem Zenrum des neuen Bildes bei gleicher
-Vergrösserung.  Dieses  Feature  wird  in  Zeichnungsprogrammen  oft  mit  'Pan'
-betitelt. Direkter Aufruf und  Aufruf des neuen Bildes  sind gleich wie bei  den
-Zoom-Funktionen.
-
-- Scaledef(scaledef)
-
-Mit  Scaledef  wird  die   Bildgrösse  im  Vegleich  zur   in  ScaleServlet.java
-angegebenen  Standardgrösse  verändert.  Der  Parameter  'scaledef'  gibt diesen
-Faktor an. Eine Liste der möglichen  Werte ist weiter oben angegeben. Auch  hier
-wird di Funktion direkt über die Auswahlliste im Navigationsframe aufgerufen und
-auch hier wird ein neues Bild geladen.
-
-- setmark()
-
-Setmark wird indirekt von Mark() oder initScripts() aufgerufen und zeichnet sich
-für die Positionierung der Markierungen verantwortlich. Die Funktion  extrahiert
-aus att[5] die einzelnen Koordinaten  und setzt die Punkte. Wenn  eine bestimmte
-Reihenfolge bei den Punkten eingehalten werden soll, dann müssen sie auch  immer
-gleich in der Parameterliste aufgerufen werden. Die Funktion setmark gibt nichts
-zurück.
-
-- parseKeypress()
-
-Diese Funktion dient dem Abfangen von Tastatureingaben, wobei die Tasten "n" für
-nächste Seite und "b" für vordere Seite abgefragt werden. parseKeypress wird von
-initScripts aufgerufen und hat keinen Rückgabewert.
-
-- initScripts()
-
-In dieser Funktion werden Vorkehrungen getroffen, die beim Anzeigen einer  neuen
-Seite  getroffen werden  müssen. Deshalb  wird diese  Funktion automatisch  beim
-Laden   von   digilib3.jsp   aufgerufen.   Insbesondere   ruft   diese  Funktion
-parseKeypress und setmark  auf, wobei bei  verschiedenen Browsertypen auch  noch
-andere  Sachen  hinzukommen  (bei  Netscape   6  wird  zum  Beispiel  auch   die
-Clientgrösse berechnet und geschaut ob Scrollbalken gemacht werden müssen).
-
-
-4. ScaleServlet.java
---------------------
-
-Der Aufruf von ScaleServlet.java erfolgt grundsätzlich von digilib3.jsp und  die
-Parameterliste hat  auch die  selben Attribute  (ausgenommen ist  att[5] mit den
-Koordinaten der Markierungspunkte. Bei Fragen über die einzelnen Bedeutungen der
-Attribute sie hier also auf Kapitel 2 verwiesen. An dieser Stelle sei aber  noch
-etwas  gesagt, über  die Zusammensetzung  der Parameterliste.  ScaleServlet.java
-kennt drei verschiden lange Parameterlisten,  mit denen es arbeiten kann,  wobei
-die korrekte Zusammenstellung der Parameterliste in digilib3.jsp erfolgt.
-
-- Kurz (att[1] - att[4])
-
-Diese vier Parameter geben dem ScaleServlet die Aufgabe, ein Bild (bestimmt  mit
-att[1] und  att[2]) auf  die Standardgrösse  zu skalieren  und an  den Client zu
-senden. Att[3] gibt  zusätzlich den Skalierungsfaktor  an und att[4]  verhindert
-mit einer Zufallszahl, dass das Bild aus dem Browsercache geholt wird.
-
-- Mittel (att[1] - att[4] + att[6] - att[9])
-
-Diese Möglichkeit  des Aufrufs  wird gebraucht,  um bezüglich  des in att[8] und
-att[9] bestimmten Mittelpunktes einen Ausschnitt zu vergrossen. Um den genannten
-Punkt  einzuordnen, wird  die grösse  des momentan  angezeigten Bildes  mit den
-Parametern 6 und 7 mitgegeben.
-
-- Lang (att[1] - att[4] + att[6]- att[11])
-
-Ein Aufruf in dieser Form gibt  dem Servlet an, einen Ausschnitt aus  einem Bild
-zu vergrössern und zurückzusenden. Folgt ein Aufruf in dieser Form, bekommen die
-Parameter att[8] und  att[9] die Werte  der linken oberen  Ecke und att[10]/[11]
-die Breite/Höhe des Ausschnitts.
-
-
-Aufgrund eines  eingebauten Session-Managements  im Servlet  ist es  möglich mit
-digilib auch mehrfach in ein Bild hinein zu zoomen.
-
-(Anm: Auch wenn dieses Session-Management seinen Zweck beim Anschauen der Bilder
-sehr  gut  erfüllt, ist  es  dem ScaleServlet  nicht  möglich den  Referenz-URLs
-anzusehen,  ob zuerst  mehrfach hineingezoomt  wurde und  gibt unter  Umständen 
-- eben wenn mehrfach hieingezoomt wurde vor der Generierung der Referenz - einen
-falschen Ausschnitt zurück.)
-
-
-----------------------------------------------
\ No newline at end of file