/ lib / _ak_html
_ak_html
  1  #!/usr/bin/env bash
  2  ###
  3  ### arching-kaos-tools
  4  ### Tools to interact and build an Arching Kaos Infochain
  5  ### Copyright (C) 2021 - 2026  kaotisk
  6  ###
  7  ### This program is free software: you can redistribute it and/or modify
  8  ### it under the terms of the GNU General Public License as published by
  9  ### the Free Software Foundation, either version 3 of the License, or
 10  ### (at your option) any later version.
 11  ###
 12  ### This program is distributed in the hope that it will be useful,
 13  ### but WITHOUT ANY WARRANTY; without even the implied warranty of
 14  ### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 15  ### GNU General Public License for more details.
 16  ###
 17  ### You should have received a copy of the GNU General Public License
 18  ### along with this program.  If not, see <http://www.gnu.org/licenses/>.
 19  ###
 20  source $AK_LIBDIR/_ak_lib_load
 21  _ak_lib_load _ak_log
 22  
 23  function _ak_generate_html_header(){
 24      printf '<!DOCTYPE html>\n<html>\n<head>\n'
 25      printf '<title>Arching Kaos Chain Data</title>\n'
 26      printf '    <meta charset="UTF-8">\n'
 27      printf '    <meta name="viewport" content="width=device-width, initial-scale=1">\n'
 28      printf '    <style>\n'
 29      printf '    body {\n'
 30      printf '        background-color: #000;\n'
 31      printf '        color: lightgreen;\n'
 32      printf '        padding: 2%%;\n'
 33      printf '        width: auto;\n'
 34      printf '        font-family: monospace;\n'
 35      printf '        font-size: 1rem;\n'
 36      printf '    }\n'
 37      printf '    h1, h2, h3, h4 {\n'
 38      printf '        text-align: left;\n'
 39      printf '    }\n'
 40      printf '    td {\n'
 41      printf '        text-align: initial;\n'
 42      printf '        background-color: #090909;\n'
 43      printf '        border: 1px dashed #444;\n'
 44      printf '        font-size: 1rem;\n'
 45      printf '        padding: 1vh 1vw;\n'
 46      printf '        margin: 0;\n'
 47      printf '    }\n'
 48      printf '    p, summary {\n'
 49      printf '        background: #061624;\n'
 50      printf '        border: 1px solid #827c7c;\n'
 51      printf '        padding: 1vh 1vw;\n'
 52      printf '        margin: 0;\n'
 53      printf '        color: lightgreen;\n'
 54      printf '        font-style: normal;\n'
 55      printf '        text-decoration: none;\n'
 56      printf '    }\n'
 57      printf '    summary:hover {\n'
 58      printf '        background: lightgreen;\n'
 59      printf '        color: #061624;\n'
 60      printf '    }\n'
 61      printf '    a {\n'
 62      printf '        color: #042746;\n'
 63      printf '        background-color: lightyellow;\n'
 64      printf '        border: 1px solid #827c7c;\n'
 65      printf '        padding: 1vh 1vw;\n'
 66      printf '        margin: 0;\n'
 67      printf '        font-style: normal;\n'
 68      printf '        text-decoration: none;\n'
 69      printf '    }\n'
 70      printf '    a:hover {\n'
 71      printf '        background-color: lightgreen;\n'
 72      printf '        color: #042746;\n'
 73      printf '    }\n'
 74      printf '    details {\n'
 75      printf '        border: 1px dotted;\n'
 76      printf '        background-color: #1d4055;\n'
 77      printf '    }\n'
 78      printf '    footer {\n'
 79      printf '        text-align: center;\n'
 80      printf '    }\n'
 81      printf '    </style>\n'
 82      printf '</head>\n'
 83      printf '<body>\n'
 84  }
 85  
 86  function _ak_generate_html_zblock(){
 87      if [ ! -z $1 ] && [ -n "$1" ]
 88      then
 89          arg="$1"
 90      else
 91          _ak_log_error "No argument given"
 92          exit 1
 93      fi
 94      # Iterate through each argument and parse data
 95      if [ -f "$arg" ]
 96      then
 97          # Extract data from argument
 98          zblock=$(cat $arg | jq -r '.zblock')
 99          if [ ! -n "$zblock" ]
100          then
101              _ak_log_error "Empty zblock value"
102              exit 1
103          fi
104          block=$(cat $arg | jq -r '.block')
105          if [ ! -n "$block" ]
106          then
107              _ak_log_error "Empty block value"
108              exit 1
109          fi
110          timestamp=$(cat $arg | jq -r '.timestamp')
111          if [ ! -n "$timestamp" ]
112          then
113              _ak_log_error "Empty timestamp value"
114              exit 1
115          fi
116          block_signature=$(cat $arg | jq -r '.block_signature')
117          if [ ! -n "$block_signature" ]
118          then
119              _ak_log_error "Empty block_signature value"
120              exit 1
121          fi
122          detach=$(cat $arg | jq -r '.detach')
123          if [ ! -n "$detach" ]
124          then
125              _ak_log_error "Empty detach value"
126              exit 1
127          fi
128          data=$(cat $arg | jq -r '.data')
129          if [ ! -n "$data" ]
130          then
131              _ak_log_error "Empty data value"
132              exit 1
133          fi
134          module=$(cat $arg | jq -r '.module')
135          if [ ! -n "$module" ]
136          then
137              _ak_log_error "Empty module value"
138              exit 1
139          fi
140          action=$(cat $arg | jq -r '.action')
141          if [ ! -n "$action" ]
142          then
143              _ak_log_error "Empty action value"
144              exit 1
145          fi
146          gpg=$(cat $arg | jq -r '.gpg')
147          if [ ! -n "$gpg" ]
148          then
149              _ak_log_error "Empty gpg value"
150              exit 1
151          fi
152          previous=$(cat $arg | jq -r '.previous')
153          if [ ! -n "$previous" ]
154          then
155              _ak_log_error "Empty previous value"
156              exit 1
157          fi
158          datablock=$(cat $arg | jq -r ".$data")
159          if [ ! -n "$datablock" ]
160          then
161              _ak_log_error "Empty datablock value"
162              exit 1
163          fi
164          # Output data in HTML format
165          printf '    <h1>%s</h1>\n' "$PROGRAM"
166          printf '    <h2>🔎 %szblock</h2>\n' "$zblock"
167          if [ -f $AK_MODULESDIR/$module/main.sh ] && [ "$action" == "add" ]
168          then
169              ak -m $module -x $zblock > /dev/null 2>&1
170              if [ $? -eq 0 ]
171              then
172                  ak -m $module -x $zblock
173              fi
174          fi
175          printf '    <h2>â„šī¸ %s</h2>\n' "$zblock"
176          printf '    <table>\n'
177          printf '        <tr>\n'
178          printf '            <td>\n'
179          printf '    <pre>đŸ“Ļ ZBLOCK</pre>\n'
180          printf '            </td>\n'
181          printf '            <td>\n'
182          printf '    <details>\n'
183          printf '        <summary>%s</summary>\n' "$zblock"
184          printf '        <pre>%s</pre>' "$(_ak_ipfs_cat $zblock | jq)"
185          printf '    </details>\n'
186          printf '            </td>\n'
187          printf '        </tr>\n'
188          printf '        <tr>\n'
189          printf '            <td>\n'
190          printf '    <pre>đŸ“Ļ BLOCK</pre>\n'
191          printf '            </td>\n'
192          printf '            <td>\n'
193          printf '    <details>\n'
194          printf '        <summary>%s</summary>\n' "$block"
195          printf '        <pre>%s</pre>\n' "$(_ak_ipfs_cat $block | jq)"
196          printf '    </details>\n'
197          printf '            </td>\n'
198          printf '        </tr>\n'
199          printf '        <tr>\n'
200          printf '            <td>\n'
201          printf '    <pre>🔏 BLOCK SIGNATURE</pre>\n'
202          printf '            </td>\n'
203          printf '            <td>\n'
204          printf '    <details>\n'
205          printf '        <summary>%s</summary>\n' "$block_signature"
206          printf '        <pre>%s</pre>\n' "$(_ak_ipfs_cat $block_signature)"
207          printf '    </details>\n'
208          printf '            </td>\n'
209          printf '        </tr>\n'
210          printf '        <tr>\n'
211          printf '            <td>\n'
212          printf '    <pre>⌚ TIMESTAMP</pre>\n'
213          printf '            </td>\n'
214          printf '            <td>\n'
215          printf '    <p>%s</p>\n' "$timestamp"
216          printf '            </td>\n'
217          printf '        </tr>\n'
218          printf '        <tr>\n'
219          printf '            <td>\n'
220          printf '    <pre>🔌 MODULE</pre>\n'
221          printf '            </td>\n'
222          printf '            <td>\n'
223          printf '    <p>%s</p>\n' "$module"
224          printf '            </td>\n'
225          printf '        </tr>\n'
226          printf '        <tr>\n'
227          printf '            <td>\n'
228          printf '    <pre>đŸĒ§ ACTION</pre>\n'
229          printf '            </td>\n'
230          printf '            <td>\n'
231          printf '    <p>%s</p>\n' "$action"
232          printf '            </td>\n'
233          printf '        </tr>\n'
234          printf '        <tr>\n'
235          printf '            <td>\n'
236          printf '    <pre>🔑 GPG</pre>\n'
237          printf '            </td>\n'
238          printf '            <td>\n'
239          printf '    <details>\n'
240          printf '        <summary>%s</summary>\n' "$gpg"
241          printf '        <pre>%s</pre>\n' "$(_ak_ipfs_cat $gpg)"
242          printf '    </details>\n'
243          printf '            </td>\n'
244          printf '        </tr>\n'
245          printf '        <tr>\n'
246          printf '            <td>\n'
247          printf '    <pre>đŸ“Ļ PREVIOUS</pre>\n'
248          printf '            </td>\n'
249          printf '            <td>\n'
250          printf '    <a target="_blank" href="./zblock-%s.html">🔗 %s</a>\n' "$previous" "$previous"
251          printf '            </td>\n'
252          printf '        </tr>\n'
253          printf '        <tr>\n'
254          printf '            <td>\n'
255          printf '    <pre>đŸ“Ļ DATA</pre>\n'
256          printf '            </td>\n'
257          printf '            <td>\n'
258          printf '    <details>\n'
259          printf '        <summary>%s</summary>\n' "$data"
260          printf '        <pre>%s</pre>\n' "$datablock"
261          printf '    </details>\n'
262          printf '            </td>\n'
263          printf '        </tr>\n'
264          printf '        <tr>\n'
265          printf '            <td>\n'
266          printf '    <pre>🔏 DATA_SIGNATURE</pre>\n'
267          printf '            </td>\n'
268          printf '            <td>\n'
269          printf '    <details>\n'
270          printf '        <summary>%s</summary>\n' "$detach"
271          printf '        <pre>%s</pre>\n' "$(_ak_ipfs_cat $detach)"
272          printf '    </details>\n'
273          printf '            </td>\n'
274          printf '        </tr>\n'
275          printf '        <tr>\n'
276          printf '            <td>\n'
277          printf '    <pre>📄 ipfs</pre>\n'
278          printf '            </td>\n'
279          printf '            <td>\n'
280          printf '    <a target="_blank" href="http://gw.ipfs.z.kaotisk-hund.com/ipfs/%s">🔗 %s</a>\n' "$(echo $datablock | jq -r '.ipfs')" "$(echo $datablock | jq -r '.ipfs')"
281          printf '            </td>\n'
282          printf '        </tr>\n'
283          printf '        <tr>\n'
284          printf '            <td>\n'
285          printf '    <pre>🔏 detach</pre>\n'
286          printf '            </td>\n'
287          printf '            <td>\n'
288          printf '    <details>\n'
289          printf '        <summary>%s</summary>\n' "$(echo $datablock | jq -r '.detach')"
290          printf '        <pre>%s</pre>\n' "$(_ak_ipfs_cat $(echo $datablock | jq -r '.detach'))"
291          printf '    </details>\n'
292          printf '            </td>\n'
293          printf '        </tr>\n'
294          printf '    </table>\n'
295          printf '    <table>\n'
296          printf '        <tr>\n'
297          printf '            <td>\n'
298          printf '    <pre>📃 Rendered ZBLOCK</pre>\n'
299          printf '            </td>\n'
300          printf '        </tr>\n'
301          printf '        <tr>\n'
302          printf '            <td>\n'
303          printf '    <pre>%s</pre>\n' "$(cat $arg | jq)"
304          printf '            </td>\n'
305          printf '        </tr>\n'
306          printf '    </table>\n'
307      fi
308  }
309  
310  _ak_log_debug "_ak_html loaded $(caller)"