@saltcorn/data 0.7.1 → 0.7.2-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. package/dist/app-locales/en.json +6 -0
  2. package/dist/app-locales/public/da.json +3 -0
  3. package/dist/app-locales/public/tlh.json +3 -0
  4. package/dist/base-plugin/actions.d.ts.map +1 -1
  5. package/dist/base-plugin/actions.js +4 -1
  6. package/dist/base-plugin/actions.js.map +1 -1
  7. package/dist/base-plugin/fieldviews.d.ts +24 -0
  8. package/dist/base-plugin/fieldviews.d.ts.map +1 -1
  9. package/dist/base-plugin/fieldviews.js +57 -5
  10. package/dist/base-plugin/fieldviews.js.map +1 -1
  11. package/dist/base-plugin/index.d.ts +230 -13
  12. package/dist/base-plugin/index.d.ts.map +1 -1
  13. package/dist/base-plugin/types.d.ts +114 -73
  14. package/dist/base-plugin/types.d.ts.map +1 -1
  15. package/dist/base-plugin/types.js +141 -37
  16. package/dist/base-plugin/types.js.map +1 -1
  17. package/dist/base-plugin/viewtemplates/edit.d.ts +47 -3
  18. package/dist/base-plugin/viewtemplates/edit.d.ts.map +1 -1
  19. package/dist/base-plugin/viewtemplates/edit.js +204 -85
  20. package/dist/base-plugin/viewtemplates/edit.js.map +1 -1
  21. package/dist/base-plugin/viewtemplates/feed.d.ts +14 -1
  22. package/dist/base-plugin/viewtemplates/feed.d.ts.map +1 -1
  23. package/dist/base-plugin/viewtemplates/feed.js +20 -8
  24. package/dist/base-plugin/viewtemplates/feed.js.map +1 -1
  25. package/dist/base-plugin/viewtemplates/filter.d.ts +17 -1
  26. package/dist/base-plugin/viewtemplates/filter.d.ts.map +1 -1
  27. package/dist/base-plugin/viewtemplates/filter.js +64 -45
  28. package/dist/base-plugin/viewtemplates/filter.js.map +1 -1
  29. package/dist/base-plugin/viewtemplates/list.d.ts +20 -1
  30. package/dist/base-plugin/viewtemplates/list.d.ts.map +1 -1
  31. package/dist/base-plugin/viewtemplates/list.js +59 -40
  32. package/dist/base-plugin/viewtemplates/list.js.map +1 -1
  33. package/dist/base-plugin/viewtemplates/listshowlist.d.ts +14 -1
  34. package/dist/base-plugin/viewtemplates/listshowlist.d.ts.map +1 -1
  35. package/dist/base-plugin/viewtemplates/listshowlist.js +15 -4
  36. package/dist/base-plugin/viewtemplates/listshowlist.js.map +1 -1
  37. package/dist/base-plugin/viewtemplates/room.d.ts +41 -1
  38. package/dist/base-plugin/viewtemplates/room.d.ts.map +1 -1
  39. package/dist/base-plugin/viewtemplates/room.js +107 -80
  40. package/dist/base-plugin/viewtemplates/room.js.map +1 -1
  41. package/dist/base-plugin/viewtemplates/show.d.ts +37 -4
  42. package/dist/base-plugin/viewtemplates/show.d.ts.map +1 -1
  43. package/dist/base-plugin/viewtemplates/show.js +112 -75
  44. package/dist/base-plugin/viewtemplates/show.js.map +1 -1
  45. package/dist/base-plugin/viewtemplates/viewable_fields.d.ts +26 -7
  46. package/dist/base-plugin/viewtemplates/viewable_fields.d.ts.map +1 -1
  47. package/dist/base-plugin/viewtemplates/viewable_fields.js +60 -48
  48. package/dist/base-plugin/viewtemplates/viewable_fields.js.map +1 -1
  49. package/dist/coverage/coverage-final.json +46 -0
  50. package/dist/coverage/lcov-report/block-navigation.d.ts +2 -0
  51. package/dist/coverage/lcov-report/block-navigation.d.ts.map +1 -0
  52. package/dist/coverage/lcov-report/block-navigation.js +71 -0
  53. package/dist/coverage/lcov-report/block-navigation.js.map +1 -0
  54. package/dist/coverage/lcov-report/prettify.d.ts +1 -0
  55. package/dist/coverage/lcov-report/prettify.d.ts.map +1 -0
  56. package/dist/coverage/lcov-report/prettify.js +478 -0
  57. package/dist/coverage/lcov-report/prettify.js.map +1 -0
  58. package/dist/coverage/lcov-report/sorter.d.ts +2 -0
  59. package/dist/coverage/lcov-report/sorter.d.ts.map +1 -0
  60. package/dist/coverage/lcov-report/sorter.js +164 -0
  61. package/dist/coverage/lcov-report/sorter.js.map +1 -0
  62. package/dist/db/connect.d.ts.map +1 -1
  63. package/dist/db/connect.js +8 -1
  64. package/dist/db/connect.js.map +1 -1
  65. package/dist/db/connect_mobile.d.ts +9 -0
  66. package/dist/db/connect_mobile.d.ts.map +1 -0
  67. package/dist/db/connect_mobile.js +15 -0
  68. package/dist/db/connect_mobile.js.map +1 -0
  69. package/dist/db/fixtures.d.ts.map +1 -1
  70. package/dist/db/fixtures.js +2 -1
  71. package/dist/db/fixtures.js.map +1 -1
  72. package/dist/db/index.d.ts.map +1 -1
  73. package/dist/db/index.js +16 -2
  74. package/dist/db/index.js.map +1 -1
  75. package/dist/db/state.d.ts +207 -52
  76. package/dist/db/state.d.ts.map +1 -1
  77. package/dist/db/state.js +87 -84
  78. package/dist/db/state.js.map +1 -1
  79. package/dist/index.d.ts +8 -0
  80. package/dist/index.d.ts.map +1 -1
  81. package/dist/index.js +27 -2
  82. package/dist/index.js.map +1 -1
  83. package/dist/migrate.d.ts.map +1 -1
  84. package/dist/migrate.js +54 -40
  85. package/dist/migrate.js.map +1 -1
  86. package/dist/mobile-mocks/db/postgres.d.ts +1 -0
  87. package/dist/mobile-mocks/db/postgres.d.ts.map +1 -0
  88. package/dist/mobile-mocks/db/postgres.js +2 -0
  89. package/dist/mobile-mocks/db/postgres.js.map +1 -0
  90. package/dist/mobile-mocks/db/sqlite.d.ts +1 -0
  91. package/dist/mobile-mocks/db/sqlite.d.ts.map +1 -0
  92. package/dist/mobile-mocks/db/sqlite.js +2 -0
  93. package/dist/mobile-mocks/db/sqlite.js.map +1 -0
  94. package/dist/mobile-mocks/models/email.d.ts +1 -0
  95. package/dist/mobile-mocks/models/email.d.ts.map +1 -0
  96. package/dist/mobile-mocks/models/email.js +2 -0
  97. package/dist/mobile-mocks/models/email.js.map +1 -0
  98. package/dist/mobile-mocks/node/async_hooks.d.ts +4 -0
  99. package/dist/mobile-mocks/node/async_hooks.d.ts.map +1 -0
  100. package/dist/mobile-mocks/node/async_hooks.js +8 -0
  101. package/dist/mobile-mocks/node/async_hooks.js.map +1 -0
  102. package/dist/mobile-mocks/node/child_process.d.ts +3 -0
  103. package/dist/mobile-mocks/node/child_process.d.ts.map +1 -0
  104. package/dist/mobile-mocks/node/child_process.js +6 -0
  105. package/dist/mobile-mocks/node/child_process.js.map +1 -0
  106. package/dist/mobile-mocks/node/fs/promises.d.ts +6 -0
  107. package/dist/mobile-mocks/node/fs/promises.d.ts.map +1 -0
  108. package/dist/mobile-mocks/node/fs/promises.js +16 -0
  109. package/dist/mobile-mocks/node/fs/promises.js.map +1 -0
  110. package/dist/mobile-mocks/node/fs.d.ts +4 -0
  111. package/dist/mobile-mocks/node/fs.d.ts.map +1 -0
  112. package/dist/mobile-mocks/node/fs.js +15 -0
  113. package/dist/mobile-mocks/node/fs.js.map +1 -0
  114. package/dist/mobile-mocks/node/latest-version.d.ts +2 -0
  115. package/dist/mobile-mocks/node/latest-version.d.ts.map +1 -0
  116. package/dist/mobile-mocks/node/latest-version.js +7 -0
  117. package/dist/mobile-mocks/node/latest-version.js.map +1 -0
  118. package/dist/mobile-mocks/node/v8.d.ts +3 -0
  119. package/dist/mobile-mocks/node/v8.d.ts.map +1 -0
  120. package/dist/mobile-mocks/node/v8.js +8 -0
  121. package/dist/mobile-mocks/node/v8.js.map +1 -0
  122. package/dist/mobile-mocks/npm/env-paths.d.ts +6 -0
  123. package/dist/mobile-mocks/npm/env-paths.d.ts.map +1 -0
  124. package/dist/mobile-mocks/npm/env-paths.js +9 -0
  125. package/dist/mobile-mocks/npm/env-paths.js.map +1 -0
  126. package/dist/mobile-mocks/saltcorn/plugin-testing.d.ts +1 -0
  127. package/dist/mobile-mocks/saltcorn/plugin-testing.d.ts.map +1 -0
  128. package/dist/mobile-mocks/saltcorn/plugin-testing.js +2 -0
  129. package/dist/mobile-mocks/saltcorn/plugin-testing.js.map +1 -0
  130. package/dist/models/config.d.ts +9 -10
  131. package/dist/models/config.d.ts.map +1 -1
  132. package/dist/models/config.js +8 -7
  133. package/dist/models/config.js.map +1 -1
  134. package/dist/models/discovery.d.ts.map +1 -1
  135. package/dist/models/discovery.js +5 -1
  136. package/dist/models/discovery.js.map +1 -1
  137. package/dist/models/field.d.ts +5 -4
  138. package/dist/models/field.d.ts.map +1 -1
  139. package/dist/models/field.js +22 -19
  140. package/dist/models/field.js.map +1 -1
  141. package/dist/models/fieldrepeat.d.ts +5 -0
  142. package/dist/models/fieldrepeat.d.ts.map +1 -1
  143. package/dist/models/fieldrepeat.js +2 -0
  144. package/dist/models/fieldrepeat.js.map +1 -1
  145. package/dist/models/form.d.ts +2 -0
  146. package/dist/models/form.d.ts.map +1 -1
  147. package/dist/models/form.js +1 -0
  148. package/dist/models/form.js.map +1 -1
  149. package/dist/models/index.d.ts +2 -13
  150. package/dist/models/index.d.ts.map +1 -1
  151. package/dist/models/layout.d.ts.map +1 -1
  152. package/dist/models/layout.js +12 -2
  153. package/dist/models/layout.js.map +1 -1
  154. package/dist/models/page.d.ts +1 -1
  155. package/dist/models/page.d.ts.map +1 -1
  156. package/dist/models/page.js +10 -9
  157. package/dist/models/page.js.map +1 -1
  158. package/dist/models/scheduler.d.ts.map +1 -1
  159. package/dist/models/scheduler.js +3 -1
  160. package/dist/models/scheduler.js.map +1 -1
  161. package/dist/models/table.d.ts +2 -1
  162. package/dist/models/table.d.ts.map +1 -1
  163. package/dist/models/table.js +21 -10
  164. package/dist/models/table.js.map +1 -1
  165. package/dist/models/trigger.d.ts +3 -3
  166. package/dist/models/trigger.d.ts.map +1 -1
  167. package/dist/models/trigger.js +4 -5
  168. package/dist/models/trigger.js.map +1 -1
  169. package/dist/models/user.d.ts +1 -1
  170. package/dist/models/user.d.ts.map +1 -1
  171. package/dist/models/user.js +7 -15
  172. package/dist/models/user.js.map +1 -1
  173. package/dist/models/view.d.ts +16 -12
  174. package/dist/models/view.d.ts.map +1 -1
  175. package/dist/models/view.js +63 -15
  176. package/dist/models/view.js.map +1 -1
  177. package/dist/models/workflow.d.ts +1 -0
  178. package/dist/models/workflow.d.ts.map +1 -1
  179. package/dist/models/workflow.js +58 -2
  180. package/dist/models/workflow.js.map +1 -1
  181. package/dist/package.json +127 -0
  182. package/dist/plugin-helper.d.ts +17 -13
  183. package/dist/plugin-helper.d.ts.map +1 -1
  184. package/dist/plugin-helper.js +89 -61
  185. package/dist/plugin-helper.js.map +1 -1
  186. package/dist/tests/actions.test.js +30 -5
  187. package/dist/tests/actions.test.js.map +1 -1
  188. package/dist/tests/db.test.d.ts +2 -0
  189. package/dist/tests/db.test.d.ts.map +1 -0
  190. package/dist/tests/db.test.js +32 -0
  191. package/dist/tests/db.test.js.map +1 -0
  192. package/dist/tests/exact_views.test.js +274 -19
  193. package/dist/tests/exact_views.test.js.map +1 -1
  194. package/dist/tests/models.test.js +46 -1
  195. package/dist/tests/models.test.js.map +1 -1
  196. package/dist/tests/remote_query_helper.d.ts +341 -0
  197. package/dist/tests/remote_query_helper.d.ts.map +1 -0
  198. package/dist/tests/remote_query_helper.js +446 -0
  199. package/dist/tests/remote_query_helper.js.map +1 -0
  200. package/dist/tests/state.test.d.ts +2 -0
  201. package/dist/tests/state.test.d.ts.map +1 -0
  202. package/dist/tests/state.test.js +78 -0
  203. package/dist/tests/state.test.js.map +1 -0
  204. package/dist/tests/view.test.js +29 -0
  205. package/dist/tests/view.test.js.map +1 -1
  206. package/dist/tsconfig.json +24 -0
  207. package/dist/tsconfig.ref.json +9 -0
  208. package/dist/tsconfig.ref.tsbuildinfo +1 -1
  209. package/dist/utils.d.ts +3 -1
  210. package/dist/utils.d.ts.map +1 -1
  211. package/dist/utils.js +14 -23
  212. package/dist/utils.js.map +1 -1
  213. package/dist/webpack.config.d.ts +57 -0
  214. package/dist/webpack.config.d.ts.map +1 -0
  215. package/dist/webpack.config.js +75 -0
  216. package/dist/webpack.config.js.map +1 -0
  217. package/package.json +38 -13
  218. package/CHANGELOG.md +0 -8
  219. package/dist/models/backup.d.ts +0 -9
  220. package/dist/models/backup.d.ts.map +0 -1
  221. package/dist/models/backup.js +0 -278
  222. package/dist/models/backup.js.map +0 -1
  223. package/dist/models/pack.d.ts +0 -42
  224. package/dist/models/pack.d.ts.map +0 -1
  225. package/dist/models/pack.js +0 -419
  226. package/dist/models/pack.js.map +0 -1
  227. package/dist/models/tenant.d.ts +0 -17
  228. package/dist/models/tenant.d.ts.map +0 -1
  229. package/dist/models/tenant.js +0 -152
  230. package/dist/models/tenant.js.map +0 -1
  231. package/dist/tests/backup.test.d.ts +0 -2
  232. package/dist/tests/backup.test.d.ts.map +0 -1
  233. package/dist/tests/backup.test.js +0 -101
  234. package/dist/tests/backup.test.js.map +0 -1
  235. package/dist/tests/pack.test.d.ts +0 -2
  236. package/dist/tests/pack.test.d.ts.map +0 -1
  237. package/dist/tests/pack.test.js +0 -338
  238. package/dist/tests/pack.test.js.map +0 -1
  239. package/dist/tests/random.test.d.ts +0 -2
  240. package/dist/tests/random.test.d.ts.map +0 -1
  241. package/dist/tests/random.test.js +0 -149
  242. package/dist/tests/random.test.js.map +0 -1
  243. package/dist/tests/tenant.test.d.ts +0 -2
  244. package/dist/tests/tenant.test.d.ts.map +0 -1
  245. package/dist/tests/tenant.test.js +0 -52
  246. package/dist/tests/tenant.test.js.map +0 -1
@@ -12,27 +12,40 @@ const { getState } = require("../db/state");
12
12
  const page_1 = __importDefault(require("../models/page"));
13
13
  const globals_1 = require("@jest/globals");
14
14
  const assertions_1 = require("./assertions");
15
+ const remote_query_helper_1 = require("./remote_query_helper");
16
+ let remoteQueries = false;
15
17
  getState().registerPlugin("base", require("../base-plugin"));
16
18
  (0, globals_1.afterAll)(db_1.default.close);
17
19
  (0, globals_1.beforeAll)(async () => {
18
20
  await require("../db/reset_schema")();
19
21
  await require("../db/fixtures")();
22
+ if (process.env.REMOTE_QUERIES === "true") {
23
+ getState().setConfig("base_url", "http://localhost:3000");
24
+ remoteQueries = true;
25
+ (0, remote_query_helper_1.prepareQueryEnviroment)();
26
+ }
20
27
  });
21
28
  const mkTester = ({ name, viewtemplate, set_id, table, }) => async ({ response, id, ...rest }) => {
22
29
  const tbl = await table_1.default.findOne({ name: rest.table || table });
23
30
  (0, assertions_1.assertIsSet)(tbl);
24
- const v = await view_1.default.create({
31
+ const viewCfg = {
25
32
  table_id: tbl.id,
26
- name,
33
+ name: rest.name || name,
27
34
  viewtemplate,
28
35
  configuration: rest,
29
36
  min_role: 10,
30
- });
31
- const res = await v.run(id ? { id } : set_id ? { id: set_id } : {}, mockReqRes);
32
- if (res !== response)
33
- console.log(res);
37
+ };
38
+ const v = await view_1.default.create(viewCfg);
39
+ if (remoteQueries)
40
+ await (0, remote_query_helper_1.sendViewToServer)(viewCfg);
41
+ const res = await v.run(id ? { id } : set_id ? { id: set_id } : {}, mockReqRes, remoteQueries);
42
+ //if (res !== response) console.log(res);
34
43
  (0, globals_1.expect)(res).toBe(response);
35
- await v.delete();
44
+ if (!rest.noDelete) {
45
+ await v.delete();
46
+ if (remoteQueries)
47
+ await (0, remote_query_helper_1.deleteViewFromServer)(v.id);
48
+ }
36
49
  };
