/** * Copyright (C) 2012 10gen Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License, version 3, * as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * * As a special exception, the copyright holders give permission to link the * code of portions of this program with the OpenSSL library under certain * conditions as described in each individual source file and distribute * linked combinations including the program with the OpenSSL library. You * must comply with the GNU Affero General Public License in all respects * for all of the code used other than as permitted herein. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you do not * wish to do so, delete this exception statement from your version. If you * delete this exception statement from all source files in the program, * then also delete it in the license file. */ #pragma once #include namespace mongo { namespace html { inline std::string _end() { return ""; } inline std::string _table() { return "\n\n"; } inline std::string _tr() { return "\n"; } inline std::string tr() { return ""; } inline std::string tr(const std::string& a, const std::string& b) { std::stringstream ss; ss << "" << a << "" << b << "\n"; return ss.str(); } template inline std::string td(T x) { std::stringstream ss; ss << "" << x << ""; return ss.str(); } inline std::string td(const std::string& x) { return "" + x + ""; } inline std::string th(const std::string& x) { return "" + x + ""; } inline void tablecell(std::stringstream& ss, bool b) { ss << "" << (b ? "X" : "") << ""; } template inline void tablecell(std::stringstream& ss, const T& t) { ss << "" << t << ""; } inline std::string table(const char* headers[] = 0, bool border = true) { std::stringstream ss; ss << "\n\n"; if (headers) { ss << ""; while (*headers) { ss << ""; headers++; } ss << "\n"; } return ss.str(); } inline std::string start(const std::string& title) { std::stringstream ss; ss << "\n"; ss << title; ss << "\n"; ss << "\n"; ss << "\n\n"; return ss.str(); } inline std::string red(const std::string& contentHtml, bool color = true) { if (!color) return contentHtml; std::stringstream ss; ss << "" << contentHtml << ""; return ss.str(); } inline std::string grey(const std::string& contentHtml, bool color = true) { if (!color) return contentHtml; std::stringstream ss; ss << "" << contentHtml << ""; return ss.str(); } inline std::string blue(const std::string& contentHtml, bool color = true) { if (!color) return contentHtml; std::stringstream ss; ss << "" << contentHtml << ""; return ss.str(); } inline std::string yellow(const std::string& contentHtml, bool color = true) { if (!color) return contentHtml; std::stringstream ss; ss << "" << contentHtml << ""; return ss.str(); } inline std::string green(const std::string& contentHtml, bool color = true) { if (!color) return contentHtml; std::stringstream ss; ss << "" << contentHtml << ""; return ss.str(); } inline std::string p(const std::string& contentHtml) { std::stringstream ss; ss << "

" << contentHtml << "

\n"; return ss.str(); } inline std::string h2(const std::string& contentHtml) { std::stringstream ss; ss << "

" << contentHtml << "

\n"; return ss.str(); } /* does NOT escape the strings. */ inline std::string a(const std::string& href, const std::string& title = "", const std::string& contentHtml = "") { std::stringstream ss; ss << "'; if (!contentHtml.empty()) { ss << contentHtml << ""; } return ss.str(); } /* escape for HTML display */ inline std::string escape(const std::string& data) { std::string buffer; buffer.reserve(data.size()); for (size_t pos = 0; pos != data.size(); ++pos) { switch (data[pos]) { case '&': buffer.append("&"); break; case '\"': buffer.append("""); break; case '\'': buffer.append("'"); break; case '<': buffer.append("<"); break; case '>': buffer.append(">"); break; default: buffer.append(1, data[pos]); break; } } return buffer; } } }
" << *headers << "