Changeset 12751 in project


Ignore:
Timestamp:
12/04/08 01:05:05 (11 years ago)
Author:
azul
Message:

Add support for editing properties.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • release/3/svnwiki-metadata/trunk/svnwiki-metadata.scm

    r12665 r12751  
    4343(svnwiki-extension-define 'code-span 'description tag-description-set)
    4444(svnwiki-extension-define 'code-break 'description tag-description-load)
     45
     46; Return the list of properties that should be used for a given path.
     47
     48(define (get-properties env)
     49  (let-from-environment env (path-in path)
     50    (stream-remove
     51      stream-null?
     52      (stream-split
     53        (string->stream (get-props-parents-first "svnwiki:properties:list" path-in path ""))
     54        (cut char=? <> #\,)))))
     55
     56(define (get-value env property)
     57  (let-from-environment env (user-input)
     58    (user-input
     59      (string->symbol (format #f "svnwiki-properties-~A" (stream->string property)))
     60      (get-current-value env property))))
     61
     62(define (get-current-value env property)
     63  (let-from-environment env (path-in path)
     64    (string->stream
     65      (get-props-parents-first
     66        (stream->string property)
     67        path-in
     68        path
     69        (get-props-parents-first
     70          (format #f "svnwiki:properties:default:~A" (stream->string property))
     71          path-in
     72          path
     73          "")))))
     74
     75(define (edit-properties-text env property)
     76  (let-from-environment env (user-input)
     77    (html-stream
     78      ((input type "text"
     79              name (format #f "svnwiki-properties-~A" (stream->string property))
     80              value (get-default-value env property))))))
     81
     82(define (edit-properties-select env property)
     83  (let-from-environment env (user-input)
     84    (let ((default (get-default-value env property)))
     85      (html-stream
     86        ((select name (format #f "svnwiki-properties-~A" (stream->string property)))
     87         (stream-concatenate
     88           (stream-map
     89             (lambda (line)
     90               (if (stream= char=? line default)
     91                 (html-stream ((option selected "true") line))
     92                 (html-stream (option line))))
     93             (stream-lines
     94               (string->stream
     95                 (get-props-parents-first
     96                   (format #f "svnwiki:properties:select-values:~A" (stream->string property))
     97                   path-in
     98                   path
     99                   ""))))))))))
     100
     101; The first element in the list will be the default
     102
     103(define *edit-properties-input*
     104  `((text ,edit-properties-text)
     105    (select ,edit-properties-select)))
     106
     107(define (edit-properties env)
     108  (let ((properties (get-properties env)))
     109    (unless (stream-null? properties)
     110      (let-from-environment env (return path-in path)
     111        (return
     112          (html-stream
     113            (h2 "Properties")
     114            (stream-concatenate
     115              (stream-map
     116                (lambda (property)
     117                  (html-stream
     118                    (p (b (get-props-parents-first (format #f "svnwiki:properties:name:~A" (stream->string property)) path-in path property) ":")
     119                       (let ((help (get-props-parents-first (format #f "svnwiki:properties:help:~A" (stream->string property)) path-in path "")))
     120                         (if (string=? help "")
     121                           ""
     122                           (html-stream "(" help ")")))
     123                       (br)
     124                       ((cadr (or (assoc (get-props-parents-first (format #f "svnwiki:properties:type:~A" (stream->string property)) path-in path "")
     125                                         edit-properties-input)
     126                                  (car edit-properties-input)))
     127                        env
     128                        property)))))
     129              (get-properties env))))))))
     130
     131(svnwiki-extension-define 'edit-form-section 'properties edit-properties)
     132
     133(define (save-properties env)
     134  (let ((properties (get-properties env)))
     135    (unless (stream-null? properties)
     136      (let ((changes #f))
     137        (stream-for-each
     138          (lambda (property)
     139            (let ((old-value (get-current-value env property))
     140                  (new-value (get-value env property)))
     141              (unless (stream= char=? old-value new-value)
     142                (set! changes #t)
     143                (svnwiki-repository-property-set
     144                  property
     145                  path
     146                  value))))
     147          properties)
     148        (when changes
     149          (let-from-environment env (return path-in path)
     150            (svnwiki-commit-handler-info
     151              env
     152              (html-stream
     153                (p "The following properties have been set:")
     154                (stream->html-ul
     155                  (stream-map
     156                    (lambda (property)
     157                      (get-props-parents-first (format #f "svnwiki:properties:name:~A" (stream->string property)) path-in path property))
     158                    properties))))))))))
     159
     160(svnwiki-extension-define 'commit-handler 'properties save-properties)
Note: See TracChangeset for help on using the changeset viewer.