Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
 
 

1325 Zeilen
35 KiB

  1. {
  2. "data": {
  3. "user": {
  4. "id": "",
  5. "name": "",
  6. "token": ""
  7. },
  8. "ui": {
  9. "pages": {
  10. "building": {
  11. "columns": [
  12. {
  13. "accessorKey": "name",
  14. "header": "Name"
  15. },
  16. {
  17. "accessorKey": "city",
  18. "header": "City"
  19. },
  20. {
  21. "accessorKey": "actions",
  22. "header": ""
  23. }
  24. ]
  25. },
  26. "floor": {
  27. "columns": [
  28. {
  29. "accessorKey": "name",
  30. "header": "Name"
  31. },
  32. {
  33. "accessorKey": "BuildingName",
  34. "header": "Building"
  35. },
  36. {
  37. "accessorKey": "actions",
  38. "header": ""
  39. }
  40. ]
  41. },
  42. "zone": {
  43. "columns": [
  44. {
  45. "accessorKey": "name",
  46. "header": "Name"
  47. },
  48. {
  49. "accessorKey": "BuildingName",
  50. "header": "Building"
  51. },
  52. {
  53. "accessorKey": "FloorName",
  54. "header": "Floor"
  55. },
  56. {
  57. "accessorKey": "actions",
  58. "header": ""
  59. }
  60. ]
  61. },
  62. "operator": {
  63. "columns": [
  64. {
  65. "accessorKey": "name",
  66. "header": "Name"
  67. },
  68. {
  69. "accessorKey": "buildingName",
  70. "header": "Building"
  71. },
  72. {
  73. "accessorKey": "floorName",
  74. "header": "Floor"
  75. },
  76. {
  77. "accessorKey": "zones",
  78. "header": "Zones"
  79. },
  80. {
  81. "accessorKey": "actions",
  82. "header": ""
  83. }
  84. ]
  85. },
  86. "subject": {
  87. "columns": [
  88. {
  89. "accessorKey": "name",
  90. "header": "Name"
  91. },
  92. {
  93. "accessorKey": "buildingName",
  94. "header": "Building"
  95. },
  96. {
  97. "accessorKey": "floorName",
  98. "header": "Floor"
  99. },
  100. {
  101. "accessorKey": "actions",
  102. "header": ""
  103. }
  104. ]
  105. },
  106. "home": {
  107. "columns": [
  108. {
  109. "accessorKey": "timestamp",
  110. "header": "Time"
  111. },
  112. {
  113. "accessorKey": "subjectName",
  114. "header": "Subject"
  115. },
  116. {
  117. "accessorKey": "status",
  118. "header": "Status"
  119. },
  120. {
  121. "accessorKey": "actions",
  122. "header": ""
  123. }
  124. ]
  125. },
  126. "alarm": {
  127. "columns": [
  128. {
  129. "accessorKey": "timestamp",
  130. "header": "Time"
  131. },
  132. {
  133. "accessorKey": "subjectName",
  134. "header": "Subject"
  135. },
  136. {
  137. "accessorKey": "status",
  138. "header": "Status"
  139. },
  140. {
  141. "accessorKey": "actions",
  142. "header": ""
  143. }
  144. ]
  145. },
  146. "gateway": {
  147. "columns": [
  148. {
  149. "accessorKey": "name",
  150. "header": "Name"
  151. },
  152. {
  153. "accessorKey": "status",
  154. "header": "Status"
  155. },
  156. {
  157. "accessorKey": "model",
  158. "header": "Model"
  159. },
  160. {
  161. "accessorKey": "ip",
  162. "header": "IP"
  163. },
  164. {
  165. "accessorKey": "position",
  166. "header": "Position"
  167. },
  168. {
  169. "accessorKey": "actions",
  170. "header": ""
  171. }
  172. ]
  173. },
  174. "tracker": {
  175. "columns": [
  176. {
  177. "accessorKey": "name",
  178. "header": "Name"
  179. },
  180. {
  181. "accessorKey": "status",
  182. "header": "Status"
  183. },
  184. {
  185. "accessorKey": "model",
  186. "header": "Model"
  187. },
  188. {
  189. "accessorKey": "actions",
  190. "header": ""
  191. }
  192. ]
  193. },
  194. "trackerZone": {
  195. "columns": [
  196. {
  197. "accessorKey": "name",
  198. "header": "Name"
  199. },
  200. {
  201. "accessorKey": "days",
  202. "header": "Days"
  203. },
  204. {
  205. "accessorKey": "hours",
  206. "header": "Hours"
  207. },
  208. {
  209. "accessorKey": "actions",
  210. "header": ""
  211. }
  212. ]
  213. },
  214. "track": {
  215. "columns": [
  216. {
  217. "accessorKey": "timestamp",
  218. "header": "Time"
  219. },
  220. {
  221. "accessorKey": "subject",
  222. "header": "Subject"
  223. },
  224. {
  225. "accessorKey": "gateway",
  226. "header": "Gateway"
  227. },
  228. {
  229. "accessorKey": "status",
  230. "header": "Status"
  231. },
  232. {
  233. "accessorKey": "signal",
  234. "header": "Signal"
  235. },
  236. {
  237. "accessorKey": "actions",
  238. "header": ""
  239. }
  240. ]
  241. },
  242. "setting": {
  243. "columns": [
  244. {
  245. "accessorKey": "name",
  246. "header": "Name"
  247. },
  248. {
  249. "accessorKey": "role",
  250. "header": "Role"
  251. },
  252. {
  253. "accessorKey": "actions",
  254. "header": ""
  255. }
  256. ]
  257. }
  258. }
  259. }
  260. },
  261. "on": {
  262. "resize": [],
  263. "hashchange": [
  264. {
  265. "log": "hashchange"
  266. },
  267. {
  268. "browser:pageFromHash": {
  269. "pagesClass": "page",
  270. "pageChanger": "rl:openPage"
  271. }
  272. }
  273. ],
  274. "init": [
  275. {
  276. "set": {
  277. "var saveMethod": "POST"
  278. }
  279. },
  280. {
  281. "loadTemplate": {
  282. "selector": "body",
  283. "url": "./assets/templates/menu.html",
  284. "to": "template menu",
  285. "arguments": {},
  286. "callback": []
  287. }
  288. },
  289. {
  290. "rl:menuIcons": {
  291. "selector": "body",
  292. "items": [
  293. {
  294. "title": "Buildings",
  295. "icon": "rl:menu",
  296. "link": "#building"
  297. },
  298. {
  299. "title": "Floors",
  300. "icon": "rl:floors",
  301. "link": "#floor"
  302. },
  303. {
  304. "title": "Zones",
  305. "icon": "rl:zones",
  306. "link": "#zone"
  307. },
  308. {
  309. "title": "Operators",
  310. "icon": "rl:operators",
  311. "link": "#operator"
  312. },
  313. {
  314. "title": "Subjects",
  315. "icon": "rl:subjects",
  316. "link": "#subject"
  317. },
  318. {
  319. "title": "Alarms",
  320. "icon": "rl:alarms",
  321. "link": "#alarm"
  322. },
  323. {
  324. "title": "Gateways",
  325. "icon": "rl:gateways",
  326. "link": "#gateway"
  327. },
  328. {
  329. "title": "Trackers",
  330. "icon": "rl:trackers",
  331. "link": "#tracker"
  332. },
  333. {
  334. "title": "Tracks",
  335. "icon": "rl:tracks",
  336. "link": "#track"
  337. },
  338. {
  339. "title": "Settings",
  340. "icon": "rl:settings",
  341. "link": "#setting"
  342. },
  343. {
  344. "title": "Tracker Zone",
  345. "icon": "rl:trackerZone",
  346. "link": "#trackerZone"
  347. }
  348. ]
  349. }
  350. },
  351. {
  352. "fetchJson": {
  353. "url": "./assets/api/reslevis.api-1.0.5.json",
  354. "to": "data api",
  355. "options": {
  356. "method": "GET",
  357. "headers": {
  358. "Content-Type": "application/json",
  359. "Authorization": ""
  360. }
  361. },
  362. "success": [
  363. {
  364. "log": "API {data api info version} loaded"
  365. },
  366. {
  367. "rl:checkAuth": {}
  368. }
  369. ],
  370. "error": [
  371. {
  372. "log": "Error loading reslevis.api-1.0.5.json"
  373. },
  374. {
  375. "rl:checkAuth": {}
  376. }
  377. ]
  378. }
  379. }
  380. ]
  381. },
  382. "plugins": [
  383. {
  384. "name": "app",
  385. "version": "",
  386. "ondemand": false,
  387. "files": [
  388. {
  389. "type": "link",
  390. "url": "app.css"
  391. },
  392. {
  393. "type": "script",
  394. "url": "app.js"
  395. },
  396. {
  397. "type": "script",
  398. "url": "api.js"
  399. }
  400. ]
  401. },
  402. {
  403. "name": "tablestack",
  404. "description": "Headless UI for building powerful tables & datagrids",
  405. "version": "8.21.3",
  406. "ondemand": false,
  407. "files": [
  408. {
  409. "type": "script",
  410. "url": "assets/plugins/tablestack.min.js",
  411. "cdn": "https://unpkg.com/@tanstack/table-core@8.11.6/build/umd/index.production.js"
  412. }
  413. ]
  414. },
  415. {
  416. "name": "alpinejs",
  417. "description": "The rugged, minimal JavaScript framework",
  418. "version": "3.x.x",
  419. "ondemand": false,
  420. "files": [
  421. {
  422. "type": "script",
  423. "url": "assets/plugins/alpinejs.min.js"
  424. }
  425. ]
  426. },
  427. {
  428. "name": "simplebar",
  429. "description": "Scrollbars, simpler",
  430. "version": "6.2.7",
  431. "ondemand": false,
  432. "files": [
  433. {
  434. "type": "link",
  435. "url": "assets/plugins/simplebar.css"
  436. },
  437. {
  438. "type": "script",
  439. "url": "assets/plugins/simplebar.min.js"
  440. }
  441. ]
  442. },
  443. {
  444. "name": "flatpickr",
  445. "description": " A lightweight, powerful javascript datetime picker",
  446. "version": "4.6.13",
  447. "ondemand": false,
  448. "files": [
  449. {
  450. "type": "link",
  451. "url": "assets/plugins/flatpickr.min.css"
  452. },
  453. {
  454. "type": "script",
  455. "url": "assets/plugins/flatpickr.min.js"
  456. }
  457. ]
  458. },
  459. {
  460. "name": "sweetalert2",
  461. "description": "A beautiful, responsive, customizable and accessible (WAI-ARIA) replacement for JavaScript's popup boxes",
  462. "version": "11.17.2",
  463. "ondemand": false,
  464. "files": [
  465. {
  466. "type": "script",
  467. "url": "assets/plugins/sweetalert2@11.js"
  468. }
  469. ]
  470. },
  471. {
  472. "name": "snapsvg",
  473. "description": "JavaScript Vector Library",
  474. "type": "script",
  475. "version": "0.5.1",
  476. "ondemand": false,
  477. "url": "assets/plugins/snap.svg-min.js"
  478. },
  479. {
  480. "name": "qrcode-svg",
  481. "description": "A simple QR Code generator in pure JavaScript",
  482. "type": "script",
  483. "version": "1.1.0",
  484. "ondemand": false,
  485. "url": "assets/plugins/qrcode.min.js",
  486. "ref": "https://papnkukn.github.io/qrcode-svg/"
  487. }
  488. ],
  489. "plugins-disabled": [],
  490. "setup": {
  491. "languages": [
  492. "en"
  493. ],
  494. "language": "en",
  495. "log": false,
  496. "modules": [
  497. {
  498. "name": "reslevisIcons",
  499. "url": "assets/modules/reslevis.icons.json"
  500. },
  501. {
  502. "name": "reslevisData",
  503. "url": "assets/modules/reslevis.data.json"
  504. },
  505. {
  506. "name": "reslevisTexts",
  507. "url": "assets/modules/reslevis.texts.json"
  508. }
  509. ]
  510. },
  511. "parts": {
  512. "rl": {
  513. "checkAuth": [
  514. {
  515. "if": {
  516. "is": "{data settings authRequired}",
  517. "then": [
  518. {
  519. "getToken": {
  520. "url": "{data settings serverTokenUrl}",
  521. "options": {
  522. "method": "POST",
  523. "headers": {
  524. "Content-Type": "application/x-www-form-urlencoded"
  525. },
  526. "body": "grant_type=client_credentials&client_id=Fastapi&client_secret={data settings serverClientSecret}"
  527. },
  528. "success": [
  529. {
  530. "rl:createDashboard": {
  531. "page": "home",
  532. "db": "alarm"
  533. }
  534. },
  535. {
  536. "rl:createPages": {}
  537. }
  538. ],
  539. "error": [
  540. {
  541. "rl:createDashboard": {
  542. "page": "home",
  543. "db": "alarm"
  544. }
  545. },
  546. {
  547. "rl:createPages": {}
  548. }
  549. ]
  550. }
  551. }
  552. ],
  553. "else": [
  554. {
  555. "rl:createDashboard": {
  556. "page": "home",
  557. "db": "alarm"
  558. }
  559. },
  560. {
  561. "rl:createPages": {}
  562. }
  563. ]
  564. }
  565. }
  566. ],
  567. "getToken": [
  568. {
  569. "log": "getToken from {arguments:serverTokenUrl}"
  570. },
  571. {
  572. "fetchJson": {
  573. "to": "data user token",
  574. "url": "{arguments:serverTokenUrl}",
  575. "options": {
  576. "method": "POST",
  577. "headers": {
  578. "Content-Type": "application/x-www-form-urlencoded"
  579. },
  580. "body": "grant_type=client_credentials&client_id=Fastapi&client_secret=wojuoB7Z5xhlPFrF2lIxJSSdVHCApEgC"
  581. },
  582. "success": [
  583. {
  584. "log": "token ok"
  585. }
  586. ],
  587. "error": [
  588. {
  589. "log": "Error fetching auth token"
  590. }
  591. ]
  592. }
  593. }
  594. ],
  595. "createPages": {
  596. "do": [
  597. {
  598. "log": "Create pages"
  599. },
  600. {
  601. "for": {
  602. "var": "db",
  603. "of": [
  604. "building",
  605. "floor",
  606. "zone",
  607. "operator",
  608. "subject",
  609. "gateway",
  610. "tracker",
  611. "trackerZone",
  612. "track",
  613. "setting"
  614. ],
  615. "do": [
  616. {
  617. "html": [
  618. {
  619. "selector": ".main",
  620. "tag": "div",
  621. "attr": {
  622. "id": "page{var db}",
  623. "data-value": "{var db}",
  624. "class": "page hidden"
  625. },
  626. "text": ""
  627. }
  628. ]
  629. },
  630. {
  631. "if": {
  632. "is": "'{data settings localDb}' == '1'",
  633. "then": [
  634. {
  635. "rl:getDb": {
  636. "template": "{var db}",
  637. "db": "{var db}",
  638. "serverMethod": "GET",
  639. "localDb": "{data settings localDb}",
  640. "localPath": "{data settings localPath}",
  641. "token": "{data user token}"
  642. }
  643. }
  644. ],
  645. "else": [
  646. {
  647. "apiGet": {
  648. "db": "{var db}",
  649. "template": "{var db}",
  650. "method": "GET",
  651. "success": [
  652. {
  653. "log": "apiCall get success"
  654. }
  655. ],
  656. "error": [
  657. {
  658. "log": "apiCall get error"
  659. }
  660. ]
  661. }
  662. }
  663. ]
  664. }
  665. }
  666. ]
  667. }
  668. },
  669. {
  670. "browser:pageFromHash": {
  671. "pagesClass": "page",
  672. "pageChanger": "rl:openPage"
  673. }
  674. }
  675. ]
  676. },
  677. "createDashboard": {
  678. "do": [
  679. {
  680. "log": "Create page {arguments:page}"
  681. },
  682. {
  683. "html": [
  684. {
  685. "selector": ".main",
  686. "tag": "div",
  687. "attr": {
  688. "id": "page{arguments:page}",
  689. "data-value": "{arguments:page}",
  690. "class": "page hidden"
  691. },
  692. "text": ""
  693. }
  694. ]
  695. },
  696. {
  697. "rl:getDb": {
  698. "template": "{arguments:page}",
  699. "db": "{arguments:db}",
  700. "serverMethod": "GET",
  701. "localDb": "{data settings localDb}",
  702. "localPath": "{data settings localPath}",
  703. "token": "{data user token}"
  704. }
  705. },
  706. {
  707. "browser:pageFromHash": {
  708. "pagesClass": "page",
  709. "pageChanger": "rl:openPage"
  710. }
  711. }
  712. ]
  713. },
  714. "apiPostCallback": {
  715. "do": [
  716. {
  717. "log": "apiPostCallback"
  718. },
  719. {
  720. "log": "{arguments:data}"
  721. },
  722. {
  723. "if": {
  724. "is": "{arguments:data detail 0}",
  725. "then": [
  726. {
  727. "log": "apiPostCallback error"
  728. },
  729. {
  730. "alert": "arguments:data detail 0 msg"
  731. }
  732. ],
  733. "else": [
  734. {
  735. "log": "apiPostCallback success"
  736. }
  737. ]
  738. }
  739. },
  740. {
  741. "apiGet": {
  742. "db": "{arguments:db}",
  743. "template": "{arguments:db}",
  744. "method": "GET",
  745. "success": [
  746. {
  747. "log": "apiCall get success"
  748. }
  749. ],
  750. "error": [
  751. {
  752. "log": "apiCall get error"
  753. }
  754. ]
  755. }
  756. }
  757. ]
  758. },
  759. "apiUpdateCallback": {
  760. "do": [
  761. {
  762. "log": "apiUpdateCallback"
  763. },
  764. {
  765. "log": "{arguments:data}"
  766. }
  767. ]
  768. },
  769. "apiDeleteCallback": {
  770. "do": [
  771. {
  772. "log": "apiDeleteCallback"
  773. },
  774. {
  775. "log": "{arguments:data}"
  776. }
  777. ]
  778. },
  779. "apiGetCallback": {
  780. "do": [
  781. {
  782. "log": "apiGetCallback"
  783. },
  784. {
  785. "log": "{arguments:data}"
  786. },
  787. {
  788. "set": {
  789. "data db {arguments:db}": "{arguments:data}"
  790. }
  791. },
  792. {
  793. "loadTemplate": {
  794. "selector": "#page{arguments:template}",
  795. "url": "./assets/templates/{arguments:template}.html",
  796. "to": "template {arguments:template}",
  797. "empty": true,
  798. "arguments": {
  799. "db": "{arguments:db}",
  800. "info": "{texts info{arguments:db}s}",
  801. "serverUrl": "{arguments:serverUrl}",
  802. "new": "rl:newPost"
  803. },
  804. "callback": []
  805. }
  806. }
  807. ]
  808. },
  809. "updateDb": {
  810. "do": [
  811. {
  812. "set": {
  813. "var dbUrl": [
  814. "{data api servers {arguments:localDb} url}/get{arguments:db}s",
  815. "{arguments:localPath}/{arguments:db}.json"
  816. ],
  817. "var token": "{data user token}"
  818. }
  819. },
  820. {
  821. "log": "DB update: {var dbUrl {arguments:localDb}}"
  822. },
  823. {
  824. "fetchJson": {
  825. "to": "data db {arguments:db}",
  826. "url": "{var dbUrl {arguments:localDb}}",
  827. "options": {
  828. "method": "GET",
  829. "headers": {
  830. "Content-Type": "application/json",
  831. "Authorization": "Bearer {var token}"
  832. }
  833. },
  834. "success": [
  835. {
  836. "js": "{document.querySelector('.update{arguments:db}').click()}"
  837. }
  838. ]
  839. }
  840. }
  841. ]
  842. },
  843. "getDb": {
  844. "do": [
  845. {
  846. "set": {
  847. "var dbUrl": [
  848. "{data api servers {arguments:localDb} url}/get{arguments:db}s",
  849. "{arguments:localPath}/{arguments:db}.json"
  850. ],
  851. "var infoText": "{texts info{arguments:db}s}",
  852. "var token": "{data user token}"
  853. }
  854. },
  855. {
  856. "log": "getDb: {var dbUrl {arguments:localDb}}"
  857. },
  858. {
  859. "fetchJson": {
  860. "to": "var getResult",
  861. "url": "{var dbUrl {arguments:localDb}}",
  862. "options": {
  863. "method": "GET",
  864. "headers": {
  865. "Content-Type": "application/json",
  866. "Authorization": "Bearer {var token}"
  867. }
  868. },
  869. "success": [
  870. {
  871. "set": {
  872. "data db {arguments:db}": "{var getResult}"
  873. }
  874. },
  875. {
  876. "loadTemplate": {
  877. "selector": "#page{arguments:template}",
  878. "url": "./assets/templates/{arguments:template}.html",
  879. "to": "template {arguments:template}",
  880. "empty": true,
  881. "arguments": {
  882. "db": "{arguments:db}",
  883. "info": "{texts info{arguments:db}s}",
  884. "serverUrl": "{data settings serverUrl}",
  885. "new": "rl:newPost"
  886. },
  887. "callback": []
  888. }
  889. }
  890. ],
  891. "errorDisabled": [
  892. {
  893. "log": "Error loading {var dbUrl {arguments:localDb}}"
  894. },
  895. {
  896. "log": "{var getResult}"
  897. }
  898. ]
  899. }
  900. }
  901. ]
  902. },
  903. "openPage": {
  904. "arguments": "(page, path)",
  905. "do": [
  906. {
  907. "if": {
  908. "is": "'{arguments:page}' === ''",
  909. "then": [
  910. {
  911. "link": "#home"
  912. }
  913. ]
  914. }
  915. },
  916. {
  917. "set": {
  918. "var infoText": "{texts info{arguments:page}}"
  919. }
  920. },
  921. {
  922. "html": [
  923. {
  924. "selector": ".infoText",
  925. "text": "{var infoText}",
  926. "empty": true
  927. }
  928. ]
  929. },
  930. {
  931. "log": "openPage: {var infoText}"
  932. },
  933. {
  934. "if": {
  935. "is": "{arguments:page} !== {var actualPage}",
  936. "then": [
  937. {
  938. "set": {
  939. "var actualPage": "{arguments:page}"
  940. }
  941. }
  942. ],
  943. "else": [
  944. {
  945. "rl:closePost": {
  946. "db": "{arguments:page}"
  947. }
  948. },
  949. {
  950. "clearInterval": {
  951. "name": "update"
  952. }
  953. },
  954. {
  955. "setInterval2": {
  956. "name": "update",
  957. "duration": 5000,
  958. "do": [
  959. {
  960. "apiGet": {
  961. "db": "{arguments:page}",
  962. "template": "{arguments:page}",
  963. "method": "GET",
  964. "success": [
  965. {
  966. "log": "apiCall get success"
  967. }
  968. ],
  969. "error": [
  970. {
  971. "log": "apiCall get error"
  972. }
  973. ]
  974. }
  975. }
  976. ]
  977. }
  978. }
  979. ]
  980. }
  981. }
  982. ]
  983. },
  984. "updateTable": {
  985. "do": [
  986. {
  987. "set": {
  988. "var dbUrl": [
  989. "{data api servers {arguments:localDb} url}/get{arguments:db}s",
  990. "{arguments:localPath}/{arguments:db}.json"
  991. ],
  992. "var token": "{data user token}"
  993. }
  994. },
  995. {
  996. "log": "DB source: {var dbUrl {arguments:localDb}}"
  997. },
  998. {
  999. "fetchJson": {
  1000. "to": "data db {arguments:db}",
  1001. "url": "{var dbUrl {arguments:localDb}}",
  1002. "options": {
  1003. "method": "POST",
  1004. "headers": {
  1005. "Content-Type": "application/json",
  1006. "Authorization": "Bearer {var token}"
  1007. },
  1008. "body": ""
  1009. },
  1010. "success": [
  1011. {
  1012. "loadTemplate": {
  1013. "selector": "#page{arguments:db}",
  1014. "url": "./assets/templates/{arguments:db}Table.html",
  1015. "to": "template {arguments:db}",
  1016. "empty": true,
  1017. "arguments": {
  1018. "db": "{arguments:db}",
  1019. "info": "{var infoText}",
  1020. "serverUrl": "{data settings serverUrl}",
  1021. "new": "rl:newPost"
  1022. },
  1023. "callback": []
  1024. }
  1025. }
  1026. ]
  1027. }
  1028. }
  1029. ]
  1030. },
  1031. "openPost": {
  1032. "do": [
  1033. {
  1034. "set": {
  1035. "var saveMethod": "{arguments:method}"
  1036. }
  1037. },
  1038. {
  1039. "set": {
  1040. "var schemaItem": "{data api components schemas {arguments:db}Item}"
  1041. }
  1042. },
  1043. {
  1044. "set": {
  1045. "var schemaItem": "{data api components schemas {arguments:db}Item}"
  1046. }
  1047. },
  1048. {
  1049. "loadTemplate": {
  1050. "selector": ".page[data-value={arguments:db}] .post",
  1051. "url": "./assets/templates/post.html",
  1052. "to": "template post",
  1053. "empty": true,
  1054. "arguments": {
  1055. "db": "{arguments:db}",
  1056. "id": "{arguments:fields id}",
  1057. "fields": "{arguments:fields}",
  1058. "method": "{arguments:method}",
  1059. "serverUrl": "{data settings serverUrl}",
  1060. "close": "rl:closePost",
  1061. "remove": "rl:removePost",
  1062. "save": "rl:savePost"
  1063. },
  1064. "callback": [
  1065. {
  1066. "html": [
  1067. {
  1068. "selector": ".cancelButton",
  1069. "on": {
  1070. "mousedown": [
  1071. {
  1072. "rl:closePost": {
  1073. "db": "{arguments:db}"
  1074. }
  1075. }
  1076. ]
  1077. }
  1078. }
  1079. ]
  1080. },
  1081. {
  1082. "createForm": {
  1083. "selector": ".page[data-value={arguments:db}] .fields",
  1084. "serverUrl": "{data settings serverUrl}",
  1085. "db": "{arguments:db}",
  1086. "name": "{arguments:db}",
  1087. "schema": "{var schemaItem}",
  1088. "fields": "{arguments:fields}",
  1089. "error": [
  1090. {
  1091. "log": "error"
  1092. }
  1093. ],
  1094. "success": [
  1095. {
  1096. "log": "success"
  1097. }
  1098. ],
  1099. "callback": []
  1100. }
  1101. }
  1102. ]
  1103. }
  1104. },
  1105. {
  1106. "attr": {
  1107. "selector": ".page[data-value={arguments:db}] .post",
  1108. "removeClass": "hidden"
  1109. }
  1110. }
  1111. ]
  1112. },
  1113. "newPost": {
  1114. "note": "https://developer.mozilla.org/en-US/docs/Glossary/UUID",
  1115. "do": [
  1116. {
  1117. "set": {
  1118. "var newId": "{js:window.crypto.randomUUID();}"
  1119. }
  1120. },
  1121. {
  1122. "rl:openPost": {
  1123. "db": "{arguments:db}",
  1124. "method": "POST",
  1125. "id": "{var newId}",
  1126. "fields": {
  1127. "id": "{var newId}"
  1128. }
  1129. }
  1130. }
  1131. ]
  1132. },
  1133. "closePost": {
  1134. "do": [
  1135. {
  1136. "attr": {
  1137. "selector": ".page[data-value={arguments:db}] .post",
  1138. "addClass": "hidden"
  1139. }
  1140. }
  1141. ]
  1142. },
  1143. "savePost": {
  1144. "do": [
  1145. {
  1146. "log": "savePost:{arguments:name}"
  1147. },
  1148. {
  1149. "set": {
  1150. "var formData": "{formDataToJson:.form{arguments:name}}"
  1151. }
  1152. },
  1153. {
  1154. "apiPost": {
  1155. "db": "{arguments:name}",
  1156. "method": "{var saveMethod}",
  1157. "item": "{var formData}",
  1158. "success": [
  1159. {
  1160. "log": "apiPost {var saveMethod} success"
  1161. }
  1162. ],
  1163. "error": [
  1164. {
  1165. "log": "apiPost {var saveMethod} error"
  1166. }
  1167. ]
  1168. }
  1169. }
  1170. ]
  1171. },
  1172. "removePost": {
  1173. "do": [
  1174. {
  1175. "log": "removePost:{arguments:name}"
  1176. },
  1177. {
  1178. "apiPost": {
  1179. "db": "{arguments:name}",
  1180. "id": "{arguments:id}",
  1181. "method": "DELETE",
  1182. "success": [
  1183. {
  1184. "log": "apiPost DELETE success"
  1185. }
  1186. ],
  1187. "error": [
  1188. {
  1189. "log": "apiPost DELETE error"
  1190. }
  1191. ]
  1192. }
  1193. }
  1194. ]
  1195. },
  1196. "menuIcons": {
  1197. "do": [
  1198. {
  1199. "html": [
  1200. {
  1201. "selector": "body",
  1202. "tag": "div",
  1203. "attr": {
  1204. "class": "main w-full h-screen"
  1205. },
  1206. "comment": [
  1207. {
  1208. "tag": "div",
  1209. "attr": {
  1210. "class": "header flex align-items-center justify-content-center text-center float-wrap"
  1211. },
  1212. "html": [
  1213. {
  1214. "tag": "div",
  1215. "attr": {
  1216. "class": "logo m-[10px]"
  1217. },
  1218. "html": [
  1219. {
  1220. "tag": "div",
  1221. "attr": {
  1222. "class": "w-[120px] float-left"
  1223. },
  1224. "html": [
  1225. {
  1226. "tag": "a",
  1227. "attr": {
  1228. "href": "#home"
  1229. },
  1230. "html": [
  1231. {
  1232. "tag": "img",
  1233. "attr": {
  1234. "class": "",
  1235. "src": "./assets/images/logo-reslevis.svg"
  1236. }
  1237. }
  1238. ]
  1239. }
  1240. ]
  1241. }
  1242. ]
  1243. },
  1244. {
  1245. "for": {
  1246. "var": "item",
  1247. "of": "{arguments:items}",
  1248. "html": [
  1249. {
  1250. "tag": "div",
  1251. "attr": {
  1252. "class": "p-[20px] text-center"
  1253. },
  1254. "html": [
  1255. {
  1256. "tag": "a",
  1257. "attr": {
  1258. "href": "{var item link}"
  1259. },
  1260. "html": [
  1261. {
  1262. "tag": "span",
  1263. "attr": {
  1264. "class": "iconify text-[60px] bg-[transparent] text-[#008EED]",
  1265. "data-icon": "{var item icon}"
  1266. }
  1267. }
  1268. ]
  1269. },
  1270. {
  1271. "html": [
  1272. {
  1273. "tag": "a",
  1274. "attr": {
  1275. "href": "{var item link}"
  1276. }
  1277. },
  1278. {
  1279. "tag": "span",
  1280. "text": "{var item title}",
  1281. "attr": {
  1282. "class": "text-[#008EED] text-[16px] px-[0px] py-[10px]"
  1283. }
  1284. }
  1285. ]
  1286. }
  1287. ]
  1288. }
  1289. ]
  1290. }
  1291. }
  1292. ]
  1293. }
  1294. ]
  1295. }
  1296. ]
  1297. }
  1298. ]
  1299. }
  1300. }
  1301. },
  1302. "functions": {
  1303. "apiGet": {
  1304. "js": "let args = arguments[0]; console.log('UI.apiGet'); UI.apiGet(args);"
  1305. },
  1306. "apiPost": {
  1307. "js": "let args = arguments[0]; console.log('UI.apiPost'); UI.apiPost(args);"
  1308. },
  1309. "apiCall": {
  1310. "js": "let args = arguments[0]; console.log('UI.apiCall'); UI.apiCall(args);"
  1311. },
  1312. "getToken": {
  1313. "js": "let args = arguments[0]; UI.getToken(args);"
  1314. },
  1315. "createTable": {
  1316. "js": "let args = arguments[0]; console.log('createTable'); console.log(args); UI.createTable(args); js.callback({do:args.callback});"
  1317. },
  1318. "createForm": {
  1319. "js": "let args = arguments[0]; /*console.log('createForm'); console.log(args);*/ UI.createForm(args); js.callback({do:args.callback});"
  1320. },
  1321. "loadTemplate": {
  1322. "js": "let args = arguments[0]; /*console.log('loadTemplate'); console.log(args);*/ UI.loadTemplate(args); js.callback({do:args.callback});"
  1323. }
  1324. }
  1325. }