4#ifndef SRC_SUPLA_NETWORK_WEB_SENDER_H_
5#define SRC_SUPLA_NETWORK_WEB_SENDER_H_
9#include <supla/network/html_generator.h>
21 constexpr FixedValue(
int value) : raw(value), precision(0) {
23 constexpr FixedValue(
int value,
int prec) : raw(value), precision(prec) {
27constexpr FixedValue fixed(
int value,
int precision) {
88 HtmlTag&
attr(
const char* name,
int value,
int precision);
117 template <
typename Fn>
127 void body(
char* text);
133 void body(
const char (&text)[N]) {
134 body(
static_cast<const char*
>(text));
140 void body(
const char* text);
154 const char* tagName_ =
nullptr;
156 bool closed_ =
false;
157 bool finished_ =
false;
181 virtual void send(
const char*,
int size = -1) = 0;
182 virtual void sendSafe(
const char*,
int size = -1);
183 virtual void send(
int number);
184 virtual void send(
int number,
int precision);
185 virtual void sendNameAndId(
const char*
id);
186 virtual void sendLabelFor(
const char*
id,
const char* label);
187 virtual void sendSelectItem(
int value,
190 bool emptyValue =
false);
191 virtual void sendCsrfField();
192 virtual void sendHidden(
bool hidden);
193 virtual void sendReadonly(
bool readonly);
194 virtual void sendDisabled(
bool disabled);
195 virtual void sendTimestamp(uint32_t timestamp);
203 template <
typename Fn>
204 void formField(Fn&& fn,
const char* className =
"form-field") {
205 auto field =
tag(
"div");
206 field.attr(
"class", className);
216 template <
typename Fn>
220 const char* className =
"form-field") {
235 template <
typename Fn>
239 const char* className =
nullptr) {
240 auto box =
tag(
"div");
245 box.attr(
"class", className);
247 box.attr(
"style", visible ?
"display: block" :
"display: none");
254 template <
typename Fn>
266 auto select =
tag(
"select");
268 select.attr(
"name", name);
271 select.attr(
"id",
id);
279 void labelFor(
const char*
id,
const char* text);
289 const char* value =
nullptr,
291 const char* listId =
nullptr,
292 const char* onInput =
nullptr,
293 const char* onChange =
nullptr);
309 const char* value =
"on");
319 const char* cssClass =
nullptr);
329 const char* cssClass =
nullptr);
337 const char* cssClass =
nullptr);
345 const char* cssClass =
nullptr);
350 void selectOption(
int value,
int text,
bool selected =
false);
351 void selectOption(
int value,
const char* text,
bool selected =
false);
352 void selectOption(
const char* value,
int text,
bool selected =
false);
353 void selectOption(
const char* value,
const char* text,
bool selected =
false);
362 return HtmlTag(
this, tagName, paired);
369 return HtmlTag(
this, tagName,
false);
RAII helper for emitting a single HTML tag.
Definition web_sender.h:61
void body(const char(&text)[N])
Emit a text body using escaped content.
Definition web_sender.h:133
void body(Fn &&fn)
Emit a paired body using a callback.
Definition web_sender.h:118
HtmlTag & close()
Emit the closing > for the opening tag.
Definition web_sender.cpp:91
HtmlTag & attr(const char *name, const char *value)
Append a quoted HTML attribute with escaped value.
Definition web_sender.cpp:50
void end()
Explicitly finish the tag.
Definition web_sender.cpp:117
HtmlTag & attrIf(const char *name, bool enabled)
Append a boolean HTML attribute when enabled.
Definition web_sender.cpp:83
HtmlTag & finish()
Close the opening tag and mark it as finished.
Definition web_sender.cpp:99
Definition web_sender.h:160
void labeledField(const char *id, const char *text, Fn &&fn, const char *className="form-field")
Emit a labeled field wrapper.
Definition web_sender.h:217
void selectOption(int value, int text, bool selected=false)
Emit a single <option> element.
Definition web_sender.cpp:286
void formField(Fn &&fn, const char *className="form-field")
Emit a <div class="form-field">...</div> block.
Definition web_sender.h:204
HtmlTag voidTag(const char *tagName)
Start a builder for a void HTML tag such as <input>.
Definition web_sender.h:368
HtmlTag selectTag(const char *name, const char *id)
Start a <select> tag builder.
Definition web_sender.h:265
void labelFor(const char *id, const char *text)
Emit a <label for="...">...</label> pair.
Definition web_sender.cpp:138
void textInput(const char *name, const char *id, const char *value=nullptr, int maxLength=-1, const char *listId=nullptr, const char *onInput=nullptr, const char *onChange=nullptr)
Emit a text input control.
Definition web_sender.cpp:144
void toggleBox(const char *id, bool visible, Fn &&fn, const char *className=nullptr)
Emit a <div> whose visibility is controlled via display.
Definition web_sender.h:236
virtual ~WebSender()
Base interface for emitting generated HTML.
Definition web_sender.cpp:136
HtmlTag tag(const char *tagName, bool paired=true)
Start an HTML tag builder.
Definition web_sender.h:361
void selectInput(const char *name, const char *id, Fn &&fn)
Emit a <select> block with optional name and id.
Definition web_sender.h:255
void checkboxInput(const char *name, const char *id, bool checked, const char *value="on")
Emit a checkbox input control.
Definition web_sender.cpp:189
void numberInput(const char *key, const NumericInputSpec &spec, const char *cssClass=nullptr)
Emit a numeric input control.
Definition web_sender.cpp:206
void rangeInput(const char *key, const NumericInputSpec &spec, const char *cssClass=nullptr)
Emit a range input control.
Definition web_sender.cpp:212
void passwordInput(const char *name, const char *id)
Emit a password input control.
Definition web_sender.cpp:177
Definition web_sender.h:15