37
50
  const test_page = async ({ response, ...rest }) => {
38
51
  const p = await page_1.default.create(rest);
@@ -176,7 +189,9 @@ const test_filter = mkTester({
176
189
  in_modal: true,
177
190
  },
178
191
  ],
179
- response: `<div class="row w-100"><div class="col-6"><div class="card mt-4 shadow"><div class="card-body"><button class="btn btn-link" type="button" onClick="ajax_modal('/view/authorshow?id=1')">foo it</button></div></div></div><div class="col-6"><div class="text-start" style="min-height: 100px;border: 1px solid black; background-color: #a9a7a7; "><a href="https://countto.com/967">Herman Melville</a></div></div></div>`,
192
+ response: !remoteQueries
193
+ ? `<div class="row w-100"><div class="col-6"><div class="card mt-4 shadow"><div class="card-body"><button class="btn btn-link" type="button" onClick="ajax_modal('/view/authorshow?id=1')">foo it</button></div></div></div><div class="col-6"><div class="text-start" style="min-height: 100px;border: 1px solid black; background-color: #a9a7a7; "><a href="https://countto.com/967">Herman Melville</a></div></div></div>`
194
+ : `<div class="row w-100"><div class="col-6"><div class="card mt-4 shadow"><div class="card-body"><button class="btn btn-link" type="button" onClick="mobile_modal('/view/authorshow?id=1')">foo it</button></div></div></div><div class="col-6"><div class="text-start" style="min-height: 100px;border: 1px solid black; background-color: #a9a7a7; "><a href="https://countto.com/967">Herman Melville</a></div></div></div>`,
180
195
  });
