[bknr-cvs] r1888 - in branches/xml-class-rework/projects/lisp-ecoop: src website/static website/templates

bknr at bknr.net bknr at bknr.net
Sun Mar 5 14:02:01 UTC 2006


Author: hhubner
Date: 2006-03-05 09:02:00 -0500 (Sun, 05 Mar 2006)
New Revision: 1888

Added:
   branches/xml-class-rework/projects/lisp-ecoop/website/static/document-utils.css
   branches/xml-class-rework/projects/lisp-ecoop/website/static/document-utils.js
   branches/xml-class-rework/projects/lisp-ecoop/website/templates/upload.xml
Modified:
   branches/xml-class-rework/projects/lisp-ecoop/src/handlers.lisp
   branches/xml-class-rework/projects/lisp-ecoop/src/lisp-ecoop.asd
   branches/xml-class-rework/projects/lisp-ecoop/src/packages.lisp
   branches/xml-class-rework/projects/lisp-ecoop/src/participant.lisp
   branches/xml-class-rework/projects/lisp-ecoop/src/tags.lisp
   branches/xml-class-rework/projects/lisp-ecoop/src/webserver.lisp
   branches/xml-class-rework/projects/lisp-ecoop/website/static/javascript.js
   branches/xml-class-rework/projects/lisp-ecoop/website/static/styles.css
   branches/xml-class-rework/projects/lisp-ecoop/website/templates/edit-profile.xml
   branches/xml-class-rework/projects/lisp-ecoop/website/templates/edit-submission.xml
   branches/xml-class-rework/projects/lisp-ecoop/website/templates/submission.xml
   branches/xml-class-rework/projects/lisp-ecoop/website/templates/toplevel.xml
Log:
Numerous changes to support the new data model with multiple documents
per submission.


Modified: branches/xml-class-rework/projects/lisp-ecoop/src/handlers.lisp
===================================================================
--- branches/xml-class-rework/projects/lisp-ecoop/src/handlers.lisp	2006-03-03 22:31:33 UTC (rev 1887)
+++ branches/xml-class-rework/projects/lisp-ecoop/src/handlers.lisp	2006-03-05 14:02:00 UTC (rev 1888)
@@ -2,6 +2,9 @@
 
 (enable-interpol-syntax)
 
