diff --git a/pollen-server-extras/poldash.css b/pollen-server-extras/poldash.css index 5fa9411..4e7e5d6 100644 --- a/pollen-server-extras/poldash.css +++ b/pollen-server-extras/poldash.css @@ -11,25 +11,40 @@ body { table { border-collapse:collapse; width: 100%; - max-width: 900px; + max-width: 700px; } + tr > td:first-child { width: 0%; } -tr > td:first-child { +th, tr > td:first-child { font-family: "Triplicate T4"; background: #f6f6f6; text-align: left; } +th.root { + background: white; + font-weight: normal; + padding: 0.4em; +} + +th a { + background: #e6e6e6; + display: block; + font-weight: normal; + padding: 0.4em; +} + + tr, tr + tr { border-top: 1px solid #ccc; } td { - font-size: 17px; + font-size: 16px; line-height: 1.35; text-align: center; } @@ -42,7 +57,7 @@ a { text-decoration: none; color: #6a6; display: block; - padding: 0.5em; + padding: 0.4em; } .file-ext { diff --git a/server-routes.rkt b/server-routes.rkt index f9f03d3..b2eec23 100644 --- a/server-routes.rkt +++ b/server-routes.rkt @@ -12,7 +12,7 @@ ;;; separated out for ease of testing ;;; because it's tedious to start the server just to check a route. -(provide route-dashboard route-raw route-xexpr route-default route-404) +(provide route-dashboard route-xexpr route-default route-404 route-in route-out) (define (html-wrapper body-xexpr) `(html @@ -81,14 +81,17 @@ ;; server routes ;; these all produce an xexpr, which is handled upstream by response/xexpr - -;; server route that returns raw html, formatted as code -;; for viewing source without using "view source" -(define/contract (raw path) +;; server routes that show result, formatted as code +;; route-in just gets file from disk; route-out renders it first +(define/contract (in path) (complete-path? . -> . xexpr?) (format-as-code (slurp path #:render #f))) +(define route-in (route-wrapper in)) -(define route-raw (route-wrapper raw)) +(define/contract (out path) + (complete-path? . -> . xexpr?) + (format-as-code (slurp path #:render #t))) +(define route-out (route-wrapper out)) ;; dashboard route @@ -105,14 +108,11 @@ `(a ((href ,href)) ,text) text))))) (define (make-parent-row) - (define url-to-parent-dashboard (format "/~a" (find-relative-path PROJECT_ROOT (build-path parent-dir DASHBOARD_NAME)))) - (define url-to-parent (string-replace url-to-parent-dashboard DASHBOARD_NAME "")) - - `(tr ,@(map make-link-cell (list - (cons url-to-parent-dashboard url-to-parent) - empty-cell - (cons #f "(parent dir)") - empty-cell)))) + (if parent-dir + (let* ([url-to-parent-dashboard (format "/~a" (find-relative-path PROJECT_ROOT (build-path parent-dir DASHBOARD_NAME)))] + [url-to-parent (string-replace url-to-parent-dashboard DASHBOARD_NAME "")]) + `(tr (th ((colspan "3")) (a ((href ,url-to-parent-dashboard)) ,(format "up to ~a" url-to-parent))))) + `(tr (th ((colspan "3")(class "root")) "Pollen root")))) (define (make-path-row fn) (define filename (->string fn)) @@ -124,43 +124,42 @@ (define source (and (not (empty? possible-sources)) (->string (car possible-sources)))) `(tr ,@(map make-link-cell (append (list - (cond ;; main cell + (cond ; main cell [(directory-exists? (build-path dir filename)) ; links subdir to its dashboard (cons (format "~a/~a" filename DASHBOARD_NAME) (format "~a/" filename))] [source (cons #f `(a ((href ,filename)) ,filename (span ((class "file-ext")) "." ,(get-ext source))))] [else (cons filename filename)]) - (cond ; source cell (if needed) - [(has-ext? filename POLLEN_TREE_EXT) (cons (format "raw/~a" filename) "ptree")] - [source (cons (format "raw/~a" source) "in")] + (cond ; in cell + [(has-ext? filename POLLEN_TREE_EXT) (cons (format "in/~a" filename) "ptree")] + [source (cons (format "in/~a" source) "in")] [else empty-cell]) - (cond ; raw cell (if needed) + + (cond ; out cell [(directory-exists? (build-path dir filename)) (cons #f #f)] - [(has-binary-ext? filename) (cons #f "(binary)")] + [(has-binary-ext? filename) (cons (format "~a" filename) "out")] [(has-ext? filename POLLEN_TREE_EXT) empty-cell] - [else (cons (format "raw/~a" filename) "out")])) - #|(if source - (list - (if (has-ext? source POLLEN_DECODER_EXT) ; xexpr cell for pollen decoder files - (cons (format "xexpr/~a" source) "xexpr") - empty-cell)) - (make-list 1 empty-cell))|#)))) + [else (cons (format "out/~a" filename) "out")])))))) (define (ineligible-path? x) (or (not (visible? x)) (member x RESERVED_PATHS))) (define project-paths (filter-not ineligible-path? (directory-list dir))) (define (unique-sorted-output-paths xs) - (define all-paths (set->list (list->set (map ->output-path xs)))) - (define subdirectories (filter directory-exists? all-paths)) - (define files (filter-not directory-exists? all-paths)) - (report (append (sort subdirectories #:key ->string stringstring stringoutput-path xs)) + (define (unique-members xs) (set->list (list->set xs))) + (define all-paths (unique-members output-paths)) + (define built-directory-exists? (λ(f) (directory-exists? (build-path dir f)))) + (define subdirectories (filter built-directory-exists? all-paths)) + (define files (filter-not built-directory-exists? all-paths)) + (define (sort-names xs) (sort xs #:key ->string string