diff --git a/examples/Elements/Elements.ino b/examples/Elements/Elements.ino index 1aeea49..dd874a6 100644 --- a/examples/Elements/Elements.ino +++ b/examples/Elements/Elements.ino @@ -74,11 +74,6 @@ static const char PAGE_ELEMENTS[] PROGMEM = R"( "label": "Select", "selected": 2 }, - { - "name": "element", - "type": "ACElement", - "value": "
" - }, { "name": "load", "type": "ACSubmit", diff --git a/src/AutoConnectElementBasis.h b/src/AutoConnectElementBasis.h index 85b876d..d4cab91 100644 --- a/src/AutoConnectElementBasis.h +++ b/src/AutoConnectElementBasis.h @@ -2,8 +2,8 @@ * Declaration of AutoConnectElement basic class. * @file AutoConnectElementBasis.h * @author hieromon@gmail.com - * @version 0.9.8 - * @date 2019-03-11 + * @version 0.9.11 + * @date 2019-06-25 * @copyright MIT license. */ @@ -38,6 +38,12 @@ typedef enum { AC_File_Extern } ACFile_t; /**< AutoConnectFile media type */ +typedef enum { + AC_Tag_None = 0, + AC_Tag_BR = 1, + AC_Tag_P = 2 +} ACPosterior_t; /**< Tag to be generated following element */ + /** * AutoConnectAux element base. * Placed a raw text that can be added by user sketch. @@ -46,12 +52,13 @@ typedef enum { */ class AutoConnectElementBasis { public: - explicit AutoConnectElementBasis(const char* name = "", const char* value = "") : name(String(name)), value(String(value)), enable(true) { + explicit AutoConnectElementBasis(const char* name = "", const char* value = "", const ACPosterior_t post = AC_Tag_None) : name(String(name)), value(String(value)), post(post), enable(true) { _type = AC_Element; } virtual ~AutoConnectElementBasis() {} virtual const String toHTML(void) const { return enable ? value : String(""); } ACElement_t typeOf(void) const { return _type; } + const String posterior(const String& s) const; #ifndef AUTOCONNECT_USE_JSON template T& as(void); @@ -59,6 +66,7 @@ class AutoConnectElementBasis { String name; /**< Element name */ String value; /**< Element value */ + ACPosterior_t post; /**< Tag to be generated with posterior */ bool enable; /**< Enabling the element */ protected: @@ -74,7 +82,7 @@ class AutoConnectElementBasis { */ class AutoConnectButtonBasis : virtual public AutoConnectElementBasis { public: - explicit AutoConnectButtonBasis(const char* name = "", const char* value = "", const String& action = String("")) : AutoConnectElementBasis(name, value), action(String(action)) { + explicit AutoConnectButtonBasis(const char* name = "", const char* value = "", const String& action = String(""), const ACPosterior_t post = AC_Tag_None) : AutoConnectElementBasis(name, value, post), action(String(action)) { _type = AC_Button; } ~AutoConnectButtonBasis() {} @@ -93,7 +101,7 @@ class AutoConnectButtonBasis : virtual public AutoConnectElementBasis { */ class AutoConnectCheckboxBasis : virtual public AutoConnectElementBasis { public: - explicit AutoConnectCheckboxBasis(const char* name = "", const char* value = "", const char* label = "", const bool checked = false) : AutoConnectElementBasis(name, value), label(String(label)), checked(checked) { + explicit AutoConnectCheckboxBasis(const char* name = "", const char* value = "", const char* label = "", const bool checked = false, const ACPosterior_t post = AC_Tag_BR) : AutoConnectElementBasis(name, value, post), label(String(label)), checked(checked) { _type = AC_Checkbox; } virtual ~AutoConnectCheckboxBasis() {} @@ -113,7 +121,7 @@ class AutoConnectCheckboxBasis : virtual public AutoConnectElementBasis { */ class AutoConnectFileBasis : virtual public AutoConnectElementBasis { public: - explicit AutoConnectFileBasis(const char* name = "", const char* value = "", const char* label = "", const ACFile_t store = AC_File_FS) : AutoConnectElementBasis(name, value), label(String(label)), store(store) { + explicit AutoConnectFileBasis(const char* name = "", const char* value = "", const char* label = "", const ACFile_t store = AC_File_FS, const ACPosterior_t post = AC_Tag_BR) : AutoConnectElementBasis(name, value, post), label(String(label)), store(store), size(0) { _type = AC_File; _upload.reset(); } @@ -142,7 +150,7 @@ class AutoConnectFileBasis : virtual public AutoConnectElementBasis { */ class AutoConnectInputBasis : virtual public AutoConnectElementBasis { public: - explicit AutoConnectInputBasis(const char* name = "", const char* value = "", const char* label = "", const char* pattern = "", const char* placeholder = "") : AutoConnectElementBasis(name, value), label(String(label)), pattern(String(pattern)), placeholder(String(placeholder)) { + explicit AutoConnectInputBasis(const char* name = "", const char* value = "", const char* label = "", const char* pattern = "", const char* placeholder = "", const ACPosterior_t post = AC_Tag_BR) : AutoConnectElementBasis(name, value, post), label(String(label)), pattern(String(pattern)), placeholder(String(placeholder)) { _type = AC_Input; } virtual ~AutoConnectInputBasis() {} @@ -164,7 +172,7 @@ class AutoConnectInputBasis : virtual public AutoConnectElementBasis { */ class AutoConnectRadioBasis : virtual public AutoConnectElementBasis { public: - explicit AutoConnectRadioBasis(const char* name = "", std::vector const& values = {}, const char* label = "", const ACArrange_t order = AC_Vertical, const uint8_t checked = 0) : AutoConnectElementBasis(name, ""), label(label), order(order), checked(checked), _values(values) { + explicit AutoConnectRadioBasis(const char* name = "", std::vector const& values = {}, const char* label = "", const ACArrange_t order = AC_Vertical, const uint8_t checked = 0, const ACPosterior_t post = AC_Tag_BR) : AutoConnectElementBasis(name, "", post), label(label), order(order), checked(checked), _values(values) { _type = AC_Radio; } virtual ~AutoConnectRadioBasis() {} @@ -196,7 +204,7 @@ class AutoConnectRadioBasis : virtual public AutoConnectElementBasis { */ class AutoConnectSelectBasis : virtual public AutoConnectElementBasis { public: - explicit AutoConnectSelectBasis(const char* name = "", std::vector const& options = {}, const char* label = "", const uint8_t selected = 0) : AutoConnectElementBasis(name, ""), label(String(label)), selected(selected), _options(options) { + explicit AutoConnectSelectBasis(const char* name = "", std::vector const& options = {}, const char* label = "", const uint8_t selected = 0, const ACPosterior_t post = AC_Tag_BR) : AutoConnectElementBasis(name, "", post), label(String(label)), selected(selected), _options(options) { _type = AC_Select; } virtual ~AutoConnectSelectBasis() {} @@ -227,7 +235,7 @@ class AutoConnectSelectBasis : virtual public AutoConnectElementBasis { */ class AutoConnectSubmitBasis : virtual public AutoConnectElementBasis { public: - explicit AutoConnectSubmitBasis(const char* name = "", const char* value = "", const char* uri = "") : AutoConnectElementBasis(name, value), uri(String(uri)) { + explicit AutoConnectSubmitBasis(const char* name = "", const char* value = "", const char* uri = "", const ACPosterior_t post = AC_Tag_None) : AutoConnectElementBasis(name, value, post), uri(String(uri)) { _type = AC_Submit; } virtual ~AutoConnectSubmitBasis() {} @@ -248,7 +256,7 @@ class AutoConnectSubmitBasis : virtual public AutoConnectElementBasis { */ class AutoConnectTextBasis : virtual public AutoConnectElementBasis { public: - explicit AutoConnectTextBasis(const char* name = "", const char* value = "", const char* style = "", const char* format = "") : AutoConnectElementBasis(name, value), style(String(style)), format(String(format)) { + explicit AutoConnectTextBasis(const char* name = "", const char* value = "", const char* style = "", const char* format = "", const ACPosterior_t post = AC_Tag_None) : AutoConnectElementBasis(name, value, post), style(String(style)), format(String(format)) { _type = AC_Text; } virtual ~AutoConnectTextBasis() {} diff --git a/src/AutoConnectElementBasisImpl.h b/src/AutoConnectElementBasisImpl.h index 39c1f53..484fb46 100644 --- a/src/AutoConnectElementBasisImpl.h +++ b/src/AutoConnectElementBasisImpl.h @@ -2,8 +2,8 @@ * Implementation of AutoConnectElementBasis classes. * @file AutoConnectElementImpl.h * @author hieromon@gmail.com - * @version 0.9.9 - * @date 2019-05-23 + * @version 0.9.11 + * @date 2019-06-25 * @copyright MIT license. */ @@ -19,13 +19,35 @@ #endif #include "AutoConnectElementBasis.h" +/** + * Append post-tag accoring by the post attribute. + * @param s An original string + * @return A string that appended the post tag + */ +const String AutoConnectElementBasis::posterior(const String& s) const { + String html; + if (post == AC_Tag_BR) + html = s + String(F("
")); + else if (post == AC_Tag_P) + html = String("

") + s + String(F("

")); + else + html = s; + return html; +} + /** * Generate an HTML ")) : String(""); + String html = String(""); + + if (enable) { + html = String(F("")); + html = AutoConnectElementBasis::posterior(html); + } + return html; } /** @@ -45,7 +67,8 @@ const String AutoConnectCheckboxBasis::toHTML(void) const { html += String(F(" checked")); if (label.length()) html += String(F(" id=\"")) + name + String(F("\">