acjson.html 81 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032
  1. <!doctype html>
  2. <html lang="en" class="no-js">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width,initial-scale=1">
  6. <meta name="description" content="ESP8266/ESP32 WLAN configuration at run time with web interface">
  7. <link rel="canonical" href="https://Hieromon.github.io/AutoConnect/acjson.html">
  8. <meta name="author" content="Hieromon Ikasamo">
  9. <link rel="shortcut icon" href="assets/images/favicon.png">
  10. <meta name="generator" content="mkdocs-1.1.2, mkdocs-material-6.1.6">
  11. <title>Custom Web pages with JSON - AutoConnect for ESP8266/ESP32</title>
  12. <link rel="stylesheet" href="assets/stylesheets/main.6910b76c.min.css">
  13. <link rel="stylesheet" href="assets/stylesheets/palette.196e0c26.min.css">
  14. <meta name="theme-color" content="#4051b5">
  15. <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
  16. <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CRoboto+Mono&display=fallback">
  17. <style>body,input{font-family:"Roboto",-apple-system,BlinkMacSystemFont,Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono",SFMono-Regular,Consolas,Menlo,monospace}</style>
  18. <link rel="stylesheet" href="css/paragraph.css">
  19. <link rel="stylesheet" href="css/extra.css">
  20. <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css">
  21. <script>window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)},ga.l=+new Date,ga("create","UA-116150854-1","auto"),ga("set","anonymizeIp",!0),ga("send","pageview"),document.addEventListener("DOMContentLoaded",function(){document.forms.search&&document.forms.search.query.addEventListener("blur",function(){if(this.value){var e=document.location.pathname;ga("send","pageview",e+"?q="+this.value)}})}),document.addEventListener("DOMContentSwitch",function(){ga("send","pageview",document.location.pathname)})</script>
  22. <script async src="https://www.google-analytics.com/analytics.js"></script>
  23. </head>
  24. <body dir="ltr" data-md-color-scheme="" data-md-color-primary="indigo" data-md-color-accent="indigo">
  25. <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
  26. <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
  27. <label class="md-overlay" for="__drawer"></label>
  28. <div data-md-component="skip">
  29. <a href="#json-objects-elements-for-the-custom-web-page" class="md-skip">
  30. Skip to content
  31. </a>
  32. </div>
  33. <div data-md-component="announce">
  34. </div>
  35. <header class="md-header" data-md-component="header">
  36. <nav class="md-header-nav md-grid" aria-label="Header">
  37. <a href="https://Hieromon.github.io/AutoConnect/" title="AutoConnect for ESP8266/ESP32" class="md-header-nav__button md-logo" aria-label="AutoConnect for ESP8266/ESP32">
  38. <img src="images/arduino-logo.svg" alt="logo">
  39. </a>
  40. <label class="md-header-nav__button md-icon" for="__drawer">
  41. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
  42. </label>
  43. <div class="md-header-nav__title" data-md-component="header-title">
  44. <div class="md-header-nav__ellipsis">
  45. <span class="md-header-nav__topic md-ellipsis">
  46. AutoConnect for ESP8266/ESP32
  47. </span>
  48. <span class="md-header-nav__topic md-ellipsis">
  49. Custom Web pages with JSON
  50. </span>
  51. </div>
  52. </div>
  53. <label class="md-header-nav__button md-icon" for="__search">
  54. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0116 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
  55. </label>
  56. <div class="md-search" data-md-component="search" role="dialog">
  57. <label class="md-search__overlay" for="__search"></label>
  58. <div class="md-search__inner" role="search">
  59. <form class="md-search__form" name="search">
  60. <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required>
  61. <label class="md-search__icon md-icon" for="__search">
  62. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0116 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
  63. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
  64. </label>
  65. <button type="reset" class="md-search__icon md-icon" aria-label="Clear" data-md-component="search-reset" tabindex="-1">
  66. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
  67. </button>
  68. </form>
  69. <div class="md-search__output">
  70. <div class="md-search__scrollwrap" data-md-scrollfix>
  71. <div class="md-search-result" data-md-component="search-result">
  72. <div class="md-search-result__meta">
  73. Initializing search
  74. </div>
  75. <ol class="md-search-result__list"></ol>
  76. </div>
  77. </div>
  78. </div>
  79. </div>
  80. </div>
  81. <div class="md-header-nav__source">
  82. <a href="https://github.com/Hieromon/AutoConnect" title="Go to repository" class="md-source">
  83. <div class="md-source__icon md-icon">
  84. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05L244 40.45a28.87 28.87 0 00-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 01-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 000 40.81l195.61 195.6a28.86 28.86 0 0040.8 0l194.69-194.69a28.86 28.86 0 000-40.81z"/></svg>
  85. </div>
  86. <div class="md-source__repository">
  87. Hieromon/AutoConnect
  88. </div>
  89. </a>
  90. </div>
  91. </nav>
  92. </header>
  93. <div class="md-container" data-md-component="container">
  94. <main class="md-main" data-md-component="main">
  95. <div class="md-main__inner md-grid">
  96. <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
  97. <div class="md-sidebar__scrollwrap">
  98. <div class="md-sidebar__inner">
  99. <nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
  100. <label class="md-nav__title" for="__drawer">
  101. <a href="https://Hieromon.github.io/AutoConnect/" title="AutoConnect for ESP8266/ESP32" class="md-nav__button md-logo" aria-label="AutoConnect for ESP8266/ESP32">
  102. <img src="images/arduino-logo.svg" alt="logo">
  103. </a>
  104. AutoConnect for ESP8266/ESP32
  105. </label>
  106. <div class="md-nav__source">
  107. <a href="https://github.com/Hieromon/AutoConnect" title="Go to repository" class="md-source">
  108. <div class="md-source__icon md-icon">
  109. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05L244 40.45a28.87 28.87 0 00-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 01-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 000 40.81l195.61 195.6a28.86 28.86 0 0040.8 0l194.69-194.69a28.86 28.86 0 000-40.81z"/></svg>
  110. </div>
  111. <div class="md-source__repository">
  112. Hieromon/AutoConnect
  113. </div>
  114. </a>
  115. </div>
  116. <ul class="md-nav__list" data-md-scrollfix>
  117. <li class="md-nav__item">
  118. <a href="index.html" class="md-nav__link">
  119. Overview
  120. </a>
  121. </li>
  122. <li class="md-nav__item">
  123. <a href="gettingstarted.html" class="md-nav__link">
  124. Getting started
  125. </a>
  126. </li>
  127. <li class="md-nav__item">
  128. <a href="menu.html" class="md-nav__link">
  129. AutoConnect menu
  130. </a>
  131. </li>
  132. <li class="md-nav__item">
  133. <a href="basicusage.html" class="md-nav__link">
  134. Basic usage
  135. </a>
  136. </li>
  137. <li class="md-nav__item md-nav__item--nested">
  138. <input class="md-nav__toggle md-toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5" >
  139. <label class="md-nav__link" for="nav-5">
  140. Advanced usage
  141. <span class="md-nav__icon md-icon"></span>
  142. </label>
  143. <nav class="md-nav" aria-label="Advanced usage" data-md-level="1">
  144. <label class="md-nav__title" for="nav-5">
  145. <span class="md-nav__icon md-icon"></span>
  146. Advanced usage
  147. </label>
  148. <ul class="md-nav__list" data-md-scrollfix>
  149. <li class="md-nav__item">
  150. <a href="advancedusage.html" class="md-nav__link">
  151. Advanced usage
  152. </a>
  153. </li>
  154. <li class="md-nav__item">
  155. <a href="adconnection.html" class="md-nav__link">
  156. AutoConnect WiFi connection control
  157. </a>
  158. </li>
  159. <li class="md-nav__item">
  160. <a href="adcpcontrol.html" class="md-nav__link">
  161. Captive portal control
  162. </a>
  163. </li>
  164. <li class="md-nav__item">
  165. <a href="adnetwork.html" class="md-nav__link">
  166. Settings and controls for network and WiFi
  167. </a>
  168. </li>
  169. <li class="md-nav__item">
  170. <a href="adauthentication.html" class="md-nav__link">
  171. Authentication settings
  172. </a>
  173. </li>
  174. <li class="md-nav__item">
  175. <a href="adcredential.html" class="md-nav__link">
  176. Credential accesses
  177. </a>
  178. </li>
  179. <li class="md-nav__item">
  180. <a href="adexterior.html" class="md-nav__link">
  181. Customizing page appearance
  182. </a>
  183. </li>
  184. <li class="md-nav__item">
  185. <a href="adothers.html" class="md-nav__link">
  186. Other operation settings and controls
  187. </a>
  188. </li>
  189. </ul>
  190. </nav>
  191. </li>
  192. <li class="md-nav__item md-nav__item--active md-nav__item--nested">
  193. <input class="md-nav__toggle md-toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6" checked>
  194. <label class="md-nav__link" for="nav-6">
  195. Custom Web pages
  196. <span class="md-nav__icon md-icon"></span>
  197. </label>
  198. <nav class="md-nav" aria-label="Custom Web pages" data-md-level="1">
  199. <label class="md-nav__title" for="nav-6">
  200. <span class="md-nav__icon md-icon"></span>
  201. Custom Web pages
  202. </label>
  203. <ul class="md-nav__list" data-md-scrollfix>
  204. <li class="md-nav__item">
  205. <a href="acintro.html" class="md-nav__link">
  206. Custom Web pages with AutoConnect
  207. </a>
  208. </li>
  209. <li class="md-nav__item">
  210. <a href="acelements.html" class="md-nav__link">
  211. AutoConnectElements
  212. </a>
  213. </li>
  214. <li class="md-nav__item md-nav__item--active">
  215. <input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
  216. <label class="md-nav__link md-nav__link--active" for="__toc">
  217. Custom Web pages with JSON
  218. <span class="md-nav__icon md-icon"></span>
  219. </label>
  220. <a href="acjson.html" class="md-nav__link md-nav__link--active">
  221. Custom Web pages with JSON
  222. </a>
  223. <nav class="md-nav md-nav--secondary" aria-label="Table of contents">
  224. <label class="md-nav__title" for="__toc">
  225. <span class="md-nav__icon md-icon"></span>
  226. Table of contents
  227. </label>
  228. <ul class="md-nav__list" data-md-scrollfix>
  229. <li class="md-nav__item">
  230. <a href="#json-objects-elements-for-the-custom-web-page" class="md-nav__link">
  231. JSON objects &amp; elements for the custom Web page
  232. </a>
  233. <nav class="md-nav" aria-label="JSON objects &amp; elements for the custom Web page">
  234. <ul class="md-nav__list">
  235. <li class="md-nav__item">
  236. <a href="#json-document-structure-for-autoconnectaux" class="md-nav__link">
  237. JSON document structure for AutoConnectAux
  238. </a>
  239. <nav class="md-nav" aria-label=" JSON document structure for AutoConnectAux">
  240. <ul class="md-nav__list">
  241. <li class="md-nav__item">
  242. <a href="#title" class="md-nav__link">
  243. title
  244. </a>
  245. </li>
  246. <li class="md-nav__item">
  247. <a href="#uri" class="md-nav__link">
  248. uri
  249. </a>
  250. </li>
  251. <li class="md-nav__item">
  252. <a href="#menu" class="md-nav__link">
  253. menu
  254. </a>
  255. </li>
  256. <li class="md-nav__item">
  257. <a href="#auth" class="md-nav__link">
  258. auth
  259. </a>
  260. </li>
  261. <li class="md-nav__item">
  262. <a href="#element" class="md-nav__link">
  263. element
  264. </a>
  265. </li>
  266. </ul>
  267. </nav>
  268. </li>
  269. <li class="md-nav__item">
  270. <a href="#multiple-custom-web-pages-declaration-in-json-document" class="md-nav__link">
  271. Multiple custom Web pages declaration in JSON document
  272. </a>
  273. </li>
  274. <li class="md-nav__item">
  275. <a href="#json-object-for-autoconnectelements" class="md-nav__link">
  276. JSON object for AutoConnectElements
  277. </a>
  278. <nav class="md-nav" aria-label=" JSON object for AutoConnectElements">
  279. <ul class="md-nav__list">
  280. <li class="md-nav__item">
  281. <a href="#name" class="md-nav__link">
  282. name
  283. </a>
  284. </li>
  285. <li class="md-nav__item">
  286. <a href="#type" class="md-nav__link">
  287. type
  288. </a>
  289. </li>
  290. <li class="md-nav__item">
  291. <a href="#posterior" class="md-nav__link">
  292. posterior
  293. </a>
  294. </li>
  295. <li class="md-nav__item">
  296. <a href="#key_according_to_type" class="md-nav__link">
  297. key_according_to_type
  298. </a>
  299. </li>
  300. <li class="md-nav__item">
  301. <a href="#acbutton" class="md-nav__link">
  302. ACButton
  303. </a>
  304. </li>
  305. <li class="md-nav__item">
  306. <a href="#accheckbox" class="md-nav__link">
  307. ACCheckbox
  308. </a>
  309. </li>
  310. <li class="md-nav__item">
  311. <a href="#acelement" class="md-nav__link">
  312. ACElement
  313. </a>
  314. </li>
  315. <li class="md-nav__item">
  316. <a href="#acfile" class="md-nav__link">
  317. ACFile
  318. </a>
  319. </li>
  320. <li class="md-nav__item">
  321. <a href="#acinput" class="md-nav__link">
  322. ACInput
  323. </a>
  324. </li>
  325. <li class="md-nav__item">
  326. <a href="#acradio" class="md-nav__link">
  327. ACRadio
  328. </a>
  329. </li>
  330. <li class="md-nav__item">
  331. <a href="#acselect" class="md-nav__link">
  332. ACSelect
  333. </a>
  334. </li>
  335. <li class="md-nav__item">
  336. <a href="#acstyle" class="md-nav__link">
  337. ACStyle
  338. </a>
  339. </li>
  340. <li class="md-nav__item">
  341. <a href="#acsubmit" class="md-nav__link">
  342. ACSubmit
  343. </a>
  344. </li>
  345. <li class="md-nav__item">
  346. <a href="#actext" class="md-nav__link">
  347. ACText
  348. </a>
  349. </li>
  350. </ul>
  351. </nav>
  352. </li>
  353. </ul>
  354. </nav>
  355. </li>
  356. <li class="md-nav__item">
  357. <a href="#loading-json-document" class="md-nav__link">
  358. Loading JSON document
  359. </a>
  360. <nav class="md-nav" aria-label="Loading JSON document">
  361. <ul class="md-nav__list">
  362. <li class="md-nav__item">
  363. <a href="#loading-to-autoconnect" class="md-nav__link">
  364. Loading to AutoConnect
  365. </a>
  366. </li>
  367. <li class="md-nav__item">
  368. <a href="#loading-from-the-streamed-file" class="md-nav__link">
  369. Loading from the streamed file
  370. </a>
  371. </li>
  372. <li class="md-nav__item">
  373. <a href="#adjust-the-json-document-buffer-size" class="md-nav__link">
  374. Adjust the JSON document buffer size
  375. </a>
  376. <nav class="md-nav" aria-label=" Adjust the JSON document buffer size">
  377. <ul class="md-nav__list">
  378. <li class="md-nav__item">
  379. <a href="#autoconnect_jsonbuffer_size" class="md-nav__link">
  380. AUTOCONNECT_JSONBUFFER_SIZE
  381. </a>
  382. </li>
  383. <li class="md-nav__item">
  384. <a href="#autoconnect_jsondocument_size" class="md-nav__link">
  385. AUTOCONNECT_JSONDOCUMENT_SIZE
  386. </a>
  387. </li>
  388. <li class="md-nav__item">
  389. <a href="#autoconnect_jsonpsram_size" class="md-nav__link">
  390. AUTOCONNECT_JSONPSRAM_SIZE
  391. </a>
  392. </li>
  393. </ul>
  394. </nav>
  395. </li>
  396. </ul>
  397. </nav>
  398. </li>
  399. <li class="md-nav__item">
  400. <a href="#saving-json-document" class="md-nav__link">
  401. Saving JSON document
  402. </a>
  403. </li>
  404. </ul>
  405. </nav>
  406. </li>
  407. <li class="md-nav__item">
  408. <a href="achandling.html" class="md-nav__link">
  409. Handling the custom Web pages
  410. </a>
  411. </li>
  412. </ul>
  413. </nav>
  414. </li>
  415. <li class="md-nav__item md-nav__item--nested">
  416. <input class="md-nav__toggle md-toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7" >
  417. <label class="md-nav__link" for="nav-7">
  418. OTA Updates
  419. <span class="md-nav__icon md-icon"></span>
  420. </label>
  421. <nav class="md-nav" aria-label="OTA Updates" data-md-level="1">
  422. <label class="md-nav__title" for="nav-7">
  423. <span class="md-nav__icon md-icon"></span>
  424. OTA Updates
  425. </label>
  426. <ul class="md-nav__list" data-md-scrollfix>
  427. <li class="md-nav__item">
  428. <a href="otaupdate.html" class="md-nav__link">
  429. OTA Updates
  430. </a>
  431. </li>
  432. <li class="md-nav__item">
  433. <a href="otabrowser.html" class="md-nav__link">
  434. Using Web Browser
  435. </a>
  436. </li>
  437. <li class="md-nav__item">
  438. <a href="otaserver.html" class="md-nav__link">
  439. Using Update Server
  440. </a>
  441. </li>
  442. </ul>
  443. </nav>
  444. </li>
  445. <li class="md-nav__item md-nav__item--nested">
  446. <input class="md-nav__toggle md-toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8" >
  447. <label class="md-nav__link" for="nav-8">
  448. Library APIs
  449. <span class="md-nav__icon md-icon"></span>
  450. </label>
  451. <nav class="md-nav" aria-label="Library APIs" data-md-level="1">
  452. <label class="md-nav__title" for="nav-8">
  453. <span class="md-nav__icon md-icon"></span>
  454. Library APIs
  455. </label>
  456. <ul class="md-nav__list" data-md-scrollfix>
  457. <li class="md-nav__item">
  458. <a href="api.html" class="md-nav__link">
  459. AutoConnect API
  460. </a>
  461. </li>
  462. <li class="md-nav__item">
  463. <a href="apiaux.html" class="md-nav__link">
  464. AutoConnectAux API
  465. </a>
  466. </li>
  467. <li class="md-nav__item">
  468. <a href="apiconfig.html" class="md-nav__link">
  469. AutoConnectConfig API
  470. </a>
  471. </li>
  472. <li class="md-nav__item">
  473. <a href="apielements.html" class="md-nav__link">
  474. AutoConnectElements API
  475. </a>
  476. </li>
  477. <li class="md-nav__item">
  478. <a href="apiupdate.html" class="md-nav__link">
  479. AutoConnectUpdate API
  480. </a>
  481. </li>
  482. <li class="md-nav__item">
  483. <a href="apiextra.html" class="md-nav__link">
  484. Something extra
  485. </a>
  486. </li>
  487. </ul>
  488. </nav>
  489. </li>
  490. <li class="md-nav__item md-nav__item--nested">
  491. <input class="md-nav__toggle md-toggle" data-md-toggle="nav-9" type="checkbox" id="nav-9" >
  492. <label class="md-nav__link" for="nav-9">
  493. Examples
  494. <span class="md-nav__icon md-icon"></span>
  495. </label>
  496. <nav class="md-nav" aria-label="Examples" data-md-level="1">
  497. <label class="md-nav__title" for="nav-9">
  498. <span class="md-nav__icon md-icon"></span>
  499. Examples
  500. </label>
  501. <ul class="md-nav__list" data-md-scrollfix>
  502. <li class="md-nav__item">
  503. <a href="howtoembed.html" class="md-nav__link">
  504. How to embed
  505. </a>
  506. </li>
  507. <li class="md-nav__item">
  508. <a href="datatips.html" class="md-nav__link">
  509. Tips for data conversion
  510. </a>
  511. </li>
  512. <li class="md-nav__item">
  513. <a href="menuize.html" class="md-nav__link">
  514. Attach the menus
  515. </a>
  516. </li>
  517. <li class="md-nav__item">
  518. <a href="wojson.html" class="md-nav__link">
  519. Custom Web pages w/o JSON
  520. </a>
  521. </li>
  522. </ul>
  523. </nav>
  524. </li>
  525. <li class="md-nav__item md-nav__item--nested">
  526. <input class="md-nav__toggle md-toggle" data-md-toggle="nav-10" type="checkbox" id="nav-10" >
  527. <label class="md-nav__link" for="nav-10">
  528. Appendix
  529. <span class="md-nav__icon md-icon"></span>
  530. </label>
  531. <nav class="md-nav" aria-label="Appendix" data-md-level="1">
  532. <label class="md-nav__title" for="nav-10">
  533. <span class="md-nav__icon md-icon"></span>
  534. Appendix
  535. </label>
  536. <ul class="md-nav__list" data-md-scrollfix>
  537. <li class="md-nav__item">
  538. <a href="lsbegin.html" class="md-nav__link">
  539. Inside AutoConnect::begin
  540. </a>
  541. </li>
  542. <li class="md-nav__item">
  543. <a href="credit.html" class="md-nav__link">
  544. Saved credentials access
  545. </a>
  546. </li>
  547. <li class="md-nav__item">
  548. <a href="acupload.html" class="md-nav__link">
  549. File upload handler
  550. </a>
  551. </li>
  552. <li class="md-nav__item">
  553. <a href="colorized.html" class="md-nav__link">
  554. Custom colorized
  555. </a>
  556. </li>
  557. <li class="md-nav__item">
  558. <a href="changelabel.html" class="md-nav__link">
  559. Change label text
  560. </a>
  561. </li>
  562. </ul>
  563. </nav>
  564. </li>
  565. <li class="md-nav__item">
  566. <a href="faq.html" class="md-nav__link">
  567. FAQ
  568. </a>
  569. </li>
  570. <li class="md-nav__item">
  571. <a href="changelog.html" class="md-nav__link">
  572. Change log
  573. </a>
  574. </li>
  575. <li class="md-nav__item">
  576. <a href="license.html" class="md-nav__link">
  577. License
  578. </a>
  579. </li>
  580. </ul>
  581. </nav>
  582. </div>
  583. </div>
  584. </div>
  585. <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
  586. <div class="md-sidebar__scrollwrap">
  587. <div class="md-sidebar__inner">
  588. <nav class="md-nav md-nav--secondary" aria-label="Table of contents">
  589. <label class="md-nav__title" for="__toc">
  590. <span class="md-nav__icon md-icon"></span>
  591. Table of contents
  592. </label>
  593. <ul class="md-nav__list" data-md-scrollfix>
  594. <li class="md-nav__item">
  595. <a href="#json-objects-elements-for-the-custom-web-page" class="md-nav__link">
  596. JSON objects &amp; elements for the custom Web page
  597. </a>
  598. <nav class="md-nav" aria-label="JSON objects &amp; elements for the custom Web page">
  599. <ul class="md-nav__list">
  600. <li class="md-nav__item">
  601. <a href="#json-document-structure-for-autoconnectaux" class="md-nav__link">
  602. JSON document structure for AutoConnectAux
  603. </a>
  604. <nav class="md-nav" aria-label=" JSON document structure for AutoConnectAux">
  605. <ul class="md-nav__list">
  606. <li class="md-nav__item">
  607. <a href="#title" class="md-nav__link">
  608. title
  609. </a>
  610. </li>
  611. <li class="md-nav__item">
  612. <a href="#uri" class="md-nav__link">
  613. uri
  614. </a>
  615. </li>
  616. <li class="md-nav__item">
  617. <a href="#menu" class="md-nav__link">
  618. menu
  619. </a>
  620. </li>
  621. <li class="md-nav__item">
  622. <a href="#auth" class="md-nav__link">
  623. auth
  624. </a>
  625. </li>
  626. <li class="md-nav__item">
  627. <a href="#element" class="md-nav__link">
  628. element
  629. </a>
  630. </li>
  631. </ul>
  632. </nav>
  633. </li>
  634. <li class="md-nav__item">
  635. <a href="#multiple-custom-web-pages-declaration-in-json-document" class="md-nav__link">
  636. Multiple custom Web pages declaration in JSON document
  637. </a>
  638. </li>
  639. <li class="md-nav__item">
  640. <a href="#json-object-for-autoconnectelements" class="md-nav__link">
  641. JSON object for AutoConnectElements
  642. </a>
  643. <nav class="md-nav" aria-label=" JSON object for AutoConnectElements">
  644. <ul class="md-nav__list">
  645. <li class="md-nav__item">
  646. <a href="#name" class="md-nav__link">
  647. name
  648. </a>
  649. </li>
  650. <li class="md-nav__item">
  651. <a href="#type" class="md-nav__link">
  652. type
  653. </a>
  654. </li>
  655. <li class="md-nav__item">
  656. <a href="#posterior" class="md-nav__link">
  657. posterior
  658. </a>
  659. </li>
  660. <li class="md-nav__item">
  661. <a href="#key_according_to_type" class="md-nav__link">
  662. key_according_to_type
  663. </a>
  664. </li>
  665. <li class="md-nav__item">
  666. <a href="#acbutton" class="md-nav__link">
  667. ACButton
  668. </a>
  669. </li>
  670. <li class="md-nav__item">
  671. <a href="#accheckbox" class="md-nav__link">
  672. ACCheckbox
  673. </a>
  674. </li>
  675. <li class="md-nav__item">
  676. <a href="#acelement" class="md-nav__link">
  677. ACElement
  678. </a>
  679. </li>
  680. <li class="md-nav__item">
  681. <a href="#acfile" class="md-nav__link">
  682. ACFile
  683. </a>
  684. </li>
  685. <li class="md-nav__item">
  686. <a href="#acinput" class="md-nav__link">
  687. ACInput
  688. </a>
  689. </li>
  690. <li class="md-nav__item">
  691. <a href="#acradio" class="md-nav__link">
  692. ACRadio
  693. </a>
  694. </li>
  695. <li class="md-nav__item">
  696. <a href="#acselect" class="md-nav__link">
  697. ACSelect
  698. </a>
  699. </li>
  700. <li class="md-nav__item">
  701. <a href="#acstyle" class="md-nav__link">
  702. ACStyle
  703. </a>
  704. </li>
  705. <li class="md-nav__item">
  706. <a href="#acsubmit" class="md-nav__link">
  707. ACSubmit
  708. </a>
  709. </li>
  710. <li class="md-nav__item">
  711. <a href="#actext" class="md-nav__link">
  712. ACText
  713. </a>
  714. </li>
  715. </ul>
  716. </nav>
  717. </li>
  718. </ul>
  719. </nav>
  720. </li>
  721. <li class="md-nav__item">
  722. <a href="#loading-json-document" class="md-nav__link">
  723. Loading JSON document
  724. </a>
  725. <nav class="md-nav" aria-label="Loading JSON document">
  726. <ul class="md-nav__list">
  727. <li class="md-nav__item">
  728. <a href="#loading-to-autoconnect" class="md-nav__link">
  729. Loading to AutoConnect
  730. </a>
  731. </li>
  732. <li class="md-nav__item">
  733. <a href="#loading-from-the-streamed-file" class="md-nav__link">
  734. Loading from the streamed file
  735. </a>
  736. </li>
  737. <li class="md-nav__item">
  738. <a href="#adjust-the-json-document-buffer-size" class="md-nav__link">
  739. Adjust the JSON document buffer size
  740. </a>
  741. <nav class="md-nav" aria-label=" Adjust the JSON document buffer size">
  742. <ul class="md-nav__list">
  743. <li class="md-nav__item">
  744. <a href="#autoconnect_jsonbuffer_size" class="md-nav__link">
  745. AUTOCONNECT_JSONBUFFER_SIZE
  746. </a>
  747. </li>
  748. <li class="md-nav__item">
  749. <a href="#autoconnect_jsondocument_size" class="md-nav__link">
  750. AUTOCONNECT_JSONDOCUMENT_SIZE
  751. </a>
  752. </li>
  753. <li class="md-nav__item">
  754. <a href="#autoconnect_jsonpsram_size" class="md-nav__link">
  755. AUTOCONNECT_JSONPSRAM_SIZE
  756. </a>
  757. </li>
  758. </ul>
  759. </nav>
  760. </li>
  761. </ul>
  762. </nav>
  763. </li>
  764. <li class="md-nav__item">
  765. <a href="#saving-json-document" class="md-nav__link">
  766. Saving JSON document
  767. </a>
  768. </li>
  769. </ul>
  770. </nav>
  771. </div>
  772. </div>
  773. </div>
  774. <div class="md-content">
  775. <article class="md-content__inner md-typeset">
  776. <h1>Custom Web pages with JSON</h1>
  777. <p>You can embed custom Web pages written in <a href="https://www.json.org/index.html"><strong>JSON</strong></a> into AutoConnect without AutoConnectAux &amp; AutoConnectElements declaration. Custom Web page declaration by JSON can embed in the Sketch as a fixed string or can store in the external file such as SPIFFS for stream loading. Also, you can also load and save AutoConnectElements objects individually.<sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup></p>
  778. <p>By providing the following JSON document to AutoConnect, you can include the custom Web page like the below:</p>
  779. <div style="float:left;width:50%;height:470px;overflow:auto"><img src="images/ac_json.png"></div>
  780. <p><img style="margin-left:30px;width:40%;height:470px;" src="images/ac_mqtt_setting.png"></p>
  781. <p>A JSON document for AutoConnect can contain the custom Web page multiple. You can further reduce the Sketch process by loading multiple pages of JSON document at once.</p>
  782. <div class="admonition caution">
  783. <p class="admonition-title">Adopt ArduinoJson v5 or v6</p>
  784. <p>To handle AutoConnectAux and AutoConnectElements written in JSON, you need to install the ArduinoJson library. You can adopt either <a href="https://arduinojson.org/v5/doc/installation/">version 5</a> or <a href="https://arduinojson.org/v6/doc/installation/">version 6</a> for the ArduinoJson. AutoConnect supports both versions.</p>
  785. </div>
  786. <h2 id="json-objects-elements-for-the-custom-web-page">JSON objects &amp; elements for the custom Web page<a class="headerlink" href="#json-objects-elements-for-the-custom-web-page" title="Permanent link">&para;</a></h2>
  787. <h3 id="json-document-structure-for-autoconnectaux"><i class="fa fa-caret-right"></i> JSON document structure for AutoConnectAux<a class="headerlink" href="#json-document-structure-for-autoconnectaux" title="Permanent link">&para;</a></h3>
  788. <p>AutoConnectAux will configure custom Web pages with JSON objects. The elements that make up the object are as follows:</p>
  789. <div class="highlight" style="background: #272822"><pre style="line-height: 125%; margin: 0;"><span></span><code><span style="color: #f8f8f2">{</span>
  790. <span style="color: #e6db74">&quot;title&quot;</span> <span style="color: #f92672">:</span> <span style="color: #a6e22e">title</span><span style="color: #f8f8f2">,</span>
  791. <span style="color: #e6db74">&quot;uri&quot;</span> <span style="color: #f92672">:</span> <span style="color: #a6e22e">uri</span><span style="color: #f8f8f2">,</span>
  792. <span style="color: #e6db74">&quot;menu&quot;</span> <span style="color: #f92672">:</span> <span style="color: #66d9ef">true</span> <span style="color: #f92672">|</span> <span style="color: #66d9ef">false</span><span style="color: #f8f8f2">,</span>
  793. <span style="color: #e6db74">&quot;auth&quot;</span><span style="color: #f92672">:</span> <span style="color: #a6e22e">authentication</span><span style="color: #f8f8f2">,</span>
  794. <span style="color: #e6db74">&quot;element&quot;</span> <span style="color: #f92672">:</span> <span style="color: #a6e22e">element_array</span>
  795. <span style="color: #f8f8f2">}</span>
  796. </code></pre></div>
  797. <h4 id="title"><i class="fa fa-key"></i> <strong>title</strong><a class="headerlink" href="#title" title="Permanent link">&para;</a></h4>
  798. <dl>
  799. <dd>A title of the custom Web page. This is string value and specifies the <em>title</em> will be displayed in the AutoConnection menu.</dd>
  800. </dl>
  801. <h4 id="uri"><i class="fa fa-key"></i> <strong>uri</strong><a class="headerlink" href="#uri" title="Permanent link">&para;</a></h4>
  802. <dl>
  803. <dd>String of URI path that specifies where to place the custom Web page. It needs to be a location from the root path including '<strong>/</strong>'.</dd>
  804. </dl>
  805. <h4 id="menu"><i class="fa fa-key"></i> <strong>menu</strong><a class="headerlink" href="#menu" title="Permanent link">&para;</a></h4>
  806. <dl>
  807. <dd>This is a Boolean value indicating whether to include the custom Web page in the AutoConnect menu. If the page only responds to another page and you want to prevent the direct use from the menu, you can exclude from the AutoConnect menu. If this key is false, it will not appear in the menu.</dd>
  808. </dl>
  809. <h4 id="auth"><i class="fa fa-key"></i> <strong>auth</strong><a class="headerlink" href="#auth" title="Permanent link">&para;</a></h4>
  810. <dl>
  811. <dd>It allows that this page requires authentication. An <em>authentication</em> specifies the following string that represents the authentication scheme.</dd>
  812. <dd>
  813. <ul>
  814. <li><strong>NONE</strong>: No authentication. This is default.</li>
  815. </ul>
  816. </dd>
  817. <dd>
  818. <ul>
  819. <li><strong>BASIC</strong>: Apply Basic scheme.</li>
  820. </ul>
  821. </dd>
  822. <dd>
  823. <ul>
  824. <li><strong>DIGEST</strong>: Apply Digest scheme.</li>
  825. </ul>
  826. </dd>
  827. </dl>
  828. <h4 id="element"><i class="fa fa-key"></i> <strong>element</strong><a class="headerlink" href="#element" title="Permanent link">&para;</a></h4>
  829. <dl>
  830. <dd>Describe an array of JSON objects as <em>element_array</em>. It is a JSON object array of the <a href="#json-object-for-autoconnectelements">AutoConnectElements</a> that make up the custom Web page.</dd>
  831. </dl>
  832. <div class="admonition note">
  833. <p class="admonition-title">Order of elements on a custom Web page</p>
  834. <p>The order in which AutoConnectElements are placed on a custom Web page is the order in the JSON document.</p>
  835. </div>
  836. <h3 id="multiple-custom-web-pages-declaration-in-json-document"><i class="fa fa-copy"></i> Multiple custom Web pages declaration in JSON document<a class="headerlink" href="#multiple-custom-web-pages-declaration-in-json-document" title="Permanent link">&para;</a></h3>
  837. <p>You can put declarations of multiple custom Web pages in one JSON document. In that case, declare an array of each custom Web page with JSON. The following JSON document contains three custom Web pages:</p>
  838. <div class="highlight" style="background: #272822"><pre style="line-height: 125%; margin: 0;"><span></span><code><span style="color: #f8f8f2">[</span>
  839. <span style="color: #f8f8f2">{</span>
  840. <span style="color: #f92672">&quot;title&quot;</span> <span style="color: #f8f8f2">:</span> <span style="color: #e6db74">&quot;Page 1 title&quot;</span><span style="color: #f8f8f2">,</span>
  841. <span style="color: #f92672">&quot;uri&quot;</span> <span style="color: #f8f8f2">:</span> <span style="color: #e6db74">&quot;/page1&quot;</span><span style="color: #f8f8f2">,</span>
  842. <span style="color: #f92672">&quot;menu&quot;</span> <span style="color: #f8f8f2">:</span> <span style="color: #66d9ef">true</span><span style="color: #f8f8f2">,</span>
  843. <span style="color: #f92672">&quot;element&quot;</span> <span style="color: #f8f8f2">:</span> <span style="color: #f8f8f2">[</span>
  844. <span style="color: #f8f8f2">{</span>
  845. <span style="color: #f92672">&quot;name&quot;</span> <span style="color: #f8f8f2">:</span> <span style="color: #e6db74">&quot;caption&quot;</span><span style="color: #f8f8f2">,</span>
  846. <span style="color: #f92672">&quot;type&quot;</span> <span style="color: #f8f8f2">:</span> <span style="color: #e6db74">&quot;ACText&quot;</span><span style="color: #f8f8f2">,</span>
  847. <span style="color: #f92672">&quot;value&quot;</span> <span style="color: #f8f8f2">:</span> <span style="color: #e6db74">&quot;hello, world&quot;</span>
  848. <span style="color: #f8f8f2">},</span>
  849. <span style="color: #f8f8f2">{</span>
  850. <span style="color: #f92672">&quot;name&quot;</span> <span style="color: #f8f8f2">:</span> <span style="color: #e6db74">&quot;send&quot;</span><span style="color: #f8f8f2">,</span>
  851. <span style="color: #f92672">&quot;type&quot;</span> <span style="color: #f8f8f2">:</span> <span style="color: #e6db74">&quot;ACSubmit&quot;</span><span style="color: #f8f8f2">,</span>
  852. <span style="color: #f92672">&quot;uri&quot;</span> <span style="color: #f8f8f2">:</span> <span style="color: #e6db74">&quot;/page2&quot;</span>
  853. <span style="color: #f8f8f2">}</span>
  854. <span style="color: #f8f8f2">]</span>
  855. <span style="color: #f8f8f2">},</span>
  856. <span style="color: #f8f8f2">{</span>
  857. <span style="color: #f92672">&quot;title&quot;</span> <span style="color: #f8f8f2">:</span> <span style="color: #e6db74">&quot;Page 1 title&quot;</span><span style="color: #f8f8f2">,</span>
  858. <span style="color: #f92672">&quot;uri&quot;</span> <span style="color: #f8f8f2">:</span> <span style="color: #e6db74">&quot;/page2&quot;</span><span style="color: #f8f8f2">,</span>
  859. <span style="color: #f92672">&quot;menu&quot;</span> <span style="color: #f8f8f2">:</span> <span style="color: #66d9ef">false</span><span style="color: #f8f8f2">,</span>
  860. <span style="color: #f92672">&quot;element&quot;</span> <span style="color: #f8f8f2">:</span> <span style="color: #f8f8f2">[</span>
  861. <span style="color: #f8f8f2">{</span>
  862. <span style="color: #f92672">&quot;name&quot;</span> <span style="color: #f8f8f2">:</span> <span style="color: #e6db74">&quot;responds&quot;</span><span style="color: #f8f8f2">,</span>
  863. <span style="color: #f92672">&quot;type&quot;</span> <span style="color: #f8f8f2">:</span> <span style="color: #e6db74">&quot;ACText&quot;</span><span style="color: #f8f8f2">,</span>
  864. <span style="color: #f92672">&quot;value&quot;</span> <span style="color: #f8f8f2">:</span> <span style="color: #e6db74">&quot;Good day&quot;</span>
  865. <span style="color: #f8f8f2">},</span>
  866. <span style="color: #f8f8f2">{</span>
  867. <span style="color: #f92672">&quot;name&quot;</span> <span style="color: #f8f8f2">:</span> <span style="color: #e6db74">&quot;send&quot;</span><span style="color: #f8f8f2">,</span>
  868. <span style="color: #f92672">&quot;type&quot;</span> <span style="color: #f8f8f2">:</span> <span style="color: #e6db74">&quot;ACSubmit&quot;</span><span style="color: #f8f8f2">,</span>
  869. <span style="color: #f92672">&quot;uri&quot;</span> <span style="color: #f8f8f2">:</span> <span style="color: #e6db74">&quot;/page3&quot;</span>
  870. <span style="color: #f8f8f2">}</span>
  871. <span style="color: #f8f8f2">]</span>
  872. <span style="color: #f8f8f2">},</span>
  873. <span style="color: #f8f8f2">{</span>
  874. <span style="color: #f92672">&quot;title&quot;</span> <span style="color: #f8f8f2">:</span> <span style="color: #e6db74">&quot;Page 3 title&quot;</span><span style="color: #f8f8f2">,</span>
  875. <span style="color: #f92672">&quot;uri&quot;</span> <span style="color: #f8f8f2">:</span> <span style="color: #e6db74">&quot;/page3&quot;</span><span style="color: #f8f8f2">,</span>
  876. <span style="color: #f92672">&quot;menu&quot;</span> <span style="color: #f8f8f2">:</span> <span style="color: #66d9ef">true</span><span style="color: #f8f8f2">,</span>
  877. <span style="color: #f92672">&quot;element&quot;</span> <span style="color: #f8f8f2">:</span> <span style="color: #f8f8f2">[</span>
  878. <span style="color: #f8f8f2">{</span>
  879. <span style="color: #f92672">&quot;name&quot;</span> <span style="color: #f8f8f2">:</span> <span style="color: #e6db74">&quot;responds&quot;</span><span style="color: #f8f8f2">,</span>
  880. <span style="color: #f92672">&quot;type&quot;</span> <span style="color: #f8f8f2">:</span> <span style="color: #e6db74">&quot;ACText&quot;</span><span style="color: #f8f8f2">,</span>
  881. <span style="color: #f92672">&quot;value&quot;</span> <span style="color: #f8f8f2">:</span> <span style="color: #e6db74">&quot;bye&quot;</span>
  882. <span style="color: #f8f8f2">}</span>
  883. <span style="color: #f8f8f2">]</span>
  884. <span style="color: #f8f8f2">}</span>
  885. <span style="color: #f8f8f2">]</span>
  886. </code></pre></div>
  887. <p>The above custom Web page definitions can be loaded in a batch using the <a href="api.html#load">AutoConnect::load</a> function.</p>
  888. <h3 id="json-object-for-autoconnectelements"><i class="fa fa-caret-right"></i> JSON object for AutoConnectElements<a class="headerlink" href="#json-object-for-autoconnectelements" title="Permanent link">&para;</a></h3>
  889. <p>JSON description for AutoConnectElements describes as an array in the <em>element</em> with arguments of <a href="acelements.html#constructor">each constructor</a>.</p>
  890. <div class="highlight" style="background: #272822"><pre style="line-height: 125%; margin: 0;"><span></span><code><span style="color: #f8f8f2">{</span>
  891. <span style="color: #e6db74">&quot;name&quot;</span> <span style="color: #f92672">:</span> <span style="color: #a6e22e">name</span><span style="color: #f8f8f2">,</span>
  892. <span style="color: #e6db74">&quot;type&quot;</span> <span style="color: #f92672">:</span> <span style="color: #a6e22e">type</span><span style="color: #f8f8f2">,</span>
  893. <span style="color: #e6db74">&quot;posterior&quot;</span> <span style="color: #f92672">:</span> <span style="color: #a6e22e">posterior</span><span style="color: #f8f8f2">,</span>
  894. <span style="color: #a6e22e">key_according_to_type</span> <span style="color: #f92672">:</span> <span style="color: #a6e22e">the_value</span> <span style="color: #f92672">|</span> <span style="color: #a6e22e">array_of_value</span><span style="color: #f8f8f2">,</span>
  895. <span style="color: #f8f8f2">[</span> <span style="color: #a6e22e">key_according_to_type</span> <span style="color: #f92672">:</span> <span style="color: #a6e22e">the_value</span> <span style="color: #f92672">|</span> <span style="color: #a6e22e">array_of_value</span> <span style="color: #f8f8f2">]</span>
  896. <span style="color: #f8f8f2">}</span>
  897. </code></pre></div>
  898. <h4 id="name"><i class="fa fa-key"></i> <strong>name</strong><a class="headerlink" href="#name" title="Permanent link">&para;</a></h4>
  899. <dl>
  900. <dd>A string of the name for the element.</dd>
  901. </dl>
  902. <h4 id="type"><i class="fa fa-key"></i> <strong>type</strong><a class="headerlink" href="#type" title="Permanent link">&para;</a></h4>
  903. <dl>
  904. <dd>A string of the type for the element. For this type, specify the following string corresponding to each element.</dd>
  905. <dd>
  906. <ul>
  907. <li>AutoConnectButton: <a href="#acbutton"><strong>ACButton</strong></a></li>
  908. </ul>
  909. </dd>
  910. <dd>
  911. <ul>
  912. <li>AutoConnectCheckbox: <a href="#accheckbox"><strong>ACCheckbox</strong> </a></li>
  913. </ul>
  914. </dd>
  915. <dd>
  916. <ul>
  917. <li>AutoConnectElement: <a href="#acelement"><strong>ACElement</strong></a></li>
  918. </ul>
  919. </dd>
  920. <dd>
  921. <ul>
  922. <li>AutoConnectFile: <a href="#acfile"><strong>ACFile</strong></a></li>
  923. </ul>
  924. </dd>
  925. <dd>
  926. <ul>
  927. <li>AutoConnectInput: <a href="#acinput"><strong>ACInput</strong></a></li>
  928. </ul>
  929. </dd>
  930. <dd>
  931. <ul>
  932. <li>AutoConnectRadio: <a href="#acradio"><strong>ACRadio</strong></a></li>
  933. </ul>
  934. </dd>
  935. <dd>
  936. <ul>
  937. <li>AutoConnectSelect: <a href="#acselect"><strong>ACSelect</strong></a></li>
  938. </ul>
  939. </dd>
  940. <dd>
  941. <ul>
  942. <li>AutoConnectStyle: <a href="#acstyle"><strong>ACStyle</strong></a></li>
  943. </ul>
  944. </dd>
  945. <dd>
  946. <ul>
  947. <li>AutoConnectSubmit: <a href="#acsubmit"><strong>ACSubmit</strong></a></li>
  948. </ul>
  949. </dd>
  950. <dd>
  951. <ul>
  952. <li>AutoConnectText: <a href="#actext"><strong>ACText</strong></a></li>
  953. </ul>
  954. </dd>
  955. </dl>
  956. <h4 id="posterior"><i class="fa fa-key"></i> posterior<a class="headerlink" href="#posterior" title="Permanent link">&para;</a></h4>
  957. <dl>
  958. <dt>Specifies a tag to add behind the HTML code generated from the element. Its purpose is to place elements on the custom Web page as intended by the user sketch. You can use the <strong>posterior</strong> key with the following values to arrange vertically or horizontal when the elements do not have the intended position on the custom Web Page specifying the following:</dt>
  959. <dd>
  960. <ul>
  961. <li><strong>none</strong> : No generate additional tags.</li>
  962. </ul>
  963. </dd>
  964. <dd>
  965. <ul>
  966. <li><strong>br</strong> : Add a <code>&lt;br&gt;</code> tag to the end of the element.</li>
  967. </ul>
  968. </dd>
  969. <dd>
  970. <ul>
  971. <li><strong>par</strong> : Include the element in the <code>&lt;p&gt; ~ &lt;/p&gt;</code> tag.</li>
  972. </ul>
  973. </dd>
  974. </dl>
  975. <h4 id="key_according_to_type"><i class="fa fa-key"></i> <strong><i>key_according_to_type</i></strong><a class="headerlink" href="#key_according_to_type" title="Permanent link">&para;</a></h4>
  976. <p>This is different for each AutoConnectElements, and the key that can be specified by the type of AutoConnectElements is determined.</p>
  977. <h4 id="acbutton"><i class="fa fa-caret-right"></i> ACButton<a class="headerlink" href="#acbutton" title="Permanent link">&para;</a></h4>
  978. <dl>
  979. <dd>
  980. <ul>
  981. <li><strong>value</strong> : Specifies the button label. This value also applies to the <code>value</code> attribute of an HTML <code>button</code> tag.</li>
  982. </ul>
  983. </dd>
  984. <dd>
  985. <ul>
  986. <li><strong>action</strong> : Specifies an action to be fire on a mouse click on the button. It is mostly used with a JavaScript to activate a script, or it directly describes a JavaScript.</li>
  987. </ul>
  988. </dd>
  989. </dl>
  990. <h4 id="accheckbox"><i class="fa fa-caret-right"></i> ACCheckbox<a class="headerlink" href="#accheckbox" title="Permanent link">&para;</a></h4>
  991. <dl>
  992. <dd>
  993. <ul>
  994. <li><strong>value</strong> : Specifies the value to be supplied to the checkbox. It will be packed in the query string as <code>name=value</code> when the checkbox is ticked.</li>
  995. </ul>
  996. </dd>
  997. <dd>
  998. <ul>
  999. <li><strong>label</strong> : Specifies a label of the checkbox. Its placement is always to the right of the checkbox.</li>
  1000. </ul>
  1001. </dd>
  1002. <dd>
  1003. <ul>
  1004. <li><strong>checked</strong> : Specifies checking status as a <strong>boolean</strong> value. The value of the checked checkbox element is packed in the query string and sent.</li>
  1005. </ul>
  1006. </dd>
  1007. </dl>
  1008. <h4 id="acelement"><i class="fa fa-caret-right"></i> ACElement<a class="headerlink" href="#acelement" title="Permanent link">&para;</a></h4>
  1009. <dl>
  1010. <dd>
  1011. <ul>
  1012. <li><strong>value</strong> : Specifies the source code of generating HTML. The value is native HTML code and is output as HTML as it is.</li>
  1013. </ul>
  1014. </dd>
  1015. </dl>
  1016. <h4 id="acfile"><i class="fa fa-caret-right"></i> ACFile<a class="headerlink" href="#acfile" title="Permanent link">&para;</a></h4>
  1017. <dl>
  1018. <dd>
  1019. <ul>
  1020. <li><strong>value</strong> : The file name of the upload file will be stored. The <code>value</code> is read-only and will be ignored if specified.</li>
  1021. </ul>
  1022. </dd>
  1023. <dd>
  1024. <ul>
  1025. <li><strong>label</strong> : Specifies a label of the file selection box. Its placement is always to the left of the file selection box.</li>
  1026. </ul>
  1027. </dd>
  1028. <dd>
  1029. <ul>
  1030. <li>
  1031. <dl>
  1032. <dt><strong>store</strong> : Specifies the destination to save the uploaded file. Its value accepts one of the following:</dt>
  1033. <dd>
  1034. <ul>
  1035. <li><strong>fs</strong> : Save as the SPIFFS file in flash of ESP8266/ESP32 module. If the valid file system of the ESP8266 module incorporating the Sketch is <a href="https://arduino-esp8266.readthedocs.io/en/latest/filesystem.html#spiffs-and-littlefs">LittleFS</a>, AutoConnect assumes the file system to be LittleFS. However, it does not sense the actual file system, so If the Sketch implementation does not match the file system on the ESP8266 depends, a file writing error will occur.</li>
  1036. </ul>
  1037. </dd>
  1038. <dd>
  1039. <ul>
  1040. <li><strong>sd</strong> : Save to an external SD device connected to ESP8266/ESP32 module.</li>
  1041. </ul>
  1042. </dd>
  1043. <dd>
  1044. <ul>
  1045. <li><strong>extern</strong> : Pass the content of the uploaded file to the uploader which is declared by the Sketch individually. Its uploader must inherit <a href="acupload.html#to-upload-to-a-device-other-than-flash-or-sd"><strong>AutoConnectUploadHandler</strong></a> class and implements <em>_open</em>, <em>_write</em> and <em>_close</em> function.</li>
  1046. </ul>
  1047. </dd>
  1048. </dl>
  1049. </li>
  1050. </ul>
  1051. <div class="admonition note">
  1052. <p class="admonition-title">A valid filesystem of ESP8266 on board flash</p>
  1053. <p>AutoConnect has assumed <a href="https://arduino-esp8266.readthedocs.io/en/latest/filesystem.html#spiffs-and-littlefs"><strong>LittleFS</strong></a> as a valid file system since v1.2.0 enhancement. On the other hand, the ESP8266 arduino core has supported LittleFS officially since a release 2.7.0.<br>
  1054. LittleFS support in AutoConnect relies on the FS instance declared by the arduino core used at compile-time per project, and its FS instance will acquire by either the SPIFFS class or the LittleFS class. That is, you need to choose which file system will be available in the actual Sketch and make consistent it with AutoConnect assumed file system. So, you can choose which one uses the file systems per project via adjustment the <strong>AC_USE_SPIFFS</strong> macro enable or disable. AutoConnect determines the available file system by the <strong>AC_USE_SPIFFS</strong> macro which defined in <a href="api.html#defined-macros">AutoConnectDefs.h</a> header file. </p>
  1055. </div>
  1056. </dd>
  1057. </dl>
  1058. <h4 id="acinput"><i class="fa fa-caret-right"></i> ACInput<a class="headerlink" href="#acinput" title="Permanent link">&para;</a></h4>
  1059. <dl>
  1060. <dd>
  1061. <ul>
  1062. <li><strong>value</strong> : Specifies the initial text string of the input box. If this value is omitted, placeholder is displayed as the initial string.</li>
  1063. </ul>
  1064. </dd>
  1065. <dd>
  1066. <ul>
  1067. <li><strong>label</strong> : Specifies a label of the input box. Its placement is always to the left of the input box.</li>
  1068. </ul>
  1069. </dd>
  1070. <dd>
  1071. <ul>
  1072. <li><strong>placeholder</strong> : Specifies short hint of the input box.</li>
  1073. </ul>
  1074. </dd>
  1075. <dd>
  1076. <ul>
  1077. <li>
  1078. <dl>
  1079. <dt><strong>apply</strong> : Specifies the type of input that the text box accepts. Its value accepts one of the following:</dt>
  1080. <dd>
  1081. <ul>
  1082. <li><strong>text</strong> : A text.</li>
  1083. </ul>
  1084. </dd>
  1085. <dd>
  1086. <ul>
  1087. <li><strong>password</strong> : Password input field. The text is obscured so that it cannot be read, usually by replacing each character with a symbol such as the asterisk ("<code>*</code>") or a dot ("<code>•</code>").</li>
  1088. </ul>
  1089. </dd>
  1090. <dd>
  1091. <ul>
  1092. <li><strong>number</strong> : A field let the user enter number characters only.</li>
  1093. </ul>
  1094. </dd>
  1095. </dl>
  1096. </li>
  1097. </ul>
  1098. </dd>
  1099. </dl>
  1100. <h4 id="acradio"><i class="fa fa-caret-right"></i> ACRadio<a class="headerlink" href="#acradio" title="Permanent link">&para;</a></h4>
  1101. <dl>
  1102. <dd>
  1103. <ul>
  1104. <li><strong>value</strong> : Specifies the collection of radio buttons as an array element.</li>
  1105. </ul>
  1106. </dd>
  1107. <dd>
  1108. <ul>
  1109. <li><strong>label</strong> : Specifies a label of the collection of radio buttons, not for each button. The arrangement will be the top or left side according to the <code>arrange</code>.</li>
  1110. </ul>
  1111. </dd>
  1112. <dd>
  1113. <ul>
  1114. <li>
  1115. <dl>
  1116. <dt><strong>arrange</strong> : Specifies the orientation of the radio buttons. Its value accepts one of the following:</dt>
  1117. <dd>
  1118. <ul>
  1119. <li><strong>horizontal</strong> : Horizontal arrangement.</li>
  1120. </ul>
  1121. </dd>
  1122. <dd>
  1123. <ul>
  1124. <li><strong>vertical</strong> : Vertical arrangement.</li>
  1125. </ul>
  1126. </dd>
  1127. </dl>
  1128. </li>
  1129. </ul>
  1130. </dd>
  1131. <dd>
  1132. <ul>
  1133. <li><strong>checked</strong> : Specifies the index number (1-based) of the radio buttons collection to be checked.</li>
  1134. </ul>
  1135. </dd>
  1136. </dl>
  1137. <h4 id="acselect"><i class="fa fa-caret-right"></i> ACSelect<a class="headerlink" href="#acselect" title="Permanent link">&para;</a></h4>
  1138. <dl>
  1139. <dd>
  1140. <ul>
  1141. <li><strong>label</strong> : Specifies a label of the drop-down list. Its placement is always to the left of the drop-down list.</li>
  1142. </ul>
  1143. </dd>
  1144. <dd>
  1145. <ul>
  1146. <li><strong>option</strong> : Specifies the initial value collection of the drop-down list as an array element.</li>
  1147. </ul>
  1148. </dd>
  1149. </dl>
  1150. <h4 id="acstyle"><i class="fa fa-caret-right"></i> ACStyle<a class="headerlink" href="#acstyle" title="Permanent link">&para;</a></h4>
  1151. <dl>
  1152. <dd>
  1153. <ul>
  1154. <li><strong>value</strong> : Specifies the custom CSS code.</li>
  1155. </ul>
  1156. </dd>
  1157. </dl>
  1158. <h4 id="acsubmit"><i class="fa fa-caret-right"></i> ACSubmit<a class="headerlink" href="#acsubmit" title="Permanent link">&para;</a></h4>
  1159. <dl>
  1160. <dd>
  1161. <ul>
  1162. <li><strong>value</strong> : Specifies a label of the submit button.</li>
  1163. </ul>
  1164. </dd>
  1165. <dd>
  1166. <ul>
  1167. <li><strong>uri</strong> : Specifies the URI to send form data when the button is clicked.</li>
  1168. </ul>
  1169. </dd>
  1170. </dl>
  1171. <h4 id="actext"><i class="fa fa-caret-right"></i> ACText<a class="headerlink" href="#actext" title="Permanent link">&para;</a></h4>
  1172. <dl>
  1173. <dd>
  1174. <ul>
  1175. <li><strong>value</strong> : Specifies a content and also can contain the native HTML code, but remember that your written code is enclosed by the div tag.</li>
  1176. </ul>
  1177. </dd>
  1178. <dd>
  1179. <ul>
  1180. <li><strong>style</strong> : Specifies the qualification style to give to the content and can use the style attribute format as it is.</li>
  1181. </ul>
  1182. </dd>
  1183. <dd>
  1184. <ul>
  1185. <li><strong>format</strong> : Specifies how to interpret the value. It specifies the conversion format when outputting values. The format string conforms to the C-style printf library functions, but depends on the espressif sdk implementation. The conversion specification is valid only for <strong>%s</strong> format. (Left and Right justification, width are also valid.)</li>
  1186. </ul>
  1187. </dd>
  1188. </dl>
  1189. <div class="admonition caution">
  1190. <p class="admonition-title">AutoConnect JSON parsing process is not perfect</p>
  1191. <p>It is based on analysis by ArduinoJson, but the semantic analysis is simplified to save memory. Consequently, it is not an error that a custom Web page JSON document to have unnecessary keys. It will be ignored.</p>
  1192. </div>
  1193. <h2 id="loading-json-document">Loading JSON document<a class="headerlink" href="#loading-json-document" title="Permanent link">&para;</a></h2>
  1194. <h3 id="loading-to-autoconnect"><i class="fa fa-caret-right"></i> Loading to AutoConnect<a class="headerlink" href="#loading-to-autoconnect" title="Permanent link">&para;</a></h3>
  1195. <p>There are two main ways to load the custom Web pages into AutoConnect.</p>
  1196. <ol>
  1197. <li>
  1198. <p>Load directly into AutoConnect</p>
  1199. <p>This way does not require an explicit declaration of AutoConnectAux objects with sketches and is also useful when importing the custom Web pages JSON document from an external file such as SPIFFS because the page definition and sketch coding structure can be separated.</p>
  1200. <p>Using the <a href="api.html#load">AutoCoonnect::load</a> function, AutoConnect dynamically generates the necessary AutoConnectAux objects internally based on the custom Web page definition of the imported JSON document content. In the Sketch, the generated AutoConnectAux object can be referenced using the <a href="api.html#aux">AutoConnect::aux</a> function. You can reach the AutoConnectElements you desired using the <a href="apiaux.html#getelement">AutoConnectAux::getElement</a> function of its AutoConnectAux.</p>
  1201. <p>In the following example, it loads in a batch a JSON document of custom Web pages stored in SPIFFS and accesses to the AutoConnectInput element.</p>
  1202. <div class="highlight" style="background: #272822"><pre style="line-height: 125%; margin: 0;"><span></span><code><span style="color: #f8f8f2">[</span>
  1203. <span style="color: #f8f8f2">{</span>
  1204. <span style="color: #e6db74">&quot;title&quot;</span><span style="color: #f92672">:</span> <span style="color: #e6db74">&quot;page1&quot;</span><span style="color: #f8f8f2">,</span>
  1205. <span style="color: #e6db74">&quot;uri&quot;</span><span style="color: #f92672">:</span> <span style="color: #e6db74">&quot;/page1&quot;</span><span style="color: #f8f8f2">,</span>
  1206. <span style="color: #e6db74">&quot;menu&quot;</span><span style="color: #f92672">:</span> <span style="color: #66d9ef">true</span><span style="color: #f8f8f2">,</span>
  1207. <span style="color: #e6db74">&quot;element&quot;</span><span style="color: #f92672">:</span> <span style="color: #f8f8f2">[</span>
  1208. <span style="color: #f8f8f2">{</span>
  1209. <span style="color: #e6db74">&quot;name&quot;</span><span style="color: #f92672">:</span> <span style="color: #e6db74">&quot;input1&quot;</span><span style="color: #f8f8f2">,</span>
  1210. <span style="color: #e6db74">&quot;type&quot;</span><span style="color: #f92672">:</span> <span style="color: #e6db74">&quot;ACInput&quot;</span>
  1211. <span style="color: #f8f8f2">}</span>
  1212. <span style="color: #f8f8f2">]</span>
  1213. <span style="color: #f8f8f2">},</span>
  1214. <span style="color: #f8f8f2">{</span>
  1215. <span style="color: #e6db74">&quot;title&quot;</span><span style="color: #f92672">:</span> <span style="color: #e6db74">&quot;page2&quot;</span><span style="color: #f8f8f2">,</span>
  1216. <span style="color: #e6db74">&quot;uri&quot;</span><span style="color: #f92672">:</span> <span style="color: #e6db74">&quot;/page2&quot;</span><span style="color: #f8f8f2">,</span>
  1217. <span style="color: #e6db74">&quot;menu&quot;</span><span style="color: #f92672">:</span> <span style="color: #66d9ef">true</span><span style="color: #f8f8f2">,</span>
  1218. <span style="color: #e6db74">&quot;element&quot;</span><span style="color: #f92672">:</span> <span style="color: #f8f8f2">[</span>
  1219. <span style="color: #f8f8f2">{</span>
  1220. <span style="color: #e6db74">&quot;name&quot;</span><span style="color: #f92672">:</span> <span style="color: #e6db74">&quot;input2&quot;</span><span style="color: #f8f8f2">,</span>
  1221. <span style="color: #e6db74">&quot;type&quot;</span><span style="color: #f92672">:</span> <span style="color: #e6db74">&quot;ACInput&quot;</span>
  1222. <span style="color: #f8f8f2">}</span>
  1223. <span style="color: #f8f8f2">]</span>
  1224. <span style="color: #f8f8f2">}</span>
  1225. <span style="color: #f8f8f2">]</span>
  1226. </code></pre></div>
  1227. <div class="highlight" style="background: #272822"><pre style="line-height: 125%; margin: 0;"><span></span><code><span style="color: #f8f8f2">AutoConnect</span> <span style="color: #f8f8f2">portal;</span>
  1228. <span style="color: #f8f8f2">File</span> <span style="color: #f8f8f2">page</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">SPIFFS.open(</span><span style="color: #e6db74">&quot;/custom_page.json&quot;</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">&quot;r&quot;</span><span style="color: #f8f8f2">);</span>
  1229. <span style="background-color: #49483e"><span style="color: #f8f8f2">portal.load(page);</span>
  1230. </span><span style="color: #f8f8f2">page.close();</span>
  1231. <span style="background-color: #49483e"><span style="color: #f8f8f2">AutoConnectAux</span><span style="color: #f92672">*</span> <span style="color: #f8f8f2">aux</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">portal.aux(</span><span style="color: #e6db74">&quot;/page1&quot;</span><span style="color: #f8f8f2">);</span>
  1232. </span><span style="background-color: #49483e"><span style="color: #f8f8f2">AutoConnectInput</span><span style="color: #f92672">&amp;</span> <span style="color: #f8f8f2">input1</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">aux</span><span style="color: #f92672">-&gt;</span><span style="color: #f8f8f2">getElement</span><span style="color: #f92672">&lt;</span><span style="color: #f8f8f2">AutoConnectInput</span><span style="color: #f92672">&gt;</span><span style="color: #f8f8f2">(</span><span style="color: #e6db74">&quot;input1&quot;</span><span style="color: #f8f8f2">);</span>
  1233. </span></code></pre></div>
  1234. </li>
  1235. <li>
  1236. <p>Load to AutoConnectAux and join to AutoConnect</p>
  1237. <p>This way declares AutoConnectAux in the Sketch and loads the custom Web pages JSON document there. It has an advantage for if you want to define each page of a custom Web page individually or allocate AutoConnectAux objects dynamically on the Sketch side.</p>
  1238. <p>After loading a JSON document using the <a href="apiaux.html#load">AutoConnectAux::load</a> function by each, integrate those into AutoConnect using the <a href="api.html#join">AutoConnect::join</a> function.</p>
  1239. <p>In the following example, you can see the difference between two sketches in a sketch modified using the AutoConnectAux::load.</p>
  1240. <p><div class="highlight" style="background: #272822"><pre style="line-height: 125%; margin: 0;"><span></span><code><span style="color: #f8f8f2">{</span>
  1241. <span style="color: #e6db74">&quot;title&quot;</span><span style="color: #f92672">:</span> <span style="color: #e6db74">&quot;page1&quot;</span><span style="color: #f8f8f2">,</span>
  1242. <span style="color: #e6db74">&quot;uri&quot;</span><span style="color: #f92672">:</span> <span style="color: #e6db74">&quot;/page1&quot;</span><span style="color: #f8f8f2">,</span>
  1243. <span style="color: #e6db74">&quot;menu&quot;</span><span style="color: #f92672">:</span> <span style="color: #66d9ef">true</span><span style="color: #f8f8f2">,</span>
  1244. <span style="color: #e6db74">&quot;element&quot;</span><span style="color: #f92672">:</span> <span style="color: #f8f8f2">[</span>
  1245. <span style="color: #f8f8f2">{</span>
  1246. <span style="color: #e6db74">&quot;name&quot;</span><span style="color: #f92672">:</span> <span style="color: #e6db74">&quot;input1&quot;</span><span style="color: #f8f8f2">,</span>
  1247. <span style="color: #e6db74">&quot;type&quot;</span><span style="color: #f92672">:</span> <span style="color: #e6db74">&quot;ACInput&quot;</span>
  1248. <span style="color: #f8f8f2">}</span>
  1249. <span style="color: #f8f8f2">]</span>
  1250. <span style="color: #f8f8f2">}</span>
  1251. </code></pre></div>
  1252. <div class="highlight" style="background: #272822"><pre style="line-height: 125%; margin: 0;"><span></span><code><span style="color: #f8f8f2">{</span>
  1253. <span style="color: #e6db74">&quot;title&quot;</span><span style="color: #f92672">:</span> <span style="color: #e6db74">&quot;page2&quot;</span><span style="color: #f8f8f2">,</span>
  1254. <span style="color: #e6db74">&quot;uri&quot;</span><span style="color: #f92672">:</span> <span style="color: #e6db74">&quot;/page2&quot;</span><span style="color: #f8f8f2">,</span>
  1255. <span style="color: #e6db74">&quot;menu&quot;</span><span style="color: #f92672">:</span> <span style="color: #66d9ef">true</span><span style="color: #f8f8f2">,</span>
  1256. <span style="color: #e6db74">&quot;element&quot;</span><span style="color: #f92672">:</span> <span style="color: #f8f8f2">[</span>
  1257. <span style="color: #f8f8f2">{</span>
  1258. <span style="color: #e6db74">&quot;name&quot;</span><span style="color: #f92672">:</span> <span style="color: #e6db74">&quot;input2&quot;</span><span style="color: #f8f8f2">,</span>
  1259. <span style="color: #e6db74">&quot;type&quot;</span><span style="color: #f92672">:</span> <span style="color: #e6db74">&quot;ACInput&quot;</span>
  1260. <span style="color: #f8f8f2">}</span>
  1261. <span style="color: #f8f8f2">]</span>
  1262. <span style="color: #f8f8f2">}</span>
  1263. </code></pre></div>
  1264. <div class="highlight" style="background: #272822"><pre style="line-height: 125%; margin: 0;"><span></span><code><span style="color: #f8f8f2">AutoConnect</span> <span style="color: #f8f8f2">portal;</span>
  1265. <span style="color: #f8f8f2">AutoConnectAux</span> <span style="color: #f8f8f2">page1;</span>
  1266. <span style="color: #f8f8f2">AutoConnectAux</span> <span style="color: #f8f8f2">page2;</span>
  1267. <span style="color: #f8f8f2">File</span> <span style="color: #f8f8f2">page</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">SPIFFS.open(</span><span style="color: #e6db74">&quot;/custom_page1.json&quot;</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">&quot;r&quot;</span><span style="color: #f8f8f2">);</span>
  1268. <span style="background-color: #49483e"><span style="color: #f8f8f2">page1.load(page);</span>
  1269. </span><span style="color: #f8f8f2">page.close();</span>
  1270. <span style="color: #f8f8f2">page</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">SPIFFS.open(</span><span style="color: #e6db74">&quot;/custom_page2.json&quot;</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">&quot;r&quot;</span><span style="color: #f8f8f2">);</span>
  1271. <span style="background-color: #49483e"><span style="color: #f8f8f2">page2.load(page);</span>
  1272. </span><span style="color: #f8f8f2">page.close();</span>
  1273. <span style="background-color: #49483e"><span style="color: #f8f8f2">portal.join(</span> <span style="color: #f8f8f2">{</span> <span style="color: #f8f8f2">page1,</span> <span style="color: #f8f8f2">page2</span> <span style="color: #f8f8f2">}</span> <span style="color: #f8f8f2">);</span>
  1274. </span><span style="color: #f8f8f2">AutoConnectInput</span><span style="color: #f92672">&amp;</span> <span style="color: #f8f8f2">input1</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">page1.getElement</span><span style="color: #f92672">&lt;</span><span style="color: #f8f8f2">AutoConnectInput</span><span style="color: #f92672">&gt;</span><span style="color: #f8f8f2">(</span><span style="color: #e6db74">&quot;input1&quot;</span><span style="color: #f8f8f2">);</span>
  1275. </code></pre></div></p>
  1276. </li>
  1277. </ol>
  1278. <h3 id="loading-from-the-streamed-file"><i class="fa fa-caret-right"></i> Loading from the streamed file<a class="headerlink" href="#loading-from-the-streamed-file" title="Permanent link">&para;</a></h3>
  1279. <p>AutoConnect supports loading of JSON document from the following instances:</p>
  1280. <ul>
  1281. <li>String</li>
  1282. <li>PROGMEM</li>
  1283. <li>Stream</li>
  1284. </ul>
  1285. <p>To load custom Web pages JSON document into AutoConnect, use the <a href="api.html#load">load</a> function of the AutoConnect class. Its JSON document can read must be completed as a description interpretable by the ArduinoJson library. It cannot import custom Web pages if there are syntax errors for the JSON. If you can not see the custom Web page prepared by JSON, you can check the syntax with <a href="https://arduinojson.org/v5/assistant/">ArduinoJson Assistant</a>. It is useful for pre-checking.</p>
  1286. <p><div class="highlight" style="background: #272822"><pre style="line-height: 125%; margin: 0;"><span></span><code><span style="color: #66d9ef">bool</span> <span style="color: #f8f8f2">AutoConnect</span><span style="color: #f92672">::</span><span style="color: #f8f8f2">load(</span><span style="color: #66d9ef">const</span> <span style="color: #f8f8f2">String</span><span style="color: #f92672">&amp;</span> <span style="color: #f8f8f2">aux)</span>
  1287. </code></pre></div>
  1288. <div class="highlight" style="background: #272822"><pre style="line-height: 125%; margin: 0;"><span></span><code><span style="color: #66d9ef">bool</span> <span style="color: #f8f8f2">AutoConnect</span><span style="color: #f92672">::</span><span style="color: #f8f8f2">load(</span><span style="color: #66d9ef">const</span> <span style="color: #f8f8f2">__FlashStringHelper</span><span style="color: #f92672">*</span> <span style="color: #f8f8f2">aux)</span>
  1289. </code></pre></div>
  1290. <div class="highlight" style="background: #272822"><pre style="line-height: 125%; margin: 0;"><span></span><code><span style="color: #66d9ef">bool</span> <span style="color: #f8f8f2">AutoConnect</span><span style="color: #f92672">::</span><span style="color: #f8f8f2">load(Stream</span><span style="color: #f92672">&amp;</span> <span style="color: #f8f8f2">aux)</span>
  1291. </code></pre></div>
  1292. An example of using each function is as follows.
  1293. <div class="highlight" style="background: #272822"><pre style="line-height: 125%; margin: 0;"><span></span><code><span style="color: #f8f8f2">AutoConnect</span> <span style="color: #f8f8f2">portal;</span>
  1294. <span style="color: #75715e">// Loading from String</span>
  1295. <span style="color: #66d9ef">const</span> <span style="color: #f8f8f2">String</span> <span style="color: #f8f8f2">aux</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">String(</span><span style="color: #e6db74">&quot;{</span><span style="color: #ae81ff">\&quot;</span><span style="color: #e6db74">title</span><span style="color: #ae81ff">\&quot;</span><span style="color: #e6db74">:</span><span style="color: #ae81ff">\&quot;</span><span style="color: #e6db74">Page 1 title</span><span style="color: #ae81ff">\&quot;</span><span style="color: #e6db74">,</span><span style="color: #ae81ff">\&quot;</span><span style="color: #e6db74">uri</span><span style="color: #ae81ff">\&quot;</span><span style="color: #e6db74">:</span><span style="color: #ae81ff">\&quot;</span><span style="color: #e6db74">/page1</span><span style="color: #ae81ff">\&quot;</span><span style="color: #e6db74">,</span><span style="color: #ae81ff">\&quot;</span><span style="color: #e6db74">menu</span><span style="color: #ae81ff">\&quot;</span><span style="color: #e6db74">:true,</span><span style="color: #ae81ff">\&quot;</span><span style="color: #e6db74">element</span><span style="color: #ae81ff">\&quot;</span><span style="color: #e6db74">:[{</span><span style="color: #ae81ff">\&quot;</span><span style="color: #e6db74">name</span><span style="color: #ae81ff">\&quot;</span><span style="color: #e6db74">:</span><span style="color: #ae81ff">\&quot;</span><span style="color: #e6db74">caption</span><span style="color: #ae81ff">\&quot;</span><span style="color: #e6db74">,</span><span style="color: #ae81ff">\&quot;</span><span style="color: #e6db74">type</span><span style="color: #ae81ff">\&quot;</span><span style="color: #e6db74">:</span><span style="color: #ae81ff">\&quot;</span><span style="color: #e6db74">ACText</span><span style="color: #ae81ff">\&quot;</span><span style="color: #e6db74">,</span><span style="color: #ae81ff">\&quot;</span><span style="color: #e6db74">value</span><span style="color: #ae81ff">\&quot;</span><span style="color: #e6db74">:</span><span style="color: #ae81ff">\&quot;</span><span style="color: #e6db74">hello, world</span><span style="color: #ae81ff">\&quot;</span><span style="color: #e6db74">}]}&quot;</span><span style="color: #f8f8f2">);</span>
  1296. <span style="color: #f8f8f2">portal.load(aux);</span>
  1297. <span style="color: #75715e">// Loading from PROGMEM</span>
  1298. <span style="color: #66d9ef">const</span> <span style="color: #66d9ef">char</span> <span style="color: #f8f8f2">aux[]</span> <span style="color: #f8f8f2">PROGMEM</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">R&quot;raw(</span>
  1299. <span style="color: #e6db74">{</span>
  1300. <span style="color: #e6db74"> &quot;title&quot; : &quot;Page 1 title&quot;,</span>
  1301. <span style="color: #e6db74"> &quot;uri&quot; : &quot;/page1&quot;,</span>
  1302. <span style="color: #e6db74"> &quot;menu&quot; : true,</span>
  1303. <span style="color: #e6db74"> &quot;element&quot; : [</span>
  1304. <span style="color: #e6db74"> {</span>
  1305. <span style="color: #e6db74"> &quot;name&quot; : &quot;caption&quot;,</span>
  1306. <span style="color: #e6db74"> &quot;type&quot; : &quot;ACText&quot;,</span>
  1307. <span style="color: #e6db74"> &quot;value&quot; : &quot;hello, world&quot;</span>
  1308. <span style="color: #e6db74"> }</span>
  1309. <span style="color: #e6db74"> ]</span>
  1310. <span style="color: #e6db74">}</span>
  1311. <span style="color: #e6db74">)raw&quot;</span><span style="color: #f8f8f2">;</span>
  1312. <span style="color: #f8f8f2">portal.load(FPSTR(aux));</span>
  1313. <span style="color: #75715e">// Loading from Stream assumes &quot;aux.json&quot; file should be store in SPIFFS.</span>
  1314. <span style="color: #f8f8f2">File</span> <span style="color: #f8f8f2">aux</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">SPIFFS.open(</span><span style="color: #e6db74">&quot;aux.json&quot;</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">&quot;r&quot;</span><span style="color: #f8f8f2">);</span>
  1315. <span style="color: #f8f8f2">portal.load(aux);</span>
  1316. <span style="color: #f8f8f2">aux.close();</span>
  1317. </code></pre></div></p>
  1318. <p>AutoConnect passes the given JSON document directly to the <a href="https://arduinojson.org/v5/api/jsonbuffer/parseobject/"><strong>parseObject()</strong></a> function of the ArduinoJson library for parsing. Therefore, the constraint of the parseObject() function is applied as it is in the parsing of the JSON document for the AutoConnect. That is, if the JSON string is read-only, duplicating the input string occurs and consumes more memory.</p>
  1319. <h3 id="adjust-the-json-document-buffer-size"><i class="fa fa-caret-right"></i> Adjust the JSON document buffer size<a class="headerlink" href="#adjust-the-json-document-buffer-size" title="Permanent link">&para;</a></h3>
  1320. <p>AutoConnect uses ArduinoJson library's dynamic buffer to parse JSON documents. Its dynamic buffer allocation scheme depends on the version 5 or version 6 of ArduinoJson library. Either version must have enough buffer to parse the custom web page's JSON document successfully. AutoConnect has the following three constants internally to complete the parsing as much as possible in both ArduinoJson version. These constants are macro defined in <a href="https://github.com/Hieromon/AutoConnect/blob/master/src/AutoConnectDefs.h">AutoConnectDefs.h</a>.</p>
  1321. <p>If memory insufficiency occurs during JSON document parsing, you can adjust these constants to avoid insufficiency by using the <a href="https://arduinojson.org/v6/assistant/">JsonAssistant</a> with deriving the required buffer size in advance.</p>
  1322. <div class="highlight" style="background: #272822"><pre style="line-height: 125%; margin: 0;"><span></span><code><span style="color: #75715e">#define AUTOCONNECT_JSONBUFFER_SIZE 256</span>
  1323. <span style="color: #75715e">#define AUTOCONNECT_JSONDOCUMENT_SIZE (8 * 1024)</span>
  1324. <span style="color: #75715e">#define AUTOCONNECT_JSONPSRAM_SIZE (16* 1024)</span>
  1325. </code></pre></div>
  1326. <h4 id="autoconnect_jsonbuffer_size">AUTOCONNECT_JSONBUFFER_SIZE<a class="headerlink" href="#autoconnect_jsonbuffer_size" title="Permanent link">&para;</a></h4>
  1327. <p>This is a unit size constant of <a href="https://arduinojson.org/v5/faq/what-are-the-differences-between-staticjsonbuffer-and-dynamicjsonbuffer/">DynamicJsonBuffer</a> and works when the library used is ArduinoJson version 5. A buffer size of the JSON document increases with this unit. This value relates to the impact of the fragmented heap area. If it is too large, may occur run-out of memory.</p>
  1328. <h4 id="autoconnect_jsondocument_size">AUTOCONNECT_JSONDOCUMENT_SIZE<a class="headerlink" href="#autoconnect_jsondocument_size" title="Permanent link">&para;</a></h4>
  1329. <p>This is a size of <a href="https://arduinojson.org/v6/api/dynamicjsondocument/">DynamicJsonDocument</a> for ArduinoJson version 6. This buffer is not automatically expanding, and the size determines the limit.</p>
  1330. <h4 id="autoconnect_jsonpsram_size">AUTOCONNECT_JSONPSRAM_SIZE<a class="headerlink" href="#autoconnect_jsonpsram_size" title="Permanent link">&para;</a></h4>
  1331. <p>For ESP32 module equips with PSRAM, you can allocate the JSON document buffer to PSRAM. Buffer allocation to PSRAM will enable when <strong>PSRAM:Enabled</strong> option selected in the Arduino IDE's Board Manager menu. It is available since ArduinoJson 6.10.0.</p>
  1332. <h2 id="saving-json-document">Saving JSON document<a class="headerlink" href="#saving-json-document" title="Permanent link">&para;</a></h2>
  1333. <p>the Sketch can persist AutoConnectElements as a JSON document and also uses <a href="achandling.html#saving-autoconnectelements-with-json">this function</a> to save the values ​​entered on the custom Web page. And you can reload the saved JSON document into AutoConnectElements as the field in a custom Web page using the <a href="achandling.html#loading-autoconnectaux-autoconnectelements-with-json">load function</a>. </p>
  1334. <div class="footnote">
  1335. <hr />
  1336. <ol>
  1337. <li id="fn:1">
  1338. <p>Loading and saving AutoConnect parameters adopt this method.&#160;<a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text">&#8617;</a></p>
  1339. </li>
  1340. </ol>
  1341. </div>
  1342. </article>
  1343. </div>
  1344. </div>
  1345. </main>
  1346. <footer class="md-footer">
  1347. <div class="md-footer-nav">
  1348. <nav class="md-footer-nav__inner md-grid" aria-label="Footer">
  1349. <a href="acelements.html" class="md-footer-nav__link md-footer-nav__link--prev" rel="prev">
  1350. <div class="md-footer-nav__button md-icon">
  1351. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
  1352. </div>
  1353. <div class="md-footer-nav__title">
  1354. <div class="md-ellipsis">
  1355. <span class="md-footer-nav__direction">
  1356. Previous
  1357. </span>
  1358. AutoConnectElements
  1359. </div>
  1360. </div>
  1361. </a>
  1362. <a href="achandling.html" class="md-footer-nav__link md-footer-nav__link--next" rel="next">
  1363. <div class="md-footer-nav__title">
  1364. <div class="md-ellipsis">
  1365. <span class="md-footer-nav__direction">
  1366. Next
  1367. </span>
  1368. Handling the custom Web pages
  1369. </div>
  1370. </div>
  1371. <div class="md-footer-nav__button md-icon">
  1372. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
  1373. </div>
  1374. </a>
  1375. </nav>
  1376. </div>
  1377. <div class="md-footer-meta md-typeset">
  1378. <div class="md-footer-meta__inner md-grid">
  1379. <div class="md-footer-copyright">
  1380. <div class="md-footer-copyright__highlight">
  1381. Copyright &copy; 2018-2020 Hieromon Ikasamo
  1382. </div>
  1383. Made with
  1384. <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
  1385. Material for MkDocs
  1386. </a>
  1387. </div>
  1388. <div class="md-footer-social">
  1389. <a href="https://github.com/Hieromon" target="_blank" rel="noopener" title="github.com" class="md-footer-social__link">
  1390. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
  1391. </a>
  1392. <a href="https://twitter.com/hieromon" target="_blank" rel="noopener" title="twitter.com" class="md-footer-social__link">
  1393. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg>
  1394. </a>
  1395. </div>
  1396. </div>
  1397. </div>
  1398. </footer>
  1399. </div>
  1400. <script src="assets/javascripts/vendor.fd16492e.min.js"></script>
  1401. <script src="assets/javascripts/bundle.7836ba4d.min.js"></script><script id="__lang" type="application/json">{"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}</script>
  1402. <script>
  1403. app = initialize({
  1404. base: ".",
  1405. features: [],
  1406. search: Object.assign({
  1407. worker: "assets/javascripts/worker/search.4ac00218.min.js"
  1408. }, typeof search !== "undefined" && search)
  1409. })
  1410. </script>
  1411. <script src="js/gifffer.min.js"></script>
  1412. </body>
  1413. </html>