solid-panes 3.7.2 → 3.7.3-125af630

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