Add MAKE-ANNOTATED-ADDRESS that creates string-annotated return-addresses
This commit is contained in:
		
							parent
							
								
									b2884b22e2
								
							
						
					
					
						commit
						98f0da38c6
					
				| 
						 | 
					@ -185,6 +185,7 @@
 | 
				
			||||||
	  input-field-binding
 | 
						  input-field-binding
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	  make-address
 | 
						  make-address
 | 
				
			||||||
 | 
						  make-annotated-address
 | 
				
			||||||
	  returned-via?
 | 
						  returned-via?
 | 
				
			||||||
	  make-callback
 | 
						  make-callback
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -197,6 +198,7 @@
 | 
				
			||||||
	httpd-responses			; STATUS-CODE
 | 
						httpd-responses			; STATUS-CODE
 | 
				
			||||||
	surflet-requests		; HTTP-URL:SEARCH
 | 
						surflet-requests		; HTTP-URL:SEARCH
 | 
				
			||||||
	url				; REQUEST:URL
 | 
						url				; REQUEST:URL
 | 
				
			||||||
 | 
						(subset uri (escape-uri unescape-uri))
 | 
				
			||||||
	parse-html-forms
 | 
						parse-html-forms
 | 
				
			||||||
	sxml-to-html			; SXML->HTML
 | 
						sxml-to-html			; SXML->HTML
 | 
				
			||||||
	srfi-1				; FILTER
 | 
						srfi-1				; FILTER
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -246,8 +246,6 @@
 | 
				
			||||||
       (function req)))))
 | 
					       (function req)))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 | 
					;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 | 
				
			||||||
;; outdater
 | 
					;; outdater
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -633,22 +631,55 @@
 | 
				
			||||||
;;     (lambda (new-url)
 | 
					;;     (lambda (new-url)
 | 
				
			||||||
;;       ...
 | 
					;;       ...
 | 
				
			||||||
;;       (URL (address new-url) "Click here to get more")...)                
 | 
					;;       (URL (address new-url) "Click here to get more")...)                
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(define-record-type address :address
 | 
				
			||||||
 | 
					  (really-make-address name annotated?)
 | 
				
			||||||
 | 
					  (name address-name)
 | 
				
			||||||
 | 
					  (annotated? address-annotated?))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(define (make-address)
 | 
					(define (make-address)
 | 
				
			||||||
  (let ((name (generate-unique-name "return")))
 | 
					  (let ((address (really-make-address
 | 
				
			||||||
 | 
							  (generate-unique-name "return") #f)))
 | 
				
			||||||
    (lambda (message)
 | 
					    (lambda (message)
 | 
				
			||||||
      (cond
 | 
					      (cond
 | 
				
			||||||
       ((string? message)
 | 
					       ((string? message)
 | 
				
			||||||
	(string-append message "?" name "="))
 | 
						(string-append message "?" (address-name address) "="))
 | 
				
			||||||
       ((eq? message 'name)
 | 
					       ((eq? message 'address)
 | 
				
			||||||
	name)
 | 
						address)
 | 
				
			||||||
       (else				;maybe we want more later...
 | 
					       (else
 | 
				
			||||||
	(error "unknown message" message name))))))
 | 
						(error "address: unknown message/bad argument" 
 | 
				
			||||||
	
 | 
						       message (address-name address)))))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(define (make-annotated-address)
 | 
				
			||||||
 | 
					  (let ((address (really-make-address 
 | 
				
			||||||
 | 
							  (generate-unique-name "return")
 | 
				
			||||||
 | 
							  #t)))
 | 
				
			||||||
 | 
					    (lambda (message . annotation)
 | 
				
			||||||
 | 
					      (cond
 | 
				
			||||||
 | 
					       ((and (string? message)
 | 
				
			||||||
 | 
						     (<= (length annotation) 1))
 | 
				
			||||||
 | 
						(let ((escaped-annotation 
 | 
				
			||||||
 | 
						       (if (null? annotation)
 | 
				
			||||||
 | 
							   ""
 | 
				
			||||||
 | 
							   (escape-uri (car annotation)))))
 | 
				
			||||||
 | 
						  (string-append message "?" (address-name address)
 | 
				
			||||||
 | 
								 "=" escaped-annotation)))
 | 
				
			||||||
 | 
					       ((eq? message 'address)
 | 
				
			||||||
 | 
						address)
 | 
				
			||||||
 | 
					       (else
 | 
				
			||||||
 | 
						(error "annotated-address: unknown message/bad argument(s)" 
 | 
				
			||||||
 | 
						       message (address-name address)))))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(define (returned-via? return-object bindings)
 | 
					(define (returned-via? return-object bindings)
 | 
				
			||||||
  (format #t "returned-via? ~a~%" return-object)
 | 
					 | 
				
			||||||
  (if (input-field? return-object)
 | 
					  (if (input-field? return-object)
 | 
				
			||||||
      (input-field-binding return-object bindings)
 | 
					      (input-field-binding return-object bindings)
 | 
				
			||||||
      ;; We assume we have a return-address-object instead.
 | 
					      ;; We assume we have a return-address-object instead.
 | 
				
			||||||
      (assoc (return-object 'name) bindings)))
 | 
					      (let ((address (return-object 'address)))
 | 
				
			||||||
 | 
						(cond 
 | 
				
			||||||
 | 
						 ((assoc (address-name address) bindings) =>
 | 
				
			||||||
 | 
						  (lambda (pair)
 | 
				
			||||||
 | 
						    (if (address-annotated? address)
 | 
				
			||||||
 | 
							(unescape-uri (cdr pair))
 | 
				
			||||||
 | 
							#t)))
 | 
				
			||||||
 | 
						 (else #f)))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue