diff --git a/scheme/httpd/surflets/packages.scm b/scheme/httpd/surflets/packages.scm index c96f5f3..c98dd0d 100644 --- a/scheme/httpd/surflets/packages.scm +++ b/scheme/httpd/surflets/packages.scm @@ -309,44 +309,44 @@ (define-interface surflets/surflet-input-fields-interface (compound-interface surflets/input-field-value-interface - (export make-text-input-field - set-text-input-field-value! + (export make-text-field + set-text-field-value! - make-number-input-field - set-number-input-field-value! + make-number-field + set-number-field-value! - make-hidden-input-field - set-hidden-input-field-value! + make-hidden-field + set-hidden-field-value! - make-password-input-field - set-password-input-field-value! + make-password-field + set-password-field-value! - make-textarea-input-field - set-textarea-input-field-value! + make-textarea + set-textarea-value! - make-select-input-field - make-annotated-select-input-field - make-simple-sel-if-option - make-annotated-sel-if-option - sel-if-option? - select-sel-if-option! - unselect-sel-if-option! - add-sel-if-option! - delete-sel-if-option! - set-sel-if-option-selected?! + make-select + make-annotated-select + make-simple-select-option + make-annotated-select-option + select-option? + select-select-option! + unselect-select-option! + add-select-option! + delete-select-option! + set-select-option-selected?! - make-radio-input-field-group - make-annotated-radio-input-field-group - make-radio-input-fields - check-radio-input-field! - uncheck-radio-input-field! - set-radio-input-field-checked?! + make-radio-group + make-annotated-radio-group + make-radios + check-radio! + uncheck-radio! + set-radio-checked?! - make-checkbox-input-field - make-annotated-checkbox-input-field - check-checkbox-input-field! - uncheck-checkbox-input-field! - set-checkbox-input-field-checked?! + make-checkbox + make-annotated-checkbox + check-checkbox! + uncheck-checkbox! + set-checkbox-checked?! make-submit-button make-reset-button diff --git a/scheme/httpd/surflets/simple-surflet-api.scm b/scheme/httpd/surflets/simple-surflet-api.scm index e579539..3c91980 100644 --- a/scheme/httpd/surflets/simple-surflet-api.scm +++ b/scheme/httpd/surflets/simple-surflet-api.scm @@ -116,16 +116,16 @@ (else (no-method message))))) (define (make-text text) - (standard-query text (make-text-input-field) "No bad input possible")) + (standard-query text (make-text-field) "No bad input possible")) (define (make-password text) - (standard-query text (make-password-input-field) "No bad input possible")) + (standard-query text (make-password-field) "No bad input possible")) (define (make-number text) - (standard-query text (make-number-input-field) "Please respond with a valid number")) + (standard-query text (make-number-field) "Please respond with a valid number")) (define (make-boolean text) - (let* ((input-field (make-checkbox-input-field)) + (let* ((input-field (make-checkbox)) (standard (standard-query text input-field "No bad input possible"))) (lambda (message) (case message @@ -139,7 +139,7 @@ (define (make-radio text choices . maybe-insist) (let* ((insist (:optional maybe-insist "")) - (radios (make-radio-input-fields choices)) + (radios (make-radios choices)) (standard (standard-query text (car radios) (string-append "Please respond" insist)))) (lambda (message) diff --git a/scheme/httpd/surflets/surflet-input-fields.scm b/scheme/httpd/surflets/surflet-input-fields.scm index 23c5078..328e7f5 100644 --- a/scheme/httpd/surflets/surflet-input-fields.scm +++ b/scheme/httpd/surflets/surflet-input-fields.scm @@ -8,17 +8,17 @@ ;; The interface for input-fields does not prescribe what the type of ;; attributes has to be. We choose a record here. -(define-record-type input-field-attributes :input-field-attributes - (make-input-field-attributes default others) - input-field-attributes? - (default input-field-attributes-default set-input-field-attributes-default!) - (others input-field-attributes-others set-input-field-attributes-others!)) +(define-record-type field-attributes :field-attributes + (make-field-attributes default others) + field-attributes? + (default field-attributes-default set-field-attributes-default!) + (others field-attributes-others set-field-attributes-others!)) ;; A simple input-field is a prototype for other input-fields. ;; REPORTED-TYPE is the type of the input-field in HTML, TYPE the ;; internal referenced type and TRANSFORMER the function that ;; translates the HTTP-string of the request into a scheme value. -(define (simple-input-field-maker reported-type type default-pred transformer) +(define (simple-field-maker reported-type type default-pred transformer) (lambda maybe-further-attributes (let ((name (generate-input-field-name type))) (optionals maybe-further-attributes @@ -26,24 +26,23 @@ (attributes sxml-attribute?)) (make-input-field name type transformer - (make-input-field-attributes + (make-field-attributes (and default `(value ,default)) (sxml-attribute-attributes attributes)) - (simple-input-field-maker-html-tree-maker - reported-type)))))) + (simple-html-tree-maker reported-type)))))) -(define (simple-input-field-maker-html-tree-maker reported-type) +(define (simple-html-tree-maker reported-type) (lambda (input-field) (let ((attributes (input-field-attributes input-field))) `(input (@ (type ,reported-type) (name ,(input-field-name input-field)) - ,(input-field-attributes-default attributes) - ,(input-field-attributes-others attributes)))))) + ,(field-attributes-default attributes) + ,(field-attributes-others attributes)))))) -(define (make-simple-input-field-default-setter default-pred? wrap?) +(define (make-simple-default-setter default-pred? wrap?) (lambda (input-field value) (if (default-pred? value) - (set-input-field-attributes-default! + (set-field-attributes-default! (input-field-attributes input-field) (if wrap? `(value ,value) value)) (error "Default value must be a number or a string or a symbol." @@ -54,58 +53,54 @@ (or (string? thing) (symbol? thing))) (define simple-default? string-or-symbol?) -(define set-simple-input-field-default! - (make-simple-input-field-default-setter simple-default? #t)) +(define set-simple-field-default! + (make-simple-default-setter simple-default? #t)) ;;;;;;;;;;;;;;;;;;;; ;;; Text input field -(define make-text-input-field - (simple-input-field-maker "text" "text" - simple-default? identity)) -(define set-text-input-field-value! set-simple-input-field-default!) +(define make-text-field + (simple-field-maker "text" "text" simple-default? identity)) +(define set-text-field-value! set-simple-field-default!) ;;;;;;;;;;;;;;;;;;;;;; ;;; Number input field -(define (number-input-field-default? value) +(define (number-field-default? value) (or (number? value) (simple-default? value))) -(define (number-input-field-transformer string) +(define (number-field-transformer string) (or (string->number string) (error "wrong type"))) -(define make-number-input-field - (simple-input-field-maker "text" "number" - number-input-field-default? - number-input-field-transformer)) -(define set-number-input-field-value! - (make-simple-input-field-default-setter number-input-field-default? #t)) +(define make-number-field + (simple-field-maker "text" "number" + number-field-default? number-field-transformer)) +(define set-number-field-value! + (make-simple-default-setter number-field-default? #t)) ;;;;;;;;;;;;;;;;;;;;;; ;;; hidden input-field ;; Little workaraound, as a hidden input-field needs a value. This ;; value is propagated in the slot "default value". -(define make-hidden-input-field - (let ((hidden-input-field-generator - (simple-input-field-maker "hidden" "text" - simple-default? identity))) +(define make-hidden-field + (let ((hidden-field-generator + (simple-field-maker "hidden" "text" + simple-default? identity))) (lambda (value . maybe-further-attributes) - (apply hidden-input-field-generator + (apply hidden-field-generator (cons value maybe-further-attributes))))) -(define set-hidden-input-field-value! - set-simple-input-field-default!) +(define set-hidden-field-value! set-simple-field-default!) ;;;;;;;;;;;;;;;;;;;;;;;; ;;; Password input field -(define make-password-input-field - (simple-input-field-maker "password" "password" - simple-default? identity)) -(define set-password-input-field-value! - set-simple-input-field-default!) +(define make-password-field + (simple-field-maker "password" "password" + simple-default? identity)) +(define set-password-field-value! set-simple-field-default!) ;;; That's it for simple input fields. ;;;;;;;;;;;;;;;;;;;;;;;; ;;; Textarea input field -(define (make-textarea-input-field . maybe-further-attributes) +(define (make-textarea . maybe-further-attributes) (let ((name (generate-input-field-name "textarea"))) (optionals maybe-further-attributes ((default-text simple-default?) @@ -121,34 +116,33 @@ (make-input-field name "textarea" identity - (make-input-field-attributes + (make-field-attributes (and default-text) (cons extra-attributes (sxml-attribute-attributes attributes))) - make-textarea-input-field-html-tree))))) + make-textarea-html-tree))))) -(define (make-textarea-input-field-html-tree input-field) - (let ((attributes (input-field-attributes input-field))) +(define (make-textarea-html-tree textarea) + (let ((attributes (input-field-attributes textarea))) `(textarea (@ (type "textarea") - (name ,(input-field-name input-field)) - ,(input-field-attributes-others attributes)) - ,(input-field-attributes-default attributes)))) + (name ,(input-field-name textarea)) + ,(field-attributes-others attributes)) + ,(field-attributes-default attributes)))) -(define set-textarea-input-field-value! +(define set-textarea-value! (let ((textarea-default-setter! - (make-simple-input-field-default-setter simple-default? #f))) - (lambda (textarea-input-field value) - (textarea-default-setter! textarea-input-field value)))) + (make-simple-default-setter simple-default? #f))) + (lambda (textarea value) + (textarea-default-setter! textarea value)))) ;;;;;;;;;;;;;;;;;;;;;;;;; -;;; Selection input field +;;; Select input field -;; sel-if == select-input-field -;(make-select-input-fields '("this" "that" "those") '(@ ((id "sushi")))) -;(make-select-input-fields '("this" ("that" '(@ (selected))) "those")) +;(make-select '("this" "that" "those") '(@ ((id "sushi")))) +;(make-select '("this" ("that" '(@ (selected))) "those")) ;; dropdown: (size 1) -;;; A selection input field shows a list of options that can be -;;; selected. For this purpose, we introduce an sel-if-option record, +;;; A select input field shows a list of options that can be +;;; selected. For this purpose, we introduce an select-option record, ;;; that contains all the information for each option. This is ;;; justified by the fact, that the options list is seperated in HTML, ;;; too. The TAG is the string that is displayed in the website, the @@ -156,187 +150,187 @@ ;;; option was selected. TAG is assumed to be unique by some functions ;;; (e.g. select and unselect) SELECTED? tells us, if this option is ;;; preselected. -(define-record-type sel-if-option :sel-if-option - (really-make-sel-if-option tag value selected? attributes) - sel-if-option? - (tag sel-if-option-tag) - (value sel-if-option-value) - (selected? sel-if-option-selected? set-sel-if-option-selected?!) - (attributes sel-if-option-attributes set-sel-if-option-attributes!)) +(define-record-type select-option :select-option + (really-make-select-option tag value selected? attributes) + select-option? + (tag select-option-tag) + (value select-option-value) + (selected? select-option-selected? really-set-select-option-selected?!) + (attributes select-option-attributes set-select-option-attributes!)) -(define (make-sel-if-option tag value selected? attributes) +(define (make-select-option tag value selected? attributes) (if (string? tag) - (really-make-sel-if-option tag value selected? + (really-make-select-option tag value selected? (sxml-attribute-attributes attributes)) - (error "Select-input-field-option's tag must be a string." tag))) + (error "Select-option's tag must be a string." tag))) ;; Constructor for valued select input-field option. -(define (make-annotated-sel-if-option tag value . maybe-attributes) +(define (make-annotated-select-option tag value . maybe-attributes) (optionals maybe-attributes ((selected? boolean?) (attributes sxml-attribute?)) - (make-sel-if-option tag value selected? attributes))) + (make-select-option tag value selected? attributes))) ;; Constructor for a simple select input-field option (not annotated). -(define (make-simple-sel-if-option tag . maybe-attributes) +(define (make-simple-select-option tag . maybe-attributes) (optionals maybe-attributes ((selected? boolean?) (attributes sxml-attribute?)) - (make-sel-if-option tag tag selected? attributes))) + (make-select-option tag tag selected? attributes))) -(define-record-discloser :sel-if-option - (lambda (sel-if-option) - (list 'select-input-field-option - (sel-if-option-tag sel-if-option) - (sel-if-option-value sel-if-option) - (sel-if-option-selected? sel-if-option) - (sel-if-option-attributes sel-if-option) +(define-record-discloser :select-option + (lambda (select-option) + (list 'select-option + (select-option-tag select-option) + (select-option-value select-option) + (select-option-selected? select-option) + (select-option-attributes select-option) ))) ;; Selecting / Unselecting of an option in an select input-field, ;; chosen by tag. -(define (select-sel-if-option! tag sel-if) - (set-select-input-field-option-selected?! tag sel-if #t)) +(define (select-select-option! tag select) + (set-select-option-selected?! tag select #t)) -(define (unselect-sel-if-option! tag sel-if) - (set-select-input-field-option-selected?! tag sel-if #f)) +(define (unselect-select-option! tag select) + (set-select-option-selected?! tag select #f)) -(define (set-select-input-field-option-selected?! tag sel-if selected?) - (let ((options (input-field-attributes-default - (input-field-attributes sel-if)))) +(define (set-select-option-selected?! tag select selected?) + (let ((options (field-attributes-default + (input-field-attributes select)))) (if (number? tag) ; is tag an index? - (set-sel-if-option-selected?! (list-ref options tag) - selected?) + (really-set-select-option-selected?! (list-ref options tag) + selected?) (let lp ((options options)) (if (null? options) - (error "No such option" tag sel-if) - (if (tag=sel-if-option? tag (car options)) - (set-sel-if-option-selected?! (car options) selected?) + (error "No such option" tag select) + (if (tag=select-option? tag (car options)) + (really-set-select-option-selected?! (car options) + selected?) (lp (cdr options)))))) - (touch-input-field! sel-if))) + (touch-input-field! select))) -;; Find sel-if-option in a list by its tag. -(define (tag=sel-if-option? tag sel-if-option) - (string=? tag (sel-if-option-tag sel-if-option))) +;; Find select-option in a list by its tag. +(define (tag=select-option? tag select-option) + (string=? tag (select-option-tag select-option))) -(define (find-sel-if-option tag sel-if-options) - (cond ((member/srfi-1 tag sel-if-options tag=sel-if-option?) +(define (find-select-option tag select-options) + (cond ((member/srfi-1 tag select-options tag=select-option?) => car) ;; MEMBER/SRFI-1 returns the sublist that starts with the ;; searched element. (else #f))) -(define (find-sel-if-option-value tag sel-if-options) - (cond ((find-sel-if-option tag sel-if-options) - => sel-if-option-value) +(define (find-select-option-value tag select-options) + (cond ((find-select-option tag select-options) + => select-option-value) (else #f))) -(define (add-sel-if-option! sel-if sel-if-option) - (let ((attributes (input-field-attributes sel-if))) - (set-input-field-attributes-default! +(define (add-select-option! select select-option) + (let ((attributes (input-field-attributes select))) + (set-field-attributes-default! attributes - (cons sel-if-option - (input-field-attributes-default attributes))) - (touch-input-field! sel-if))) + (cons select-option + (field-attributes-default attributes))) + (touch-input-field! select))) -(define (delete-sel-if-option! sel-if sel-if-option) - (let* ((attributes (input-field-attributes sel-if)) - (sel-if-options (input-field-attributes-default attributes))) - (if (sel-if-option? sel-if-option) - (set-input-field-attributes-default! +(define (delete-select-option! select select-option) + (let* ((attributes (input-field-attributes select)) + (select-options (field-attributes-default attributes))) + (if (select-option? select-option) + (set-field-attributes-default! attributes - (delete sel-if-option sel-if-options)) - (let ((tag sel-if-option)) - (set-input-field-attributes-default! + (delete select-option select-options)) + (let ((tag select-option)) + (set-field-attributes-default! attributes - (delete tag sel-if-options tag=sel-if-option?)))) - (touch-input-field! sel-if))) + (delete tag select-options tag=select-option?)))) + (touch-input-field! select))) ;; To be compatible with previous versions of MAKE-SELECT-INPUT-FIELD, ;; we accept also a simple list as an option-list. New programs should -;; use sel-if-options-list (easily createable with -;; (map make-simple-sel-if-option option-list)) -(define (tolerate-old-sel-if-options sel-if-options) - (if (and (list? sel-if-options) - (every sel-if-option? sel-if-options)) - sel-if-options - (map make-simple-sel-if-option sel-if-options))) +;; use select-options-list (easily createable with +;; (map make-simple-select-option option-list)) +(define (tolerate-old-select-options select-options) + (if (and (list? select-options) + (every select-option? select-options)) + select-options + (map make-simple-select-option select-options))) -(define (make-select-input-field sel-if-options . maybe-further-attributes) - (really-make-select-input-field (tolerate-old-sel-if-options sel-if-options) - maybe-further-attributes)) +(define (make-select select-options . maybe-further-attributes) + (really-make-select (tolerate-old-select-options select-options) + maybe-further-attributes)) -(define (make-annotated-select-input-field sel-if-options . - maybe-further-attributes) - (really-make-select-input-field sel-if-options maybe-further-attributes)) +(define (make-annotated-select select-options . + maybe-further-attributes) + (really-make-select select-options maybe-further-attributes)) -(define (really-make-select-input-field sel-if-options - maybe-further-attributes) - (let ((real-sel-if-options (tolerate-old-sel-if-options sel-if-options))) +(define (really-make-select select-options maybe-further-attributes) + (let ((real-select-options (tolerate-old-select-options select-options))) (optionals maybe-further-attributes ((multiple? boolean?) (attributes sxml-attribute?)) (let ((name (generate-input-field-name "select"))) (if multiple? - (make-multiple-select-input-field name sel-if-options attributes) - (make-single-select-input-field name sel-if-options - attributes)))))) + (make-multiple-select name select-options attributes) + (make-single-select name select-options + attributes)))))) ;; internal -(define (make-multiple-select-input-field name sel-if-options attributes) +(define (make-multiple-select name select-options attributes) (make-multi-input-field name "mult-select" - sel-if-multiple-transformer - (make-input-field-attributes - sel-if-options + select-multiple-transformer + (make-field-attributes + select-options (list '(multiple) (sxml-attribute-attributes attributes))) - make-sel-if-html-tree)) + make-select-html-tree)) ;; internal -(define (make-single-select-input-field name sel-if-options attributes) +(define (make-single-select name select-options attributes) (make-input-field name "select" (lambda (tag) - (cond ((find-sel-if-option-value tag sel-if-options) + (cond ((find-select-option-value tag select-options) => identity) (else (error "no such option." tag)))) - (make-input-field-attributes - sel-if-options + (make-field-attributes + select-options (sxml-attribute-attributes attributes)) - make-sel-if-html-tree)) + make-select-html-tree)) -(define (sel-if-multiple-transformer input-field bindings) - (let ((name (input-field-name input-field)) - (sel-if-options (input-field-attributes-default - (input-field-attributes input-field)))) +(define (select-multiple-transformer select bindings) + (let ((name (input-field-name select)) + (select-options (field-attributes-default + (input-field-attributes select)))) (let* ((my-bindings (filter (lambda (binding) - (equal? (car binding) name)) - bindings)) + (equal? (car binding) name)) + bindings)) (tags (map cdr my-bindings))) (filter-map (lambda (tag) - (find-sel-if-option-value tag sel-if-options)) + (find-select-option-value tag select-options)) tags)))) -(define (make-sel-if-html-tree sel-if) - (let ((attributes (input-field-attributes sel-if))) - `(select (@ (name ,(input-field-name sel-if)) - ,(input-field-attributes-others attributes)) +(define (make-select-html-tree select) + (let ((attributes (input-field-attributes select))) + `(select (@ (name ,(input-field-name select)) + ,(field-attributes-others attributes)) #\newline - ,@(make-sel-if-options-html-tree - (input-field-attributes-default attributes))))) + ,@(make-select-options-html-tree + (field-attributes-default attributes))))) -(define (make-sel-if-options-html-tree sel-if-options) - (map (lambda (sel-if-option) - `(option (@ ,(and (sel-if-option-selected? sel-if-option) '(selected)) - ,(sel-if-option-attributes sel-if-option)) - ,(sel-if-option-tag sel-if-option))) - sel-if-options)) +(define (make-select-options-html-tree select-options) + (map (lambda (select-option) + `(option (@ ,(and (select-option-selected? select-option) '(selected)) + ,(select-option-attributes select-option)) + ,(select-option-tag select-option))) + select-options)) ;;;;;;;;;;;;;;;;;;;;;; ;;; radio input-fields ;; Because grouped radio input-fields must use the same name, we ;; cannot just return one radio input-field object, but we must ;; generate several ones with the same name. -(define (make-radio-input-field-group) +(define (make-radio-group) (let ((name (generate-input-field-name "radio"))) (lambda (value-string . maybe-further-attributes) (optionals maybe-further-attributes @@ -344,16 +338,16 @@ (attributes sxml-attribute?)) (make-input-field name "radio" identity - (make-input-field-attributes + (make-field-attributes (if checked? '(checked) #f) (list `(value ,value-string) (sxml-attribute-attributes attributes))) - radio-input-field-html-tree-maker))))) + radio-html-tree-maker))))) -(define (make-annotated-radio-input-field-group) +(define (make-annotated-radio-group) (let* ((name (generate-input-field-name "radio")) (value-table (make-integer-table)) - (transformer (make-radio-input-field-transformer value-table))) + (transformer (make-radio-transformer value-table))) (lambda (value . maybe-further-attributes) (optionals maybe-further-attributes ((checked? boolean?) @@ -362,16 +356,16 @@ (table-set! value-table number value) (make-input-field name "radio" transformer - (make-input-field-attributes + (make-field-attributes (if checked? '(checked) #f) (list`(value ,(number->string number)) (sxml-attribute-attributes attributes))) - radio-input-field-html-tree-maker)))))) + radio-html-tree-maker)))))) -(define (make-radio-input-fields values . maybe-further-attributes) +(define (make-radios values . maybe-further-attributes) (optionals maybe-further-attributes ((attributes sxml-attribute?)) - (let ((radio-gen (make-annotated-radio-input-field-group))) + (let ((radio-gen (make-annotated-radio-group))) (map (lambda (value) (if attributes (radio-gen value attributes) @@ -379,7 +373,7 @@ values)))) -(define (make-radio-input-field-transformer value-table) +(define (make-radio-transformer value-table) (lambda (tag) (cond ((string->number tag) => @@ -391,48 +385,46 @@ (else (error "Unknown tag number for radio input-field" tag))))) -(define (radio-input-field-html-tree-maker radio-input-field) - (let* ((attributes (input-field-attributes radio-input-field))) +(define (radio-html-tree-maker radio) + (let* ((attributes (input-field-attributes radio))) `(input (@ ((type "radio") - (name ,(input-field-name radio-input-field)) - ,(input-field-attributes-default attributes) - ,(input-field-attributes-others attributes)))))) + (name ,(input-field-name radio)) + ,(field-attributes-default attributes) + ,(field-attributes-others attributes)))))) (define (set-input-field-checked?! input-field checked?) (let ((attributes (input-field-attributes input-field))) - (set-input-field-attributes-default! + (set-field-attributes-default! attributes (if checked? '(checked) #f)) (touch-input-field! input-field))) - -(define set-radio-input-field-checked?! set-input-field-checked?!) -(define (check-radio-input-field! radio) - (set-radio-input-field-checked?! radio #t)) -(define (uncheck-radio-input-field! radio) - (set-radio-input-field-checked?! radio #f)) + +(define set-radio-checked?! set-input-field-checked?!) +(define (check-radio! radio) (set-radio-checked?! radio #t)) +(define (uncheck-radio! radio) (set-radio-checked?! radio #f)) ;;;;;;;;;;;;;;;;;;;;;;;; ;;; checkbox input-field -(define (make-checkbox-input-field . maybe-further-attributes) - (really-make-checkbox-input-field #t - checkbox-transformer - maybe-further-attributes)) +(define (make-checkbox . maybe-further-attributes) + (really-make-checkbox #t + checkbox-transformer + maybe-further-attributes)) -(define (make-annotated-checkbox-input-field value . maybe-further-attributes) - (really-make-checkbox-input-field value - (make-checkbox-transformer value) - maybe-further-attributes)) +(define (make-annotated-checkbox value . maybe-further-attributes) + (really-make-checkbox value + (make-checkbox-transformer value) + maybe-further-attributes)) -(define (really-make-checkbox-input-field value transformer attributes) +(define (really-make-checkbox value transformer attributes) (let ((name (generate-input-field-name "checkbox"))) (optionals attributes ((checked? boolean?) (attributes sxml-attribute?)) (make-input-field name "checkbox" transformer - (make-input-field-attributes + (make-field-attributes (if checked? '(checked) #f) (sxml-attribute-attributes attributes)) - checkbox-input-field-html-tree-maker)))) + checkbox-html-tree-maker)))) (define (make-checkbox-transformer value) (lambda (tag) @@ -440,37 +432,36 @@ value #f))) -(define checkbox-transformer - (make-checkbox-transformer #t)) +(define checkbox-transformer (make-checkbox-transformer #t)) -(define (checkbox-input-field-html-tree-maker cb-if) - (let ((attributes (input-field-attributes cb-if))) +(define (checkbox-html-tree-maker checkbox) + (let ((attributes (input-field-attributes checkbox))) `(input (@ ((type "checkbox") - (name ,(input-field-name cb-if)) - ,(input-field-attributes-default attributes) - ,(input-field-attributes-others attributes)))))) + (name ,(input-field-name checkbox)) + ,(field-attributes-default attributes) + ,(field-attributes-others attributes)))))) + +(define set-checkbox-checked?! set-input-field-checked?!) +(define (check-checkbox! checkbox) (set-checkbox-checked?! checkbox #t)) +(define (uncheck-checkbox! checkbox) (set-checkbox-checked?! checkbox #f)) + -(define set-checkbox-input-field-checked?! set-input-field-checked?!) -(define (check-checkbox-input-field! checkbox) - (set-checkbox-input-field-checked?! checkbox #t)) -(define (uncheck-checkbox-input-field! checkbox) - (set-checkbox-input-field-checked?! checkbox #f)) ;;;;;;;;;;;;;;;;;;;;;; ;; button input-fields (define (make-button type name button-caption attributes) (make-input-field name type identity - (make-input-field-attributes + (make-field-attributes (and button-caption `(value ,button-caption)) (sxml-attribute-attributes attributes)) make-button-html-tree)) -(define (make-button-html-tree button-input-field) - (let ((attributes (input-field-attributes button-input-field))) - `(input (@ (type ,(input-field-type button-input-field)) - (name ,(input-field-name button-input-field)) - ,(input-field-attributes-default attributes) - ,(input-field-attributes-others attributes))))) +(define (make-button-html-tree button) + (let ((attributes (input-field-attributes button))) + `(input (@ (type ,(input-field-type button)) + (name ,(input-field-name button)) + ,(field-attributes-default attributes) + ,(field-attributes-others attributes))))) (define (make-submit-button . maybe-further-attributes) (optionals maybe-further-attributes @@ -502,7 +493,7 @@ (make-multi-input-field (generate-input-field-name "imgbtn") "image" image-button-transformer - (make-input-field-attributes + (make-field-attributes `(src ,image-source) (sxml-attribute-attributes attributes)) make-button-html-tree))) @@ -514,10 +505,10 @@ (y (find-image-button-coordinate image-button bindings ".y"))) (let ((x-number (string->number x)) (y-number (string->number y))) - (and x y - (if (and x-number y-number) - (cons x-number y-number) - (error "Image button coordinates aren't numbers. " x y)))))) + (and x y + (if (and x-number y-number) + (cons x-number y-number) + (error "Image button coordinates aren't numbers. " x y)))))) (define (find-image-button-coordinate image-button bindings suffix) (let* ((name (input-field-name image-button))) @@ -526,6 +517,6 @@ => (lambda (pair) (cdr pair))) (else #f)))) - + ;;EOF \ No newline at end of file diff --git a/scheme/httpd/surflets/web-server/root/surflets/add-surflet.scm b/scheme/httpd/surflets/web-server/root/surflets/add-surflet.scm index 72adf0f..d999514 100644 --- a/scheme/httpd/surflets/web-server/root/surflets/add-surflet.scm +++ b/scheme/httpd/surflets/web-server/root/surflets/add-surflet.scm @@ -3,7 +3,7 @@ scheme-with-scsh) (begin - (define number-input (make-number-input-field)) + (define number-input (make-number-field)) (define (create-input-page title input-text number-input) (lambda (new-url) diff --git a/scheme/httpd/surflets/web-server/root/surflets/admin-handler.scm b/scheme/httpd/surflets/web-server/root/surflets/admin-handler.scm index 905979b..29cfcb0 100644 --- a/scheme/httpd/surflets/web-server/root/surflets/admin-handler.scm +++ b/scheme/httpd/surflets/web-server/root/surflets/admin-handler.scm @@ -44,8 +44,8 @@ (let* ((update-text `(font (@ (color "red")) ,(:optional maybe-update-text ""))) (number-field - (make-number-input-field (options-session-lifetime))) - (cache-checkbox (make-checkbox-input-field (options-cache-surflets?))) + (make-number-field (options-session-lifetime))) + (cache-checkbox (make-checkbox (options-cache-surflets?))) (options `(("Current session lifetime: " ,number-field ,submit-timeout) ("Cache SUrflets?" ,cache-checkbox ,submit-cache))) (req (get-option-change return-address update-text options)) diff --git a/scheme/httpd/surflets/web-server/root/surflets/admin-profiling.scm b/scheme/httpd/surflets/web-server/root/surflets/admin-profiling.scm index aaee5a1..d5505cf 100644 --- a/scheme/httpd/surflets/web-server/root/surflets/admin-profiling.scm +++ b/scheme/httpd/surflets/web-server/root/surflets/admin-profiling.scm @@ -39,10 +39,10 @@ (define (profile req . maybe-update-text) (let* ((update-text (:optional maybe-update-text "")) - (gnuplot-input-field (make-text-input-field gnuplot '(@ (size 20)))) + (gnuplot-input-field (make-text-field gnuplot '(@ (size 20)))) (gnuplot-change-button (make-submit-button "Change")) - (convert-check-box (make-checkbox-input-field use-convert?)) - (convert-input-field (make-text-input-field convert '(@ (size 20)))) + (convert-check-box (make-checkbox use-convert?)) + (convert-input-field (make-text-field convert '(@ (size 20)))) (convert-change-button (make-submit-button "Change")) (new-profile-address (make-address)) (result-address (make-address)) diff --git a/scheme/httpd/surflets/web-server/root/surflets/admin-surflets-cb.scm b/scheme/httpd/surflets/web-server/root/surflets/admin-surflets-cb.scm index 8957e4c..65db21f 100644 --- a/scheme/httpd/surflets/web-server/root/surflets/admin-surflets-cb.scm +++ b/scheme/httpd/surflets/web-server/root/surflets/admin-surflets-cb.scm @@ -26,10 +26,10 @@ (define (select-table title header header-row table-elements selector actions footer) (let* ((checkboxes (map (lambda (_) - (make-checkbox-input-field)) + (make-checkbox)) table-elements)) (action-title "Choose an action") - (select (make-select-input-field (cons action-title actions) + (select (make-select (cons action-title actions) '(@ (size 1)))) (req (send-html/suspend diff --git a/scheme/httpd/surflets/web-server/root/surflets/admin-surflets.scm b/scheme/httpd/surflets/web-server/root/surflets/admin-surflets.scm index b1ada1d..3808c81 100644 --- a/scheme/httpd/surflets/web-server/root/surflets/admin-surflets.scm +++ b/scheme/httpd/surflets/web-server/root/surflets/admin-surflets.scm @@ -26,9 +26,9 @@ ;; list of selected elements out of TABLE-ELEMENTS. (define (select-table title header header-row table-elements selector actions footer) - (let* ((checkboxes (map make-annotated-checkbox-input-field + (let* ((checkboxes (map make-annotated-checkbox table-elements)) - (select (make-annotated-select-input-field + (select (make-annotated-select actions '(@ (size 1)))) (req (send-html/suspend @@ -98,7 +98,7 @@ (body ,header ,(no-surflets callback) ,footer))) (let ((actions (map (lambda (action-pair) - (make-annotated-sel-if-option + (make-annotated-select-option (car action-pair) (cdr action-pair))) `(("Choose an action" . ,(choose-an-action show-surflets)) @@ -200,7 +200,7 @@ (body ,@header ,(no-current-sessions) ,footer))) (let ((actions (map (lambda (action-pair) - (make-annotated-sel-if-option + (make-annotated-select-option (car action-pair) (cdr action-pair))) `(("Choose an action" . ,(choose-an-action show-sessions)) @@ -301,7 +301,7 @@ ,footer))) (let ((actions (map (lambda (action-pair) - (make-annotated-sel-if-option + (make-annotated-select-option (car action-pair) (cdr action-pair))) `(("Choose an action" . diff --git a/scheme/httpd/surflets/web-server/root/surflets/byte-input.scm b/scheme/httpd/surflets/web-server/root/surflets/byte-input.scm index ddfd453..390846c 100644 --- a/scheme/httpd/surflets/web-server/root/surflets/byte-input.scm +++ b/scheme/httpd/surflets/web-server/root/surflets/byte-input.scm @@ -7,8 +7,6 @@ scheme-with-scsh) (begin - ;; This doesn't use c-a-l-l-b-a-c-k-s anymore. - (define (make-byte-input-fields bits) (let ((checkboxes (reverse @@ -17,9 +15,10 @@ (if (= count bits) '() (cons - (make-annotated-checkbox-input-field order) + (make-annotated-checkbox order) (loop (+ 1 count) (* 2 order)))))))) + (make-multi-input-field #f "byte-input" (lambda (input-field bindings) diff --git a/scheme/httpd/surflets/web-server/root/surflets/calculate-cb.scm b/scheme/httpd/surflets/web-server/root/surflets/calculate-cb.scm index 39835f6..0a43ef3 100644 --- a/scheme/httpd/surflets/web-server/root/surflets/calculate-cb.scm +++ b/scheme/httpd/surflets/web-server/root/surflets/calculate-cb.scm @@ -43,15 +43,15 @@ )) - (define (make-number-input-field/default default) + (define (make-number-field/default default) (if default - (make-number-input-field `(@ (value ,default))) - (make-number-input-field))) + (make-number-field `(@ (value ,default))) + (make-number-field))) (define (show-page operator-pair number1 number2 . maybe-update-text) (let* ((update-text (:optional maybe-update-text "")) - (number-field1 (make-number-input-field/default number1)) - (number-field2 (make-number-input-field/default number2)) + (number-field1 (make-number-field/default number1)) + (number-field2 (make-number-field/default number2)) (req (send-html/suspend (lambda (new-url) diff --git a/scheme/httpd/surflets/web-server/root/surflets/calculate.scm b/scheme/httpd/surflets/web-server/root/surflets/calculate.scm index 645692a..feeab07 100644 --- a/scheme/httpd/surflets/web-server/root/surflets/calculate.scm +++ b/scheme/httpd/surflets/web-server/root/surflets/calculate.scm @@ -35,15 +35,15 @@ *operator-alist*)))))) - (define (make-number-input-field/default default) + (define (make-number-field/default default) (if default - (make-number-input-field default) - (make-number-input-field))) + (make-number-field default) + (make-number-field))) (define (show-page operator-pair number1 number2 . maybe-update-text) (let* ((update-text (:optional maybe-update-text "")) - (number-field1 (make-number-input-field/default number1)) - (number-field2 (make-number-input-field/default number2)) + (number-field1 (make-number-field/default number1)) + (number-field2 (make-number-field/default number2)) (calculate-button (make-submit-button "Calculate")) (change-button (make-submit-button "Change operator")) (req diff --git a/scheme/httpd/surflets/web-server/root/surflets/spaceship.scm b/scheme/httpd/surflets/web-server/root/surflets/spaceship.scm index 6d57ad6..26d6638 100644 --- a/scheme/httpd/surflets/web-server/root/surflets/spaceship.scm +++ b/scheme/httpd/surflets/web-server/root/surflets/spaceship.scm @@ -109,12 +109,12 @@ (def-armed? #f) (def-shields? #f) (def-drive #f)) - (let* ((class-radios (make-radio-input-fields + (let* ((class-radios (make-radios (checked-radio classes def-class))) - (drive-radios (make-radio-input-fields + (drive-radios (make-radios (checked-radio drives def-drive))) - (armed-checkbox (make-checkbox-input-field def-armed?)) - (shield-checkbox (make-checkbox-input-field def-shields?)) + (armed-checkbox (make-checkbox def-armed?)) + (shield-checkbox (make-checkbox def-shields?)) (req (send-html/suspend (lambda (new-url) (generate-main-page new-url update-text @@ -163,19 +163,19 @@ (and armed? (map (lambda (type) (let ((text (cdr (assoc type arm-types)))) - (cons (make-annotated-checkbox-input-field + (cons (make-annotated-checkbox text (and def-weapons (member? text def-weapons))) text))) (ship-data-arm-types (ship-ref class))))) (energy-input (and armed? (if def-energy - (make-number-input-field def-energy) - (make-number-input-field)))) + (make-number-field def-energy) + (make-number-field)))) (shield-input (and shields? (if def-shield - (make-number-input-field def-shield) - (make-number-input-field)))) + (make-number-field def-shield) + (make-number-field)))) (req (send-html/suspend (lambda (new-url) (generate-armed+shield-page new-url update-text @@ -215,7 +215,7 @@ ;;; items are taken from the ship data list. (define (get-extras req class) (let* ((checkboxes+text (map (lambda (extra) - (cons (make-annotated-checkbox-input-field extra) + (cons (make-annotated-checkbox extra) (cdr (assoc extra extras)))) (ship-data-extras (ship-ref class)))) (req (send-html/suspend @@ -269,7 +269,7 @@ ;;; and the maximum crew member for a class is not exceeded. (define (get-size req class . maybe-update-text) (let* ((update-text (:optional maybe-update-text #f)) - (size-input (make-number-input-field)) + (size-input (make-number-field)) (req (send-html/suspend (lambda (new-url) (generate-size-page new-url update-text diff --git a/scheme/httpd/surflets/web-server/root/surflets/test.scm b/scheme/httpd/surflets/web-server/root/surflets/test.scm index 1c2f928..c66260e 100644 --- a/scheme/httpd/surflets/web-server/root/surflets/test.scm +++ b/scheme/httpd/surflets/web-server/root/surflets/test.scm @@ -14,23 +14,23 @@ (define selections (cons '("a" "b" "c") '("Andreas" "Bernd" "Clara"))) (define radio-elements '(1 2 3 "a" *)) - (define select (make-annotated-select-input-field - (map make-annotated-sel-if-option + (define select (make-annotated-select + (map make-annotated-select-option (car selections) (cdr selections)) #t '(@ (size 2)))) - (define select2 (make-select-input-field (car selections))) - (define text (make-text-input-field "yoho")) - (define number (make-number-input-field 23)) - (define hidden (make-hidden-input-field "value")) - (define password (make-password-input-field "asdf")) - (define textarea (make-textarea-input-field "This + (define select2 (make-select (car selections))) + (define text (make-text-field "yoho")) + (define number (make-number-field 23)) + (define hidden (make-hidden-field "value")) + (define password (make-password-field "asdf")) + (define textarea (make-textarea "This is a test")) - (define radio (make-annotated-radio-input-field-group)) + (define radio (make-annotated-radio-group)) (define radios (map radio radio-elements)) - (define checkbox (make-annotated-checkbox-input-field "hooray!")) + (define checkbox (make-annotated-checkbox "hooray!")) (define submit (make-submit-button)) (define image (make-image-button "/img/221.gif")) @@ -124,26 +124,26 @@ test")) (lambda (string) (format #f "returned via annotated string ~s" string))) (else - (set-text-input-field-value! text text-entered) + (set-text-field-value! text text-entered) (only-select-selected! select selected (cdr selections)) (only-select-selected! select2 (list selected2) (car selections)) (if number-entered - (set-number-input-field-value! number number-entered)) - (set-hidden-input-field-value! + (set-number-field-value! number number-entered)) + (set-hidden-field-value! hidden (string-append "value" (number->string global))) - (set-password-input-field-value! password password-text) - (set-textarea-input-field-value! textarea textarea-text) + (set-password-field-value! password password-text) + (set-textarea-value! textarea textarea-text) (if radio-result (begin - (map uncheck-radio-input-field! radios) - (check-radio-input-field! + (map uncheck-radio! radios) + (check-radio! (list-ref radios (list-index (lambda (a) (equal? a radio-result)) radio-elements))))) (if checkbox-result - (check-checkbox-input-field! checkbox) - (uncheck-checkbox-input-field! checkbox)) + (check-checkbox! checkbox) + (uncheck-checkbox! checkbox)) `(p ,(cond (image-result (format #f "Returned via image ~s" image-result)) (submit-result "Returned via submit") @@ -189,10 +189,10 @@ test")) (define (only-select-selected! sel-if selected indices) (for-each (lambda (index) - (unselect-sel-if-option! index sel-if)) + (unselect-select-option! index sel-if)) (iota (length (cdr selections)))) (for-each (lambda (selected) - (select-sel-if-option! + (select-select-option! (list-index (lambda (s) (string=? s selected)) indices) sel-if))