solid-panes 3.7.3 → 4.0.0-cc645f25

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 (379) hide show
  1. package/dist/RDFXMLPane.js +59 -0
  2. package/dist/RDFXMLPane.js.map +1 -0
  3. package/{lib → dist}/argument/argumentPane.js +14 -15
  4. package/dist/argument/argumentPane.js.map +1 -0
  5. package/{lib → dist}/attach/attachPane.js +83 -93
  6. package/dist/attach/attachPane.js.map +1 -0
  7. package/{lib → dist}/audio/audioPane.js +49 -50
  8. package/dist/audio/audioPane.js.map +1 -0
  9. package/{lib → dist}/classInstancePane.js +23 -24
  10. package/dist/classInstancePane.js.map +1 -0
  11. package/dist/dashboard/basicPreferences.js +147 -0
  12. package/dist/dashboard/basicPreferences.js.map +1 -0
  13. package/{lib → dist}/dashboard/dashboardPane.js +17 -21
  14. package/dist/dashboard/dashboardPane.js.map +1 -0
  15. package/dist/dashboard/homepage.js +54 -0
  16. package/dist/dashboard/homepage.js.map +1 -0
  17. package/{lib → dist}/dataContentPane.js +64 -63
  18. package/dist/dataContentPane.js.map +1 -0
  19. package/{lib → dist}/defaultPane.js +15 -16
  20. package/dist/defaultPane.js.map +1 -0
  21. package/{lib → dist}/dokieli/dokieliPane.js +49 -53
  22. package/dist/dokieli/dokieliPane.js.map +1 -0
  23. package/{src → dist}/dokieli/new.js +9 -3
  24. package/dist/dokieli/new.js.map +1 -0
  25. package/{lib → dist}/form/pane.js +44 -45
  26. package/dist/form/pane.js.map +1 -0
  27. package/dist/home/homePane.js +73 -0
  28. package/dist/home/homePane.js.map +1 -0
  29. package/dist/humanReadablePane.js +135 -0
  30. package/dist/humanReadablePane.js.map +1 -0
  31. package/dist/imagePane.js +70 -0
  32. package/dist/imagePane.js.map +1 -0
  33. package/{lib → dist}/index.js +17 -20
  34. package/dist/index.js.map +1 -0
  35. package/{lib → dist}/internal/internalPane.js +41 -41
  36. package/dist/internal/internalPane.js.map +1 -0
  37. package/{lib → dist}/mainPage/footer.js +2 -2
  38. package/{lib → dist}/mainPage/footer.js.map +1 -1
  39. package/dist/mainPage/header.js +86 -0
  40. package/dist/mainPage/header.js.map +1 -0
  41. package/{lib → dist}/mainPage/index.d.ts.map +1 -1
  42. package/dist/mainPage/index.js +25 -0
  43. package/dist/mainPage/index.js.map +1 -0
  44. package/{lib → dist}/microblogPane/microblogPane.js +270 -270
  45. package/dist/microblogPane/microblogPane.js.map +1 -0
  46. package/dist/n3Pane.js +57 -0
  47. package/dist/n3Pane.js.map +1 -0
  48. package/{lib → dist}/outline/context.js +4 -4
  49. package/{lib → dist}/outline/context.js.map +1 -1
  50. package/dist/outline/manager.js +1997 -0
  51. package/dist/outline/manager.js.map +1 -0
  52. package/{lib → dist}/outline/outlineIcons.js +2 -3
  53. package/dist/outline/outlineIcons.js.map +1 -0
  54. package/{lib → dist}/outline/propertyViews.js +4 -4
  55. package/dist/outline/propertyViews.js.map +1 -0
  56. package/{lib → dist}/outline/queryByExample.js +33 -33
  57. package/dist/outline/queryByExample.js.map +1 -0
  58. package/{lib → dist}/outline/userInput.js +268 -266
  59. package/dist/outline/userInput.js.map +1 -0
  60. package/dist/outline/viewAsImage.js +15 -0
  61. package/dist/outline/viewAsImage.js.map +1 -0
  62. package/dist/outline/viewAsMbox.js +22 -0
  63. package/dist/outline/viewAsMbox.js.map +1 -0
  64. package/{lib → dist}/pad/padPane.js +90 -96
  65. package/dist/pad/padPane.js.map +1 -0
  66. package/{lib → dist}/playlist/playlistPane.js +36 -37
  67. package/dist/playlist/playlistPane.js.map +1 -0
  68. package/{lib → dist}/registerPanes.js +29 -29
  69. package/dist/registerPanes.js.map +1 -0
  70. package/{lib → dist}/schedule/schedulePane.js +171 -178
  71. package/dist/schedule/schedulePane.js.map +1 -0
  72. package/{lib → dist}/sharing/sharingPane.js +12 -12
  73. package/dist/sharing/sharingPane.js.map +1 -0
  74. package/dist/slideshow/slideshowPane.js +80 -0
  75. package/dist/slideshow/slideshowPane.js.map +1 -0
  76. package/{lib → dist}/socialPane.js +142 -142
  77. package/dist/socialPane.js.map +1 -0
  78. package/dist/tabbed/tabbedPane.js +58 -0
  79. package/dist/tabbed/tabbedPane.js.map +1 -0
  80. package/{lib → dist}/tableViewPane.js +8 -9
  81. package/dist/tableViewPane.js.map +1 -0
  82. package/{lib → dist}/transaction/pane.js +117 -118
  83. package/dist/transaction/pane.js.map +1 -0
  84. package/{lib → dist}/transaction/period.js +82 -83
  85. package/dist/transaction/period.js.map +1 -0
  86. package/{lib → dist}/trip/tripPane.js +47 -48
  87. package/dist/trip/tripPane.js.map +1 -0
  88. package/dist/trustedApplications/trustedApplications.dom.js +146 -0
  89. package/dist/trustedApplications/trustedApplications.dom.js.map +1 -0
  90. package/dist/trustedApplications/trustedApplications.utils.js +24 -0
  91. package/dist/trustedApplications/trustedApplications.utils.js.map +1 -0
  92. package/dist/trustedApplications/trustedApplications.view.js +56 -0
  93. package/dist/trustedApplications/trustedApplications.view.js.map +1 -0
  94. package/{lib → dist}/ui/pane.js +30 -31
  95. package/dist/ui/pane.js.map +1 -0
  96. package/dist/versionInfo.js +37 -0
  97. package/dist/versionInfo.js.map +1 -0
  98. package/dist/video/videoPane.js +43 -0
  99. package/dist/video/videoPane.js.map +1 -0
  100. package/package.json +46 -40
  101. package/Documentation/VisualLanguage.html +0 -538
  102. package/Documentation/conventions.md +0 -333
  103. package/coverage/clover.xml +0 -152
  104. package/coverage/coverage-final.json +0 -6
  105. package/coverage/lcov-report/base.css +0 -224
  106. package/coverage/lcov-report/block-navigation.js +0 -87
  107. package/coverage/lcov-report/favicon.png +0 -0
  108. package/coverage/lcov-report/index.html +0 -131
  109. package/coverage/lcov-report/outline/index.html +0 -161
  110. package/coverage/lcov-report/outline/outlineIcons.js.html +0 -565
  111. package/coverage/lcov-report/outline/propertyViews.ts.html +0 -196
  112. package/coverage/lcov-report/outline/viewAsImage.ts.html +0 -121
  113. package/coverage/lcov-report/outline/viewAsMbox.ts.html +0 -127
  114. package/coverage/lcov-report/prettify.css +0 -1
  115. package/coverage/lcov-report/prettify.js +0 -2
  116. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  117. package/coverage/lcov-report/sorter.js +0 -210
  118. package/coverage/lcov-report/trustedApplications/index.html +0 -116
  119. package/coverage/lcov-report/trustedApplications/trustedApplications.utils.ts.html +0 -238
  120. package/coverage/lcov.info +0 -204
  121. package/dev/index.html +0 -28
  122. package/dev/loader.ts +0 -91
  123. package/dev/pane/index.ts +0 -10
  124. package/doc/images/panes-for-classes.epgz +0 -0
  125. package/doc/images/panes-for-classes.svg +0 -609
  126. package/eslint.config.mjs +0 -34
  127. package/jest.config.js +0 -27
  128. package/jest.setup.ts +0 -4
  129. package/lib/RDFXMLPane.js +0 -59
  130. package/lib/RDFXMLPane.js.map +0 -1
  131. package/lib/argument/argumentPane.js.map +0 -1
  132. package/lib/attach/attachPane.js.map +0 -1
  133. package/lib/audio/audioPane.js.map +0 -1
  134. package/lib/classInstancePane.js.map +0 -1
  135. package/lib/dashboard/basicPreferences.js +0 -229
  136. package/lib/dashboard/basicPreferences.js.map +0 -1
  137. package/lib/dashboard/dashboardPane.js.map +0 -1
  138. package/lib/dashboard/homepage.js +0 -86
  139. package/lib/dashboard/homepage.js.map +0 -1
  140. package/lib/dataContentPane.js.map +0 -1
  141. package/lib/defaultPane.js.map +0 -1
  142. package/lib/dokieli/dokieliPane.js.map +0 -1
  143. package/lib/dokieli/new.js +0 -9
  144. package/lib/dokieli/new.js.map +0 -1
  145. package/lib/form/pane.js.map +0 -1
  146. package/lib/global.d.js +0 -2
  147. package/lib/global.d.js.map +0 -1
  148. package/lib/home/homePane.js +0 -91
  149. package/lib/home/homePane.js.map +0 -1
  150. package/lib/humanReadablePane.js +0 -138
  151. package/lib/humanReadablePane.js.map +0 -1
  152. package/lib/imagePane.js +0 -71
  153. package/lib/imagePane.js.map +0 -1
  154. package/lib/index.js.map +0 -1
  155. package/lib/internal/internalPane.js.map +0 -1
  156. package/lib/mainPage/header.js +0 -152
  157. package/lib/mainPage/header.js.map +0 -1
  158. package/lib/mainPage/index.js +0 -42
  159. package/lib/mainPage/index.js.map +0 -1
  160. package/lib/microblogPane/microblogPane.js.map +0 -1
  161. package/lib/n3Pane.js +0 -57
  162. package/lib/n3Pane.js.map +0 -1
  163. package/lib/outline/manager.js +0 -2264
  164. package/lib/outline/manager.js.map +0 -1
  165. package/lib/outline/manager.test.d.ts +0 -2
  166. package/lib/outline/manager.test.d.ts.map +0 -1
  167. package/lib/outline/manager.test.js +0 -210
  168. package/lib/outline/manager.test.js.map +0 -1
  169. package/lib/outline/outlineIcons.js.map +0 -1
  170. package/lib/outline/propertyViews.js.map +0 -1
  171. package/lib/outline/propertyViews.test.d.ts +0 -2
  172. package/lib/outline/propertyViews.test.d.ts.map +0 -1
  173. package/lib/outline/propertyViews.test.js +0 -27
  174. package/lib/outline/propertyViews.test.js.map +0 -1
  175. package/lib/outline/queryByExample.js.map +0 -1
  176. package/lib/outline/userInput.js.map +0 -1
  177. package/lib/outline/viewAsImage.js +0 -17
  178. package/lib/outline/viewAsImage.js.map +0 -1
  179. package/lib/outline/viewAsMbox.js +0 -23
  180. package/lib/outline/viewAsMbox.js.map +0 -1
  181. package/lib/pad/padPane.js.map +0 -1
  182. package/lib/playlist/playlistPane.js.map +0 -1
  183. package/lib/registerPanes.js.map +0 -1
  184. package/lib/schedule/formsForSchedule.js +0 -8
  185. package/lib/schedule/formsForSchedule.js.map +0 -1
  186. package/lib/schedule/schedulePane.js.map +0 -1
  187. package/lib/sharing/sharingPane.js.map +0 -1
  188. package/lib/slideshow/slideshowPane.js +0 -84
  189. package/lib/slideshow/slideshowPane.js.map +0 -1
  190. package/lib/socialPane.js.map +0 -1
  191. package/lib/tabbed/tabbedPane.js +0 -72
  192. package/lib/tabbed/tabbedPane.js.map +0 -1
  193. package/lib/tableViewPane.js.map +0 -1
  194. package/lib/test-import-export/common.js +0 -12
  195. package/lib/test-import-export/common.js.map +0 -1
  196. package/lib/test-import-export/edit-importer.js +0 -25
  197. package/lib/test-import-export/edit-importer.js.map +0 -1
  198. package/lib/test-import-export/testImportExport.js +0 -2
  199. package/lib/test-import-export/testImportExport.js.map +0 -1
  200. package/lib/transaction/pane.js.map +0 -1
  201. package/lib/transaction/period.js.map +0 -1
  202. package/lib/trip/tripPane.js.map +0 -1
  203. package/lib/trustedApplications/trustedApplications.dom.js +0 -177
  204. package/lib/trustedApplications/trustedApplications.dom.js.map +0 -1
  205. package/lib/trustedApplications/trustedApplications.test.d.ts +0 -2
  206. package/lib/trustedApplications/trustedApplications.test.d.ts.map +0 -1
  207. package/lib/trustedApplications/trustedApplications.test.js +0 -64
  208. package/lib/trustedApplications/trustedApplications.test.js.map +0 -1
  209. package/lib/trustedApplications/trustedApplications.utils.js +0 -34
  210. package/lib/trustedApplications/trustedApplications.utils.js.map +0 -1
  211. package/lib/trustedApplications/trustedApplications.view.js +0 -87
  212. package/lib/trustedApplications/trustedApplications.view.js.map +0 -1
  213. package/lib/types.d.ts +0 -30
  214. package/lib/types.d.ts.map +0 -1
  215. package/lib/types.js +0 -6
  216. package/lib/types.js.map +0 -1
  217. package/lib/ui/pane.js.map +0 -1
  218. package/lib/versionInfo.d.ts +0 -32
  219. package/lib/versionInfo.d.ts.map +0 -1
  220. package/lib/versionInfo.js +0 -37
  221. package/lib/versionInfo.js.map +0 -1
  222. package/lib/video/videoPane.js +0 -44
  223. package/lib/video/videoPane.js.map +0 -1
  224. package/src/RDFXMLPane.js +0 -60
  225. package/src/argument/argumentPane.js +0 -65
  226. package/src/argument/argument_icon_v04.jpg +0 -0
  227. package/src/argument/icon_argument.png +0 -0
  228. package/src/argument/transparentyingyang.png +0 -0
  229. package/src/attach/attachPane.js +0 -508
  230. package/src/attach/tbl-paperclip-128.png +0 -0
  231. package/src/attach/tbl-paperclip-22.png +0 -0
  232. package/src/attach/tbl-paperclip-22a.png +0 -0
  233. package/src/audio/audioPane.js +0 -197
  234. package/src/chatPreferencesForm.ttl +0 -12
  235. package/src/classInstancePane.js +0 -110
  236. package/src/dashboard/basicPreferences.ts +0 -201
  237. package/src/dashboard/dashboardPane.ts +0 -83
  238. package/src/dashboard/homepage.ts +0 -72
  239. package/src/dashboard/languages/codes.html +0 -8611
  240. package/src/dashboard/languages/codes.xml +0 -3563
  241. package/src/dashboard/languages/codes2.txt +0 -170
  242. package/src/dashboard/languages/foo +0 -70
  243. package/src/dashboard/languages/foo.ttl +0 -0
  244. package/src/dashboard/languages/get-language-names.sh +0 -12
  245. package/src/dashboard/ontologyData.ttl +0 -35
  246. package/src/dashboard/preferencesFormText.ttl +0 -18
  247. package/src/dataContentPane.js +0 -290
  248. package/src/defaultPane.js +0 -102
  249. package/src/dokieli/Makefile +0 -6
  250. package/src/dokieli/dokieliPane.js +0 -190
  251. package/src/dokieli/new.html +0 -30
  252. package/src/form/form-22.png +0 -0
  253. package/src/form/form-b-22.png +0 -0
  254. package/src/form/form.graffle +0 -0
  255. package/src/form/form.png +0 -0
  256. package/src/form/pane.js +0 -217
  257. package/src/form/psuedocode-notes.txt +0 -57
  258. package/src/global.d.ts +0 -4
  259. package/src/home/homePane.ts +0 -72
  260. package/src/humanReadablePane.js +0 -150
  261. package/src/imagePane.js +0 -75
  262. package/src/index.ts +0 -71
  263. package/src/internal/internalPane.ts +0 -263
  264. package/src/mainPage/footer.ts +0 -19
  265. package/src/mainPage/header.ts +0 -79
  266. package/src/mainPage/index.ts +0 -20
  267. package/src/meeting/Makefile +0 -3
  268. package/src/meeting/test/meeting1/Actions/actions.ttl +0 -14
  269. package/src/meeting/test/meeting1/Actions/config.ttl +0 -16
  270. package/src/meeting/test/meeting1/Actions/state.ttl +0 -30
  271. package/src/meeting/test/meeting1/Schedule/details.ttl +0 -34
  272. package/src/meeting/test/meeting1/Schedule/details.ttl.acl +0 -20
  273. package/src/meeting/test/meeting1/Schedule/forms.ttl +0 -75
  274. package/src/meeting/test/meeting1/Schedule/forms.ttl.acl +0 -20
  275. package/src/meeting/test/meeting1/Schedule/index.html +0 -72
  276. package/src/meeting/test/meeting1/Schedule/index.html.acl +0 -20
  277. package/src/meeting/test/meeting1/Schedule/results.ttl +0 -15
  278. package/src/meeting/test/meeting1/Schedule/results.ttl.acl +0 -20
  279. package/src/meeting/test/meeting1/SharedNotes/pad.ttl +0 -23
  280. package/src/meeting/test/meeting1/chat/chat.ttl +0 -1
  281. package/src/meeting/test/meeting1/details.ttl +0 -35
  282. package/src/meeting/test/meeting1/pad/pad.ttl +0 -16
  283. package/src/microblogPane/mbStyle.css +0 -267
  284. package/src/microblogPane/microblogPane.js +0 -1412
  285. package/src/n3Pane.js +0 -56
  286. package/src/outline/context.ts +0 -21
  287. package/src/outline/manager.js +0 -2384
  288. package/src/outline/manager.test.ts +0 -189
  289. package/src/outline/outlineIcons.js +0 -160
  290. package/src/outline/propertyViews.test.ts +0 -36
  291. package/src/outline/propertyViews.ts +0 -37
  292. package/src/outline/queryByExample.js +0 -296
  293. package/src/outline/userInput.js +0 -2373
  294. package/src/outline/viewAsImage.ts +0 -12
  295. package/src/outline/viewAsMbox.ts +0 -14
  296. package/src/pad/images/ColourOff.ai +2 -872
  297. package/src/pad/images/ColourOff.png +0 -0
  298. package/src/pad/images/ColourOn.ai +1 -935
  299. package/src/pad/images/ColourOn.png +0 -0
  300. package/src/pad/padPane.ts +0 -559
  301. package/src/playlist/playlistPane.js +0 -161
  302. package/src/registerPanes.js +0 -147
  303. package/src/schedule/Makefile +0 -6
  304. package/src/schedule/formsForSchedule.js +0 -117
  305. package/src/schedule/formsForSchedule.ttl +0 -115
  306. package/src/schedule/schedulePane.js +0 -1201
  307. package/src/sharing/sharingPane.ts +0 -49
  308. package/src/slideshow/slideshowPane.js +0 -80
  309. package/src/socialPane.js +0 -523
  310. package/src/style/tabbedtab.css +0 -1347
  311. package/src/tabbed/tabbedPane.ts +0 -60
  312. package/src/tableViewPane.js +0 -51
  313. package/src/test-import-export/common.js +0 -6
  314. package/src/test-import-export/edit-importer.js +0 -20
  315. package/src/test-import-export/testImportExport.js +0 -0
  316. package/src/transaction/068010-3d-transparent-glass-icon-alphanumeric-dollar-sign.png +0 -0
  317. package/src/transaction/075988-3d-transparent-glass-icon-business-currency-british-pound-sc35.png +0 -0
  318. package/src/transaction/22-pixel-068010-3d-transparent-glass-icon-alphanumeric-dollar-sign.png +0 -0
  319. package/src/transaction/pane.js +0 -629
  320. package/src/transaction/period.js +0 -374
  321. package/src/transaction/thumbs_075987-3d-transparent-glass-icon-business-creditcard2.png +0 -0
  322. package/src/transaction/thumbs_075989-3d-transparent-glass-icon-business-currency-cent-sc35.png +0 -0
  323. package/src/trip/tripPane.js +0 -176
  324. package/src/trustedApplications/__snapshots__/trustedApplications.test.ts.snap +0 -176
  325. package/src/trustedApplications/trustedApplications.dom.ts +0 -276
  326. package/src/trustedApplications/trustedApplications.test.ts +0 -82
  327. package/src/trustedApplications/trustedApplications.utils.ts +0 -51
  328. package/src/trustedApplications/trustedApplications.view.ts +0 -80
  329. package/src/types.ts +0 -34
  330. package/src/ui/22-builder.png +0 -0
  331. package/src/ui/builder.graffle +0 -0
  332. package/src/ui/builder.png +0 -0
  333. package/src/ui/builder2.png +0 -0
  334. package/src/ui/pane.js +0 -226
  335. package/src/versionInfo.ts +0 -30
  336. package/src/video/videoPane.js +0 -44
  337. package/timestamp.sh +0 -13
  338. package/travis/bumpversion.js +0 -29
  339. package/tsconfig.json +0 -78
  340. package/typings/raw-loader.d.ts +0 -4
  341. package/typings/solid-namespace/index.d.ts +0 -9
  342. package/webpack.config.js +0 -41
  343. /package/{lib → dist}/dashboard/basicPreferences.d.ts +0 -0
  344. /package/{lib → dist}/dashboard/basicPreferences.d.ts.map +0 -0
  345. /package/{lib → dist}/dashboard/dashboardPane.d.ts +0 -0
  346. /package/{lib → dist}/dashboard/dashboardPane.d.ts.map +0 -0
  347. /package/{lib → dist}/dashboard/homepage.d.ts +0 -0
  348. /package/{lib → dist}/dashboard/homepage.d.ts.map +0 -0
  349. /package/{lib → dist}/home/homePane.d.ts +0 -0
  350. /package/{lib → dist}/home/homePane.d.ts.map +0 -0
  351. /package/{lib → dist}/index.d.ts +0 -0
  352. /package/{lib → dist}/index.d.ts.map +0 -0
  353. /package/{lib → dist}/internal/internalPane.d.ts +0 -0
  354. /package/{lib → dist}/internal/internalPane.d.ts.map +0 -0
  355. /package/{lib → dist}/mainPage/footer.d.ts +0 -0
  356. /package/{lib → dist}/mainPage/footer.d.ts.map +0 -0
  357. /package/{lib → dist}/mainPage/header.d.ts +0 -0
  358. /package/{lib → dist}/mainPage/header.d.ts.map +0 -0
  359. /package/{lib → dist}/mainPage/index.d.ts +0 -0
  360. /package/{lib → dist}/outline/context.d.ts +0 -0
  361. /package/{lib → dist}/outline/context.d.ts.map +0 -0
  362. /package/{lib → dist}/outline/propertyViews.d.ts +0 -0
  363. /package/{lib → dist}/outline/propertyViews.d.ts.map +0 -0
  364. /package/{lib → dist}/outline/viewAsImage.d.ts +0 -0
  365. /package/{lib → dist}/outline/viewAsImage.d.ts.map +0 -0
  366. /package/{lib → dist}/outline/viewAsMbox.d.ts +0 -0
  367. /package/{lib → dist}/outline/viewAsMbox.d.ts.map +0 -0
  368. /package/{lib → dist}/pad/padPane.d.ts +0 -0
  369. /package/{lib → dist}/pad/padPane.d.ts.map +0 -0
  370. /package/{lib → dist}/sharing/sharingPane.d.ts +0 -0
  371. /package/{lib → dist}/sharing/sharingPane.d.ts.map +0 -0
  372. /package/{lib → dist}/tabbed/tabbedPane.d.ts +0 -0
  373. /package/{lib → dist}/tabbed/tabbedPane.d.ts.map +0 -0
  374. /package/{lib → dist}/trustedApplications/trustedApplications.dom.d.ts +0 -0
  375. /package/{lib → dist}/trustedApplications/trustedApplications.dom.d.ts.map +0 -0
  376. /package/{lib → dist}/trustedApplications/trustedApplications.utils.d.ts +0 -0
  377. /package/{lib → dist}/trustedApplications/trustedApplications.utils.d.ts.map +0 -0
  378. /package/{lib → dist}/trustedApplications/trustedApplications.view.d.ts +0 -0
  379. /package/{lib → dist}/trustedApplications/trustedApplications.view.d.ts.map +0 -0
@@ -1,2373 +0,0 @@
1
- /* istanbul ignore file */
2
- // Original author: kennyluck
3
- //
4
- // Kenny's Notes:
5
- /* places to generate SPARQL update: clearInputAndSave() pasteFromClipboard()->insertTermTo();
6
- undetermined statement generated formUndetStat()
7
- ->fillInRequest()
8
- ontological issues
9
- temporarily using the tabont namespace
10
- clipboard: 'predicates' 'objects' 'all'(internal)
11
- request: 'from' 'to' 'message' 'Request'
12
- */
13
-
14
- import * as UI from 'solid-ui'
15
- import { store } from 'solid-logic'
16
- import * as panes from 'pane-registry'
17
-
18
- const $rdf = UI.rdf
19
-
20
- let UserInputFormula // Formula to store references of user's work
21
- let TempFormula // Formula to store incomplete triples (Requests),
22
- // temporarily disjoint with kb to avoid bugs
23
-
24
- export function UserInput (outline) {
25
- const myDocument = outline.document // is this ok?
26
- // UI.log.warn("myDocument when it's set is "+myDocument.location);
27
- this.menuId = 'predicateMenu1'
28
-
29
- /* //namespace information, as a subgraph of the knowledge base, is built in showMenu
30
- this.namespaces={};
31
-
32
- for (var name in UI.ns) {
33
- this.namespaces[name] = UI.ns[name]('').uri;
34
- }
35
- var NameSpaces=this.namespaces;
36
- */
37
-
38
- // hq, print and trim functions
39
- const qp = function qp (str) {
40
- console.log(str + '\n')
41
- }
42
-
43
- // var tabont = UI.ns.tabont;
44
- // var foaf = UI.ns.foaf
45
- const rdf = UI.ns.rdf
46
- // var RDFS = UI.ns.rdfs
47
- // var OWL = UI.ns.owl
48
- // var dc = UI.ns.dc
49
- // var rss = UI.ns.rss
50
- // var contact = UI.ns.contact
51
- // var mo = UI.ns.mo
52
- const bibo = UI.rdf.Namespace('http://purl.org/ontology/bibo/') // hql for pubsPane
53
- // var dcterms = UI.rdf.Namespace('http://purl.org/dc/terms/')
54
- const dcelems = UI.rdf.Namespace('http://purl.org/dc/elements/1.1/')
55
-
56
- let movedArrow = false // hq
57
-
58
- // var updateService=new updateCenter(kb);
59
-
60
- if (!UserInputFormula) {
61
- UserInputFormula = new UI.rdf.Formula()
62
- UserInputFormula.superFormula = store
63
- // UserInputFormula.registerFormula("Your Work");
64
- }
65
- if (!TempFormula) TempFormula = new UI.rdf.IndexedFormula()
66
- // Use RDFIndexedFormula so add returns the statement
67
- TempFormula.name = 'TempFormula'
68
- if (!store.updater) store.updater = new UI.rdf.UpdateManager(store)
69
-
70
- return {
71
- // updateService: updateService,
72
-
73
- sparqler: store.updater,
74
- lastModified: null, // the last <input> being modified, .isNew indicates whether it's a new input
75
- lastModifiedStat: null, // the last statement being modified
76
- statIsInverse: false, // whether the statement is an inverse
77
-
78
- /**
79
- * Triggering Events: event entry points, should be called only from outline.js but not anywhere else
80
- * in userinput.js, should be as short as possible, function names to be discussed
81
- */
82
-
83
- // Called when the blue cross under the default pane is clicked.
84
- // Add a new row to a property list ( P and O)
85
- addNewPredicateObject: function addNewPredicateObject (e) {
86
- if (UI.utils.getTarget(e).className !== 'bottom-border-active') return
87
- const This = outline.UserInput
88
- const target = UI.utils.getTarget(e)
89
-
90
- // UI.log.warn(ancestor(target,'TABLE').textContent);
91
- const insertTr = myDocument.createElement('tr')
92
- UI.utils
93
- .ancestor(target, 'DIV')
94
- .insertBefore(insertTr, UI.utils.ancestor(target, 'TR'))
95
- const tempTr = myDocument.createElement('tr')
96
- const reqTerm1 = This.generateRequest('(TBD)', tempTr, true)
97
- insertTr.appendChild(tempTr.firstChild)
98
- const reqTerm2 = This.generateRequest(
99
- '(Enter text or drag an object onto this field)',
100
- tempTr,
101
- false
102
- )
103
- insertTr.appendChild(tempTr.firstChild)
104
- // there should be an elegant way of doing this
105
-
106
- // Take the why of the last TR and write to it.
107
- if (
108
- UI.utils.ancestor(target, 'TR').previousSibling && // there is a previous predicate/object line
109
- UI.utils.ancestor(target, 'TR').previousSibling.AJAR_statement
110
- ) {
111
- const preStat = UI.utils.ancestor(target, 'TR').previousSibling
112
- .AJAR_statement
113
- // This should always(?) input a non-inverse statement
114
- This.formUndetStat(
115
- insertTr,
116
- preStat.subject,
117
- reqTerm1,
118
- reqTerm2,
119
- preStat.why,
120
- false
121
- )
122
- } else {
123
- // no previous row: write to the document defining the subject
124
- const subject = UI.utils.getAbout(
125
- store,
126
- UI.utils.ancestor(target.parentNode.parentNode, 'TD')
127
- )
128
- const doc = store.sym(UI.rdf.Util.uri.docpart(subject.uri))
129
- This.formUndetStat(insertTr, subject, reqTerm1, reqTerm2, doc, false)
130
- }
131
-
132
- outline.walk('moveTo', insertTr.firstChild)
133
- UI.log.info(
134
- 'addNewPredicateObject: selection = ' +
135
- outline
136
- .getSelection()
137
- .map(function (item) {
138
- return item.textContent
139
- })
140
- .join(', ')
141
- )
142
- this.startFillInText(outline.getSelection()[0])
143
- },
144
-
145
- // Called when a blue cross on a predicate is clicked
146
- // tr.AJAR_inverse stores whether the clicked predicate is an inverse one
147
- // tr.AJAR_statement (an incomplete statement in TempFormula) stores the destination(why), now
148
- // determined by the preceding one (is this good?)
149
- addNewObject: function addNewObject (e) {
150
- const predicateTd = UI.utils.getTarget(e).parentNode.parentNode
151
- // var predicateTerm = UI.utils.getAbout(kb, predicateTd)
152
- const isInverse = predicateTd.parentNode.AJAR_inverse
153
- // var titleTerm=UI.utils.getAbout(kb,UI.utils.ancestor(predicateTd.parentNode,'TD'));
154
- // set pseudo lastModifiedStat here
155
- this.lastModifiedStat = predicateTd.parentNode.AJAR_statement
156
-
157
- const insertTr = this.appendToPredicate(predicateTd)
158
- const reqTerm = this.generateRequest(' (Error) ', insertTr, false)
159
- const preStat = insertTr.previousSibling.AJAR_statement
160
- if (!isInverse) {
161
- this.formUndetStat(
162
- insertTr,
163
- preStat.subject,
164
- preStat.predicate,
165
- reqTerm,
166
- preStat.why,
167
- false
168
- )
169
- } else {
170
- this.formUndetStat(
171
- insertTr,
172
- reqTerm,
173
- preStat.predicate,
174
- preStat.object,
175
- preStat.why,
176
- true
177
- )
178
- }
179
-
180
- outline.walk('moveTo', insertTr.lastChild)
181
- this.startFillInText(insertTr.lastChild)
182
- // this.statIsInverse=false;
183
- },
184
-
185
- // Called when delete is pressed
186
- Delete: function Delete (selectedTd) {
187
- this.deleteTriple(selectedTd, false)
188
- },
189
- // Called when enter is pressed
190
- Enter: function Enter (selectedTd) {
191
- this.literalModification(selectedTd)
192
- },
193
- // Called when a selected cell is clicked again
194
- Click: function Click (e) {
195
- const target = UI.utils.getTarget(e)
196
- if (UI.utils.getTerm(target).termType !== 'Literal') return
197
- this.literalModification(target)
198
- // this prevents the generated inputbox to be clicked again
199
- e.preventDefault()
200
- e.stopPropagation()
201
- },
202
- // Called when paste is called (Ctrl+v)
203
- pasteFromClipboard: function pasteFromClipboard (address, selectedTd) {
204
- function termFrom (fromCode) {
205
- const term = outline.clipboard[fromCode].shift()
206
- if (term === null) {
207
- UI.log.warn('no more element in clipboard!')
208
- return
209
- }
210
- switch (fromCode) {
211
- case 'predicates':
212
- case 'objects': {
213
- const allArray = outline.clipboard.all
214
- for (let i = 0; true; i++) {
215
- if (term.sameTerm(allArray[i])) {
216
- allArray.splice(i, 1)
217
- break
218
- }
219
- }
220
- break
221
- }
222
- case 'all':
223
- throw new Error(
224
- 'hostorical code not understood - what is theCollection?'
225
- )
226
- /*
227
- var isObject = term.sameTerm(theCollection('objects').elements[0])
228
- isObject ? outline.clipboard.objecs.shift() : outline.clipboard.predicates.shift() // drop the corresponding term
229
- return [term, isObject]
230
- break
231
- */
232
- }
233
- return term
234
- }
235
- let term
236
- switch (selectedTd.className) {
237
- case 'undetermined selected':
238
- term = selectedTd.nextSibling
239
- ? termFrom('predicates')
240
- : termFrom('objects')
241
- if (!term) return
242
- break
243
- case 'pred selected': // paste objects into this predicate
244
- term = termFrom('objects')
245
- if (!term) return
246
- break
247
- case 'selected': { // header <TD>, undetermined generated
248
- const returnArray = termFrom('all')
249
- if (!returnArray) return
250
- term = returnArray[0]
251
- this.insertTermTo(selectedTd, term, returnArray[1])
252
- return
253
- }
254
- }
255
- this.insertTermTo(selectedTd, term)
256
- },
257
-
258
- /**
259
- * Intermediate Processing:
260
- */
261
-
262
- // a general entry point for any event except Click&Enter(goes to literalModification)
263
- // do a little inference to pick the right input box
264
- startFillInText: function startFillInText (selectedTd) {
265
- switch (this.whatSortOfEditCell(selectedTd)) {
266
- case 'DatatypeProperty-like':
267
- // this.clearMenu();
268
- // selectedTd.className='';
269
- UI.utils.emptyNode(selectedTd)
270
- this.lastModified = this.createInputBoxIn(
271
- selectedTd,
272
- ' (Please Input) '
273
- )
274
- this.lastModified.isNew = false
275
-
276
- this.lastModified.select()
277
- break
278
- case 'predicate':
279
- // the goal is to bring back all the menus (with autocomplete functionality
280
- // this.performAutoCompleteEdit(selectedTd,['PredicateAutoComplete',
281
- // this.choiceQuery('SuggestPredicateByDomain')]);
282
- this.performAutoCompleteEdit(selectedTd, 'PredicateAutoComplete')
283
- break
284
- case 'ObjectProperty-like':
285
- case 'no-idea':
286
- // menu should be either function that
287
- this.performAutoCompleteEdit(selectedTd, 'GeneralAutoComplete')
288
-
289
- /*
290
- //<code time="original">
291
- emptyNode(selectedTd);
292
- this.lastModified=this.createInputBoxIn(selectedTd,"");
293
- this.lastModified.select();
294
- this.lastModified.addEventListener('keypress',this.AutoComplete,false);
295
- //this pops up the autocomplete menu
296
- this.AutoComplete(1);
297
- //</code>
298
- */
299
- }
300
- },
301
-
302
- literalModification: function literalModification (selectedTd) {
303
- UI.log.debug(
304
- 'entering literal Modification with ' +
305
- selectedTd +
306
- selectedTd.textContent
307
- )
308
- // var This=outline.UserInput;
309
- if (selectedTd.className.indexOf(' pendingedit') !== -1) {
310
- UI.log.warn(
311
- 'The node you attempted to edit has a request still pending.\n' +
312
- 'Please wait for the request to finish (the text will turn black)\n' +
313
- 'before editing this node again.'
314
- )
315
- return true
316
- }
317
-
318
- const target = selectedTd
319
- const about = this.getStatementAbout(target) // timbl - to avoid alert from random clicks
320
- if (!about) return
321
- let obj
322
- let trNode
323
- try {
324
- obj = UI.utils.getTerm(target)
325
- trNode = UI.utils.ancestor(target, 'TR')
326
- } catch (e) {
327
- UI.log.warn('userinput.js: ' + e + UI.utils.getAbout(store, selectedTd))
328
- UI.log.error(target + ' getStatement Error:' + e)
329
- }
330
-
331
- let tdNode
332
- try {
333
- tdNode = trNode.lastChild
334
- } catch (e) {
335
- UI.log.error(e + '@' + target)
336
- }
337
- // seems to be a event handling problem of firefox3
338
- /*
339
- if (e.type!='keypress'&&(selectedTd.className=='undetermined selected'||selectedTd.className=='undetermined')){
340
- this.Refill(e,selectedTd);
341
- return;
342
- }
343
- */
344
- // ignore clicking trNode.firstChild (be careful for <div> or <span>)
345
- // if (e.type!='keypress'&&target!=tdNode && UI.utils.ancestor(target,'TD')!=tdNode) return;
346
-
347
- if (obj.termType === 'Literal') {
348
- tdNode.removeChild(tdNode.firstChild) // remove the text
349
-
350
- if (obj.value.match('\n')) {
351
- // match a line feed and require <TEXTAREA>
352
- const textBox = myDocument.createElement('textarea')
353
- textBox.appendChild(myDocument.createTextNode(obj.value))
354
- textBox.setAttribute(
355
- 'rows',
356
- (obj.value.match(/\n/g).length + 1).toString()
357
- )
358
- // g is for global(??)
359
- textBox.setAttribute('cols', '100') // should be the size of <TD>
360
- textBox.setAttribute('class', 'textinput')
361
- tdNode.appendChild(textBox)
362
- this.lastModified = textBox
363
- } else {
364
- this.lastModified = this.createInputBoxIn(tdNode, obj.value)
365
- }
366
- this.lastModified.isNew = false
367
- // Kenny: What should be expected after you click a editable text element?
368
- // Choice 1
369
- this.lastModified.select()
370
- // Choice 2 - direct the key cursor to where you click (failed attempt)
371
- // --------------------------------------------------------------------------
372
- // duplicate the event so user can edit without clicking twice
373
- // var e2=myDocument.createEvent("MouseEvents");
374
- // e2.initMouseEvent("click",true,true,window,0,0,0,0,0,false,false,false,false,0,null);
375
- // inputBox.dispatchEvent(e2);
376
- // ---------------------------------------------------------------------------
377
- }
378
-
379
- return true // this is not a valid modification
380
- },
381
-
382
- /**
383
- * UIs: input event handlers, menu generation
384
- */
385
- performAutoCompleteEdit: function performAutoCompleteEdit (
386
- selectedTd,
387
- menu
388
- ) {
389
- UI.utils.emptyNode(selectedTd)
390
- qp('perform AutoCompleteEdit. THIS IS=' + this)
391
- this.lastModified = this.createInputBoxIn(selectedTd, '')
392
- this.lastModified.select()
393
- this.lastModified.addEventListener(
394
- 'keypress',
395
- this.getAutoCompleteHandler(menu),
396
- false
397
- )
398
- /* keypress!?
399
- This is what I hate about UI programming.
400
- I shall write something about this but not now.
401
- */
402
- // this pops up the autocomplete menu
403
- // Pops up the menu even though no keypress has occurred
404
- // 1 is a dummy variable for the "enterEvent"
405
- this.getAutoCompleteHandler(menu)(1)
406
- },
407
- backOut: function backOut () {
408
- this.deleteTriple(this.lastModified.parentNode, true)
409
- this.lastModified = null
410
- },
411
-
412
- clearMenu: function clearMenu () {
413
- const menu = myDocument.getElementById(this.menuID)
414
- if (menu) {
415
- menu.parentNode.removeChild(menu)
416
- // emptyNode(menu);
417
- }
418
- },
419
-
420
- /* goes here when either this is a literal or escape from menu and then input text */
421
- clearInputAndSave: function clearInputAndSave (e) {
422
- let obj
423
- if (!this.lastModified) return
424
- if (!this.lastModified.isNew) {
425
- try {
426
- obj = this.getStatementAbout(this.lastModified).object
427
- } catch (e) {
428
- return
429
- }
430
- }
431
- let s = this.lastModifiedStat // when 'isNew' this is set at addNewObject()
432
-
433
- let defaultpropview
434
- let trNode
435
- let reqTerm
436
- let preStat
437
- if (this.lastModified.value !== this.lastModified.defaultValue) {
438
- let trCache
439
- if (this.lastModified.value === '') {
440
- // ToDo: remove this
441
- this.lastModified.value = this.lastModified.defaultValue
442
- this.clearInputAndSave()
443
- return
444
- } else if (this.lastModified.isNew) {
445
- s = new UI.rdf.Statement(
446
- s.subject,
447
- s.predicate,
448
- store.literal(this.lastModified.value),
449
- s.why
450
- )
451
- // TODO: DEFINE ERROR CALLBACK
452
- defaultpropview = this.views.defaults[s.predicate.uri]
453
- trCache = UI.utils.ancestor(this.lastModified, 'TR')
454
- try {
455
- store.updater.update([], [s], function (
456
- uri,
457
- success,
458
- errorBody
459
- ) {
460
- if (!success) {
461
- UI.log.error(
462
- 'Error occurs while inserting ' +
463
- s +
464
- '\n\n' +
465
- errorBody +
466
- '\n'
467
- )
468
- // UI.log.warn("Error occurs while inserting "+s+'\n\n'+errorBody);
469
- outline.UserInput.deleteTriple(trCache.lastChild, true)
470
- }
471
- })
472
- } catch (e) {
473
- UI.log.error('Error inserting fact ' + s + ':\n\t' + e + '\n')
474
- return
475
- }
476
- s = store.add(
477
- s.subject,
478
- s.predicate,
479
- store.literal(this.lastModified.value),
480
- s.why
481
- )
482
- } else {
483
- if (this.statIsInverse) {
484
- UI.log.error(
485
- "Invalid Input: a literal can't be a subject in RDF/XML"
486
- )
487
- this.backOut()
488
- return
489
- }
490
- let s1, s2, s3
491
- switch (obj.termType) {
492
- case 'Literal': {
493
- // generate path and nailing from current values
494
-
495
- // TODO: DEFINE ERROR CALLBACK
496
- const valueCache = this.lastModified.value
497
- trCache = UI.utils.ancestor(this.lastModified, 'TR')
498
- const oldValue = this.lastModified.defaultValue
499
- s2 = $rdf.st(
500
- s.subject,
501
- s.predicate,
502
- store.literal(this.lastModified.value),
503
- s.why
504
- )
505
- try {
506
- store.updater.update([s], [s2], function (
507
- uri,
508
- success,
509
- errorBody
510
- ) {
511
- if (success) {
512
- obj.value = valueCache
513
- } else {
514
- UI.log.warn(
515
- 'Error occurs while editing ' + s + '\n\n' + errorBody
516
- )
517
- trCache.lastChild.textContent = oldValue
518
- }
519
- trCache.lastChild.className = trCache.lastChild.className.replace(
520
- / pendingedit/g,
521
- ''
522
- )
523
- })
524
- } catch (e) {
525
- UI.log.warn('Error occurs while editing ' + s + ':\n\t' + e)
526
- return
527
- }
528
- // obj.value=this.lastModified.value;
529
- // UserInputFormula.statements.push(s);
530
- break
531
- }
532
- case 'BlankNode': { // a request refill with text
533
- // var newStat
534
- const textTerm = store.literal(this.lastModified.value, '')
535
- // <Feature about="labelChoice">
536
- if (s.predicate.termType === 'Collection') {
537
- // case: add triple ????????? Weird - tbl
538
- const selectedPredicate = s.predicate.elements[0] // @@ TBL elements is a list on the predicate??
539
- if (store.any(undefined, selectedPredicate, textTerm)) {
540
- if (!e) {
541
- // keyboard
542
- const tdNode = this.lastModified.parentNode
543
- e = {}
544
- e.pageX = UI.utils.findPos(tdNode)[0]
545
- e.pageY = UI.utils.findPos(tdNode)[1] + tdNode.clientHeight
546
- }
547
- this.showMenu(e, 'DidYouMeanDialog', undefined, {
548
- dialogTerm: store.any(undefined, selectedPredicate, textTerm),
549
- bnodeTerm: s.subject
550
- })
551
- } else {
552
- s1 = UI.utils.ancestor(
553
- UI.utils.ancestor(this.lastModified, 'TR').parentNode,
554
- 'TR'
555
- ).AJAR_statement
556
- s2 = $rdf.st(s.subject, selectedPredicate, textTerm, s.why)
557
- const type = store.the(s.subject, rdf('type'))
558
- s3 = store.anyStatementMatching(
559
- s.subject,
560
- rdf('type'),
561
- type,
562
- s.why
563
- )
564
- // TODO: DEFINE ERROR CALLBACK
565
- // because the table is repainted, so...
566
- trCache = UI.utils.ancestor(
567
- UI.utils.ancestor(this.lastModified, 'TR'),
568
- 'TD'
569
- ).parentNode
570
- try {
571
- store.updater.update([], [s1, s2, s3], function (
572
- uri,
573
- success,
574
- errorBody
575
- ) {
576
- if (!success) {
577
- console.log(
578
- 'Error occurs while editing ' +
579
- s1 +
580
- '\n\n' +
581
- errorBody
582
- )
583
- outline.UserInput.deleteTriple(trCache.lastChild, true) // @@@@ This
584
- }
585
- })
586
- } catch (e) {
587
- console.log(
588
- 'Error occurs while editing ' + s1 + ':\n\t' + e
589
- )
590
- return
591
- }
592
- store.remove(s)
593
- store.add(s.subject, selectedPredicate, textTerm, s.why) // was: newStat =
594
- // a subtle bug occurs here, if foaf:nick hasn't been dereferneced,
595
- // this add will cause a repainting
596
- }
597
- const enclosingTd = UI.utils.ancestor(
598
- this.lastModified.parentNode.parentNode,
599
- 'TD'
600
- )
601
- const defaultPane = panes.byName('default') // @@ check
602
- outline.outlineExpand(enclosingTd, s.subject, {
603
- pane: defaultPane,
604
- already: true
605
- })
606
- outline.walk('right', outline.focusTd)
607
- // </Feature>
608
- } else {
609
- this.fillInRequest(
610
- 'object',
611
- this.lastModified.parentNode,
612
- store.literal(this.lastModified.value)
613
- )
614
- return // The new Td is already generated by fillInRequest, so it's done.
615
- }
616
- break
617
- }
618
- }
619
- }
620
- } else if (this.lastModified.isNew) {
621
- // generate 'Request', there is no way you can input ' (Please Input) '
622
- trNode = UI.utils.ancestor(this.lastModified, 'TR')
623
- reqTerm = this.generateRequest(
624
- '(To be determined. Re-type of drag an object onto this field)'
625
- )
626
- preStat = trNode.previousSibling.AJAR_statement // the statement of the same predicate
627
- this.formUndetStat(
628
- trNode,
629
- preStat.subject,
630
- preStat.predicate,
631
- reqTerm,
632
- preStat.why,
633
- false
634
- )
635
- // this why being the same as the previous statement
636
- this.lastModified = null
637
-
638
- // UI.log.warn("test .isNew)");
639
- return
640
- } else if (s.predicate.termType === 'Collection') {
641
- store.removeMany(s.subject)
642
- const upperTr = UI.utils.ancestor(
643
- UI.utils.ancestor(this.lastModified, 'TR').parentNode,
644
- 'TR'
645
- )
646
- preStat = upperTr.AJAR_statement
647
- reqTerm = this.generateRequest(
648
- '(To be determined. Re-type of drag an object onto this field)'
649
- )
650
- this.formUndetStat(
651
- upperTr,
652
- preStat.subject,
653
- preStat.predicate,
654
- reqTerm,
655
- preStat.why,
656
- false
657
- )
658
- outline.replaceTD(
659
- outline.outlineObjectTD(reqTerm, defaultpropview),
660
- upperTr.lastChild
661
- )
662
- this.lastModified = null
663
- return
664
- } else if (this.statIsInverse) {
665
- /*
666
- if ((s.object.termType === 'BlankNode' && !this.statIsInverse) ||
667
- s.subject.termType === 'BlankNode' && this.statIsInverse) {
668
- this.backOut()
669
- return
670
- */
671
- if (s.subject.termType === 'BlankNode') {
672
- this.backOut()
673
- return
674
- }
675
- } else {
676
- if (s.object.termType === 'BlankNode') {
677
- this.backOut()
678
- return
679
- }
680
- }
681
- // case modified - literal modification only(for now).
682
- trNode = UI.utils.ancestor(this.lastModified, 'TR')
683
- // var defaultpropview = this.views.defaults[s.predicate.uri]
684
-
685
- if (!this.statIsInverse) {
686
- // this is for an old feature
687
- // outline.replaceTD(outline.outlineObjectTD(s.object, defaultpropview),trNode.lastChild);
688
- outline.replaceTD(
689
- outline.outlineObjectTD(
690
- store.literal(this.lastModified.value),
691
- defaultpropview
692
- ),
693
- trNode.lastChild
694
- )
695
- } else {
696
- outline.replaceTD(
697
- outline.outlineObjectTD(s.subject, defaultpropview),
698
- trNode.lastChild
699
- )
700
- }
701
- if (this.lastModified.value !== this.lastModified.defaultValue) {
702
- trNode.lastChild.className += ' pendingedit'
703
- }
704
- // trNode.AJAR_statement=s;//you don't have to set AJAR_inverse because it's not changed
705
- // This is going to be painful when predicate-edit allowed
706
- this.lastModified = null
707
- },
708
-
709
- /* deletes the triple corresponding to selectedTd, remove that Td. */
710
- deleteTriple: function deleteTriple (selectedTd, isBackOut) {
711
- // ToDo: complete deletion of a node
712
- UI.log.debug('deleteTriple entered')
713
-
714
- // allow a pending node to be deleted if it's a backout sent by SPARQL update callback
715
- if (!isBackOut && selectedTd.className.indexOf(' pendingedit') !== -1) {
716
- console.log(
717
- 'The node you attempted to edit has a request still pending.\n' +
718
- 'Please wait for the request to finish (the text will turn black)\n' +
719
- 'before editing this node again.'
720
- )
721
- outline.walk('up')
722
- return
723
- }
724
- let removedTr
725
- // var afterTr
726
- const s = this.getStatementAbout(selectedTd)
727
- if (
728
- !isBackOut &&
729
- !store.whether(s.object, rdf('type'), UI.ns.link('Request')) &&
730
- // Better to check whether provenance is internal?
731
- !store.whether(s.predicate, rdf('type'), UI.ns.link('Request')) &&
732
- !store.whether(s.subject, rdf('type'), UI.ns.link('Request'))
733
- ) {
734
- UI.log.debug('about to send SPARQLUpdate')
735
- try {
736
- store.updater.update([s], [], function (uri, success, errorBody) {
737
- if (success) {
738
- removefromview()
739
- } else {
740
- // removedTr.AJAR_statement=kb.add(s.subject,s.predicate,s.object,s.why);
741
- console.log(
742
- 'Error occurs while deleting ' + s + '\n\n' + errorBody
743
- )
744
- selectedTd.className = selectedTd.className.replace(
745
- / pendingedit/g,
746
- ''
747
- )
748
- }
749
- })
750
- selectedTd.className += ' pendingedit'
751
- } catch (e) {
752
- UI.log.error(e)
753
- UI.log.warn('Error deleting statement ' + s + ':\n\t' + e)
754
- return
755
- }
756
-
757
- UI.log.debug('SPARQLUpdate sent')
758
- } else {
759
- // removal of an undetermined statement associated with pending TRs
760
- // TempFormula.remove(s);
761
- }
762
- UI.log.debug('about to remove ' + s)
763
-
764
- UI.log.debug('removed')
765
- outline.walk('up')
766
-
767
- removedTr = selectedTd.parentNode
768
- // afterTr = removedTr.nextSibling
769
- function removefromview () {
770
- let trIterator
771
- for (
772
- trIterator = removedTr;
773
- trIterator.childNodes.length === 1;
774
- trIterator = trIterator.previousSibling
775
- );
776
- let predicateTd
777
- if (trIterator === removedTr) {
778
- const theNext = trIterator.nextSibling
779
- if (theNext.nextSibling && theNext.childNodes.length === 1) {
780
- predicateTd = trIterator.firstChild
781
- predicateTd.setAttribute(
782
- 'rowspan',
783
- parseInt(predicateTd.getAttribute('rowspan')) - 1
784
- )
785
- theNext.insertBefore(trIterator.firstChild, theNext.firstChild)
786
- }
787
- removedTr.parentNode.removeChild(removedTr)
788
- } else {
789
- // !DisplayOptions["display:block on"].enabled){
790
- predicateTd = trIterator.firstChild
791
- predicateTd.setAttribute(
792
- 'rowspan',
793
- parseInt(predicateTd.getAttribute('rowspan')) - 1
794
- )
795
- removedTr.parentNode.removeChild(removedTr)
796
- }
797
- }
798
- if (isBackOut) removefromview()
799
- },
800
-
801
- /* clipboard principle: copy wildly, paste carefully
802
- ToDoS:
803
- 1. register Subcollection?
804
- 2. copy from more than one selectedTd: 1.sequece 2.collection
805
- 3. make a clipboard class?
806
- */
807
- clipboardInit: function clipboardInit () {
808
- outline.clipboard = {}
809
- outline.clipboard.objects = []
810
- outline.clipboard.predicates = []
811
- outline.clipboard.all = []
812
- },
813
-
814
- copyToClipboard: function copyToClipboard (address, selectedTd) {
815
- /*
816
- var clip = Components.classes["@mozilla.org/widget/clipboard;1"].getService(Components.interfaces.nsIClipboard);
817
- if (!clip) return false;
818
- var clipid = Components.interfaces.nsIClipboard;
819
-
820
- var trans = Components.classes["@mozilla.org/widget/transferable;1"].createInstance(Components.interfaces.nsITransferable);
821
- if (!trans) return false;
822
-
823
- var copytext = "Tabulator!!";
824
-
825
- var str = Components.classes["@mozilla.org/supports-string;1"].
826
- createInstance(Components.interfaces.nsISupportsString);
827
- if (!str) return false;
828
-
829
- str.data = copytext;
830
-
831
- trans.addDataFlavor("text/x-moz-url");
832
- trans.setTransferData("text/x-mox-url", str, copytext.length * 2);
833
-
834
- clip.setData(trans, null, clipid.kGlobalClipboard);
835
- */
836
-
837
- const term = UI.utils.getTerm(selectedTd)
838
- switch (selectedTd.className) {
839
- case 'selected': // table header
840
- case 'obj selected':
841
- // var objects = outline.clipboard.objects
842
- outline.clipboard.objects.unshift(term)
843
- break
844
- case 'pred selected':
845
- case 'pred internal selected':
846
- outline.clipboard.predicates.unshift(term)
847
- }
848
-
849
- outline.clipboard.all.unshift(term)
850
- },
851
-
852
- insertTermTo: function insertTermTo (selectedTd, term, isObject) {
853
- let defaultpropview
854
- let preStat
855
- switch (selectedTd.className) {
856
- case 'undetermined selected':
857
- defaultpropview = this.views.defaults[
858
- selectedTd.parentNode.AJAR_statement.predicate.uri
859
- ]
860
- this.fillInRequest(
861
- selectedTd.nextSibling ? 'predicate' : 'object',
862
- selectedTd,
863
- term
864
- )
865
- break
866
- case 'pred selected': { // paste objects into this predicate
867
- const insertTr = this.appendToPredicate(selectedTd)
868
- preStat = selectedTd.parentNode.AJAR_statement
869
- defaultpropview = this.views.defaults[preStat.predicate.uri]
870
- insertTr.appendChild(outline.outlineObjectTD(term, defaultpropview))
871
- // modify store and update here
872
- const isInverse = selectedTd.parentNode.AJAR_inverse
873
- if (!isInverse) {
874
- insertTr.AJAR_statement = store.add(
875
- preStat.subject,
876
- preStat.predicate,
877
- term,
878
- preStat.why
879
- )
880
- } else {
881
- insertTr.AJAR_statemnet = store.add(
882
- term,
883
- preStat.predicate,
884
- preStat.object,
885
- preStat.why
886
- )
887
- }
888
-
889
- try {
890
- store.updater.update([], [insertTr.AJAR_statement], function (
891
- uri,
892
- success,
893
- errorBody
894
- ) {
895
- if (!success) {
896
- UI.log.error(
897
- 'userinput.js (pred selected): Fail trying to insert statement ' +
898
- insertTr.AJAR_statement +
899
- ': ' +
900
- errorBody
901
- )
902
- }
903
- })
904
- } catch (e) {
905
- UI.log.error(
906
- 'Exception trying to insert statement ' +
907
- insertTr.AJAR_statement +
908
- ': ' +
909
- UI.utils.stackString(e)
910
- )
911
- return
912
- }
913
- insertTr.AJAR_inverse = isInverse
914
- UserInputFormula.statements.push(insertTr.AJAR_statement)
915
- break
916
- }
917
- case 'selected': { // header <TD>, undetermined generated
918
- const paneDiv = UI.utils.ancestor(selectedTd, 'TABLE').lastChild
919
- const newTr = paneDiv.insertBefore(
920
- myDocument.createElement('tr'),
921
- paneDiv.lastChild
922
- )
923
- // var titleTerm=UI.utils.getAbout(kb,UI.utils.ancestor(newTr,'TD'));
924
- preStat = newTr.previousSibling.AJAR_statement
925
- if (typeof isObject === 'undefined') isObject = true
926
- if (isObject) {
927
- // object inserted
928
- this.formUndetStat(
929
- newTr,
930
- preStat.subject,
931
- this.generateRequest('(TBD)', newTr, true),
932
- term,
933
- preStat.why,
934
- false
935
- )
936
- // defaultpropview temporaily not dealt with
937
- newTr.appendChild(outline.outlineObjectTD(term))
938
- outline.walk('moveTo', newTr.firstChild)
939
- this.startFillInText(newTr.firstChild)
940
- } else {
941
- // predicate inserted
942
- // existing predicate not expected
943
- const reqTerm = this.generateRequest(
944
- '(To be determined. Re-type of drag an object onto this field)',
945
- newTr
946
- )
947
- this.formUndetStat(
948
- newTr,
949
- preStat.subject,
950
- term,
951
- reqTerm,
952
- preStat.why,
953
- false
954
- )
955
-
956
- newTr.insertBefore(
957
- outline.outlinePredicateTD(term, newTr, false, false),
958
- newTr.firstChild
959
- )
960
- outline.walk('moveTo', newTr.lastChild)
961
- this.startFillInText(newTr.lastChild)
962
- }
963
- break
964
- }
965
- }
966
- },
967
-
968
- Refill: function Refill (e, selectedTd) {
969
- UI.log.info('Refill' + selectedTd.textContent)
970
- const isPredicate = selectedTd.nextSibling
971
- let predicateQuery
972
- if (isPredicate) {
973
- // predicateTd
974
- let subject
975
- let subjectClass
976
- let sparqlText
977
- if (selectedTd.nextSibling.className === 'undetermined') {
978
- /* Make set of proprties to propose for a predicate.
979
- The naive approach is to take those which have a class
980
- of the subject as their domain. But in fact we must offer anything which
981
- is not explicitly excluded, by having a domain disjointWith a
982
- class of the subject. */
983
-
984
- /* SELECT ?pred
985
- WHERE{
986
- ?pred a rdf:Property.
987
- ?pred rdfs:domain subjectClass.
988
- }
989
- */
990
- /* SELECT ?pred ?class
991
- WHERE{
992
- ?pred a rdf:Property.
993
- subjectClass owl:subClassOf ?class.
994
- ?pred rdfs:domain ?class.
995
- }
996
- */
997
- /* SELECT ?pred
998
- WHERE{
999
- subject a ?subjectClass.
1000
- ?pred rdfs:domain ?subjectClass.
1001
- }
1002
- */
1003
- subject = UI.utils.getAbout(
1004
- store,
1005
- UI.utils.ancestor(selectedTd, 'TABLE').parentNode
1006
- )
1007
- subjectClass = store.any(subject, rdf('type'))
1008
- sparqlText = []
1009
- const endl = '.\n'
1010
- sparqlText[0] =
1011
- 'SELECT ?pred WHERE{\n?pred ' +
1012
- rdf('type') +
1013
- rdf('Property') +
1014
- '.\n' +
1015
- '?pred ' +
1016
- UI.ns.rdfs('domain') +
1017
- subjectClass +
1018
- '.}' // \n is required? SPARQL parser bug?
1019
- sparqlText[1] =
1020
- 'SELECT ?pred ?class\nWHERE{\n' +
1021
- '?pred ' +
1022
- rdf('type') +
1023
- rdf('Property') +
1024
- '.\n' +
1025
- subjectClass +
1026
- UI.ns.rdfs('subClassOf') +
1027
- ' ?class.\n' +
1028
- '?pred ' +
1029
- UI.ns.rdfs('domain') +
1030
- ' ?class.\n}'
1031
- sparqlText[2] =
1032
- 'SELECT ?pred WHERE{\n' +
1033
- subject +
1034
- rdf('type') +
1035
- store.variable('subjectClass') +
1036
- endl +
1037
- store.variable('pred') +
1038
- UI.ns.rdfs('domain') +
1039
- store.variable('subjectClass') +
1040
- endl +
1041
- '}'
1042
- predicateQuery = sparqlText.map($rdf.SPARQLToQuery)
1043
- } else {
1044
- // ------selector
1045
- /* SELECT ?pred
1046
- WHERE{
1047
- ?pred a rdf:Property.
1048
- ?pred rdfs:domain subjectClass.
1049
- ?pred rdfs:range objectClass.
1050
- }
1051
- */
1052
- // Candidate
1053
- /* SELECT ?pred
1054
- WHERE{
1055
- subject a ?subjectClass.
1056
- object a ?objectClass.
1057
- ?pred rdfs:domain ?subjectClass.
1058
- ?pred rdfs:range ?objectClass.
1059
- */
1060
- subject = UI.utils.getAbout(
1061
- store,
1062
- UI.utils.ancestor(selectedTd, 'TABLE').parentNode
1063
- )
1064
- subjectClass = store.any(subject, rdf('type'))
1065
- const object = selectedTd.parentNode.AJAR_statement.object
1066
- // var objectClass = (object.termType === 'Literal') ? UI.ns.rdfs('Literal') : kb.any(object, rdf('type'))
1067
- // var sparqlText="SELECT ?pred WHERE{\n?pred "+rdf('type')+rdf('Property')+".\n"+
1068
- // "?pred "+UI.ns.rdfs('domain')+subjectClass+".\n"+
1069
- // "?pred "+UI.ns.rdfs('range')+objectClass+".\n}"; // \n is required? SPARQL parser bug?
1070
- sparqlText =
1071
- 'SELECT ?pred WHERE{' +
1072
- subject +
1073
- rdf('type') +
1074
- '?subjectClass' +
1075
- '.\n' +
1076
- object +
1077
- rdf('type') +
1078
- '?objectClass' +
1079
- '.\n' +
1080
- '?pred ' +
1081
- UI.ns.rdfs('domain') +
1082
- '?subjectClass' +
1083
- '.\n' +
1084
- '?pred ' +
1085
- UI.ns.rdfs('range') +
1086
- '?objectClass' +
1087
- '.\n}' // \n is required? SPARQL parser bug?
1088
- predicateQuery = $rdf.SPARQLToQuery(sparqlText)
1089
- }
1090
-
1091
- // -------presenter
1092
- // ToDo: how to sort selected predicates?
1093
- this.showMenu(e, 'GeneralPredicateChoice', predicateQuery, {
1094
- isPredicate: isPredicate,
1095
- selectedTd: selectedTd
1096
- })
1097
- } else {
1098
- // objectTd
1099
- const predicateTerm = selectedTd.parentNode.AJAR_statement.predicate
1100
- if (
1101
- store.whether(
1102
- predicateTerm,
1103
- rdf('type'),
1104
- UI.ns.owl('DatatypeProperty')
1105
- ) ||
1106
- predicateTerm.termType === 'Collection' ||
1107
- store.whether(predicateTerm, UI.ns.rdfs('range'), UI.ns.rdfs('Literal'))
1108
- ) {
1109
- selectedTd.className = ''
1110
- UI.utils.emptyNode(selectedTd)
1111
- this.lastModified = this.createInputBoxIn(
1112
- selectedTd,
1113
- ' (Please Input) '
1114
- )
1115
- this.lastModified.isNew = false
1116
-
1117
- this.lastModified.select()
1118
- }
1119
-
1120
- // show menu for rdf:type
1121
- if (
1122
- selectedTd.parentNode.AJAR_statement.predicate.sameTerm(rdf('type'))
1123
- ) {
1124
- const sparqlText =
1125
- 'SELECT ?class WHERE{?class ' +
1126
- rdf('type') +
1127
- UI.ns.rdfs('Class') +
1128
- '.}'
1129
- // I should just use kb.each
1130
- const classQuery = $rdf.SPARQLToQuery(sparqlText)
1131
- this.showMenu(e, 'TypeChoice', classQuery, {
1132
- isPredicate: isPredicate,
1133
- selectedTd: selectedTd
1134
- })
1135
- }
1136
- }
1137
- },
1138
-
1139
- // This is where pubsPane.js comes in, with: outline.UserInput.getAutoCompleteHandler("JournalTAC")(e);
1140
- getAutoCompleteHandler: function getAutoCompleteHandler (mode) {
1141
- qp('\n\n***** In getAutoCompleteHandler ****** mode = ' + mode)
1142
- if (mode === 'PredicateAutoComplete') {
1143
- mode = 'predicate'
1144
- } else if (mode !== 'JournalTAC') {
1145
- // hq // why? -tim - not 'predicate' below
1146
- mode = 'all'
1147
- }
1148
-
1149
- let InputBox
1150
- if (mode === 'JournalTAC') {
1151
- // hq // Better to pass in InputBox as a param
1152
- InputBox = myDocument.getElementById('inpid_journal_title')
1153
- } else {
1154
- InputBox = this.lastModified || outline.getSelection()[0].firstChild
1155
- }
1156
- qp('InputBox=' + InputBox) // hq
1157
- qp('InputBox.value=' + InputBox.value) // hq
1158
-
1159
- return function (enterEvent) {
1160
- qp('ENTER EVENT=' + enterEvent)
1161
- // Firefox 2.0.0.6 makes this not working? 'this' becomes [object HTMLInputElement]
1162
- // but not [wrapped ...]
1163
- // var InputBox=(typeof enterEvent=='object')?this:this.lastModified;//'this' is the <input> element
1164
- qp('1. outside (if eneterEvent)')
1165
- const e = {}
1166
- const tdNode = InputBox.parentNode
1167
- if (!mode) mode = tdNode.nextSibling ? 'predicate' : 'all'
1168
- e.pageX = UI.utils.findPos(tdNode)[0]
1169
- e.pageY = UI.utils.findPos(tdNode)[1] + tdNode.clientHeight
1170
- qp('epX=' + e.pageX + ', epY=' + e.pageY + ', mode=' + mode)
1171
- let menu = myDocument.getElementById(outline.UserInput.menuID)
1172
- function setHighlightItem (item) {
1173
- if (!item) return // do not make changes
1174
- if (menu.lastHighlight) menu.lastHighlight.className = ''
1175
- menu.lastHighlight = item
1176
- menu.lastHighlight.className = 'activeItem'
1177
- outline.showURI(UI.utils.getAbout(store, menu.lastHighlight))
1178
- }
1179
- if (enterEvent) {
1180
- // either the real event of the pseudo number passed by OutlineKeypressPanel
1181
- qp('2. in (if enterEvent). with type = ' + typeof enterEvent)
1182
- let newText = InputBox.value
1183
-
1184
- if (typeof enterEvent === 'object') {
1185
- qp(
1186
- '3. in typeof enterEvent is object, will switch to keys, arrows, etc. keycode = ' +
1187
- enterEvent.keyCode
1188
- )
1189
- enterEvent.stopPropagation()
1190
- if (menu && !menu.lastHighlight) {
1191
- // this ensures the following operation valid
1192
- setHighlightItem(menu.firstChild.firstChild)
1193
- }
1194
- switch (enterEvent.keyCode) {
1195
- case 13: // enter
1196
- case 9: // tab
1197
- qp('handler: Enter or Tab')
1198
- if (!menu) {
1199
- outline.UserInput.clearInputAndSave()
1200
- return
1201
- }
1202
- if (!menu.lastHighlight) {
1203
- if (mode === 'JournalTAC') {
1204
- outline.UserInput.clearMenu()
1205
- qp('no lastH')
1206
- return 'no lastH'
1207
- }
1208
- return
1209
- } // warning?
1210
-
1211
- if (menu.lastHighlight.tagName === 'INPUT') {
1212
- switch (menu.lastHighlight.value) {
1213
- case 'New...':
1214
- qp('subcase New')
1215
- outline.UserInput.createNew()
1216
- break
1217
- case 'GiveURI':
1218
- qp('subcase GiveURI')
1219
- outline.UserInput.inputURI()
1220
- break
1221
- }
1222
- } else {
1223
- // pubsPane Stuff:
1224
- if (mode === 'JournalTAC') {
1225
- qp('movedArrow? ' + movedArrow)
1226
- // Enter only works if arrows have been moved
1227
- if (movedArrow && menu.lastHighlight) {
1228
- // Get the title from the DOM
1229
- // tr, th, div, innerHTML
1230
- const jtitle =
1231
- menu.lastHighlight.firstChild.firstChild.innerHTML
1232
- // tr, th, td, innerHTML
1233
- let juri =
1234
- menu.lastHighlight.firstChild.nextSibling.innerHTML
1235
- // clearing out the &lt; and &gt; from juri
1236
- juri = juri.slice(4, -4)
1237
- return ['gotdptitle', jtitle, juri]
1238
- }
1239
- // If doesn't qualify to be autocomplete, return this random string, since pubsPane checks for "gotdptitle"
1240
- return 'asGivenTxt'
1241
- }
1242
-
1243
- const inputTerm = UI.utils.getAbout(store, menu.lastHighlight)
1244
- const fillInType = mode === 'predicate' ? 'predicate' : 'object'
1245
- outline.UserInput.clearMenu()
1246
- outline.UserInput.fillInRequest(
1247
- fillInType,
1248
- InputBox.parentNode,
1249
- inputTerm
1250
- )
1251
- // if (outline.UserInput.fillInRequest(fillInType,InputBox.parentNode,inputTerm))
1252
- // outline.UserInput.clearMenu();
1253
- }
1254
- qp('outside')
1255
- return
1256
- case 38: // up
1257
- qp('handler: Arrow UP')
1258
- movedArrow = true // hq
1259
- if (
1260
- newText === '' &&
1261
- menu.lastHighlight.tagName === 'TR' &&
1262
- !menu.lastHighlight.previousSibling
1263
- ) {
1264
- setHighlightItem(menu.firstChild.firstChild)
1265
- } else {
1266
- setHighlightItem(menu.lastHighlight.previousSibling)
1267
- }
1268
- return "I'm a little Arrow Up"
1269
- case 40: // down
1270
- qp('handler: Arrow Down')
1271
- movedArrow = true // hq
1272
- if (menu.lastHighlight.tagName === 'INPUT') {
1273
- setHighlightItem(menu.childNodes[1].firstChild)
1274
- } else {
1275
- setHighlightItem(menu.lastHighlight.nextSibling)
1276
- }
1277
- return "I'm a little Down Arrow"
1278
- case 37: // left
1279
- case 39: // right
1280
- qp('handler: Arrow left, right')
1281
- if (menu.lastHighlight.tagName === 'INPUT') {
1282
- if (enterEvent.keyCode === 37) {
1283
- setHighlightItem(menu.lastHighlight.previousSibling)
1284
- } else {
1285
- setHighlightItem(menu.lastHighlight.nextSibling)
1286
- }
1287
- }
1288
- return
1289
- case 8: // backspace
1290
- qp('handler: Backspace')
1291
- newText = newText.slice(0, -1)
1292
- break
1293
- case 27: // esc to enter literal
1294
- qp('handler: Esc')
1295
- if (!menu) {
1296
- outline.UserInput.backOut()
1297
- return
1298
- }
1299
- outline.UserInput.clearMenu()
1300
- // Not working? I don't know.
1301
- // InputBox.removeEventListener('keypress',outline.UserInput.Autocomplete,false);
1302
- return
1303
- // break
1304
- default:
1305
- qp('handler: Default')
1306
- movedArrow = false // hq
1307
- // we need this because it is keypress, seeAlso performAutoCompleteEdit
1308
- qp('oldtext=' + newText)
1309
- newText += String.fromCharCode(enterEvent.charCode)
1310
- qp('charcodent=' + enterEvent.charCode)
1311
- qp('strcharcod=' + String.fromCharCode(enterEvent.charCode))
1312
- console.log('DEFAULT txtstr=' + newText + '\n') // hq
1313
- }
1314
- } // endif typeof(event) === object
1315
-
1316
- // UI.log.warn(InputBox.choices.length);
1317
- // for(i=0;InputBox.choices[i].label<newText;i++); //O(n) ToDo: O(log n)
1318
- if (mode === 'all') {
1319
- qp('generalAC after switch, newText=' + newText + 'mode is all')
1320
- outline.UserInput.clearMenu()
1321
- // outline.UserInput.showMenu(e,'GeneralAutoComplete',undefined,{'isPredicate':false,'selectedTd':tdNode,'choices':InputBox.choices, 'index':i});
1322
- outline.UserInput.showMenu(e, 'GeneralAutoComplete', undefined, {
1323
- inputText: newText,
1324
- selectedTd: tdNode
1325
- })
1326
- if (newText.length === 0) outline.UserInput.WildCardButtons()
1327
- } else if (mode === 'predicate') {
1328
- qp(
1329
- 'predicateAC after switch, newText=' +
1330
- newText +
1331
- 'mode is predicate'
1332
- )
1333
- outline.UserInput.clearMenu()
1334
- outline.UserInput.showMenu(e, 'PredicateAutoComplete', undefined, {
1335
- inputText: newText,
1336
- isPredicate: true,
1337
- selectedTd: tdNode
1338
- })
1339
- } else if (mode === 'JournalTAC') {
1340
- // hq
1341
- qp('JouralTAC after switch, newText=' + newText)
1342
- outline.UserInput.clearMenu()
1343
- // Goto showMenu
1344
- outline.UserInput.showMenu(
1345
- e,
1346
- 'JournalTitleAutoComplete',
1347
- undefined,
1348
- { inputText: newText },
1349
- 'orderisuseless'
1350
- )
1351
- }
1352
- menu = myDocument.getElementById(outline.UserInput.menuID)
1353
- if (!menu) {
1354
- qp('No menu element. Do not show menu.')
1355
- return
1356
- }
1357
- qp('at end of handler\n^^^^^^^^^^^^^^^^^\n\n')
1358
- setHighlightItem(menu.firstChild.firstChild)
1359
- outline.showURI(UI.utils.getAbout(store, menu.lastHighlight))
1360
- return 'nothing to return'
1361
- }
1362
- } // end of return function
1363
- },
1364
-
1365
- // Add the buttons which allow the suer to craete a new object
1366
- // Or reference an exiting one with a URI.
1367
- //
1368
- WildCardButtons: function WildCardButtons () {
1369
- const menuDiv = myDocument.getElementById(outline.UserInput.menuID)
1370
- const div = menuDiv.insertBefore(
1371
- myDocument.createElement('div'),
1372
- menuDiv.firstChild
1373
- )
1374
- const input1 = div.appendChild(myDocument.createElement('input'))
1375
- const input2 = div.appendChild(myDocument.createElement('input'))
1376
- input1.type = 'button'
1377
- input1.value = 'New...'
1378
- input2.type = 'button'
1379
- input2.value = 'Know its URI'
1380
-
1381
- function highlightInput (e) {
1382
- // same as the one in newMenu()
1383
- const menu = myDocument.getElementById(outline.UserInput.menuID)
1384
- if (menu.lastHighlight) menu.lastHighlight.className = ''
1385
- menu.lastHighlight = UI.utils.ancestor(UI.utils.getTarget(e), 'INPUT')
1386
- if (!menu.lastHighlight) return // mouseover <TABLE>
1387
- menu.lastHighlight.className = 'activeItem'
1388
- }
1389
- div.addEventListener('mouseover', highlightInput, false)
1390
- input1.addEventListener('click', this.createNew, false)
1391
- input2.addEventListener('click', this.inputURI, false)
1392
- },
1393
- // ToDo: shrink rows when \n+backspace
1394
- Keypress: function (e) {
1395
- if (e.keyCode === 13) {
1396
- if (outline.targetOf(e).tagName !== 'TEXTAREA') {
1397
- this.clearInputAndSave()
1398
- } else {
1399
- // <TEXTAREA>
1400
- const preRows = parseInt(this.lastModified.getAttribute('rows'))
1401
- this.lastModified.setAttribute('rows', (preRows + 1).toString())
1402
- e.stopPropagation()
1403
- }
1404
- }
1405
- // Remark by Kenny: If the user wants to input more lines into an one-line-only blank.
1406
- // Direct him/her to a new blank (how?)
1407
- },
1408
-
1409
- Mousedown: function (e) {
1410
- qp('MOUSING DOWN')
1411
- // temporary key ctrl+s or q for swiching mode
1412
- // This was in HCIOptions "right click to switch mode":
1413
- window.addEventListener(
1414
- 'keypress',
1415
- function (e) {
1416
- if (e.ctrlKey && (e.charCode === 115 || e.charCode === 113)) {
1417
- UserInput.switchMode()
1418
- }
1419
- },
1420
- false
1421
- )
1422
- window.addEventListener('mousedown', UserInput.Mousedown, false)
1423
- document.getElementById('outline').oncontextmenu = function () {
1424
- return false
1425
- }
1426
-
1427
- if (e.button === 2) {
1428
- // right click
1429
- UserInput.switchMode()
1430
- if (e) {
1431
- e.preventDefault()
1432
- e.stopPropagation()
1433
- }
1434
- }
1435
- },
1436
-
1437
- Mouseover: function Mouseover (e) {
1438
- this.className = 'bottom-border-active'
1439
- if (this._tabulatorMode === 1) {
1440
- switch (UI.utils.getTarget(e).tagName) {
1441
- case 'TD': {
1442
- const preTd = UI.utils.getTarget(e)
1443
- if (preTd.className === 'pred') preTd.style.cursor = 'copy'
1444
- break
1445
- }
1446
- // Uh...I think I might have to give up this
1447
- case 'DIV': {
1448
- const border = UI.utils.getTarget(e)
1449
- if (UI.utils.getTarget(e).className === 'bottom-border') {
1450
- border.style.borderColor = 'rgb(100%,65%,0%)'
1451
- border.style.cursor = 'copy'
1452
- }
1453
- break
1454
- }
1455
- default:
1456
- }
1457
- }
1458
- },
1459
-
1460
- Mouseout: function (e) {
1461
- this.className = 'bottom-border'
1462
- if (this._tabulatorMode === 1) {
1463
- const border = UI.utils.getTarget(e)
1464
- if (UI.utils.getTarget(e).className === 'bottom-border') {
1465
- border.style.borderColor = 'transparent'
1466
- border.style.cursor = 'auto'
1467
- }
1468
- }
1469
- },
1470
-
1471
- /**
1472
- * Utilities
1473
- */
1474
-
1475
- whatSortOfEditCell: function whatSortOfEditCell (selectedTd) {
1476
- if (selectedTd.nextSibling) return 'predicate'
1477
- const predicateTerm = this.getStatementAbout(selectedTd).predicate
1478
- // var predicateTerm=selectedTd.parentNode.AJAR_statement.predicate;
1479
- if (
1480
- store.whether(
1481
- predicateTerm,
1482
- UI.ns.rdf('type'),
1483
- UI.ns.owl('DatatypeProperty')
1484
- ) ||
1485
- store.whether(predicateTerm, UI.ns.rdfs('range'), UI.ns.rdfs('Literal')) ||
1486
- predicateTerm.termType === 'Collection'
1487
- ) {
1488
- return 'DatatypeProperty-like'
1489
- } else if (
1490
- store.whether(predicateTerm, rdf('type'), UI.ns.owl('ObjectProperty'))
1491
- ) {
1492
- return 'ObjectProperty-like'
1493
- } else {
1494
- return 'no-idea'
1495
- }
1496
- },
1497
-
1498
- getStatementAbout: function getStatementAbout (something) {
1499
- // var trNode=something.parentNode;
1500
- const trNode = UI.utils.ancestor(something, 'TR')
1501
- if (!trNode) {
1502
- throw new Error('No ancestor TR for the TD we clicked on:' + something)
1503
- }
1504
- let statement
1505
- try {
1506
- statement = trNode.AJAR_statement
1507
- } catch (e) {
1508
- throw new Error(
1509
- 'No AJAR_statement!' +
1510
- something +
1511
- something.textContent +
1512
- ' has ancestor ' +
1513
- trNode
1514
- ) // was commented out @@
1515
- // throw 'TR not a statement TR' // was commented out @@
1516
- }
1517
- // Set last modified here, I am not sure this will be ok.
1518
- this.lastModifiedStat = trNode.AJAR_statement
1519
- this.statIsInverse = trNode.AJAR_inverse
1520
-
1521
- return statement
1522
- },
1523
-
1524
- createInputBoxIn: function createInputBoxIn (tdNode, defaultText) {
1525
- function UpAndDown (e) {
1526
- if (e.keyCode === 38 || e.keyCode === 40) {
1527
- outline.OutlinerKeypressPanel(e)
1528
- outline.UserInput.clearInputAndSave()
1529
- }
1530
- }
1531
- UI.log.info(
1532
- 'myDocument in createInputBoxIn is now ' + myDocument.location
1533
- )
1534
- UI.log.info('outline.document is now ' + outline.document.location)
1535
- const inputBox = myDocument.createElement('input')
1536
- inputBox.setAttribute('value', defaultText)
1537
- inputBox.setAttribute('class', 'textinput')
1538
- // inputBox.setAttribute('size','100');//should be the size of <TD>
1539
- if (tdNode.className !== 'undetermined selected') {
1540
- inputBox.setAttribute('size', '100') // should be the size of <TD>
1541
- inputBox.addEventListener('keypress', UpAndDown, false)
1542
- }
1543
- tdNode.appendChild(inputBox)
1544
- return inputBox
1545
- },
1546
-
1547
- // called when 'New...' is clicked(eventlistener) or enter is pressed while 'New...' is highlighted
1548
- createNew: function createNew (_e) {
1549
- outline.UserInput.clearMenu()
1550
- const selectedTd = outline.getSelection()[0]
1551
- const targetdoc = selectedTd.parentNode.AJAR_statement.why
1552
- const newTerm = store.nextSymbol(targetdoc)
1553
- outline.UserInput.fillInRequest('object', selectedTd, newTerm)
1554
- // selection is changed
1555
- outline.outlineExpand(outline.getSelection()[0], newTerm)
1556
- },
1557
-
1558
- inputURI: function inputURI (_e) {
1559
- const This = outline.UserInput
1560
- This.clearMenu()
1561
- const selectedTd = outline.getSelection()[0]
1562
- UI.utils.emptyNode(selectedTd)
1563
- const tiptext = ' (Type a URI) '
1564
- This.lastModified = This.createInputBoxIn(selectedTd, tiptext)
1565
- This.lastModified.select()
1566
- function typeURIhandler (e) {
1567
- e.stopPropagation()
1568
- switch (e.keyCode) {
1569
- case 13: // enter
1570
- case 9: // tab
1571
- // this is input box
1572
- if (this.value !== tiptext) {
1573
- const newuri = this.value // @@ Removed URI "fixup" code
1574
- This.fillInRequest('object', selectedTd, store.sym(newuri))
1575
- }
1576
- }
1577
- }
1578
- This.lastModified.addEventListener('keypress', typeURIhandler, false)
1579
- /*
1580
- if (false && UI.isExtension){
1581
- var selectedTd = outline.getSelection()[0];
1582
- emptyNode(selectedTd);
1583
- var textbox = myDocument.createElementNS(kXULNS,'textbox');
1584
- textbox.setAttribute('type','autocomplete');
1585
- textbox.setAttribute('autocompletesearch','history');
1586
- selectedTd.appendChild(textbox);
1587
-
1588
- urlbar = gURLBar.cloneNode(false);
1589
- selectedTd.appendChild(urlbar);
1590
- urlbar.mController = gURLBar.mController;
1591
-
1592
- }
1593
- */
1594
- },
1595
-
1596
- appendToPredicate: function appendToPredicate (predicateTd) {
1597
- let isEnd = false
1598
- let trIterator
1599
- try {
1600
- for (
1601
- trIterator = predicateTd.parentNode.nextSibling;
1602
- trIterator.childNodes.length === 1 && trIterator.AJAR_statement;
1603
- // number of nodes as condition, also beware of toggle Trs that don't have AJAR_statement
1604
- trIterator = trIterator.nextSibling
1605
- ) {
1606
- // ..
1607
- }
1608
- } catch (e) {
1609
- isEnd = true
1610
- }
1611
- // if(!isEnd && HCIoptions["bottom insert highlights"].enabled) trIterator=trIterator.previousSibling;
1612
-
1613
- const insertTr = myDocument.createElement('tr')
1614
- // style stuff, I'll have to investigate appendPropertyTRs() somehow
1615
- insertTr.style.colspan = '1'
1616
- insertTr.style.display = 'block'
1617
-
1618
- insertTr.style.display = ''
1619
- if (predicateTd.hasAttribute('rowspan')) {
1620
- predicateTd.setAttribute(
1621
- 'rowspan',
1622
- parseInt(predicateTd.getAttribute('rowspan')) + 1
1623
- )
1624
- }
1625
-
1626
- if (!predicateTd.hasAttribute('rowspan')) {
1627
- predicateTd.setAttribute('rowspan', '2')
1628
- }
1629
-
1630
- if (!isEnd) {
1631
- trIterator.parentNode.insertBefore(insertTr, trIterator)
1632
- } else {
1633
- const table = predicateTd.parentNode.parentNode
1634
- if (table.className === 'defaultPane') {
1635
- table.insertBefore(insertTr, table.lastChild)
1636
- } else {
1637
- table.appendChild(insertTr)
1638
- }
1639
- }
1640
-
1641
- return insertTr
1642
- },
1643
-
1644
- bnode2symbol: function bnode2symbol (bnode, symbol) {
1645
- store.copyTo(bnode, symbol, ['two-direction', 'delete'])
1646
- },
1647
-
1648
- generateRequest: function generateRequest (
1649
- tipText,
1650
- trNew,
1651
- isPredicate,
1652
- notShow
1653
- ) {
1654
- let trNode
1655
- if (!notShow) {
1656
- if (trNew) {
1657
- trNode = trNew
1658
- } else {
1659
- trNode = UI.utils.ancestor(this.lastModified, 'TR')
1660
- }
1661
- UI.utils.emptyNode(trNode)
1662
- }
1663
-
1664
- // create the undetermined term
1665
- // Choice 1:
1666
- // var reqTerm=kb.literal("TBD");
1667
- // this is troblesome since RDFIndexedFormula does not allow me to add <x> <y> "TBD". twice
1668
- // Choice 2: Use a variable.
1669
- // Agreed. Kenny wonders whether there is RDF/XML representation of a variable.
1670
- // labelPriority[UI.ns.link('message').uri] = 20;
1671
-
1672
- // We must get rid of this clutter in the store. "OK, will be stroed in a seperate formula to avoid bugs", Kenny says
1673
- const tp = TempFormula
1674
- const reqTerm = tp.bnode()
1675
- tp.add(reqTerm, UI.ns.rdf('type'), UI.ns.link('Request'))
1676
- if (tipText.length < 10) {
1677
- tp.add(reqTerm, UI.ns.link('message'), tp.literal(tipText))
1678
- } else {
1679
- tp.add(reqTerm, UI.ns.link('message'), tp.literal(tipText))
1680
- }
1681
- tp.add(reqTerm, UI.ns.link('to'), tp.literal('The User'))
1682
- tp.add(reqTerm, UI.ns.link('from'), tp.literal('The User'))
1683
-
1684
- // append the undetermined td
1685
- if (!notShow) {
1686
- let newNode
1687
- if (isPredicate) {
1688
- newNode = trNode.appendChild(
1689
- outline.outlinePredicateTD(reqTerm, trNode, false, false)
1690
- )
1691
- } else {
1692
- newNode = trNode.appendChild(outline.outlineObjectTD(reqTerm))
1693
- }
1694
- newNode.className = 'undetermined'
1695
- newNode.textContent = tipText
1696
- }
1697
-
1698
- return reqTerm
1699
- },
1700
-
1701
- showMenu: function showMenu (
1702
- e,
1703
- menuType,
1704
- inputQuery,
1705
- extraInformation,
1706
- _order
1707
- ) {
1708
- // ToDo:order, make a class?
1709
- UI.log.info('myDocument is now ' + myDocument.location)
1710
- UI.log.info('outline.doucment is now ' + outline.document.location)
1711
- const This = this
1712
- const menu = myDocument.createElement('div')
1713
- qp('\n**** In showMenu, menuType = ' + menuType + '\n')
1714
- if (extraInformation) {
1715
- for (const x in extraInformation) {
1716
- console.log('\t extra ' + x + ': ' + extraInformation[x] + '\n')
1717
- }
1718
- }
1719
- console.log('CREATED MENU\n') // hq
1720
- menu.id = this.menuID
1721
- menu.className = 'outlineMenu'
1722
- // menu.addEventListener('click',false);
1723
- menu.style.top = e.pageY + 'px'
1724
- menu.style.left = e.pageX + 'px'
1725
-
1726
- /// /For pubsPane
1727
- // This is for setting the location of the dropdown menu, because
1728
- // JournalTitleAutoComplete is called with a keypress, and not mouse actions
1729
- // Get Offset of an HTML element
1730
- const getOffset = function getOffset (el) {
1731
- let _lf = 0
1732
- let _tp = 0
1733
- let oldlf = 0
1734
- let oldtp = 0
1735
- let newlf = 0
1736
- let newtp = 0
1737
-
1738
- // repeatedly get ancestor's positions
1739
- // TODO: STILL a small offset/bug
1740
- while (el && !isNaN(el.offsetLeft) && !isNaN(el.offsetTop)) {
1741
- newlf = el.offsetLeft
1742
- newtp = el.offsetTop
1743
-
1744
- // only change if the new parent's offset is different
1745
- if (newlf !== oldlf) {
1746
- _lf += el.offsetLeft - el.scrollLeft
1747
- }
1748
- if (newtp !== oldtp) {
1749
- _tp += el.offsetTop - el.scrollTop
1750
- }
1751
-
1752
- oldlf = newlf
1753
- oldtp = newtp
1754
-
1755
- el = el.parentNode
1756
- }
1757
- // there is a constant offset
1758
- return { top: _tp + 54, left: _lf - 38 }
1759
- }
1760
- // Change the position of menu in pubsPane's journal Title AC
1761
- if (menuType === 'JournalTitleAutoComplete') {
1762
- // hql
1763
- const loc = getOffset(myDocument.getElementById('inpid_journal_title'))
1764
- loc.left -= myDocument.getElementById('inpid_journal_title').scrollTop
1765
- menu.style.top = loc.top + 'px'
1766
- menu.style.left = loc.left + 'px'
1767
- }
1768
- console.log(
1769
- 'menu at top=' + menu.style.top + ' left=' + menu.style.left + '\n'
1770
- ) // hql
1771
- // \\\\\\\hql
1772
-
1773
- myDocument.body.appendChild(menu)
1774
- const table = menu.appendChild(myDocument.createElement('table'))
1775
-
1776
- menu.lastHighlight = null
1777
- function highlightTr (e) {
1778
- if (menu.lastHighlight) menu.lastHighlight.className = ''
1779
- menu.lastHighlight = UI.utils.ancestor(UI.utils.getTarget(e), 'TR')
1780
- if (!menu.lastHighlight) return // mouseover <TABLE>
1781
- menu.lastHighlight.className = 'activeItem'
1782
- }
1783
-
1784
- table.addEventListener('mouseover', highlightTr, false)
1785
-
1786
- // setting for action after selecting item
1787
- let selectItem
1788
- switch (menuType) {
1789
- case 'DidYouMeanDialog':
1790
- selectItem = function selectItem (e) {
1791
- qp('DID YOU MEAN SELECT ITEM!!!!!')
1792
- const target = UI.utils.ancestor(UI.utils.getTarget(e), 'TR')
1793
- if (target.childNodes.length === 2 && target.nextSibling) {
1794
- // Yes
1795
- store.add(bnodeTerm, IDpredicate, IDterm) // used to connect the two
1796
- outline.UserInput.clearMenu()
1797
- } else if (target.childNodes.length === 2) {
1798
- outline.UserInput.clearMenu()
1799
- }
1800
- }
1801
- break
1802
- case 'LimitedPredicateChoice': {
1803
- const clickedTd = extraInformation.clickedTd
1804
- selectItem = function selectItem (e) {
1805
- qp('LIMITED P SELECT ITEM!!!!')
1806
- const selectedPredicate = UI.utils.getAbout(store, UI.utils.getTarget(e))
1807
- const predicateChoices =
1808
- clickedTd.parentNode.AJAR_statement.predicate.elements
1809
- for (let i = 0; i < predicateChoices.length; i++) {
1810
- if (predicateChoices[i].sameTerm(selectedPredicate)) {
1811
- predicateChoices.unshift(predicateChoices.splice(i, 1)[0])
1812
- }
1813
- }
1814
- outline.UserInput.clearMenu()
1815
-
1816
- // refresh the choice
1817
- const tr = clickedTd.parentNode
1818
- const newTd = outline.outlinePredicateTD(
1819
- tr.AJAR_statement.predicate,
1820
- tr
1821
- )
1822
- tr.insertBefore(newTd, clickedTd)
1823
- tr.removeChild(clickedTd)
1824
- This.lastModified.select()
1825
- }
1826
- break
1827
- }
1828
- case 'PredicateAutoComplete':
1829
- case 'GeneralAutoComplete':
1830
- case 'GeneralPredicateChoice':
1831
- case 'JournalTitleAutoComplete': // hql
1832
- case 'TypeChoice': {
1833
- // Clickable menu
1834
- const isPredicate = extraInformation.isPredicate
1835
- const selectedTd = extraInformation.selectedTd
1836
- selectItem = function selectItem (e) {
1837
- qp('WOOHOO')
1838
- const inputTerm = UI.utils.getAbout(store, UI.utils.getTarget(e))
1839
- qp('GENERAL SELECT ITEM!!!!!!=' + inputTerm)
1840
- qp('target=' + UI.utils.getTarget(e))
1841
- if (isPredicate) {
1842
- qp('1')
1843
- if (
1844
- outline.UserInput.fillInRequest(
1845
- 'predicate',
1846
- selectedTd,
1847
- inputTerm
1848
- )
1849
- ) {
1850
- qp('2')
1851
- outline.UserInput.clearMenu()
1852
- }
1853
- } else {
1854
- qp('3')
1855
- // thisInput.fillInRequest('object',selectedTd,inputTerm); //why is this not working?
1856
- if (
1857
- outline.UserInput.fillInRequest('object', selectedTd, inputTerm)
1858
- ) {
1859
- qp('4')
1860
- outline.UserInput.clearMenu()
1861
- }
1862
- }
1863
- }
1864
- break
1865
- }
1866
- default:
1867
- throw new Error('userinput: unexpected mode')
1868
- }
1869
- // hq: this line makes the menu clickable
1870
- table.addEventListener('click', selectItem, false)
1871
-
1872
- // Add Items to the list
1873
- // build NameSpaces here from knowledge base
1874
- const NameSpaces = {}
1875
- // for each (ontology in ontologies)
1876
- store.each(undefined, UI.ns.rdf('type'), UI.ns.owl('Ontology')).forEach(
1877
- function (ontology) {
1878
- const label = UI.utils.label(ontology)
1879
- if (!label) return
1880
- // this is like extracting metadata from URI. Maybe it's better not to take the abbrevs.
1881
- const match = label.value.match(/\((.+?)\)/)
1882
- if (match) {
1883
- NameSpaces[match[1]] = ontology.uri
1884
- } else {
1885
- NameSpaces[label.value] = ontology.uri
1886
- }
1887
- }
1888
- )
1889
- function addMenuItem (predicate) {
1890
- if (table.firstChild && table.firstChild.className === 'no-suggest') {
1891
- table.removeChild(table.firstChild)
1892
- }
1893
- const Label = UI.utils.predicateLabelForXML(predicate, false)
1894
- // Label = Label.slice(0,1).toUpperCase() + Label.slice(1);
1895
-
1896
- if (!predicate.uri) return // bnode
1897
- let theNamespace = '??'
1898
- for (const name in NameSpaces) {
1899
- UI.log.debug(NameSpaces[name])
1900
- if (UI.rdf.Util.string_startswith(predicate.uri, NameSpaces[name])) {
1901
- theNamespace = name
1902
- break
1903
- }
1904
- }
1905
-
1906
- const tr = table.appendChild(myDocument.createElement('tr'))
1907
- tr.setAttribute('about', predicate)
1908
- const th = tr.appendChild(myDocument.createElement('th'))
1909
- th.appendChild(myDocument.createElement('div')).appendChild(
1910
- myDocument.createTextNode(Label)
1911
- )
1912
- tr.appendChild(myDocument.createElement('td')).appendChild(
1913
- myDocument.createTextNode(theNamespace.toUpperCase())
1914
- )
1915
- }
1916
- function addPredicateChoice (selectedQuery) {
1917
- return function (bindings) {
1918
- const predicate = bindings[selectedQuery.vars[0]]
1919
- addMenuItem(predicate)
1920
- }
1921
- }
1922
- function clearMenu (e) {
1923
- This.clearMenu()
1924
- e.stopPropagation()
1925
- }
1926
- let inputText
1927
- let bnodeTerm
1928
- let IDpredicate
1929
- let IDterm
1930
- let tr
1931
- let th
1932
- switch (menuType) {
1933
- case 'DidYouMeanDialog': {
1934
- const dialogTerm = extraInformation.dialogTerm
1935
- bnodeTerm = extraInformation.bnodeTerm
1936
- // have to do style instruction passing
1937
- menu.style.width = 'auto'
1938
-
1939
- const h1 = table.appendChild(myDocument.createElement('tr'))
1940
- const h1th = h1.appendChild(myDocument.createElement('th'))
1941
- h1th.appendChild(myDocument.createTextNode('Did you mean...'))
1942
- const plist = store.statementsMatching(dialogTerm)
1943
- let i
1944
- for (i = 0; i < plist.length; i++) {
1945
- if (
1946
- store.whether(
1947
- plist[i].predicate,
1948
- rdf('type'),
1949
- UI.ns.owl('InverseFunctionalProperty')
1950
- )
1951
- ) {
1952
- break
1953
- }
1954
- }
1955
- const IDpredicate = plist[i].predicate
1956
- const IDterm = store.any(dialogTerm, plist[i].predicate)
1957
- const text =
1958
- UI.utils.label(dialogTerm) +
1959
- ' who has ' +
1960
- UI.utils.label(IDpredicate) +
1961
- ' ' +
1962
- IDterm +
1963
- '?'
1964
- const h2 = table.appendChild(myDocument.createElement('tr'))
1965
- const h2th = h2.appendChild(myDocument.createElement('th'))
1966
- h2th.appendChild(myDocument.createTextNode(text))
1967
- h1th.setAttribute('colspan', '2')
1968
- h2th.setAttribute('colspan', '2')
1969
- const ans1 = table.appendChild(myDocument.createElement('tr'))
1970
- ans1
1971
- .appendChild(myDocument.createElement('th'))
1972
- .appendChild(myDocument.createTextNode('Yes'))
1973
- ans1
1974
- .appendChild(myDocument.createElement('td'))
1975
- .appendChild(myDocument.createTextNode('BOOLEAN'))
1976
- const ans2 = table.appendChild(myDocument.createElement('tr'))
1977
- ans2
1978
- .appendChild(myDocument.createElement('th'))
1979
- .appendChild(myDocument.createTextNode('No'))
1980
- ans2
1981
- .appendChild(myDocument.createElement('td'))
1982
- .appendChild(myDocument.createTextNode('BOOLEAN'))
1983
- break
1984
- }
1985
- case 'PredicateAutoComplete': // Prompt user for possible relationships for new data
1986
- inputText = extraInformation.inputText
1987
- /* The labeller functionality code ahs been lost or dropped -- reinstate this? */
1988
- // @@ TODO: Write away the need for exception on next line
1989
-
1990
- const predicates = outline.labeller.searchAdv(
1991
- inputText,
1992
- undefined,
1993
- 'predicate'
1994
- )
1995
- // @@ TODO: Write away the need for exception on next line
1996
-
1997
- let results = [] // @@ fixme
1998
- for (let i = 0; i < predicates.length; i++) {
1999
- const tempQuery = {}
2000
- tempQuery.vars = []
2001
- tempQuery.vars.push('Kenny')
2002
- const tempBinding = {}
2003
- tempBinding.Kenny = store.fromNT(predicates[i].NT)
2004
- try {
2005
- addPredicateChoice(tempQuery)(tempBinding)
2006
- } catch (e) {
2007
- throw new Error("I'll deal with bnodes later...[Kenny]" + e)
2008
- } // I'll deal with bnodes later...
2009
- }
2010
-
2011
- // @@ TODO: Write away the need for exception on next line
2012
-
2013
- let entries = results[0]
2014
- if (entries.length === 0) {
2015
- console.log('cm length 0\n') // hq
2016
- this.clearMenu()
2017
- return
2018
- }
2019
- for (let i = 0; i < entries.length && i < 10; i++) {
2020
- // do not show more than 30 items
2021
- addMenuItem(entries[i][1])
2022
- }
2023
- break
2024
- case 'GeneralAutoComplete': {
2025
- inputText = extraInformation.inputText
2026
- try {
2027
- results = outline.labeller.search(inputText)
2028
- } catch (e) {
2029
- console.log(
2030
- 'GeneralAutoComplete: debug me ' +
2031
- extraInformation.selectedTd.textContent +
2032
- '\n' +
2033
- e +
2034
- '\n'
2035
- )
2036
- }
2037
- entries = results[0] // [label, subject,priority]
2038
- const types = results[1]
2039
- if (entries.length === 0) {
2040
- console.log('cm length 0\n') // hq
2041
- this.clearMenu()
2042
- return
2043
- }
2044
- for (let i = 0; i < entries.length && i < 10; i++) {
2045
- // do not show more than 30 items
2046
- // console.log("\nGEN ENTRIES["+i+"] = "+entries[i]+"\n");//hq
2047
- const thisNT = entries[i][1].toNT()
2048
- // console.log("thisNT="+thisNT+"\n");
2049
- tr = table.appendChild(myDocument.createElement('tr'))
2050
- tr.setAttribute('about', thisNT)
2051
- th = tr.appendChild(myDocument.createElement('th'))
2052
- th.appendChild(myDocument.createElement('div')).appendChild(
2053
- myDocument.createTextNode(entries[i][0])
2054
- )
2055
- // var theTerm = entries[i][1]
2056
- // var type=theTerm?kb.any(kb.fromNT(thisNT),rdf('type')):undefined;
2057
- const type = types[i]
2058
- const typeLabel = type ? UI.utils.label(type) : ''
2059
- tr.appendChild(myDocument.createElement('td')).appendChild(
2060
- myDocument.createTextNode(typeLabel)
2061
- )
2062
- }
2063
- /* var choices=extraInformation.choices;
2064
- var index=extraInformation.index;
2065
- for (var i=index-10;i<index+20;i++){ //show 30 items
2066
- if (i<0) i=0;
2067
- if (i==choices.length) break;
2068
- var thisNT=choices[i].NT;
2069
- var tr=table.appendChild(myDocument.createElement('tr'));
2070
- tr.setAttribute('about',thisNT);
2071
- var th=tr.appendChild(myDocument.createElement('th'))
2072
- th.appendChild(myDocument.createElement('div')).appendChild(myDocument.createTextNode(choices[i].label));
2073
- var theTerm=kb.fromNT(thisNT);
2074
- var type=theTerm?kb.any(kb.fromNT(thisNT),rdf('type')):undefined;
2075
- var typeLabel=type?label(type):"";
2076
- tr.appendChild(myDocument.createElement('td')).appendChild(myDocument.createTextNode(typeLabel));
2077
- }
2078
- */
2079
- break
2080
- }
2081
- case 'JournalTitleAutoComplete': { // hql
2082
- // HEART OF JOURNAL TITLE AUTOCOMPLETE
2083
-
2084
- // extraInformatin is from above getAutoCompleteHandler
2085
- inputText = extraInformation.inputText
2086
- console.log('testing searching text= ' + inputText + ' =====\n')
2087
- console.log('\n===start JournalTitleAutoComplete\n')
2088
-
2089
- // Gets all the URI's with type Journal in the knowledge base
2090
- const juris = store.each(undefined, rdf('type'), bibo('Journal'))
2091
-
2092
- const matchedtitle = [] // debugging display before inserts into menu
2093
-
2094
- for (let i = 0; i < juris.length; i++) {
2095
- const juri = juris[i]
2096
- const jtitle = store.each(juri, dcelems('title'), undefined)
2097
-
2098
- const jtstr = jtitle + ''
2099
-
2100
- const matchstr = inputText.toLowerCase()
2101
- const jTitleLowerCase = jtstr.toLowerCase()
2102
-
2103
- // If the inputText as a whole is contained in a journal title
2104
- if (jTitleLowerCase.search(matchstr) !== -1) {
2105
- qp('FOUND A Journal Title Match!!!!!!')
2106
- matchedtitle.push(jtitle)
2107
-
2108
- // Add it as a row to the menu:
2109
- // === Title, URI ==
2110
- const tr = table.appendChild(myDocument.createElement('tr'))
2111
- tr.setAttribute('about', 'journalTitle')
2112
- const th = tr.appendChild(myDocument.createElement('th'))
2113
- th.appendChild(myDocument.createElement('div')).appendChild(
2114
- myDocument.createTextNode(jtitle)
2115
- )
2116
- tr.appendChild(myDocument.createElement('td')).appendChild(
2117
- myDocument.createTextNode(juri)
2118
- )
2119
- }
2120
- }
2121
-
2122
- console.log('matched: ' + matchedtitle + '\n')
2123
-
2124
- console.log("\\\\done showMenu's JTAutocomplete\n")
2125
- break
2126
- }
2127
- case 'LimitedPredicateChoice': {
2128
- const choiceTerm = UI.utils.getAbout(store, extraInformation.clickedTd)
2129
- // because getAbout relies on kb.fromNT, which does not deal with
2130
- // the 'Collection' termType. This termType is ambiguous anyway.
2131
- choiceTerm.termType = 'Collection'
2132
- const choices = store.each(choiceTerm, UI.ns.link('element'))
2133
- for (let i = 0; i < choices.length; i++) {
2134
- addMenuItem(choices[i])
2135
- }
2136
- break
2137
- }
2138
- default: {
2139
- tr = table.appendChild(myDocument.createElement('tr'))
2140
- tr.className = 'no-suggest'
2141
- th = tr.appendChild(myDocument.createElement('th'))
2142
- th.appendChild(myDocument.createElement('div')).appendChild(
2143
- myDocument.createTextNode(
2144
- 'No suggested choices. Try to type instead.'
2145
- )
2146
- )
2147
- tr.appendChild(myDocument.createElement('td')).appendChild(
2148
- myDocument.createTextNode('OK')
2149
- )
2150
- // var This = this
2151
- tr.addEventListener('click', clearMenu, 'false')
2152
-
2153
- const nullFetcher = function () {}
2154
- switch (inputQuery.constructor.name) {
2155
- case 'Array':
2156
- for (let i = 0; i < inputQuery.length; i++) {
2157
- store.query(
2158
- inputQuery[i],
2159
- addPredicateChoice(inputQuery[i]),
2160
- nullFetcher
2161
- )
2162
- }
2163
- break
2164
- case 'undefined':
2165
- throw new Error('addPredicateChoice: query is not defined')
2166
- // break
2167
- default:
2168
- store.query(inputQuery, addPredicateChoice(inputQuery), nullFetcher)
2169
- }
2170
- }
2171
- }
2172
- }, // funciton showMenu
2173
-
2174
- /* When a blank is filled. This happens even for blue-cross editing. */
2175
- fillInRequest: function fillInRequest (type, selectedTd, inputTerm) {
2176
- const tr = selectedTd.parentNode
2177
- let stat
2178
- let isInverse
2179
-
2180
- stat = tr.AJAR_statement
2181
-
2182
- isInverse = tr.AJAR_inverse
2183
-
2184
- const reqTerm = type === 'object' ? stat.object : stat.predicate
2185
- let newStat
2186
- let doNext = false
2187
-
2188
- // RDF Event
2189
-
2190
- let eventhandler
2191
- if (store.any(reqTerm, UI.ns.link('onfillin'))) {
2192
- /* 2017 -- Not sure what is supposed to happen here -- timbl @@@@
2193
- eventhandler = function(subject) {
2194
- return kb.any(reqTerm, UI.ns.link('onfillin')).value)
2195
- }
2196
- */
2197
- }
2198
-
2199
- if (type === 'predicate') {
2200
- // ToDo: How to link two things with an inverse relationship
2201
- const newTd = outline.outlinePredicateTD(inputTerm, tr, false, false)
2202
- if (selectedTd.nextSibling.className !== 'undetermined') {
2203
- const s = new UI.rdf.Statement(
2204
- stat.subject,
2205
- inputTerm,
2206
- stat.object,
2207
- stat.why
2208
- )
2209
-
2210
- try {
2211
- store.updater.update([], [s], function (
2212
- uri,
2213
- success,
2214
- errorBody
2215
- ) {
2216
- if (success) {
2217
- newStat = store.anyStatementMatching(
2218
- stat.subject,
2219
- inputTerm,
2220
- stat.object,
2221
- stat.why
2222
- )
2223
- tr.AJAR_statement = newStat
2224
- newTd.className = newTd.className.replace(/ pendingedit/g, '')
2225
- } else {
2226
- // outline.UserInput.deleteTriple(newTd,true);
2227
- // Warn the user that the write has failed.
2228
- UI.log.warn(
2229
- 'Failure occurs (#2) while inserting ' +
2230
- tr.AJAR_statement +
2231
- '\n\n' +
2232
- errorBody
2233
- )
2234
- }
2235
- })
2236
- } catch (e) {
2237
- UI.log.error(e)
2238
- // Warn the user that the write has failed.
2239
- UI.log.warn(
2240
- 'Error when insert (#2) of statement ' + s + ':\n\t' + e
2241
- )
2242
- return
2243
- }
2244
-
2245
- newTd.className += ' pendingedit'
2246
- this.lastModified = null
2247
- } else {
2248
- this.formUndetStat(
2249
- tr,
2250
- stat.subject,
2251
- inputTerm,
2252
- stat.object,
2253
- stat.why,
2254
- false
2255
- )
2256
- outline.walk('right')
2257
- doNext = true
2258
- }
2259
- outline.replaceTD(newTd, selectedTd)
2260
- TempFormula.remove(stat)
2261
- } else if (type === 'object') {
2262
- // Object value has been edited
2263
- const newTd = outline.outlineObjectTD(inputTerm)
2264
- outline.replaceTD(newTd, selectedTd)
2265
- if (
2266
- !selectedTd.previousSibling ||
2267
- selectedTd.previousSibling.className !== 'undetermined'
2268
- ) {
2269
- let s
2270
- if (!isInverse) {
2271
- s = new UI.rdf.Statement(
2272
- stat.subject,
2273
- stat.predicate,
2274
- inputTerm,
2275
- stat.why
2276
- )
2277
- } else {
2278
- s = new UI.rdf.Statement(
2279
- inputTerm,
2280
- stat.predicate,
2281
- stat.object,
2282
- stat.why
2283
- )
2284
- }
2285
-
2286
- try {
2287
- store.updater.update([], [s], function (
2288
- uri,
2289
- success,
2290
- _errorBody
2291
- ) {
2292
- UI.log.info(
2293
- '@@ usinput.js (object) callback ok=' +
2294
- success +
2295
- ' for statement:' +
2296
- s +
2297
- '\n '
2298
- )
2299
- let newStats
2300
- if (success) {
2301
- newTd.className = newTd.className.replace(/ pendingedit/g, '') // User feedback
2302
- if (!isInverse) {
2303
- newStats = store.statementsMatching(
2304
- stat.subject,
2305
- stat.predicate,
2306
- inputTerm,
2307
- stat.why
2308
- )
2309
- } else {
2310
- newStats = store.statementsMatching(
2311
- inputTerm,
2312
- stat.predicate,
2313
- stat.object,
2314
- stat.why
2315
- )
2316
- }
2317
- if (!newStats.length) {
2318
- UI.log.error("userinput.js 1711: Can't find statememt!")
2319
- }
2320
- tr.AJAR_statement = newStats[0]
2321
- } else {
2322
- UI.log.warn(
2323
- 'userinput.js (object): Fail trying to insert statement ' + s
2324
- )
2325
- // outline.UserInput.deleteTriple(newTd,true);
2326
- }
2327
- })
2328
- } catch (e) {
2329
- // outline.UserInput.deleteTriple(newTd,true);
2330
- UI.log.error(
2331
- 'userinput.js (object): exception trying to insert statement ' +
2332
- s +
2333
- ': ' +
2334
- UI.utils.stackString(e)
2335
- )
2336
- UI.log.warn('Error trying to insert statement ' + s + ':\n' + e)
2337
- return
2338
- }
2339
-
2340
- this.lastModified = null
2341
- newTd.className += ' pendingedit'
2342
- } else {
2343
- // ?this.formUndetStat(tr...)
2344
- outline.walk('left')
2345
- doNext = true
2346
- }
2347
- // removal of the undetermined statement
2348
- TempFormula.remove(stat)
2349
- }
2350
- // do not throw away user's work even update fails
2351
- UserInputFormula.statements.push(newStat)
2352
- if (eventhandler) eventhandler(stat.subject)
2353
- if (doNext) {
2354
- this.startFillInText(outline.getSelection()[0])
2355
- } else {
2356
- return true
2357
- } // can clearMenu
2358
- },
2359
-
2360
- formUndetStat: function formUndetStat (
2361
- trNode,
2362
- subject,
2363
- predicate,
2364
- object,
2365
- why,
2366
- inverse
2367
- ) {
2368
- trNode.AJAR_inverse = inverse
2369
- trNode.AJAR_statement = TempFormula.add(subject, predicate, object, why)
2370
- return trNode.AJAR_statement
2371
- }
2372
- }
2373
- }