+(defun format-object-id (format object &rest args)
+  (apply #'format nil format (store-object-id object) args))
+
 (defmacro with-lisp-ecoop-page ((req title) &body body)
   `(with-bknr-page (,req :title ,title)
      , at body))
@@ -25,7 +28,7 @@
   (with-query-params (req login full-name email text)
     (when (find-user login)
       (error "user ~A already exists" login))
-    (make-participant login :full-name full-name :email email :text text :submission-pathname (request-uploaded-file req "submission"))
+    (make-participant login :full-name full-name :email email :text text :document-pathname (request-uploaded-file req "document"))
     (with-lisp-ecoop-page (req "Pariticpant created")
       "The participant has been created in the database and a welcome mail has been sent.")))
 
@@ -54,15 +57,50 @@
 
 (defclass pdf-handler (object-handler)
   ()
-  (:default-initargs :class 'submission))
+  (:default-initargs :class 'document))
 
-(defmethod handle-object ((handler pdf-handler) (submission submission) req)
-  (let ((pdf (file-contents (blob-pathname submission))))
+(defmethod handle-object ((handler pdf-handler) (document document) req)
+  (let ((pdf (file-contents (blob-pathname document))))
     (with-http-response (req *ent* :content-type "application/pdf")
       (setf (request-reply-content-length req) (length pdf))
       (with-http-body (req *ent* :external-format '(unsigned-byte 8))
 	(write-sequence pdf net.aserve::*html-stream*)))))
 
+
+(defclass upload-document-handler (object-handler)
+  ()
+  (:default-initargs :class 'submission))
+
+(defmethod handle-object ((handler upload-document-handler) object req)
+  (error "Missing object ID"))
+
+(defmethod handle-object ((handler upload-document-handler) (submission submission) req)
+  (unless (submission-edit-permitted-p submission)
+    (error "can't edit this submission"))
+  (ecase (request-method req)
+    (:post
+     (when (request-uploaded-file req "document")
+       (with-query-params (req info)
+         (format t "; new document - info ~S~%" info)
+         (let ((file-name (request-uploaded-file req "document")))
+           (with-open-file (pdf file-name)
+             (if (cl-ppcre:scan "^%PDF-" (read-line pdf))
+                 (let ((document (make-object 'document :info info :submission submission)))
+                   (blob-from-file document file-name)
+                   (redirect (format-object-id "/upload/~A?success=1" submission) req))
+                 (redirect (format-object-id "/upload/~A?failure=~A" submission (uriencode-string "Uploaded file does not appear to be a PDF file")) req)))))))
+    (:get
+     (redirect (format-object-id "/upload/~A" submission) req))))
+
+(defclass delete-document-handler (object-handler)
+  ()
+  (:default-initargs :class 'document))
+
+(defmethod handle-object ((handler delete-document-handler) (document document) req)
+  (unless (submission-edit-permitted-p (document-submission document))
+    (error "can't edit this submission"))
+  (delete-object document))
+
 (defclass admin-handler (admin-only-handler page-handler)
   ())
 
@@ -74,5 +112,7 @@
     ("/add-participant" add-participant-handler)
   ("/edit-participant" edit-participant-handler)
   ("/pdf" pdf-handler)
+  ("/upload-document" upload-document-handler)
+  ("/delete-document" delete-document-handler)
   ("/admin" admin-handler))
 

Modified: branches/xml-class-rework/projects/lisp-ecoop/src/lisp-ecoop.asd
===================================================================
--- branches/xml-class-rework/projects/lisp-ecoop/src/lisp-ecoop.asd	2006-03-03 22:31:33 UTC (rev 1887)
+++ branches/xml-class-rework/projects/lisp-ecoop/src/lisp-ecoop.asd	2006-03-05 14:02:00 UTC (rev 1888)
@@ -8,12 +8,12 @@
 (in-package :lisp-ecoop.system)
 
 (defsystem :lisp-ecoop
-  :name "worldpay test"
+  :name "LISP ECOOP Website"
   :author "Hans Huebner <hans at huebner.org>"
   :version "0"
   :maintainer "Hans Huebner <hans at huebner.org>"
   :licence "BSD"
-  :description "BKNR Test Web Server"
+  :description "Website for the LISP ECOOP Workshops"
   :long-description ""
 
   :depends-on (:bknr-modules :cxml :klammerscript)

Modified: branches/xml-class-rework/projects/lisp-ecoop/src/packages.lisp
===================================================================
--- branches/xml-class-rework/projects/lisp-ecoop/src/packages.lisp	2006-03-03 22:31:33 UTC (rev 1887)
+++ branches/xml-class-rework/projects/lisp-ecoop/src/packages.lisp	2006-03-05 14:02:00 UTC (rev 1888)
@@ -58,6 +58,10 @@
 	   #:submission-remove-submitter
 	   #:submission-timeslot
            #:submission-documents
+           #:submission-edit-permitted-p
+
+           #:document
+           #:document-info
 	   #:timeslot))
 
 (defpackage :lisp-ecoop.tags

Modified: branches/xml-class-rework/projects/lisp-ecoop/src/participant.lisp
===================================================================
--- branches/xml-class-rework/projects/lisp-ecoop/src/participant.lisp	2006-03-03 22:31:33 UTC (rev 1887)
+++ branches/xml-class-rework/projects/lisp-ecoop/src/participant.lisp	2006-03-05 14:02:00 UTC (rev 1888)
@@ -3,9 +3,19 @@
 (enable-interpol-syntax)
 
 (define-lisp-ecoop-class document (blob)
-  ((info :update :documentation "Short information for the document (e.g. 'Slides' or 'Draft Paper')"))
-  (:default-initargs :type "application/pdf"))
+  ((info :update :documentation "Short information for the document (e.g. 'Slides' or 'Draft Paper')")
+   (submission :read :documentation "Submission that this document belongs to"))
+  (:default-initargs :type "application/pdf" :submission (error ":submission argument missing while creating document")))
 
+(defmethod initialize-persistent-instance :after ((document document))
+  (with-slots (submission) document
+    (push document (submission-documents submission))))
+
+(defmethod destroy-object :before ((document document))
+  (with-slots (submission) document
+    (with-slots (documents) submission
+      (setf documents (remove document documents)))))
+
 (define-lisp-ecoop-class submission ()
   ((title :update :documentation "Title of the submission" :initform nil :attribute t)
    (abstract :update :documentation "Abstract or short description" :initform nil :element t)
@@ -13,6 +23,13 @@
    (timeslot :update :documentation "Timeslot scheduled for this submission" :initform nil :attribute t)
    (documents :update :documentation "List of documents attached to this submission" :initform nil :element t)))
 
+(defmethod destroy-object :before ((submission submission))
+  (dolist (participant (submission-submitters submission))
+    (with-slots (submissions) participant
+      (setf submissions (remove submission submissions))))
+  (mapc #'destroy-object (submission-documents submission))
+  (setf (submission-documents submission) nil))
+
 (defmethod destroy-object :before ((timeslot timeslot))
   (when (subtypep (type-of (timeslot-content timeslot)) 'submission)
     (setf (submission-timeslot (timeslot-content timeslot)) nil)))
@@ -20,6 +37,10 @@
 (defmethod submission-type ((submission submission))
   "Generic submission")
 
+(defun submission-edit-permitted-p (submission)
+  (or (admin-p (bknr-request-user *req*))
+      (find (bknr-request-user *req*) (submission-submitters submission))))
+
 (defmethod submission-add-submitter ((submission submission) submitter)
   (pushnew submitter (submission-submitters submission))
   (pushnew submission (participant-submissions submitter)))
@@ -131,17 +152,19 @@
 				(user-login participant)
 				password)))
 
-(defun make-participant (login &key full-name email text submission-pathname)
+(defun make-participant (login &key full-name email text document-pathname)
   (let* ((initial-password (generate-random-password))
 	 (participant (make-user login :full-name full-name :email email :password initial-password
 				 :class 'participant)))
     (when text
       (with-transaction ("set participant text")
 	(setf (participant-text participant) text)))
-    (when submission-pathname
-      (let ((submission (make-object 'submission)))
-	(blob-from-file submission submission-pathname)
+    (when document-pathname
+      (let* ((submission (make-object 'submission))
+             (document (make-object 'document :info "Initial paper")))
+	(blob-from-file document document-pathname)
 	(with-transaction ("set participant submission")
+          (push document (submission-documents submission))
 	  (setf (participant-submissions participant) (list submission)))))
     (send-welcome-mail participant initial-password)
     participant))

Modified: branches/xml-class-rework/projects/lisp-ecoop/src/tags.lisp
===================================================================
--- branches/xml-class-rework/projects/lisp-ecoop/src/tags.lisp	2006-03-03 22:31:33 UTC (rev 1887)
+++ branches/xml-class-rework/projects/lisp-ecoop/src/tags.lisp	2006-03-05 14:02:00 UTC (rev 1888)
@@ -53,18 +53,19 @@
 	   (delete-object participant)
 	   (html (:h2 "Participant has been deleted"))
 	   (return-from profile-editor))))
-      (when (request-uploaded-file *req* "submission")
-	(with-query-params (*req* type title abstract)
+      (when (request-uploaded-file *req* "document")
+	(with-query-params (*req* type title abstract info)
 	  (format t "; new submission - title ~S abstract ~S~%" title abstract)
-	  (let ((file-name (request-uploaded-file *req* "submission")))
+	  (let ((file-name (request-uploaded-file *req* "document")))
 	    (with-open-file (pdf file-name)
 	      (if (cl-ppcre:scan "^%PDF-" (read-line pdf))
-		  (let ((submission (make-object (if (equal type "breakout-group-proposal")
-						     'breakout-group-proposal
-						     'paper)
-						 :submitters (list participant) :title title :abstract abstract)))
-		    (blob-from-file submission file-name)
-		    (with-transaction ("adding pariticipant submission")
+		  (let* ((submission (make-object (if (equal type "breakout-group-proposal")
+                                                      'breakout-group-proposal
+                                                      'paper)
+                                                  :submitters (list participant) :title title :abstract abstract))
+                         (document (make-object 'document :info info :submission submission)))
+		    (blob-from-file document file-name)
+		    (with-transaction ("adding participant submission")
 		      (push submission (participant-submissions participant))))
 		  (html ((:script :language "JavaScript") "alert('Invalid file format of uploaded, only PDF files are accepted')")))))))
       (when (request-uploaded-file *req* "picture")
@@ -91,24 +92,17 @@
     (let ((*participant* participant))
       (mapc #'emit-template-node children))))
 
-(defun submission-info (submission)
-  (if submission
-      (dolist (document (submission-documents submission))
-        (with-open-file (submission-file (blob-pathname document))
-          (format nil "(~D bytes, uploaded ~A)"
-                  (file-length submission-file)
-                  (format-date-time (file-write-date submission-file)))))
-      "[no submission uploaded]"))
+(defun document-file-info (document)
+  (with-open-file (document-file (blob-pathname document))
+    (format nil "(~A, uploaded ~A)"
+            (scale-bytes (file-length document-file))
+            (format-date-time (file-write-date document-file)))))
 
 (defvar *submission*)
 
 (defun submission-from-request ()
   (find-store-object (parse-integer (get-template-var :*path-arg*))))
 
-(defun submission-edit-permitted-p (submission)
-  (or (admin-p (bknr-request-user *req*))
-      (find (bknr-request-user *req*) (submission-submitters submission))))
-
 (define-bknr-tag submission-editor (&key children)
   (let ((submission (submission-from-request)))
     (unless submission
@@ -123,13 +117,15 @@
 	   (delete-object submission)
 	   (html (:h2 "The submission has been deleted"))
 	   (return-from submission-editor))))
-      (when (request-uploaded-file *req* "file")
-	(let ((file-name (request-uploaded-file *req* "file")))
+      (when (request-uploaded-file *req* "document")
+	(let ((file-name (request-uploaded-file *req* "document")))
 	  (with-open-file (pdf file-name)
 	    (cond
 	      ((cl-ppcre:scan "^%PDF-" (read-line pdf))
 	       (html (:h2 "New document has been saved"))
-	       (blob-from-file submission file-name))
+               (with-query-params (*req* info)
+                 (let ((document (make-object 'document :info info :submission submission)))
+                   (blob-from-file document file-name))))
 	      (t
 	       (html ((:script :language "JavaScript") "alert('Invalid file format of uploaded, only PDF files are accepted')")))))))
       (with-query-params (*req* title abstract remove-submitter-id add-submitter-id)
@@ -181,12 +177,18 @@
                                 (:princ-safe (user-full-name participant))))))))))))))
 
 (define-bknr-tag submission-uploader ()
-  (html (:princ-safe (submission-info *submission*)) :br
-	((:button :type "button" :value "show" :onclick (format-object-id "document.location.href = '/submission/~A';" *submission*))
-	 "show")
-	:br
-	"Choose PDF file and press 'upload'" :br
-	((:input :type "file" :name "file")) ((:button :type "submit" :name "action" :value "upload") "upload")))
+  (html
+   (:table
+    (:tbody
+     (dolist (document (submission-documents *submission*))
+       (html
+        (:tr
+         (:td (:princ-safe (document-info document)))
+         (:td (:princ-safe (document-file-info document)))
+         (:td ((:button :type "button" :value "show" :onclick (format-object-id "document.location.href = '/pdf/~A';" document)) "show")
+              ((:button :type "button" :value "delete"
+                        :onclick (format-object-id "return delete_document(~A, \"~A\");" document (document-info document))) "delete"))))))))
+  (html ((:button :type "button" :value "show" :onclick "return open_document_upload_window()") "upload")))
 
 (define-bknr-tag submission-submitters-chooser ()
   (let ((submitters (submission-submitters *submission*)))
@@ -254,7 +256,6 @@
       (dolist (submission (participant-submissions *participant*))
 	(html ((:a :href (format-object-id "/submission/~A" submission)) (:princ-safe (submission-title submission)))
 	      " (" (:princ-safe (submission-type submission)) ")"
-	      :br (:princ-safe (submission-info submission))
 	      :br))
       (html "[no submission]")))
 
@@ -340,6 +341,14 @@
 	     (html " " ((:a :href (format-object-id "/edit-submission/~A" submission))
 			"[Edit]")))))))
 
+(define-bknr-tag submission-document-links (&key (submission (object-from-request)))
+  (html
+   (:h2 "Documents")
+   (:ul
+    (dolist (document (submission-documents submission))
+      (html (:li ((:a :href (format-object-id "/pdf/~A" document) :target "_new")
+                  (:princ-safe (document-info document)) " " (:princ-safe (document-file-info document)))))))))
+
 (define-bknr-tag load-argument-object (&key children)
   (let* ((object (object-from-request)))
     (object-to-template-vars object)

Modified: branches/xml-class-rework/projects/lisp-ecoop/src/webserver.lisp
===================================================================
--- branches/xml-class-rework/projects/lisp-ecoop/src/webserver.lisp	2006-03-03 22:31:33 UTC (rev 1887)
+++ branches/xml-class-rework/projects/lisp-ecoop/src/webserver.lisp	2006-03-05 14:02:00 UTC (rev 1888)
@@ -28,7 +28,8 @@
 					 :destination ,(unix-namestring (merge-pathnames #p"static/" *website-directory*))))
 		 :modules '(user images stats mailinglist mailinglist-registration participants schedule)
 
-		 :admin-navigation '(("user" . "/user/")
+		 :admin-navigation '(("add participant" . "/add-participant")
+                                     ("user" . "/user/")
 				     ("stats" . "/stats")
 				     ("post mailinglists" . "/post-mailinglist")
 				     ("logout" . "/logout"))

Added: branches/xml-class-rework/projects/lisp-ecoop/website/static/document-utils.css
===================================================================
--- branches/xml-class-rework/projects/lisp-ecoop/website/static/document-utils.css	2006-03-03 22:31:33 UTC (rev 1887)
+++ branches/xml-class-rework/projects/lisp-ecoop/website/static/document-utils.css	2006-03-05 14:02:00 UTC (rev 1888)
@@ -0,0 +1,21 @@
+body {
+	font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
+	background-color: #ffffff;
+}
+
+h1 {
+        font-size: 14pt;
+        font-weight: bold;
+}
+
+div.page {
+        position: absolute;
+        visibility: hidden;
+        top: 20px;
+        left: 20px;
+}
+
+label {
+        width: 200px;
+        float: left;
+}
\ No newline at end of file

Added: branches/xml-class-rework/projects/lisp-ecoop/website/static/document-utils.js
===================================================================
--- branches/xml-class-rework/projects/lisp-ecoop/website/static/document-utils.js	2006-03-03 22:31:33 UTC (rev 1887)
+++ branches/xml-class-rework/projects/lisp-ecoop/website/static/document-utils.js	2006-03-05 14:02:00 UTC (rev 1888)
@@ -0,0 +1,47 @@
+// -*- Java -*- Script
+
+function $(name)
+{
+    return document.getElementById(name);
+}
+
+function init()
+{
+    var url = document.location.href;
+
+    // alert('init: ' + url);
+
+    if (url.match("failure=")) {
+        var message = url.replace(/.*failure=(.*)/, "$1");
+        $('error-message').innerHTML = decodeURI(message);
+        $('failed').style.visibility = 'visible';
+    } else if (url.match("success=1")) {
+        $('success').style.visibility = 'visible';
+        window.opener.location.reload();
+        setTimeout("window.close()", 1000);
+    } else {
+        $('form').style.visibility = 'visible';
+    }
+}
+
+function begin_upload()
+{
+    if ($('info_input').value.match(/^\s*$/)) {
+        $('info_input').style.backgroundColor = '#f33';
+        $('info_input').focus();
+        return false;
+    }
+
+    $('form').style.visibility = 'hidden';
+    $('progress').style.visibility = 'visible';
+
+    var action = document.location.href;
+    action = action.replace(/upload/, "upload-document");
+
+    // alert(action);
+
+    $('upload_document_form').action = action;
+
+    return true;
+}
+

Modified: branches/xml-class-rework/projects/lisp-ecoop/website/static/javascript.js
===================================================================
--- branches/xml-class-rework/projects/lisp-ecoop/website/static/javascript.js	2006-03-03 22:31:33 UTC (rev 1887)
+++ branches/xml-class-rework/projects/lisp-ecoop/website/static/javascript.js	2006-03-05 14:02:00 UTC (rev 1888)
@@ -1,5 +1,33 @@
 // -*- Java -*-
 
+var POPUP_WINDOW_PARAMS = 'width=500,height=300,status=no,toolbar=no,menubar=no,resizable=yes,scrollbars=yes';
+
+function http_request(url)
+{
+    var client;
+
+    if (window.XMLHttpRequest) {
+        client = new XMLHttpRequest();
+    } else {
+        client = new ActiveXObject("Microsoft.XMLHTTP");
+    }
+
+    client.open("GET", url, false);
+
+    try {
+        if (window.XMLHttpRequest) {
+            client.send(null);
+        } else {
+            client.send();
+        }
+    } 
+    catch (e) {
+        debug('error sending request: ', e);
+    }
+
+    return client.responseXML;
+}
+
 /* cms support */
 
 function check(button, checkboxname, b) {
@@ -24,7 +52,44 @@
 /* adding/removing submitters */
 
 function submitters_window(url) {
-    var submitters_window = open(url, "changesubmitters", "width=200,height=400,status=no,toolbar=no,menubar=no,resizable=yes,scrollbars=yes");
+    var submitters_window = open(url, "changesubmitters", POPUP_WINDOW_PARAMS);
     submitters_window.focus();
     return false;
 }
+
+/* Check upload parameters */
+
+function check_document_upload()
+{
+    var info_input = document.getElementById('document-info-input');
+    if (info_input.value == "") {
+        alert("Missing document info");
+        info_input.focus();
+        return false;
+    }
+
+    return true;
+}
+
+// Open document upload window
+
+function open_document_upload_window() {
+    var object_id = parseInt(window.location.href.replace(/.*\/(\d+)/, "$1"));
+    open('/upload-document/' + object_id, 'upload', POPUP_WINDOW_PARAMS);
+    return false;
+}
+
+// Delete a document
+
+function delete_document(id, info) {
+    if (!confirm('Delete document "' + info + '" ?')) {
+        return false;
+    }
+
+    http_request('/delete-document/' + id);
+
+    window.location.reload();
+
+    return true;
+}
+

Modified: branches/xml-class-rework/projects/lisp-ecoop/website/static/styles.css
===================================================================
--- branches/xml-class-rework/projects/lisp-ecoop/website/static/styles.css	2006-03-03 22:31:33 UTC (rev 1887)
+++ branches/xml-class-rework/projects/lisp-ecoop/website/static/styles.css	2006-03-05 14:02:00 UTC (rev 1888)
@@ -165,8 +165,8 @@
 }
 
 div#body div#content {
-	position: absolute;
-	left: 180px;
+        position: absolute;
+        left: 180px;
 }
 
 body h1 {
@@ -242,4 +242,5 @@
 
 pre {
 	font-family: Times, serif;
-}
\ No newline at end of file
+}
+

Modified: branches/xml-class-rework/projects/lisp-ecoop/website/templates/edit-profile.xml
===================================================================
--- branches/xml-class-rework/projects/lisp-ecoop/website/templates/edit-profile.xml	2006-03-03 22:31:33 UTC (rev 1887)
+++ branches/xml-class-rework/projects/lisp-ecoop/website/templates/edit-profile.xml	2006-03-05 14:02:00 UTC (rev 1888)
@@ -62,28 +62,6 @@
       <tr>
 	<td colspan="2"><lisp-ecoop:submission-list participant-only="1" /></td>
       </tr>
-      <tr><th colspan="2">New Submission</th></tr>
-      <tr>
-        <td>Type:</td>
-	<td>
-	  <select name="type">
-	    <option value="paper">Paper</option>
-	    <option value="breakout-group-proposal">Breakout Group Proposal</option>
-	  </select>
-	</td>
-      </tr>
-      <tr>
-        <td>Title:</td>
-	<td><input type="text" name="title" size="80" /></td>
-      </tr>
-      <tr>
-        <td>Abstract:</td>
-	<td><textarea name="abstract" cols="76" rows="10"> </textarea></td>
-      </tr>
-      <tr>
-        <td>PDF:</td>
-	<td><input type="file" name="submission" /><input type="submit" name="action" value="upload" /></td>
-      </tr>
       <tr><th colspan="2">Action</th></tr>
       <tr>
         <td colspan="2">
@@ -96,11 +74,6 @@
 </lisp-ecoop:profile-editor>
 <p>
 Please contact <a href="mailto:hans at bknr.net">Hans Hübner</a> for
-inquiries relating to the workshop web site.  We are interested in
-developing the website into a LISP-based system to coordinate
-distributed development activities and related real-life meetings
-using an incremental development process.  See <a
-href="/bknr-technology">the Website technology blurb</a> for a
-description of the technology used by this web site.
+inquiries relating to the workshop web site.
 </p>
 </lisp-ecoop:page>

Modified: branches/xml-class-rework/projects/lisp-ecoop/website/templates/edit-submission.xml
===================================================================
--- branches/xml-class-rework/projects/lisp-ecoop/website/templates/edit-submission.xml	2006-03-03 22:31:33 UTC (rev 1887)
+++ branches/xml-class-rework/projects/lisp-ecoop/website/templates/edit-submission.xml	2006-03-05 14:02:00 UTC (rev 1888)
@@ -26,7 +26,7 @@
 	<td><textarea name="abstract" cols="76" rows="15">$(abstract)</textarea></td>
       </tr>
       <tr>
-        <td>Document (PDF)</td>
+        <td>Documents (PDF)</td>
 	<td><lisp-ecoop:submission-uploader /></td>
       </tr>
       <tr><th colspan="2">Action</th></tr>

Modified: branches/xml-class-rework/projects/lisp-ecoop/website/templates/submission.xml
===================================================================
--- branches/xml-class-rework/projects/lisp-ecoop/website/templates/submission.xml	2006-03-03 22:31:33 UTC (rev 1887)
+++ branches/xml-class-rework/projects/lisp-ecoop/website/templates/submission.xml	2006-03-05 14:02:00 UTC (rev 1888)
@@ -8,6 +8,6 @@
   <h1>$(title)</h1>
   <h2><lisp-ecoop:submission-submitter-links /></h2>
   <blockquote><pre>$(abstract)</pre></blockquote>
-  <a href="/pdf/$(object-id)">[Show PDF]</a>
+  <lisp-ecoop:submission-document-links />
 </lisp-ecoop:load-argument-object>
 </lisp-ecoop:page>

Modified: branches/xml-class-rework/projects/lisp-ecoop/website/templates/toplevel.xml
===================================================================
--- branches/xml-class-rework/projects/lisp-ecoop/website/templates/toplevel.xml	2006-03-03 22:31:33 UTC (rev 1887)
+++ branches/xml-class-rework/projects/lisp-ecoop/website/templates/toplevel.xml	2006-03-05 14:02:00 UTC (rev 1888)
@@ -36,6 +36,7 @@
       </div>
       <div id="content">
         <bknr:tag-body />
+        <hr class="content-rule"/>
       </div>
     </div>
   </body>

Added: branches/xml-class-rework/projects/lisp-ecoop/website/templates/upload.xml
===================================================================
--- branches/xml-class-rework/projects/lisp-ecoop/website/templates/upload.xml	2006-03-03 22:31:33 UTC (rev 1887)
+++ branches/xml-class-rework/projects/lisp-ecoop/website/templates/upload.xml	2006-03-05 14:02:00 UTC (rev 1888)
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html
+  xmlns:lisp-ecoop="http://lisp-ecoop06.bknr.net">
+ <head>
+  <title>Upload document</title>
+  <link rel="stylesheet" type="text/css" href="/static/document-utils.css" />
+  <script src="/static/document-utils.js" language="javascript" type="text/javascript"> </script>
+ </head>
+ <body class="utility-window" onload="init()">
+  <div id="form" class="page">
+   <h1>Upload a document</h1>
+   <p>
+    Your document needs to be in PDF format.  Every document has an attached short
+    information text which describes the nature of the content.  Suggested texts
+    include "Draft Paper", "Final Paper", "Slides".
+   </p>
+   <form method="post" name="upload_document_form" id="upload_document_form" enctype="multipart/form-data" onsubmit="return begin_upload();" action="/upload-document">
+    <label for="info">Info text</label><br/>
+    <input type="text" size="40" maxlength="40" name="info" id="info_input"/><br/>
+    <label for="document">Document</label><br/>
+    <input type="file" name="document" value="*.pdf"/><br/>
+    <button type="submit" name="submit">Upload</button>
+   </form>
+   <p>
+    <a href="#" onclick="window.close();">Cancel</a>
+   </p>
+  </div>
+  <div id="progress" class="page">
+   Upload in progress, please wait
+  </div>
+  <div id="success" class="page">
+   Done uploading
+  </div>
+  <div id="failed" class="page">
+   <p>
+    Upload failed: <span id="error-message"> </span>
+   </p>
+   <a href="#" onclick="window.close();">Dang!</a>
+  </div>
+ </body>
+</html>




More information about the Bknr-cvs mailing list