* cause the browser to expose the cookie to other CGI programs on the same
* web server. */
dynstr_append_string(d, ";Version=1;Path=");
+ /* Formally we are supposed to quote the path, since it invariably has a
+ * slash in it. However Safari does not parse quoted paths correctly, so
+ * this won't work. Fortunately nothing else seems to care about proper
+ * quoting of paths, so in practice we get with it. (See also
+ * parse_cookie() where we are liberal about cookie paths on the way back
+ * in.) */
dynstr_append_string(d, u.path);
}
dynstr_terminate(d);
disorder_unset(ds->g->client, file, "pick_at_random");
else
disorder_set(ds->g->client, file, "pick_at_random", "0");
- if((value = numbered_arg("tags", numfile)))
- disorder_set(ds->g->client, file, "tags", value);
+ if((value = numbered_arg("tags", numfile))) {
+ if(!*value)
+ disorder_unset(ds->g->client, file, "tags");
+ else
+ disorder_set(ds->g->client, file, "tags", value);
+ }
+ if((value = numbered_arg("weight", numfile))) {
+ if(!*value || !strcmp(value, "90000"))
+ disorder_unset(ds->g->client, file, "weight");
+ else
+ disorder_set(ds->g->client, file, "weight", value);
+ }
} else if((name = cgi_get("name"))) {
/* Raw preferences. Not well supported in the templates at the moment. */
value = cgi_get("value");
cgi_output(output, "/disorder/%s", imagestem);
}
+static void exp_define(int attribute((unused)) nargs,
+ char **args,
+ cgi_sink attribute((unused)) *output,
+ void attribute((unused)) *u) {
+ const char *n = args[0], *a = args[1], *v = args[2];
+ int nas;
+ char **as = split(a, &nas, 0, 0, 0);
+
+ cgi_define(n, nas, as, v);
+}
+
static const struct cgi_expansion expansions[] = {
{ "#", 0, INT_MAX, EXP_MAGIC, exp_comment },
{ "action", 0, 0, 0, exp_action },
{ "arg", 1, 1, 0, exp_arg },
{ "basename", 0, 1, 0, exp_basename },
{ "choose", 2, 2, EXP_MAGIC, exp_choose },
+ { "define", 3, 3, EXP_MAGIC, exp_define },
{ "dirname", 0, 1, 0, exp_dirname },
{ "enabled", 0, 0, 0, exp_enabled },
{ "eq", 2, 2, 0, exp_eq },