181
196
  await test_show({
182
197
  layout: {
@@ -412,6 +427,198 @@ const test_filter = mkTester({
412
427
  <button type="submit" class=" btn btn-primary ">Delete</button></form></div>`,
413
428
  });
414
429
  });
430
+ (0, globals_1.it)("should render double join embedded exactly", async () => {
431
+ await test_list({
432
+ name: "ListReadings",
433
+ noDelete: true,
434
+ table: "readings",
435
+ columns: [
436
+ {
437
+ type: "Field",
438
+ fieldview: "showDay",
439
+ field_name: "date",
440
+ state_field: "on",
441
+ },
442
+ {
443
+ type: "Field",
444
+ fieldview: "show",
445
+ field_name: "normalised",
446
+ state_field: "on",
447
+ },
448
+ {
449
+ type: "JoinField",
450
+ join_field: "patient_id.name",
451
+ },
452
+ {
453
+ type: "Field",
454
+ fieldview: "show",
455
+ field_name: "temperature",
456
+ state_field: "on",
457
+ },
458
+ ],
459
+ response: !remoteQueries
460
+ ? `<div class="table-responsive"><table class="table table-sm"><thead><tr><th><a href="javascript:sortby('date', false)">Date</a></th><th><a href="javascript:sortby('normalised', false)">Normalised</a></th><th>name</th><th style="text-align: right"><a href="javascript:sortby('temperature', false)">Temperature</a></th></tr></thead><tbody><tr><td><time datetime="2019-11-11T10:34:00.000Z" locale-date-options="%7B%7D">11/11/2019</time></td><td><i class="fas fa-lg fa-check-circle text-success"></i></td><td>Kirk Douglas</td><td style="text-align:right">37</td></tr><tr><td></td><td><i class="fas fa-lg fa-times-circle text-danger"></i></td><td>Kirk Douglas</td><td style="text-align:right">39</td></tr><tr><td></td><td><i class="fas fa-lg fa-times-circle text-danger"></i></td><td>Michael Douglas</td><td style="text-align:right">37</td></tr></tbody></table></div>`
461
+ : `<div class="table-responsive"><table class="table table-sm"><thead><tr><th><a href="javascript:sortby('date', false, 'ListReadings')">Date</a></th><th><a href="javascript:sortby('normalised', false, 'ListReadings')">Normalised</a></th><th>name</th><th style="text-align: right"><a href="javascript:sortby('temperature', false, 'ListReadings')">Temperature</a></th></tr></thead><tbody><tr><td><time datetime="2019-11-11T10:34:00.000Z" locale-date-options="%7B%7D">11/11/2019</time></td><td><i class="fas fa-lg fa-check-circle text-success"></i></td><td>Kirk Douglas</td><td style="text-align:right">37</td></tr><tr><td></td><td><i class="fas fa-lg fa-times-circle text-danger"></i></td><td>Kirk Douglas</td><td style="text-align:right">39</td></tr><tr><td></td><td><i class="fas fa-lg fa-times-circle text-danger"></i></td><td>Michael Douglas</td><td style="text-align:right">37</td></tr></tbody></table></div>`,
462
+ });
463
+ await test_show({
464
+ id: 1,
465
+ layout: {
466
+ above: [
467
+ {
468
+ style: {},
469
+ widths: [2, 10],
470
+ besides: [
471
+ {
472
+ above: [
473
+ null,
474
+ {
475
+ font: "",
476
+ type: "blank",
477
+ block: false,
478
+ style: {},
479
+ inline: false,
480
+ contents: "Author",
481
+ labelFor: "",
482
+ isFormula: {},
483
+ textStyle: "",
484
+ },
485
+ ],
486
+ },
487
+ {
488
+ above: [
489
+ null,
490
+ {
491
+ type: "field",
492
+ block: false,
493
+ fieldview: "as_text",
494
+ textStyle: "",
495
+ field_name: "author",
496
+ configuration: {},
497
+ },
498
+ ],
499
+ },
500
+ ],
501
+ breakpoints: ["", ""],
502
+ },
503
+ {
504
+ type: "line_break",
505
+ },
506
+ {
507
+ style: {},
508
+ widths: [2, 10],
509
+ besides: [
510
+ {
511
+ above: [
512
+ null,
513
+ {
514
+ font: "",
515
+ type: "blank",
516
+ block: false,
517
+ style: {},
518
+ inline: false,
519
+ contents: "Pages",
520
+ labelFor: "",
521
+ isFormula: {},
522
+ textStyle: "",
523
+ },
524
+ ],
525
+ },
526
+ {
527
+ above: [
528
+ null,
529
+ {
530
+ type: "field",
531
+ block: false,
532
+ fieldview: "show",
533
+ textStyle: "",
534
+ field_name: "pages",
535
+ configuration: {},
536
+ },
537
+ ],
538
+ },
539
+ ],
540
+ breakpoints: ["", ""],
541
+ },
542
+ {
543
+ type: "line_break",
544
+ },
545
+ {
546
+ style: {},
547
+ widths: [2, 10],
548
+ besides: [
549
+ {
550
+ above: [
551
+ null,
552
+ {
553
+ font: "",
554
+ type: "blank",
555
+ block: false,
556
+ style: {},
557
+ inline: false,
558
+ contents: "Publisher",
559
+ labelFor: "",
560
+ isFormula: {},
561
+ textStyle: "",
562
+ },
563
+ ],
564
+ },
565
+ {
566
+ above: [
567
+ null,
568
+ {
569
+ type: "join_field",
570
+ block: false,
571
+ textStyle: "",
572
+ join_field: "publisher.name",
573
+ configuration: {},
574
+ },
575
+ ],
576
+ },
577
+ ],
578
+ breakpoints: ["", ""],
579
+ },
580
+ {
581
+ type: "line_break",
582
+ },
583
+ {
584
+ name: "46d4bc",
585
+ type: "view",
586
+ view: "ChildList:ListReadings.patients.favbook.readings.patient_id",
587
+ state: "shared",
588
+ configuration: {},
589
+ },
590
+ ],
591
+ },
592
+ columns: [
593
+ {
594
+ type: "Field",
595
+ block: false,
596
+ fieldview: "as_text",
597
+ textStyle: "",
598
+ field_name: "author",
599
+ configuration: {},
600
+ },
601
+ {
602
+ type: "Field",
603
+ block: false,
604
+ fieldview: "show",
605
+ textStyle: "",
606
+ field_name: "pages",
607
+ configuration: {},
608
+ },
609
+ {
610
+ type: "JoinField",
611
+ block: false,
612
+ textStyle: "",
613
+ join_field: "publisher.name",
614
+ configuration: {},
615
+ },
616
+ ],
617
+ response: !remoteQueries
618
+ ? `<div class="row w-100"><div class="col-2">Author</div><div class="col-10">Herman Melville</div></div><br /><div class="row w-100"><div class="col-2">Pages</div><div class="col-10">967</div></div><br /><div class="row w-100"><div class="col-2">Publisher</div><div class="col-10"></div></div><br /><div class="table-responsive"><table class="table table-sm"><thead><tr><th><a href="javascript:sortby('date', false)">Date</a></th><th><a href="javascript:sortby('normalised', false)">Normalised</a></th><th>name</th><th style="text-align: right"><a href="javascript:sortby('temperature', false)">Temperature</a></th></tr></thead><tbody><tr><td><time datetime="2019-11-11T10:34:00.000Z" locale-date-options="%7B%7D">11/11/2019</time></td><td><i class="fas fa-lg fa-check-circle text-success"></i></td><td>Kirk Douglas</td><td style="text-align:right">37</td></tr><tr><td></td><td><i class="fas fa-lg fa-times-circle text-danger"></i></td><td>Kirk Douglas</td><td style="text-align:right">39</td></tr></tbody></table></div>`
619
+ : `<div class="row w-100"><div class="col-2">Author</div><div class="col-10">Herman Melville</div></div><br /><div class="row w-100"><div class="col-2">Pages</div><div class="col-10">967</div></div><br /><div class="row w-100"><div class="col-2">Publisher</div><div class="col-10"></div></div><br /><div class="table-responsive"><table class="table table-sm"><thead><tr><th><a href="javascript:sortby('date', false, 'ListReadings')">Date</a></th><th><a href="javascript:sortby('normalised', false, 'ListReadings')">Normalised</a></th><th>name</th><th style="text-align: right"><a href="javascript:sortby('temperature', false, 'ListReadings')">Temperature</a></th></tr></thead><tbody><tr><td><time datetime="2019-11-11T10:34:00.000Z" locale-date-options="%7B%7D">11/11/2019</time></td><td><i class="fas fa-lg fa-check-circle text-success"></i></td><td>Kirk Douglas</td><td style="text-align:right">37</td></tr><tr><td></td><td><i class="fas fa-lg fa-times-circle text-danger"></i></td><td>Kirk Douglas</td><td style="text-align:right">39</td></tr></tbody></table></div>`,
620
+ });
621
+ });
415
622
  });
416
623
  (0, globals_1.describe)("Edit view", () => {
417
624
  (0, globals_1.it)("should render exactly", async () => {
@@ -496,13 +703,45 @@ const test_filter = mkTester({
496
703
  await test_edit({
497
704
  layout,
498
705
  columns,
499
- response: `<form action="/view/testedit" class="form-namespace " method="post"><input type="hidden" name="_csrf" value=""><div class="row w-100"><div class="col-2">Name</div><div class="col-10"><input type="text" class="form-control " data-fieldname="name" name="name" id="inputname"></div></div><br /><div class="row w-100"><div class="col-2">Favourite book</div><div class="col-10"><select class="form-control form-select " data-fieldname="favbook" name="favbook" id="inputfavbook"><option value=""></option><option value="1">Herman Melville</option><option value="2">Leo Tolstoy</option></select></div></div><br /><div class="row w-100"><div class="col-2">Parent</div><div class="col-10"><select class="form-control form-select " data-fieldname="parent" name="parent" id="inputparent"><option value=""></option><option value="1">Kirk Douglas</option><option value="2">Michael Douglas</option></select></div></div><br /><button type="submit" class="btn btn-primary ">Save</button></form>`,
706
+ response: !remoteQueries
707
+ ? `<form action="/view/testedit" class="form-namespace " method="post"><input type="hidden" name="_csrf" value=""><div class="row w-100"><div class="col-2">Name</div><div class="col-10"><input type="text" class="form-control " data-fieldname="name" name="name" id="inputname"></div></div><br /><div class="row w-100"><div class="col-2">Favourite book</div><div class="col-10"><select class="form-control form-select " data-fieldname="favbook" name="favbook" id="inputfavbook"><option value=""></option><option value="1">Herman Melville</option><option value="2">Leo Tolstoy</option></select></div></div><br /><div class="row w-100"><div class="col-2">Parent</div><div class="col-10"><select class="form-control form-select " data-fieldname="parent" name="parent" id="inputparent"><option value=""></option><option value="1">Kirk Douglas</option><option value="2">Michael Douglas</option></select></div></div><br /><button type="submit" class="btn btn-primary ">Save</button></form>`
708
+ : `<form action="javascript:void(0)" onsubmit="javascript:formSubmit(this, '/view/', 'testedit')" class="form-namespace " method="post"><input type="hidden" name="_csrf" value="false"><div class="row w-100"><div class="col-2">Name</div><div class="col-10"><input type="text" class="form-control " data-fieldname="name" name="name" id="inputname"></div></div><br /><div class="row w-100"><div class="col-2">Favourite book</div><div class="col-10"><select class="form-control form-select " data-fieldname="favbook" name="favbook" id="inputfavbook"><option value=""></option><option value="1">Herman Melville</option><option value="2">Leo Tolstoy</option></select></div></div><br /><div class="row w-100"><div class="col-2">Parent</div><div class="col-10"><select class="form-control form-select " data-fieldname="parent" name="parent" id="inputparent"><option value=""></option><option value="1">Kirk Douglas</option><option value="2">Michael Douglas</option></select></div></div><br /><button type="submit" class="btn btn-primary ">Save</button></form>`,
500
709
  });
501
710
  await test_edit({
502
711
  id: 1,
503
712
  layout,
504
713
  columns,
505
- response: `<form action="/view/testedit" class="form-namespace " method="post"><input type="hidden" name="_csrf" value=""><input type="hidden" class="form-control " name="id" value="1"><div class="row w-100"><div class="col-2">Name</div><div class="col-10"><input type="text" class="form-control " data-fieldname="name" name="name" id="inputname" value="Kirk Douglas"></div></div><br /><div class="row w-100"><div class="col-2">Favourite book</div><div class="col-10"><select class="form-control form-select " data-fieldname="favbook" name="favbook" id="inputfavbook"><option value=""></option><option value="1" selected>Herman Melville</option><option value="2">Leo Tolstoy</option></select></div></div><br /><div class="row w-100"><div class="col-2">Parent</div><div class="col-10"><select class="form-control form-select " data-fieldname="parent" name="parent" id="inputparent"><option value=""></option><option value="1">Kirk Douglas</option><option value="2">Michael Douglas</option></select></div></div><br /><button type="submit" class="btn btn-primary ">Save</button></form>`,
714
+ response: !remoteQueries
715
+ ? `<form action="/view/testedit" class="form-namespace " method="post"><input type="hidden" name="_csrf" value=""><input type="hidden" class="form-control " name="id" value="1"><div class="row w-100"><div class="col-2">Name</div><div class="col-10"><input type="text" class="form-control " data-fieldname="name" name="name" id="inputname" value="Kirk Douglas"></div></div><br /><div class="row w-100"><div class="col-2">Favourite book</div><div class="col-10"><select class="form-control form-select " data-fieldname="favbook" name="favbook" id="inputfavbook"><option value=""></option><option value="1" selected>Herman Melville</option><option value="2">Leo Tolstoy</option></select></div></div><br /><div class="row w-100"><div class="col-2">Parent</div><div class="col-10"><select class="form-control form-select " data-fieldname="parent" name="parent" id="inputparent"><option value=""></option><option value="1">Kirk Douglas</option><option value="2">Michael Douglas</option></select></div></div><br /><button type="submit" class="btn btn-primary ">Save</button></form>`
716
+ : `<form action="javascript:void(0)" onsubmit="javascript:formSubmit(this, '/view/', 'testedit')" class="form-namespace " method="post"><input type="hidden" name="_csrf" value="false"><input type="hidden" class="form-control " name="id" value="1"><div class="row w-100"><div class="col-2">Name</div><div class="col-10"><input type="text" class="form-control " data-fieldname="name" name="name" id="inputname" value="Kirk Douglas"></div></div><br /><div class="row w-100"><div class="col-2">Favourite book</div><div class="col-10"><select class="form-control form-select " data-fieldname="favbook" name="favbook" id="inputfavbook"><option value=""></option><option value="1" selected>Herman Melville</option><option value="2">Leo Tolstoy</option></select></div></div><br /><div class="row w-100"><div class="col-2">Parent</div><div class="col-10"><select class="form-control form-select " data-fieldname="parent" name="parent" id="inputparent"><option value=""></option><option value="1">Kirk Douglas</option><option value="2">Michael Douglas</option></select></div></div><br /><button type="submit" class="btn btn-primary ">Save</button></form>`,
717
+ });
718
+ });
719
+ (0, globals_1.it)("should render edit-in-edit", async () => {
720
+ await test_edit({
721
+ name: "innerReads",
722
+ ...remote_query_helper_1.renderEditInEditConfig.innerEdit,
723
+ noDelete: true,
724
+ table: "readings",
725
+ response: !remoteQueries
726
+ ? `<form action="/view/innerReads" class="form-namespace " method="post"><input type="hidden" name="_csrf" value=""><div class="row w-100"><div class="col-2"><label for="inputdate">Date</label></div><div class="col-10"><input type="text" class="form-control " data-fieldname="date" name="date" id="inputdate"></div></div><br /><div class="row w-100"><div class="col-2"><label for="inputnormalised">Normalised</label></div><div class="col-10"><input class="me-2 mt-1 " data-fieldname="normalised" type="checkbox" name="normalised" id="inputnormalised"></div></div><br /><div class="row w-100"><div class="col-2"><label for="inputtemperature">Temperature</label></div><div class="col-10"><input type="number" class="form-control " data-fieldname="temperature" name="temperature" id="inputtemperature" step="1"></div></div></form>`
727
+ : `<form action="javascript:void(0)" onsubmit="javascript:formSubmit(this, '/view/', 'innerReads')" class="form-namespace " method="post"><input type="hidden" name="_csrf" value="false"><div class="row w-100"><div class="col-2"><label for="inputdate">Date</label></div><div class="col-10"><input type="text" class="form-control " data-fieldname="date" name="date" id="inputdate"></div></div><br /><div class="row w-100"><div class="col-2"><label for="inputnormalised">Normalised</label></div><div class="col-10"><input class="me-2 mt-1 " data-fieldname="normalised" type="checkbox" name="normalised" id="inputnormalised"></div></div><br /><div class="row w-100"><div class="col-2"><label for="inputtemperature">Temperature</label></div><div class="col-10"><input type="number" class="form-control " data-fieldname="temperature" name="temperature" id="inputtemperature" step="1"></div></div></form>`,
728
+ });
729
+ await test_edit({
730
+ name: "PatientEditWithReads",
731
+ ...remote_query_helper_1.renderEditInEditConfig.outerEdit,
732
+ table: "patients",
733
+ response: !remoteQueries
734
+ ? `<form action="/view/PatientEditWithReads" class="form-namespace " method="post"><input type="hidden" name="_csrf" value=""><div class="row w-100"><div class="col-2"><label for="inputfavbook">Favourite book</label></div><div class="col-10"><select class="form-control form-select " data-fieldname="favbook" name="favbook" id="inputfavbook"><option value=""></option><option value="1">Herman Melville</option><option value="2">Leo Tolstoy</option></select></div></div><br /><span style="margin-bottom:1.5rem"><div class="row w-100" style="margin-bottom:1.5rem"><div class="col-2"><label for="inputname">Name</label></div><div class="col-10"><input type="text" class="form-control " data-fieldname="name" name="name" id="inputname"></div></div></span><div class="row w-100"><div class="col-2"><label for="inputparent">Parent</label></div><div class="col-10"><select class="form-control form-select " data-fieldname="parent" name="parent" id="inputparent"><option value=""></option><option value="1">Kirk Douglas</option><option value="2">Michael Douglas</option></select></div></div><br /><div><div class="repeats-patient_id"><div class="form-repeat form-namespace repeat-patient_id"><div class="float-end"><span onclick="rep_up(this)"><i class="fa fa-arrow-up pull-right"></i></span>&nbsp;<span onclick="rep_del(this)"><i class="fa fa-times pull-right"></i></span>&nbsp;<span onclick="rep_down(this)"><i class="fa fa-arrow-down pull-right"></i></span></div><div class="row w-100"><div class="col-2"><label for="inputdate">Date</label></div><div class="col-10"><input type="text" class="form-control " data-fieldname="date" name="date_0" id="inputdate_0"></div></div><br /><div class="row w-100"><div class="col-2"><label for="inputnormalised">Normalised</label></div><div class="col-10"><input class="me-2 mt-1 " data-fieldname="normalised" type="checkbox" name="normalised_0" id="inputnormalised_0"></div></div><br /><div class="row w-100"><div class="col-2"><label for="inputtemperature">Temperature</label></div><div class="col-10"><input type="number" class="form-control " data-fieldname="temperature" name="temperature_0" id="inputtemperature_0" step="1"></div></div></div></div><a class="btn btn-sm btn-outline-primary mb-3" href="javascript:add_repeater('patient_id')" title="Add"><i class="fas fa-plus"></i></a></div><button type="submit" class="btn btn-primary ">Save</button><button onClick="$(this).closest('form').trigger('reset')" type="button" class="btn btn-primary ">Reset</button></form>`
735
+ : `<form action="javascript:void(0)" onsubmit="javascript:formSubmit(this, '/view/', 'PatientEditWithReads')" class="form-namespace " method="post"><input type="hidden" name="_csrf" value="false"><div class="row w-100"><div class="col-2"><label for="inputfavbook">Favourite book</label></div><div class="col-10"><select class="form-control form-select " data-fieldname="favbook" name="favbook" id="inputfavbook"><option value=""></option><option value="1">Herman Melville</option><option value="2">Leo Tolstoy</option></select></div></div><br /><span style="margin-bottom:1.5rem"><div class="row w-100" style="margin-bottom:1.5rem"><div class="col-2"><label for="inputname">Name</label></div><div class="col-10"><input type="text" class="form-control " data-fieldname="name" name="name" id="inputname"></div></div></span><div class="row w-100"><div class="col-2"><label for="inputparent">Parent</label></div><div class="col-10"><select class="form-control form-select " data-fieldname="parent" name="parent" id="inputparent"><option value=""></option><option value="1">Kirk Douglas</option><option value="2">Michael Douglas</option></select></div></div><br /><div><div class="repeats-patient_id"><div class="form-repeat form-namespace repeat-patient_id"><div class="float-end"><span onclick="rep_up(this)"><i class="fa fa-arrow-up pull-right"></i></span>&nbsp;<span onclick="rep_del(this)"><i class="fa fa-times pull-right"></i></span>&nbsp;<span onclick="rep_down(this)"><i class="fa fa-arrow-down pull-right"></i></span></div><div class="row w-100"><div class="col-2"><label for="inputdate">Date</label></div><div class="col-10"><input type="text" class="form-control " data-fieldname="date" name="date_0" id="inputdate_0"></div></div><br /><div class="row w-100"><div class="col-2"><label for="inputnormalised">Normalised</label></div><div class="col-10"><input class="me-2 mt-1 " data-fieldname="normalised" type="checkbox" name="normalised_0" id="inputnormalised_0"></div></div><br /><div class="row w-100"><div class="col-2"><label for="inputtemperature">Temperature</label></div><div class="col-10"><input type="number" class="form-control " data-fieldname="temperature" name="temperature_0" id="inputtemperature_0" step="1"></div></div></div></div><a class="btn btn-sm btn-outline-primary mb-3" href="javascript:add_repeater('patient_id')" title="Add"><i class="fas fa-plus"></i></a></div><button type="submit" class="btn btn-primary ">Save</button><button onClick="$(this).closest('form').trigger('reset')" type="button" class="btn btn-primary ">Reset</button></form>`,
736
+ });
737
+ await test_edit({
738
+ name: "PatientEditWithReads",
739
+ id: 1,
740
+ ...remote_query_helper_1.renderEditInEditConfig.outerEdit,
741
+ table: "patients",
742
+ response: !remoteQueries
743
+ ? `<form action="/view/PatientEditWithReads" class="form-namespace " method="post"><input type="hidden" name="_csrf" value=""><input type="hidden" class="form-control " name="id" value="1"><div class="row w-100"><div class="col-2"><label for="inputfavbook">Favourite book</label></div><div class="col-10"><select class="form-control form-select " data-fieldname="favbook" name="favbook" id="inputfavbook"><option value=""></option><option value="1" selected>Herman Melville</option><option value="2">Leo Tolstoy</option></select></div></div><br /><span style="margin-bottom:1.5rem"><div class="row w-100" style="margin-bottom:1.5rem"><div class="col-2"><label for="inputname">Name</label></div><div class="col-10"><input type="text" class="form-control " data-fieldname="name" name="name" id="inputname" value="Kirk Douglas"></div></div></span><div class="row w-100"><div class="col-2"><label for="inputparent">Parent</label></div><div class="col-10"><select class="form-control form-select " data-fieldname="parent" name="parent" id="inputparent"><option value=""></option><option value="1">Kirk Douglas</option><option value="2">Michael Douglas</option></select></div></div><br /><div><div class="repeats-patient_id"><div class="form-repeat form-namespace repeat-patient_id"><div class="float-end"><span onclick="rep_up(this)"><i class="fa fa-arrow-up pull-right"></i></span>&nbsp;<span onclick="rep_del(this)"><i class="fa fa-times pull-right"></i></span>&nbsp;<span onclick="rep_down(this)"><i class="fa fa-arrow-down pull-right"></i></span></div><div class="row w-100"><div class="col-2"><label for="inputdate">Date</label></div><div class="col-10"><input type="text" class="form-control " data-fieldname="date" name="date_0" id="inputdate_0" value="11/11/2019"></div></div><br /><div class="row w-100"><div class="col-2"><label for="inputnormalised">Normalised</label></div><div class="col-10"><input class="me-2 mt-1 " data-fieldname="normalised" type="checkbox" name="normalised_0" id="inputnormalised_0" checked></div></div><br /><div class="row w-100"><div class="col-2"><label for="inputtemperature">Temperature</label></div><div class="col-10"><input type="number" class="form-control " data-fieldname="temperature" name="temperature_0" id="inputtemperature_0" step="1" value="37"></div></div><input type="hidden" class="form-control " name="id_0" value="1"></div><div class="form-repeat form-namespace repeat-patient_id"><div class="float-end"><span onclick="rep_up(this)"><i class="fa fa-arrow-up pull-right"></i></span>&nbsp;<span onclick="rep_del(this)"><i class="fa fa-times pull-right"></i></span>&nbsp;<span onclick="rep_down(this)"><i class="fa fa-arrow-down pull-right"></i></span></div><div class="row w-100"><div class="col-2"><label for="inputdate">Date</label></div><div class="col-10"><input type="text" class="form-control " data-fieldname="date" name="date_1" id="inputdate_1"></div></div><br /><div class="row w-100"><div class="col-2"><label for="inputnormalised">Normalised</label></div><div class="col-10"><input class="me-2 mt-1 " data-fieldname="normalised" type="checkbox" name="normalised_1" id="inputnormalised_1"></div></div><br /><div class="row w-100"><div class="col-2"><label for="inputtemperature">Temperature</label></div><div class="col-10"><input type="number" class="form-control " data-fieldname="temperature" name="temperature_1" id="inputtemperature_1" step="1" value="39"></div></div><input type="hidden" class="form-control " name="id_1" value="2"></div></div><a class="btn btn-sm btn-outline-primary mb-3" href="javascript:add_repeater('patient_id')" title="Add"><i class="fas fa-plus"></i></a></div><button type="submit" class="btn btn-primary ">Save</button><button onClick="$(this).closest('form').trigger('reset')" type="button" class="btn btn-primary ">Reset</button><button onClick="if(confirm('Are you sure?'))ajax_post('/delete/patients/1', {success:()=>window.location.href='/'})" type="button" class="btn btn-primary ">Delete</button></form>`
744
+ : `<form action="javascript:void(0)" onsubmit="javascript:formSubmit(this, '/view/', 'PatientEditWithReads')" class="form-namespace " method="post"><input type="hidden" name="_csrf" value="false"><input type="hidden" class="form-control " name="id" value="1"><div class="row w-100"><div class="col-2"><label for="inputfavbook">Favourite book</label></div><div class="col-10"><select class="form-control form-select " data-fieldname="favbook" name="favbook" id="inputfavbook"><option value=""></option><option value="1" selected>Herman Melville</option><option value="2">Leo Tolstoy</option></select></div></div><br /><span style="margin-bottom:1.5rem"><div class="row w-100" style="margin-bottom:1.5rem"><div class="col-2"><label for="inputname">Name</label></div><div class="col-10"><input type="text" class="form-control " data-fieldname="name" name="name" id="inputname" value="Kirk Douglas"></div></div></span><div class="row w-100"><div class="col-2"><label for="inputparent">Parent</label></div><div class="col-10"><select class="form-control form-select " data-fieldname="parent" name="parent" id="inputparent"><option value=""></option><option value="1">Kirk Douglas</option><option value="2">Michael Douglas</option></select></div></div><br /><div><div class="repeats-patient_id"><div class="form-repeat form-namespace repeat-patient_id"><div class="float-end"><span onclick="rep_up(this)"><i class="fa fa-arrow-up pull-right"></i></span>&nbsp;<span onclick="rep_del(this)"><i class="fa fa-times pull-right"></i></span>&nbsp;<span onclick="rep_down(this)"><i class="fa fa-arrow-down pull-right"></i></span></div><div class="row w-100"><div class="col-2"><label for="inputdate">Date</label></div><div class="col-10"><input type="text" class="form-control " data-fieldname="date" name="date_0" id="inputdate_0" value="11/11/2019"></div></div><br /><div class="row w-100"><div class="col-2"><label for="inputnormalised">Normalised</label></div><div class="col-10"><input class="me-2 mt-1 " data-fieldname="normalised" type="checkbox" name="normalised_0" id="inputnormalised_0" checked></div></div><br /><div class="row w-100"><div class="col-2"><label for="inputtemperature">Temperature</label></div><div class="col-10"><input type="number" class="form-control " data-fieldname="temperature" name="temperature_0" id="inputtemperature_0" step="1" value="37"></div></div><input type="hidden" class="form-control " name="id_0" value="1"></div><div class="form-repeat form-namespace repeat-patient_id"><div class="float-end"><span onclick="rep_up(this)"><i class="fa fa-arrow-up pull-right"></i></span>&nbsp;<span onclick="rep_del(this)"><i class="fa fa-times pull-right"></i></span>&nbsp;<span onclick="rep_down(this)"><i class="fa fa-arrow-down pull-right"></i></span></div><div class="row w-100"><div class="col-2"><label for="inputdate">Date</label></div><div class="col-10"><input type="text" class="form-control " data-fieldname="date" name="date_1" id="inputdate_1"></div></div><br /><div class="row w-100"><div class="col-2"><label for="inputnormalised">Normalised</label></div><div class="col-10"><input class="me-2 mt-1 " data-fieldname="normalised" type="checkbox" name="normalised_1" id="inputnormalised_1"></div></div><br /><div class="row w-100"><div class="col-2"><label for="inputtemperature">Temperature</label></div><div class="col-10"><input type="number" class="form-control " data-fieldname="temperature" name="temperature_1" id="inputtemperature_1" step="1" value="39"></div></div><input type="hidden" class="form-control " name="id_1" value="2"></div></div><a class="btn btn-sm btn-outline-primary mb-3" href="javascript:add_repeater('patient_id')" title="Add"><i class="fas fa-plus"></i></a></div><button type="submit" class="btn btn-primary ">Save</button><button onClick="$(this).closest('form').trigger('reset')" type="button" class="btn btn-primary ">Reset</button><button onClick="if(confirm('Are you sure?'))local_post('/delete/patients/1', {after_delete_url:'/'})" type="button" class="btn btn-primary ">Delete</button></form>`,
506
745
  });
507
746
  });
508
747
  });
@@ -560,10 +799,12 @@ const test_filter = mkTester({
560
799
  header_label: "",
561
800
  },
562
801
  ],
563
- response: '<div class="table-responsive"><table class="table table-sm"><thead><tr><th><a href="javascript:sortby(\'name\', false)">Name</a></th><th>name</th><th>author</th><th>Helloer</th><th>authorshow</th><th>readings</th><th></th><th></th></tr></thead><tbody><tr><td>Kirk Douglas</td><td></td><td>Herman Melville</td><td><a href="javascript:view_post(\'testlist\', \'run_action\', {action_name:\'run_js_code\', id:1});" class="btn btn-primary ">say hi</a></td><td><a href="/view/authorshow?id=1">6</a></td><td>2</td><td><a href="https://lmgtfy.app/?q=Kirk Douglas">KIRK DOUGLAS</a></td><td><form action="/delete/patients/1?redirect=/view/testlist" method="post">\n <input type="hidden" name="_csrf" value="">\n<button type="button" onclick="if(confirm(\'Are you sure?\')) {ajax_post_btn(this, true, undefined)}" class=" btn btn-sm btn-outline-primary">Delete</button></form></td></tr><tr><td>Michael Douglas</td><td>Kirk Douglas</td><td>Leo Tolstoy</td><td><a href="javascript:view_post(\'testlist\', \'run_action\', {action_name:\'run_js_code\', id:2});" class="btn btn-primary ">say hi</a></td><td><a href="/view/authorshow?id=2">7</a></td><td>1</td><td><a href="https://lmgtfy.app/?q=Michael Douglas">MICHAEL DOUGLAS</a></td><td><form action="/delete/patients/2?redirect=/view/testlist" method="post">\n <input type="hidden" name="_csrf" value="">\n<button type="button" onclick="if(confirm(\'Are you sure?\')) {ajax_post_btn(this, true, undefined)}" class=" btn btn-sm btn-outline-primary">Delete</button></form></td></tr></tbody></table></div>',
802
+ response: !remoteQueries
803
+ ? '<div class="table-responsive"><table class="table table-sm"><thead><tr><th><a href="javascript:sortby(\'name\', false)">Name</a></th><th>name</th><th>author</th><th>Helloer</th><th>authorshow</th><th>readings</th><th></th><th></th></tr></thead><tbody><tr><td>Kirk Douglas</td><td></td><td>Herman Melville</td><td><a href="javascript:view_post(\'testlist\', \'run_action\', {action_name:\'run_js_code\', id:1});" class="btn btn-primary ">say hi</a></td><td><a href="/view/authorshow?id=1">6</a></td><td>2</td><td><a href="https://lmgtfy.app/?q=Kirk Douglas">KIRK DOUGLAS</a></td><td><form action="/delete/patients/1?redirect=/view/testlist" method="post">\n <input type="hidden" name="_csrf" value="">\n<button type="button" onclick="if(confirm(\'Are you sure?\')) {ajax_post_btn(this, true, undefined)}" class=" btn btn-sm btn-outline-primary">Delete</button></form></td></tr><tr><td>Michael Douglas</td><td>Kirk Douglas</td><td>Leo Tolstoy</td><td><a href="javascript:view_post(\'testlist\', \'run_action\', {action_name:\'run_js_code\', id:2});" class="btn btn-primary ">say hi</a></td><td><a href="/view/authorshow?id=2">7</a></td><td>1</td><td><a href="https://lmgtfy.app/?q=Michael Douglas">MICHAEL DOUGLAS</a></td><td><form action="/delete/patients/2?redirect=/view/testlist" method="post">\n <input type="hidden" name="_csrf" value="">\n<button type="button" onclick="if(confirm(\'Are you sure?\')) {ajax_post_btn(this, true, undefined)}" class=" btn btn-sm btn-outline-primary">Delete</button></form></td></tr></tbody></table></div>'
804
+ : '<div class="table-responsive"><table class="table table-sm"><thead><tr><th><a href="javascript:sortby(\'name\', false, \'testlist\')">Name</a></th><th>name</th><th>author</th><th>Helloer</th><th>authorshow</th><th>readings</th><th></th><th></th></tr></thead><tbody><tr><td>Kirk Douglas</td><td></td><td>Herman Melville</td><td><a href="javascript:view_post(\'testlist\', \'run_action\', {action_name:\'run_js_code\', id:1});" class="btn btn-primary ">say hi</a></td><td><a href="javascript:execLink(\'/view/authorshow?id=1\')">6</a></td><td>2</td><td><a href="https://lmgtfy.app/?q=Kirk Douglas">KIRK DOUGLAS</a></td><td><form action="/delete/patients/1?redirect=/view/testlist" method="post">\n <input type="hidden" name="_csrf" value="">\n<button type="button" onclick="if(confirm(\'Are you sure?\')) {local_post_btn(this)}" class=" btn btn-sm btn-outline-primary">Delete</button></form></td></tr><tr><td>Michael Douglas</td><td>Kirk Douglas</td><td>Leo Tolstoy</td><td><a href="javascript:view_post(\'testlist\', \'run_action\', {action_name:\'run_js_code\', id:2});" class="btn btn-primary ">say hi</a></td><td><a href="javascript:execLink(\'/view/authorshow?id=2\')">7</a></td><td>1</td><td><a href="https://lmgtfy.app/?q=Michael Douglas">MICHAEL DOUGLAS</a></td><td><form action="/delete/patients/2?redirect=/view/testlist" method="post">\n <input type="hidden" name="_csrf" value="">\n<button type="button" onclick="if(confirm(\'Are you sure?\')) {local_post_btn(this)}" class=" btn btn-sm btn-outline-primary">Delete</button></form></td></tr></tbody></table></div>',
564
805
  });
565
806
  });
566
- (0, globals_1.it)("should render list view with where aggregations", async () => {
807
+ (0, globals_1.it)("should render list view with where aggregations exactly", async () => {
567
808
  await test_list({
568
809
  table: "books",
569
810
  columns: [
@@ -594,10 +835,12 @@ const test_filter = mkTester({
594
835
  header_label: "count 1",
595
836
  },
596
837
  ],
597
- response: `<div class="table-responsive"><table class="table table-sm"><thead><tr><th><a href="javascript:sortby('author', false)">Author</a></th><th>Count patients</th><th>count 1</th></tr></thead><tbody><tr><td>Herman Melville</td><td>1</td><td>1</td></tr><tr><td>Leo Tolstoy</td><td>1</td><td>0</td></tr></tbody></table></div>`,
838
+ response: !remoteQueries
839
+ ? `<div class="table-responsive"><table class="table table-sm"><thead><tr><th><a href="javascript:sortby('author', false)">Author</a></th><th>Count patients</th><th>count 1</th></tr></thead><tbody><tr><td>Herman Melville</td><td>1</td><td>1</td></tr><tr><td>Leo Tolstoy</td><td>1</td><td>0</td></tr></tbody></table></div>`
840
+ : `<div class="table-responsive"><table class="table table-sm"><thead><tr><th><a href="javascript:sortby('author', false, 'testlist')">Author</a></th><th>Count patients</th><th>count 1</th></tr></thead><tbody><tr><td>Herman Melville</td><td>1</td><td>1</td></tr><tr><td>Leo Tolstoy</td><td>1</td><td>0</td></tr></tbody></table></div>`,
598
841
  });
599
842
  });
600
- (0, globals_1.it)("should render triply joined formulae list view", async () => {
843
+ (0, globals_1.it)("should render triply joined formulae list view exactly", async () => {
601
844
  await test_list({
602
845
  table: "readings",
603
846
  columns: [
@@ -634,7 +877,9 @@ const test_filter = mkTester({
634
877
  link_text_formula: "on",
635
878
  },
636
879
  ],
637
- response: `<div class="table-responsive"><table class="table table-sm"><thead><tr><th style="text-align: right"><a href="javascript:sortby('temperature', false)">Temperature</a></th><th>name</th><th>author</th><th>publisher</th></tr></thead><tbody><tr><td style="text-align:right">37</td><td><a href="http://bbc.co.uk">Kirk Douglas</a></td><td><a href="http://bbc.co.uk">Herman Melville</a></td><td><a href="http://bbc.co.uk"></a></td></tr><tr><td style="text-align:right">39</td><td><a href="http://bbc.co.uk">Kirk Douglas</a></td><td><a href="http://bbc.co.uk">Herman Melville</a></td><td><a href="http://bbc.co.uk"></a></td></tr><tr><td style="text-align:right">37</td><td><a href="http://bbc.co.uk">Michael Douglas</a></td><td><a href="http://bbc.co.uk">Leo Tolstoy</a></td><td><a href="http://bbc.co.uk">AK Press</a></td></tr></tbody></table></div>`,
880
+ response: !remoteQueries
881
+ ? `<div class="table-responsive"><table class="table table-sm"><thead><tr><th style="text-align: right"><a href="javascript:sortby('temperature', false)">Temperature</a></th><th>name</th><th>author</th><th>publisher</th></tr></thead><tbody><tr><td style="text-align:right">37</td><td><a href="http://bbc.co.uk">Kirk Douglas</a></td><td><a href="http://bbc.co.uk">Herman Melville</a></td><td><a href="http://bbc.co.uk"></a></td></tr><tr><td style="text-align:right">39</td><td><a href="http://bbc.co.uk">Kirk Douglas</a></td><td><a href="http://bbc.co.uk">Herman Melville</a></td><td><a href="http://bbc.co.uk"></a></td></tr><tr><td style="text-align:right">37</td><td><a href="http://bbc.co.uk">Michael Douglas</a></td><td><a href="http://bbc.co.uk">Leo Tolstoy</a></td><td><a href="http://bbc.co.uk">AK Press</a></td></tr></tbody></table></div>`
882
+ : `<div class="table-responsive"><table class="table table-sm"><thead><tr><th style="text-align: right"><a href="javascript:sortby('temperature', false, 'testlist')">Temperature</a></th><th>name</th><th>author</th><th>publisher</th></tr></thead><tbody><tr><td style="text-align:right">37</td><td><a href="http://bbc.co.uk">Kirk Douglas</a></td><td><a href="http://bbc.co.uk">Herman Melville</a></td><td><a href="http://bbc.co.uk"></a></td></tr><tr><td style="text-align:right">39</td><td><a href="http://bbc.co.uk">Kirk Douglas</a></td><td><a href="http://bbc.co.uk">Herman Melville</a></td><td><a href="http://bbc.co.uk"></a></td></tr><tr><td style="text-align:right">37</td><td><a href="http://bbc.co.uk">Michael Douglas</a></td><td><a href="http://bbc.co.uk">Leo Tolstoy</a></td><td><a href="http://bbc.co.uk">AK Press</a></td></tr></tbody></table></div>`,
638
883
  });
639
884
  });
640
885
  (0, globals_1.it)("should render triply joined with dropdown list view", async () => {
@@ -708,13 +953,21 @@ const test_filter = mkTester({
708
953
  header_label: "",
709
954
  },
710
955
  ],
711
- response: `<div class="table-responsive"><table class="table table-sm"><thead><tr><th><a href="javascript:sortby('normalised', false)">Normalised</a></th><th>author</th><th style="text-align: right"><a href="javascript:sortby('temperature', false)">Temperature</a></th><th>name</th><th>showreads</th><th></th><th>Action</th></tr></thead><tbody><tr><td><i class="fas fa-lg fa-check-circle text-success"></i></td><td>Herman Melville</td><td style="text-align:right">37</td><td></td><td><a href="/view/showreads?id=1">showreads</a></td><td><a href="http://bbc.co.uk">Foo 7</a></td><td><div class="dropdown"><button class="btn btn-sm btn-outline-secondary dropdown-toggle" data-boundary="viewport" type="button" id="actiondd1" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Action</button><div class="dropdown-menu dropdown-menu-end" aria-labelledby="actiondd1"><form action="/delete/readings/1?redirect=/view/testlist" method="post">
956
+ response: !remoteQueries
957
+ ? `<div class="table-responsive"><table class="table table-sm"><thead><tr><th><a href="javascript:sortby('normalised', false)">Normalised</a></th><th>author</th><th style="text-align: right"><a href="javascript:sortby('temperature', false)">Temperature</a></th><th>name</th><th>showreads</th><th></th><th>Action</th></tr></thead><tbody><tr><td><i class="fas fa-lg fa-check-circle text-success"></i></td><td>Herman Melville</td><td style="text-align:right">37</td><td></td><td><a href="/view/showreads?id=1">showreads</a></td><td><a href="http://bbc.co.uk">Foo 7</a></td><td><div class="dropdown"><button class="btn btn-sm btn-outline-secondary dropdown-toggle" data-boundary="viewport" type="button" id="actiondd1" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Action</button><div class="dropdown-menu dropdown-menu-end" aria-labelledby="actiondd1"><form action="/delete/readings/1?redirect=/view/testlist" method="post">
712
958
  <input type="hidden" name="_csrf" value="">
713
959
  <button type="button" onclick="ajax_post_btn(this, true, undefined)" class=" btn btn-sm dropdown-item">Delete</button></form><button class="btn btn-link dropdown-item" type="button" onClick="ajax_modal('/view/showreads?id=1')">showreads</button></div></div></td></tr><tr><td><i class="fas fa-lg fa-times-circle text-danger"></i></td><td>Herman Melville</td><td style="text-align:right">39</td><td></td><td><a href="/view/showreads?id=2">showreads</a></td><td><a href="http://bbc.co.uk">Foo 9</a></td><td><div class="dropdown"><button class="btn btn-sm btn-outline-secondary dropdown-toggle" data-boundary="viewport" type="button" id="actiondd2" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Action</button><div class="dropdown-menu dropdown-menu-end" aria-labelledby="actiondd2"><form action="/delete/readings/2?redirect=/view/testlist" method="post">
714
960
  <input type="hidden" name="_csrf" value="">
715
961
  <button type="button" onclick="ajax_post_btn(this, true, undefined)" class=" btn btn-sm dropdown-item">Delete</button></form><button class="btn btn-link dropdown-item" type="button" onClick="ajax_modal('/view/showreads?id=2')">showreads</button></div></div></td></tr><tr><td><i class="fas fa-lg fa-times-circle text-danger"></i></td><td>Leo Tolstoy</td><td style="text-align:right">37</td><td>AK Press</td><td><a href="/view/showreads?id=3">showreads</a></td><td><a href="http://bbc.co.uk">Foo 7</a></td><td><div class="dropdown"><button class="btn btn-sm btn-outline-secondary dropdown-toggle" data-boundary="viewport" type="button" id="actiondd3" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Action</button><div class="dropdown-menu dropdown-menu-end" aria-labelledby="actiondd3"><form action="/delete/readings/3?redirect=/view/testlist" method="post">
716
962
  <input type="hidden" name="_csrf" value="">
717
- <button type="button" onclick="ajax_post_btn(this, true, undefined)" class=" btn btn-sm dropdown-item">Delete</button></form><button class="btn btn-link dropdown-item" type="button" onClick="ajax_modal('/view/showreads?id=3')">showreads</button></div></div></td></tr></tbody></table></div>`,
963
+ <button type="button" onclick="ajax_post_btn(this, true, undefined)" class=" btn btn-sm dropdown-item">Delete</button></form><button class="btn btn-link dropdown-item" type="button" onClick="ajax_modal('/view/showreads?id=3')">showreads</button></div></div></td></tr></tbody></table></div>`
964
+ : `<div class="table-responsive"><table class="table table-sm"><thead><tr><th><a href="javascript:sortby('normalised', false, 'testlist')">Normalised</a></th><th>author</th><th style="text-align: right"><a href="javascript:sortby('temperature', false, 'testlist')">Temperature</a></th><th>name</th><th>showreads</th><th></th><th>Action</th></tr></thead><tbody><tr><td><i class="fas fa-lg fa-check-circle text-success"></i></td><td>Herman Melville</td><td style="text-align:right">37</td><td></td><td><a href="javascript:execLink('/view/showreads?id=1')">showreads</a></td><td><a href="http://bbc.co.uk">Foo 7</a></td><td><div class="dropdown"><button class="btn btn-sm btn-outline-secondary dropdown-toggle" data-boundary="viewport" type="button" id="actiondd1" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Action</button><div class="dropdown-menu dropdown-menu-end" aria-labelledby="actiondd1"><form action="/delete/readings/1?redirect=/view/testlist" method="post">
965
+ <input type="hidden" name="_csrf" value="">
966
+ <button type="button" onclick="local_post_btn(this)" class=" btn btn-sm dropdown-item">Delete</button></form><button class="btn btn-link dropdown-item" type="button" onClick="mobile_modal('/view/showreads?id=1')">showreads</button></div></div></td></tr><tr><td><i class="fas fa-lg fa-times-circle text-danger"></i></td><td>Herman Melville</td><td style="text-align:right">39</td><td></td><td><a href="javascript:execLink('/view/showreads?id=2')">showreads</a></td><td><a href="http://bbc.co.uk">Foo 9</a></td><td><div class="dropdown"><button class="btn btn-sm btn-outline-secondary dropdown-toggle" data-boundary="viewport" type="button" id="actiondd2" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Action</button><div class="dropdown-menu dropdown-menu-end" aria-labelledby="actiondd2"><form action="/delete/readings/2?redirect=/view/testlist" method="post">
967
+ <input type="hidden" name="_csrf" value="">
968
+ <button type="button" onclick="local_post_btn(this)" class=" btn btn-sm dropdown-item">Delete</button></form><button class="btn btn-link dropdown-item" type="button" onClick="mobile_modal('/view/showreads?id=2')">showreads</button></div></div></td></tr><tr><td><i class="fas fa-lg fa-times-circle text-danger"></i></td><td>Leo Tolstoy</td><td style="text-align:right">37</td><td>AK Press</td><td><a href="javascript:execLink('/view/showreads?id=3')">showreads</a></td><td><a href="http://bbc.co.uk">Foo 7</a></td><td><div class="dropdown"><button class="btn btn-sm btn-outline-secondary dropdown-toggle" data-boundary="viewport" type="button" id="actiondd3" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Action</button><div class="dropdown-menu dropdown-menu-end" aria-labelledby="actiondd3"><form action="/delete/readings/3?redirect=/view/testlist" method="post">
969
+ <input type="hidden" name="_csrf" value="">
970
+ <button type="button" onclick="local_post_btn(this)" class=" btn btn-sm dropdown-item">Delete</button></form><button class="btn btn-link dropdown-item" type="button" onClick="mobile_modal('/view/showreads?id=3')">showreads</button></div></div></td></tr></tbody></table></div>`,
718
971
  });
719
972
  });
720
973
  });
@@ -755,7 +1008,7 @@ const test_filter = mkTester({
755
1008
  { type: "DropDownFilter", field_name: "author" },
756
1009
  ],
757
1010
  viewname: "testfilter",
758
- response: '<div class="row w-100"><div class="col-6"><select name="ddfilterpatients.favbook.name" class="form-control form-select d-inline" style="width: unset;" onchange="this.value==\'\' ? unset_state_field(\'patients.favbook.name\'): set_state_field(\'patients.favbook.name\', this.value)"><option value="" class="text-muted"></option><option value="Kirk Douglas">Kirk Douglas</option><option value="Michael Douglas">Michael Douglas</option></select></div><div class="col-6"><button class="btn btn-outline-primary" onClick="set_state_field(\'pages\', \'13\')">thirteen</button></div></div><button class="btn btn-outline-primary" onClick="set_state_field(\'patients.favbook.name\', \'Jim\')">Jim</button><select name="ddfilterauthor" class="form-control form-select d-inline" style="width: unset;" onchange="this.value==\'\' ? unset_state_field(\'author\'): set_state_field(\'author\', this.value)"><option value="" class="text-muted"></option><option value="Herman Melville">Herman Melville</option><option value="Leo Tolstoy">Leo Tolstoy</option></select>',
1011
+ response: '<div class="form-namespace"><div class="row w-100"><div class="col-6"><select name="ddfilterpatients.favbook.name" class="form-control form-select d-inline" style="width: unset;" onchange="this.value==\'\' ? unset_state_field(\'patients.favbook.name\'): set_state_field(\'patients.favbook.name\', this.value)"><option value="" class="text-muted"></option><option value="Kirk Douglas">Kirk Douglas</option><option value="Michael Douglas">Michael Douglas</option></select></div><div class="col-6"><button class="btn btn-outline-primary" onClick="set_state_field(\'pages\', \'13\')">thirteen</button></div></div><button class="btn btn-outline-primary" onClick="set_state_field(\'patients.favbook.name\', \'Jim\')">Jim</button><select name="ddfilterauthor" class="form-control form-select d-inline" style="width: unset;" onchange="this.value==\'\' ? unset_state_field(\'author\'): set_state_field(\'author\', this.value)"><option value="" class="text-muted"></option><option value="Herman Melville">Herman Melville</option><option value="Leo Tolstoy">Leo Tolstoy</option></select></div>',
759
1012
  });
760
1013
  });
761
1014
  });
@@ -807,7 +1060,9 @@ const test_filter = mkTester({
807
1060
  type: "view",
808
1061
  view: "authorlist",
809
1062
  state: "shared",
810
- contents: '<div class="table-responsive"><table class="table table-sm"><thead><tr><th><a href="javascript:sortby(\'author\', false)">Author</a></th><th>authorshow</th><th></th><th>Count patients</th></tr></thead><tbody><tr><td>Herman Melville</td><td><a href="/view/authorshow?id=1">authorshow</a></td><td><form action="/delete/books/1?redirect=/view/authorlist" method="post">\n <input type="hidden" name="_csrf" value="">\n<button type="button" onclick="ajax_post_btn(this, true, undefined)" class=" btn btn-sm btn-primary">Delete</button></form></td><td>1</td></tr><tr><td>Leo Tolstoy</td><td><a href="/view/authorshow?id=2">authorshow</a></td><td><form action="/delete/books/2?redirect=/view/authorlist" method="post">\n <input type="hidden" name="_csrf" value="">\n<button type="button" onclick="ajax_post_btn(this, true, undefined)" class=" btn btn-sm btn-primary">Delete</button></form></td><td>1</td></tr></tbody></table></div>',
1063
+ contents: !remoteQueries
1064
+ ? '<div class="table-responsive"><table class="table table-sm"><thead><tr><th><a href="javascript:sortby(\'author\', false)">Author</a></th><th>authorshow</th><th></th><th>Count patients</th></tr></thead><tbody><tr><td>Herman Melville</td><td><a href="/view/authorshow?id=1">authorshow</a></td><td><form action="/delete/books/1?redirect=/view/authorlist" method="post">\n <input type="hidden" name="_csrf" value="">\n<button type="button" onclick="ajax_post_btn(this, true, undefined)" class=" btn btn-sm btn-primary">Delete</button></form></td><td>1</td></tr><tr><td>Leo Tolstoy</td><td><a href="/view/authorshow?id=2">authorshow</a></td><td><form action="/delete/books/2?redirect=/view/authorlist" method="post">\n <input type="hidden" name="_csrf" value="">\n<button type="button" onclick="ajax_post_btn(this, true, undefined)" class=" btn btn-sm btn-primary">Delete</button></form></td><td>1</td></tr></tbody></table></div>'
1065
+ : '<div class="table-responsive"><table class="table table-sm"><thead><tr><th><a href="javascript:sortby(\'author\', false, \'authorlist\')">Author</a></th><th>authorshow</th><th></th><th>Count patients</th></tr></thead><tbody><tr><td>Herman Melville</td><td><a href="javascript:execLink(\'/view/authorshow?id=1\')">authorshow</a></td><td><form action="/delete/books/1?redirect=/view/authorlist" method="post">\n <input type="hidden" name="_csrf" value="">\n<button type="button" onclick="local_post_btn(this)" class=" btn btn-sm btn-primary">Delete</button></form></td><td>1</td></tr><tr><td>Leo Tolstoy</td><td><a href="javascript:execLink(\'/view/authorshow?id=2\')">authorshow</a></td><td><form action="/delete/books/2?redirect=/view/authorlist" method="post">\n <input type="hidden" name="_csrf" value="">\n<button type="button" onclick="local_post_btn(this)" class=" btn btn-sm btn-primary">Delete</button></form></td><td>1</td></tr></tbody></table></div>',
811
1066
  },
812
1067
  {
813
1068
  name: "18a8cc",