PUBLIC void espScript(HttpConn *conn, cchar *uri, cchar *optionString) { MprHash *options; cchar *indent, *newline, *path; EspScript *sp; EspRoute *eroute; bool minified; eroute = conn->rx->route->eroute; options = httpGetOptions(optionString); if (uri) { espRender(conn, "<script src='%s' type='text/javascript'></script>", httpUri(conn, uri)); } else { minified = smatch(httpGetOption(options, "minified", 0), "true"); indent = ""; for (sp = defaultScripts; sp->name; sp++) { if (sp->option && !smatch(httpGetOption(options, sp->option, "false"), "true")) { continue; } if (sp->flags & SCRIPT_IE) { espRender(conn, "%s<!-- [if lt IE 9]>\n", indent); } path = sjoin("~/", mprGetPathBase(eroute->clientDir), sp->name, minified ? ".min.js" : ".js", NULL); uri = httpUri(conn, path); newline = sp[1].name ? "\r\n" : ""; espRender(conn, "%s<script src='%s' type='text/javascript'></script>%s", indent, uri, newline); if (sp->flags & SCRIPT_IE) { espRender(conn, "%s<![endif]-->\n", indent); } indent = " "; } } }
/* tabs(makeGrid("[{ name: 'Status', uri: 'pane-1' }, { name: 'Edit', uri: 'pane-2' }]")) Options: click toggle remote */ PUBLIC void espTabs(HttpConn *conn, EdiGrid *grid, cchar *optionString) { MprHash *options; EdiRec *rec; cchar *attr, *uri, *name, *klass; int r, toggle; options = httpGetOptions(optionString); httpInsertOption(options, "class", ESTYLE("tabs")); attr = httpGetOption(options, "toggle", EDATA("click")); if ((toggle = smatch(attr, "true")) != 0) { attr = EDATA("toggle"); } espRender(conn, "<div%s>\r\n <ul>\r\n", map(conn, options)); for (r = 0; r < grid->nrecords; r++) { rec = grid->records[r]; name = ediGetFieldValue(rec, "name"); uri = ediGetFieldValue(rec, "uri"); uri = toggle ? uri : httpUri(conn, uri); if ((r == 0 && toggle) || smatch(uri, conn->rx->pathInfo)) { klass = smatch(uri, conn->rx->pathInfo) ? " class='esp-selected'" : ""; } else { klass = ""; } espRender(conn, " <li %s='%s'%s>%s</li>\r\n", attr, uri, klass, name); } espRender(conn, " </ul>\r\n </div>\r\n"); }
PUBLIC void espImage(HttpConn *conn, cchar *uri, cchar *optionString) { MprHash *options; options = httpGetOptions(optionString); espRender(conn, "<img src='%s'%s />", httpUri(conn, uri), map(conn, options)); }
PUBLIC void espButtonLink(HttpConn *conn, cchar *text, cchar *uri, cchar *optionString) { MprHash *options; options = httpGetOptions(optionString); httpSetOption(options, EDATA("click"), httpUri(conn, uri)); espRender(conn, "<button%s>%s</button>", map(conn, options), text); }
PUBLIC void form(EdiRec *record, cchar *optionString) { HttpConn *conn; MprHash *options; cchar *action, *recid, *method, *uri, *token; conn = getConn(); if (record == 0) { record = getRec(); } else { conn->record = record; } options = httpGetOptions(optionString); recid = 0; /* If record provided, get the record id. Can be overridden using options.recid */ if (record) { if (record->id && !httpGetOption(options, "recid", 0)) { httpAddOption(options, "recid", record->id); } recid = httpGetOption(options, "recid", 0); emitFormErrors(conn, record, options); } if ((method = httpGetOption(options, "method", 0)) == 0) { method = (recid) ? "PUT" : "POST"; } if (!scaselessmatch(method, "GET") && !scaselessmatch(method, "POST")) { /* All methods use POST and tunnel method in data-method */ httpAddOption(options, EDATA("method"), method); method = "POST"; } if ((action = httpGetOption(options, "action", 0)) == 0) { action = (recid) ? "@update" : "@create"; } uri = httpUri(conn, action); if (smatch(httpGetOption(options, "remote", 0), "true")) { espRender(conn, "<form method='%s' " EDATA("remote") "='%s'%s >\r\n", method, uri, map(conn, options)); } else { espRender(conn, "<form method='%s' action='%s'%s >\r\n", method, uri, map(conn, options)); } if (recid) { espRender(conn, " <input name='recid' type='hidden' value='%s' />\r\n", recid); } if (!httpGetOption(options, "insecure", 0)) { if ((token = httpGetOption(options, "securityToken", 0)) == 0) { token = httpGetSecurityToken(conn, 0); } espRender(conn, " <input name='%s' type='hidden' value='%s' />\r\n", BIT_XSRF_PARAM, token); } }
PUBLIC void espStylesheet(HttpConn *conn, cchar *uri, cchar *optionString) { EspRoute *eroute; MprHash *options; cchar *indent, *newline; char **up; bool less; eroute = conn->rx->route->eroute; if (uri) { espRender(conn, "<link rel='stylesheet' type='text/css' href='%s' />", httpUri(conn, uri)); } else { indent = ""; options = httpGetOptions(optionString); less = smatch(httpGetOption(options, "type", "css"), "less"); up = less ? defaultLess : defaultCss; for (; *up; up++) { uri = httpUri(conn, sjoin("~/", mprGetPathBase(eroute->clientDir), *up, NULL)); newline = up[1] ? "\r\n" : ""; espRender(conn, "%s<link rel='stylesheet%s' type='text/css' href='%s' />%s", indent, less ? "/less" : "", uri, newline); indent = " "; } } }
PUBLIC void espIcon(HttpConn *conn, cchar *uri, cchar *optionString) { MprHash *options; EspRoute *eroute; eroute = conn->rx->route->eroute; options = httpGetOptions(optionString); if (uri == 0) { /* Suppress favicon */ uri = "data:image/x-icon;,"; } else if (*uri == 0) { uri = sjoin("~/", mprGetPathBase(eroute->clientDir), "/images/favicon.ico", NULL); } espRender(conn, "<link href='%s' rel='shortcut icon'%s />", httpUri(conn, uri), map(conn, options)); }
PUBLIC char *espGetTop(HttpConn *conn) { return httpUri(conn, "~", NULL); }
PUBLIC cchar *espUri(HttpConn *conn, cchar *target) { return httpUri(conn, target, 0); }