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.
- package/dist/dashboard/basicPreferences.js +155 -0
- package/dist/dashboard/basicPreferences.js.map +1 -0
- package/dist/dashboard/dashboardPane.js +63 -0
- package/dist/dashboard/dashboardPane.js.map +1 -0
- package/dist/dashboard/homepage.js +63 -0
- package/dist/dashboard/homepage.js.map +1 -0
- package/dist/home/homePane.js +68 -0
- package/dist/home/homePane.js.map +1 -0
- package/dist/index.js +48 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/internalPane.js +195 -0
- package/dist/internal/internalPane.js.map +1 -0
- package/dist/mainPage/footer.js +16 -0
- package/dist/mainPage/footer.js.map +1 -0
- package/dist/mainPage/header.js +84 -0
- package/dist/mainPage/header.js.map +1 -0
- package/{lib → dist}/mainPage/index.d.ts.map +1 -1
- package/dist/mainPage/index.js +30 -0
- package/dist/mainPage/index.js.map +1 -0
- package/dist/outline/context.js +13 -0
- package/dist/outline/context.js.map +1 -0
- package/dist/outline/propertyViews.js +33 -0
- package/dist/outline/propertyViews.js.map +1 -0
- package/dist/outline/viewAsImage.js +7 -0
- package/dist/outline/viewAsImage.js.map +1 -0
- package/{lib → dist}/outline/viewAsMbox.js +4 -14
- package/dist/outline/viewAsMbox.js.map +1 -0
- package/dist/pad/padPane.js +420 -0
- package/dist/pad/padPane.js.map +1 -0
- package/dist/sharing/sharingPane.js +45 -0
- package/dist/sharing/sharingPane.js.map +1 -0
- package/dist/tabbed/tabbedPane.js +55 -0
- package/dist/tabbed/tabbedPane.js.map +1 -0
- package/dist/trustedApplications/trustedApplications.dom.js +158 -0
- package/dist/trustedApplications/trustedApplications.dom.js.map +1 -0
- package/dist/trustedApplications/trustedApplications.utils.js +24 -0
- package/dist/trustedApplications/trustedApplications.utils.js.map +1 -0
- package/dist/trustedApplications/trustedApplications.view.js +62 -0
- package/dist/trustedApplications/trustedApplications.view.js.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/versionInfo.js +31 -0
- package/dist/versionInfo.js.map +1 -0
- package/package.json +34 -22
- package/Documentation/VisualLanguage.html +0 -538
- package/Documentation/conventions.md +0 -333
- package/coverage/clover.xml +0 -152
- package/coverage/coverage-final.json +0 -6
- package/coverage/lcov-report/base.css +0 -224
- package/coverage/lcov-report/block-navigation.js +0 -87
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +0 -131
- package/coverage/lcov-report/outline/index.html +0 -161
- package/coverage/lcov-report/outline/outlineIcons.js.html +0 -565
- package/coverage/lcov-report/outline/propertyViews.ts.html +0 -196
- package/coverage/lcov-report/outline/viewAsImage.ts.html +0 -121
- package/coverage/lcov-report/outline/viewAsMbox.ts.html +0 -127
- package/coverage/lcov-report/prettify.css +0 -1
- package/coverage/lcov-report/prettify.js +0 -2
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +0 -210
- package/coverage/lcov-report/trustedApplications/index.html +0 -116
- package/coverage/lcov-report/trustedApplications/trustedApplications.utils.ts.html +0 -238
- package/coverage/lcov.info +0 -204
- package/dev/index.html +0 -28
- package/dev/loader.ts +0 -91
- package/dev/pane/index.ts +0 -10
- package/doc/images/panes-for-classes.epgz +0 -0
- package/doc/images/panes-for-classes.svg +0 -609
- package/eslint.config.mjs +0 -34
- package/jest.config.js +0 -27
- package/jest.setup.ts +0 -4
- package/lib/RDFXMLPane.js +0 -59
- package/lib/RDFXMLPane.js.map +0 -1
- package/lib/argument/argumentPane.js +0 -62
- package/lib/argument/argumentPane.js.map +0 -1
- package/lib/attach/attachPane.js +0 -404
- package/lib/attach/attachPane.js.map +0 -1
- package/lib/audio/audioPane.js +0 -183
- package/lib/audio/audioPane.js.map +0 -1
- package/lib/classInstancePane.js +0 -93
- package/lib/classInstancePane.js.map +0 -1
- package/lib/dashboard/basicPreferences.js +0 -229
- package/lib/dashboard/basicPreferences.js.map +0 -1
- package/lib/dashboard/dashboardPane.js +0 -73
- package/lib/dashboard/dashboardPane.js.map +0 -1
- package/lib/dashboard/homepage.js +0 -86
- package/lib/dashboard/homepage.js.map +0 -1
- package/lib/dataContentPane.js +0 -259
- package/lib/dataContentPane.js.map +0 -1
- package/lib/defaultPane.js +0 -76
- package/lib/defaultPane.js.map +0 -1
- package/lib/dokieli/dokieliPane.js +0 -173
- package/lib/dokieli/dokieliPane.js.map +0 -1
- package/lib/dokieli/new.js +0 -9
- package/lib/dokieli/new.js.map +0 -1
- package/lib/form/pane.js +0 -186
- package/lib/form/pane.js.map +0 -1
- package/lib/global.d.js +0 -2
- package/lib/global.d.js.map +0 -1
- package/lib/home/homePane.js +0 -91
- package/lib/home/homePane.js.map +0 -1
- package/lib/humanReadablePane.js +0 -138
- package/lib/humanReadablePane.js.map +0 -1
- package/lib/imagePane.js +0 -71
- package/lib/imagePane.js.map +0 -1
- package/lib/index.js +0 -112
- package/lib/index.js.map +0 -1
- package/lib/internal/internalPane.js +0 -184
- package/lib/internal/internalPane.js.map +0 -1
- package/lib/mainPage/footer.js +0 -22
- package/lib/mainPage/footer.js.map +0 -1
- package/lib/mainPage/header.js +0 -152
- package/lib/mainPage/header.js.map +0 -1
- package/lib/mainPage/index.js +0 -42
- package/lib/mainPage/index.js.map +0 -1
- package/lib/microblogPane/microblogPane.js +0 -1032
- package/lib/microblogPane/microblogPane.js.map +0 -1
- package/lib/n3Pane.js +0 -57
- package/lib/n3Pane.js.map +0 -1
- package/lib/outline/context.js +0 -19
- package/lib/outline/context.js.map +0 -1
- package/lib/outline/manager.js +0 -2264
- package/lib/outline/manager.js.map +0 -1
- package/lib/outline/manager.test.d.ts +0 -2
- package/lib/outline/manager.test.d.ts.map +0 -1
- package/lib/outline/manager.test.js +0 -210
- package/lib/outline/manager.test.js.map +0 -1
- package/lib/outline/outlineIcons.js +0 -128
- package/lib/outline/outlineIcons.js.map +0 -1
- package/lib/outline/propertyViews.js +0 -44
- package/lib/outline/propertyViews.js.map +0 -1
- package/lib/outline/propertyViews.test.d.ts +0 -2
- package/lib/outline/propertyViews.test.d.ts.map +0 -1
- package/lib/outline/propertyViews.test.js +0 -27
- package/lib/outline/propertyViews.test.js.map +0 -1
- package/lib/outline/queryByExample.js +0 -286
- package/lib/outline/queryByExample.js.map +0 -1
- package/lib/outline/userInput.js +0 -1817
- package/lib/outline/userInput.js.map +0 -1
- package/lib/outline/viewAsImage.js +0 -17
- package/lib/outline/viewAsImage.js.map +0 -1
- package/lib/outline/viewAsMbox.js.map +0 -1
- package/lib/pad/padPane.js +0 -417
- package/lib/pad/padPane.js.map +0 -1
- package/lib/playlist/playlistPane.js +0 -125
- package/lib/playlist/playlistPane.js.map +0 -1
- package/lib/registerPanes.js +0 -146
- package/lib/registerPanes.js.map +0 -1
- package/lib/schedule/formsForSchedule.js +0 -8
- package/lib/schedule/formsForSchedule.js.map +0 -1
- package/lib/schedule/schedulePane.js +0 -895
- package/lib/schedule/schedulePane.js.map +0 -1
- package/lib/sharing/sharingPane.js +0 -49
- package/lib/sharing/sharingPane.js.map +0 -1
- package/lib/slideshow/slideshowPane.js +0 -84
- package/lib/slideshow/slideshowPane.js.map +0 -1
- package/lib/socialPane.js +0 -431
- package/lib/socialPane.js.map +0 -1
- package/lib/tabbed/tabbedPane.js +0 -72
- package/lib/tabbed/tabbedPane.js.map +0 -1
- package/lib/tableViewPane.js +0 -58
- package/lib/tableViewPane.js.map +0 -1
- package/lib/test-import-export/common.js +0 -12
- package/lib/test-import-export/common.js.map +0 -1
- package/lib/test-import-export/edit-importer.js +0 -25
- package/lib/test-import-export/edit-importer.js.map +0 -1
- package/lib/test-import-export/testImportExport.js +0 -2
- package/lib/test-import-export/testImportExport.js.map +0 -1
- package/lib/transaction/pane.js +0 -479
- package/lib/transaction/pane.js.map +0 -1
- package/lib/transaction/period.js +0 -325
- package/lib/transaction/period.js.map +0 -1
- package/lib/trip/tripPane.js +0 -176
- package/lib/trip/tripPane.js.map +0 -1
- package/lib/trustedApplications/trustedApplications.dom.js +0 -177
- package/lib/trustedApplications/trustedApplications.dom.js.map +0 -1
- package/lib/trustedApplications/trustedApplications.test.d.ts +0 -2
- package/lib/trustedApplications/trustedApplications.test.d.ts.map +0 -1
- package/lib/trustedApplications/trustedApplications.test.js +0 -64
- package/lib/trustedApplications/trustedApplications.test.js.map +0 -1
- package/lib/trustedApplications/trustedApplications.utils.js +0 -34
- package/lib/trustedApplications/trustedApplications.utils.js.map +0 -1
- package/lib/trustedApplications/trustedApplications.view.js +0 -87
- package/lib/trustedApplications/trustedApplications.view.js.map +0 -1
- package/lib/types.js +0 -6
- package/lib/types.js.map +0 -1
- package/lib/ui/pane.js +0 -148
- package/lib/ui/pane.js.map +0 -1
- package/lib/versionInfo.d.ts +0 -34
- package/lib/versionInfo.d.ts.map +0 -1
- package/lib/versionInfo.js +0 -39
- package/lib/versionInfo.js.map +0 -1
- package/lib/video/videoPane.js +0 -44
- package/lib/video/videoPane.js.map +0 -1
- package/src/RDFXMLPane.js +0 -60
- package/src/argument/argumentPane.js +0 -65
- package/src/argument/argument_icon_v04.jpg +0 -0
- package/src/argument/icon_argument.png +0 -0
- package/src/argument/transparentyingyang.png +0 -0
- package/src/attach/attachPane.js +0 -508
- package/src/attach/tbl-paperclip-128.png +0 -0
- package/src/attach/tbl-paperclip-22.png +0 -0
- package/src/attach/tbl-paperclip-22a.png +0 -0
- package/src/audio/audioPane.js +0 -197
- package/src/chatPreferencesForm.ttl +0 -12
- package/src/classInstancePane.js +0 -110
- package/src/dashboard/basicPreferences.ts +0 -201
- package/src/dashboard/dashboardPane.ts +0 -83
- package/src/dashboard/homepage.ts +0 -72
- package/src/dashboard/languages/codes.html +0 -8611
- package/src/dashboard/languages/codes.xml +0 -3563
- package/src/dashboard/languages/codes2.txt +0 -170
- package/src/dashboard/languages/foo +0 -70
- package/src/dashboard/languages/foo.ttl +0 -0
- package/src/dashboard/languages/get-language-names.sh +0 -12
- package/src/dashboard/ontologyData.ttl +0 -35
- package/src/dashboard/preferencesFormText.ttl +0 -18
- package/src/dataContentPane.js +0 -290
- package/src/defaultPane.js +0 -102
- package/src/dokieli/Makefile +0 -6
- package/src/dokieli/dokieliPane.js +0 -190
- package/src/dokieli/new.html +0 -30
- package/src/dokieli/new.js +0 -22
- package/src/form/form-22.png +0 -0
- package/src/form/form-b-22.png +0 -0
- package/src/form/form.graffle +0 -0
- package/src/form/form.png +0 -0
- package/src/form/pane.js +0 -217
- package/src/form/psuedocode-notes.txt +0 -57
- package/src/global.d.ts +0 -4
- package/src/home/homePane.ts +0 -72
- package/src/humanReadablePane.js +0 -150
- package/src/imagePane.js +0 -75
- package/src/index.ts +0 -71
- package/src/internal/internalPane.ts +0 -263
- package/src/mainPage/footer.ts +0 -19
- package/src/mainPage/header.ts +0 -79
- package/src/mainPage/index.ts +0 -20
- package/src/meeting/Makefile +0 -3
- package/src/meeting/test/meeting1/Actions/actions.ttl +0 -14
- package/src/meeting/test/meeting1/Actions/config.ttl +0 -16
- package/src/meeting/test/meeting1/Actions/state.ttl +0 -30
- package/src/meeting/test/meeting1/Schedule/details.ttl +0 -34
- package/src/meeting/test/meeting1/Schedule/details.ttl.acl +0 -20
- package/src/meeting/test/meeting1/Schedule/forms.ttl +0 -75
- package/src/meeting/test/meeting1/Schedule/forms.ttl.acl +0 -20
- package/src/meeting/test/meeting1/Schedule/index.html +0 -72
- package/src/meeting/test/meeting1/Schedule/index.html.acl +0 -20
- package/src/meeting/test/meeting1/Schedule/results.ttl +0 -15
- package/src/meeting/test/meeting1/Schedule/results.ttl.acl +0 -20
- package/src/meeting/test/meeting1/SharedNotes/pad.ttl +0 -23
- package/src/meeting/test/meeting1/chat/chat.ttl +0 -1
- package/src/meeting/test/meeting1/details.ttl +0 -35
- package/src/meeting/test/meeting1/pad/pad.ttl +0 -16
- package/src/microblogPane/mbStyle.css +0 -267
- package/src/microblogPane/microblogPane.js +0 -1412
- package/src/n3Pane.js +0 -56
- package/src/outline/context.ts +0 -21
- package/src/outline/manager.js +0 -2384
- package/src/outline/manager.test.ts +0 -189
- package/src/outline/outlineIcons.js +0 -160
- package/src/outline/propertyViews.test.ts +0 -36
- package/src/outline/propertyViews.ts +0 -37
- package/src/outline/queryByExample.js +0 -296
- package/src/outline/userInput.js +0 -2373
- package/src/outline/viewAsImage.ts +0 -12
- package/src/outline/viewAsMbox.ts +0 -14
- package/src/pad/images/ColourOff.ai +2 -872
- package/src/pad/images/ColourOff.png +0 -0
- package/src/pad/images/ColourOn.ai +1 -935
- package/src/pad/images/ColourOn.png +0 -0
- package/src/pad/padPane.ts +0 -559
- package/src/playlist/playlistPane.js +0 -161
- package/src/registerPanes.js +0 -147
- package/src/schedule/Makefile +0 -6
- package/src/schedule/formsForSchedule.js +0 -117
- package/src/schedule/formsForSchedule.ttl +0 -115
- package/src/schedule/schedulePane.js +0 -1201
- package/src/sharing/sharingPane.ts +0 -49
- package/src/slideshow/slideshowPane.js +0 -80
- package/src/socialPane.js +0 -523
- package/src/style/tabbedtab.css +0 -1347
- package/src/tabbed/tabbedPane.ts +0 -60
- package/src/tableViewPane.js +0 -51
- package/src/test-import-export/common.js +0 -6
- package/src/test-import-export/edit-importer.js +0 -20
- package/src/test-import-export/testImportExport.js +0 -0
- package/src/transaction/068010-3d-transparent-glass-icon-alphanumeric-dollar-sign.png +0 -0
- package/src/transaction/075988-3d-transparent-glass-icon-business-currency-british-pound-sc35.png +0 -0
- package/src/transaction/22-pixel-068010-3d-transparent-glass-icon-alphanumeric-dollar-sign.png +0 -0
- package/src/transaction/pane.js +0 -629
- package/src/transaction/period.js +0 -374
- package/src/transaction/thumbs_075987-3d-transparent-glass-icon-business-creditcard2.png +0 -0
- package/src/transaction/thumbs_075989-3d-transparent-glass-icon-business-currency-cent-sc35.png +0 -0
- package/src/trip/tripPane.js +0 -176
- package/src/trustedApplications/__snapshots__/trustedApplications.test.ts.snap +0 -176
- package/src/trustedApplications/trustedApplications.dom.ts +0 -276
- package/src/trustedApplications/trustedApplications.test.ts +0 -82
- package/src/trustedApplications/trustedApplications.utils.ts +0 -51
- package/src/trustedApplications/trustedApplications.view.ts +0 -80
- package/src/types.ts +0 -34
- package/src/ui/22-builder.png +0 -0
- package/src/ui/builder.graffle +0 -0
- package/src/ui/builder.png +0 -0
- package/src/ui/builder2.png +0 -0
- package/src/ui/pane.js +0 -226
- package/src/versionInfo.ts +0 -32
- package/src/video/videoPane.js +0 -44
- package/timestamp.sh +0 -13
- package/travis/bumpversion.js +0 -29
- package/tsconfig.json +0 -78
- package/typings/raw-loader.d.ts +0 -4
- package/typings/solid-namespace/index.d.ts +0 -9
- package/webpack.config.js +0 -41
- /package/{lib → dist}/dashboard/basicPreferences.d.ts +0 -0
- /package/{lib → dist}/dashboard/basicPreferences.d.ts.map +0 -0
- /package/{lib → dist}/dashboard/dashboardPane.d.ts +0 -0
- /package/{lib → dist}/dashboard/dashboardPane.d.ts.map +0 -0
- /package/{lib → dist}/dashboard/homepage.d.ts +0 -0
- /package/{lib → dist}/dashboard/homepage.d.ts.map +0 -0
- /package/{lib → dist}/home/homePane.d.ts +0 -0
- /package/{lib → dist}/home/homePane.d.ts.map +0 -0
- /package/{lib → dist}/index.d.ts +0 -0
- /package/{lib → dist}/index.d.ts.map +0 -0
- /package/{lib → dist}/internal/internalPane.d.ts +0 -0
- /package/{lib → dist}/internal/internalPane.d.ts.map +0 -0
- /package/{lib → dist}/mainPage/footer.d.ts +0 -0
- /package/{lib → dist}/mainPage/footer.d.ts.map +0 -0
- /package/{lib → dist}/mainPage/header.d.ts +0 -0
- /package/{lib → dist}/mainPage/header.d.ts.map +0 -0
- /package/{lib → dist}/mainPage/index.d.ts +0 -0
- /package/{lib → dist}/outline/context.d.ts +0 -0
- /package/{lib → dist}/outline/context.d.ts.map +0 -0
- /package/{lib → dist}/outline/propertyViews.d.ts +0 -0
- /package/{lib → dist}/outline/propertyViews.d.ts.map +0 -0
- /package/{lib → dist}/outline/viewAsImage.d.ts +0 -0
- /package/{lib → dist}/outline/viewAsImage.d.ts.map +0 -0
- /package/{lib → dist}/outline/viewAsMbox.d.ts +0 -0
- /package/{lib → dist}/outline/viewAsMbox.d.ts.map +0 -0
- /package/{lib → dist}/pad/padPane.d.ts +0 -0
- /package/{lib → dist}/pad/padPane.d.ts.map +0 -0
- /package/{lib → dist}/sharing/sharingPane.d.ts +0 -0
- /package/{lib → dist}/sharing/sharingPane.d.ts.map +0 -0
- /package/{lib → dist}/tabbed/tabbedPane.d.ts +0 -0
- /package/{lib → dist}/tabbed/tabbedPane.d.ts.map +0 -0
- /package/{lib → dist}/trustedApplications/trustedApplications.dom.d.ts +0 -0
- /package/{lib → dist}/trustedApplications/trustedApplications.dom.d.ts.map +0 -0
- /package/{lib → dist}/trustedApplications/trustedApplications.utils.d.ts +0 -0
- /package/{lib → dist}/trustedApplications/trustedApplications.utils.d.ts.map +0 -0
- /package/{lib → dist}/trustedApplications/trustedApplications.view.d.ts +0 -0
- /package/{lib → dist}/trustedApplications/trustedApplications.view.d.ts.map +0 -0
- /package/{lib → dist}/types.d.ts +0 -0
- /package/{lib → dist}/types.d.ts.map +0 -0
package/lib/outline/userInput.js
DELETED
|
@@ -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 < and > 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
|