view spag.yeti @ 165:3b89c48d0593 tip

URL to Vamp Plugin Pack Page
author Chris Cannam
date Tue, 11 Aug 2020 17:30:01 +0100
parents d59d56303a1e
children
line wrap: on
line source

module spag;

import spark: Request, Response, Route, Spark;

import org.apache.commons.lang: StringEscapeUtils;

route match callback =
   (handler callback =
       (class Handler extends Route
            Object handle(Request req, Response resp)
                routeParams = customHash \(req#params());
                queryParams = mapIntoHash id do p: req#queryParams(p) done
                   (map string req#queryParams()#toArray());
                splatParams = req#splat() as list<string>;
                headers = mapIntoHash id do h: req#headers(h) done
                   (map string req#headers()#toArray());
                callback { routeParams, queryParams, splatParams, headers },
        end;
        new Handler());
    case match of
    Get path: 
        h = handler callback;
        Spark#get(path, h);
    esac);

staticFileLocation path =
    Spark#staticFileLocation(path);

esc str =
    StringEscapeUtils#escapeHtml(str);

link url content =
    "<a href=\"\(url)\">\(content)</a>";

urlOf route queryParams furtherParams =
    //!!! url escape
    route ^ "?" ^
        strJoin "&"
           (map do k:
                if k in furtherParams then
                    "\(esc k)=\(esc furtherParams[k])"
                else
                    "\(esc k)=\(esc queryParams[k])"
                fi
            done (nub (keys queryParams ++ keys furtherParams)));

eltid e clas id content =
   (idbit = if id == "" then "" else " id=\"\(id)\"" fi;
    clasbit = if clas == "" then "" else " class=\"\(clas)\"" fi;
    "<\(e)\(clasbit)\(idbit)>\(content)</\(e)>");

elt e clas content = eltid e clas "" content;

divc = elt "div";

divid = eltid "div";

span = elt "span";

spanid = eltid "span";

{
    route,
    esc,
    link,
    urlOf,
    elt,
    eltid,
    divc,
    divid,
    span,
    spanid,
    staticFileLocation,
}