contacts-pane 2.6.0 → 2.6.1-8880496d
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/.eslintrc +0 -0
- package/.github/workflows/ci.yml +4 -3
- package/.nvmrc +0 -0
- package/LICENSE.md +0 -0
- package/Makefile +0 -0
- package/README.md +0 -0
- package/babel.config.js +13 -0
- package/card.ai +0 -0
- package/card.png +0 -0
- package/contactLogic.js +2 -1
- package/contactsPane.js +39 -43
- package/dev/context.ts +21 -0
- package/dev/index.html +47 -0
- package/dev/index.ts +42 -0
- package/diff.txt +0 -0
- package/exampleOfOpenData/mit-wikidata-details.ttl +0 -0
- package/exampleOfOpenData/mit-wikidata-query.sparql +0 -0
- package/exampleOfOpenData/wikidata-get.json +0 -0
- package/groupMembershipControl.js +0 -1
- package/individual.js +3 -2
- package/individualForm.js +0 -0
- package/jest.config.js +5 -0
- package/jest.setup.ts +4 -0
- package/lib/autocompleteBar.js +9 -8
- package/lib/autocompleteBar.js.map +1 -0
- package/lib/autocompleteField.js +7 -6
- package/lib/autocompleteField.js.map +1 -0
- package/lib/autocompletePicker.js +10 -14
- package/lib/autocompletePicker.js.map +1 -0
- package/lib/forms.js +0 -0
- package/lib/instituteDetailsQuery.js +0 -0
- package/lib/publicData.js +23 -22
- package/lib/publicData.js.map +1 -0
- package/lib/vcard.js +0 -0
- package/mintNewAddressBook.js +4 -4
- package/mugshotGallery.js +5 -3
- package/organizationForm.js +0 -0
- package/organizationForm.ttl +0 -0
- package/package.json +27 -6
- package/shapes/contacts-shapes.ttl +0 -0
- package/src/autocompleteBar.ts +6 -8
- package/src/autocompleteField.ts +3 -9
- package/src/autocompletePicker.ts +8 -8
- package/src/forms.ttl +0 -0
- package/src/instituteDetailsQuery.sparql +0 -0
- package/src/publicData.ts +7 -9
- package/src/vcard.ttl +0 -0
- package/toolsPane.js +27 -37
- package/tsconfig.json +13 -0
- package/webidControl.js +2 -1
- package/webpack.dev.config.js +36 -0
package/.eslintrc
CHANGED
|
File without changes
|
package/.github/workflows/ci.yml
CHANGED
|
@@ -3,10 +3,11 @@ name: CI
|
|
|
3
3
|
on:
|
|
4
4
|
push:
|
|
5
5
|
branches:
|
|
6
|
-
-
|
|
6
|
+
- "**"
|
|
7
7
|
pull_request:
|
|
8
8
|
branches:
|
|
9
|
-
-
|
|
9
|
+
- "**"
|
|
10
|
+
workflow_dispatch:
|
|
10
11
|
|
|
11
12
|
jobs:
|
|
12
13
|
test:
|
|
@@ -16,7 +17,7 @@ jobs:
|
|
|
16
17
|
node-version:
|
|
17
18
|
- 12.x
|
|
18
19
|
- 14.x
|
|
19
|
-
-
|
|
20
|
+
- 16.x
|
|
20
21
|
steps:
|
|
21
22
|
- uses: actions/checkout@v2
|
|
22
23
|
- name: Use Node.js ${{ matrix.node-version }}
|
package/.nvmrc
CHANGED
|
File without changes
|
package/LICENSE.md
CHANGED
|
File without changes
|
package/Makefile
CHANGED
|
File without changes
|
package/README.md
CHANGED
|
File without changes
|
package/babel.config.js
ADDED
package/card.ai
CHANGED
|
File without changes
|
package/card.png
CHANGED
|
File without changes
|
package/contactLogic.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
// Logic for solid contacts
|
|
2
2
|
|
|
3
3
|
import * as UI from 'solid-ui'
|
|
4
|
+
import { store } from 'solid-logic'
|
|
4
5
|
import { getPersonas } from './webidControl'
|
|
5
6
|
|
|
6
7
|
const ns = UI.ns
|
|
7
8
|
const $rdf = UI.rdf
|
|
8
9
|
const utils = UI.utils
|
|
9
|
-
const kb =
|
|
10
|
+
const kb = store
|
|
10
11
|
const updater = kb.updater
|
|
11
12
|
|
|
12
13
|
/** Perform updates on more than one document @@ Move to rdflib!
|
package/contactsPane.js
CHANGED
|
@@ -14,11 +14,12 @@ to change its state according to an ontology, comment on it, etc.
|
|
|
14
14
|
*/
|
|
15
15
|
/* global alert, confirm */
|
|
16
16
|
|
|
17
|
+
import { authn } from 'solid-logic'
|
|
18
|
+
import { addPersonToGroup, saveNewContact, saveNewGroup } from './contactLogic'
|
|
17
19
|
import * as UI from 'solid-ui'
|
|
18
|
-
import { toolsPane } from './toolsPane'
|
|
19
20
|
import { mintNewAddressBook } from './mintNewAddressBook'
|
|
20
21
|
import { renderIndividual } from './individual'
|
|
21
|
-
import {
|
|
22
|
+
import { toolsPane } from './toolsPane'
|
|
22
23
|
|
|
23
24
|
// const $rdf = UI.rdf
|
|
24
25
|
const ns = UI.ns
|
|
@@ -63,7 +64,7 @@ export default {
|
|
|
63
64
|
|
|
64
65
|
// Reproduction: Spawn a new instance of this app
|
|
65
66
|
function newAddressBookButton (thisAddressBook) {
|
|
66
|
-
return UI.
|
|
67
|
+
return UI.login.newAppInstance(
|
|
67
68
|
dom,
|
|
68
69
|
{ noun: 'address book', appPathSegment: 'contactorator.timbl.com' },
|
|
69
70
|
function (ws, newBase) {
|
|
@@ -79,7 +80,7 @@ export default {
|
|
|
79
80
|
const dom = dataBrowserContext.dom
|
|
80
81
|
const kb = dataBrowserContext.session.store
|
|
81
82
|
const div = dom.createElement('div')
|
|
82
|
-
const me =
|
|
83
|
+
const me = authn.currentUser() // If already logged on
|
|
83
84
|
|
|
84
85
|
UI.aclControl.preventBrowserDropEvents(dom) // protect drag and drop
|
|
85
86
|
|
|
@@ -96,7 +97,7 @@ export default {
|
|
|
96
97
|
|
|
97
98
|
const t = kb.findTypeURIs(subject)
|
|
98
99
|
|
|
99
|
-
let me =
|
|
100
|
+
let me = authn.currentUser()
|
|
100
101
|
|
|
101
102
|
const context = {
|
|
102
103
|
target: subject,
|
|
@@ -430,7 +431,8 @@ export default {
|
|
|
430
431
|
}
|
|
431
432
|
|
|
432
433
|
peopleHeader.textContent =
|
|
433
|
-
cards.length > 5 ? '' + cards.length + '
|
|
434
|
+
cards.length > 5 ? '' + cards.length + ' Contacts' : 'Contact'
|
|
435
|
+
peopleHeader.setAttribute('style', 'font-weight: bold;')
|
|
434
436
|
|
|
435
437
|
function renderNameInGroupList (person) {
|
|
436
438
|
const personRow = dom.createElement('tr')
|
|
@@ -616,7 +618,7 @@ export default {
|
|
|
616
618
|
}))
|
|
617
619
|
} // newGroupClickHandler
|
|
618
620
|
|
|
619
|
-
async function
|
|
621
|
+
async function createNewCard (klass) {
|
|
620
622
|
cardMain.innerHTML = ''
|
|
621
623
|
const ourBook = findBookFromGroups(book)
|
|
622
624
|
try {
|
|
@@ -693,12 +695,14 @@ export default {
|
|
|
693
695
|
const peopleFooter = bookFooter.appendChild(dom.createElement('td'))
|
|
694
696
|
const cardFooter = bookFooter.appendChild(dom.createElement('td'))
|
|
695
697
|
|
|
698
|
+
// Putting it above on style doesn't work
|
|
699
|
+
bookTable.setAttribute('style', 'border-spacing: 3rem 0;')
|
|
696
700
|
cardHeader.appendChild(dom.createElement('div')) // searchDiv
|
|
697
701
|
// searchDiv.setAttribute('style', 'border: 0.1em solid #888; border-radius: 0.5em')
|
|
698
702
|
const searchInput = cardHeader.appendChild(dom.createElement('input'))
|
|
699
703
|
searchInput.setAttribute('type', 'text')
|
|
700
|
-
searchInput.
|
|
701
|
-
|
|
704
|
+
searchInput.setAttribute('placeholder', 'Search Contacts...')
|
|
705
|
+
searchInput.setAttribute('style', 'border: 1px solid #CCC; box-shadow: 0 1px 1px #ddd inset, 0 1px 0 #FFF; border-radius: 0.3em; line-height: 1.5; font-weight: 400; color: #212529; text-align: left; font-size: 1rem; background-color: #fff; width: 60%;')
|
|
702
706
|
|
|
703
707
|
searchInput.addEventListener('input', function (_event) {
|
|
704
708
|
refreshFilteredPeople(true) // Active: select person if just one left
|
|
@@ -708,17 +712,17 @@ export default {
|
|
|
708
712
|
cardMain.setAttribute('style', 'margin: 0;') // fill space available
|
|
709
713
|
const dataCellStyle = 'padding: 0.1em;'
|
|
710
714
|
|
|
711
|
-
groupsHeader.textContent = '
|
|
715
|
+
groupsHeader.textContent = 'Groups'
|
|
712
716
|
groupsHeader.setAttribute(
|
|
713
717
|
'style',
|
|
714
|
-
'min-width: 10em; padding-bottom 0.2em;'
|
|
718
|
+
'min-width: 10em; padding-bottom 0.2em; font-weight: bold;'
|
|
715
719
|
)
|
|
716
720
|
|
|
717
721
|
function setGroupListVisibility (visible) {
|
|
718
722
|
const vis = visible ? '' : 'display: none;'
|
|
719
723
|
groupsHeader.setAttribute(
|
|
720
724
|
'style',
|
|
721
|
-
'min-width: 10em; padding-bottom 0.2em;' + vis
|
|
725
|
+
'min-width: 10em; padding-bottom 0.2em; font-weight: bold;' + vis
|
|
722
726
|
)
|
|
723
727
|
const hfstyle = 'padding: 0.1em;'
|
|
724
728
|
groupsMain.setAttribute('style', hfstyle + vis)
|
|
@@ -730,11 +734,7 @@ export default {
|
|
|
730
734
|
selectedGroups[options.foreignGroup.uri] = true
|
|
731
735
|
}
|
|
732
736
|
if (book) {
|
|
733
|
-
const
|
|
734
|
-
allGroups.textContent = 'All'
|
|
735
|
-
const style = 'margin-left: 1em; font-size: 100%;'
|
|
736
|
-
allGroups.setAttribute('style', style)
|
|
737
|
-
allGroups.addEventListener('click', function (_event) {
|
|
737
|
+
const allGroupsClickHandler = function (_event) {
|
|
738
738
|
allGroups.state = allGroups.state ? 0 : 1
|
|
739
739
|
peopleMainTable.innerHTML = '' // clear in case refreshNames doesn't work for unknown reason
|
|
740
740
|
if (allGroups.state) {
|
|
@@ -755,7 +755,11 @@ export default {
|
|
|
755
755
|
selectedGroups = {}
|
|
756
756
|
refreshGroupsSelected()
|
|
757
757
|
}
|
|
758
|
-
}
|
|
758
|
+
}
|
|
759
|
+
const allGroupsButton = UI.widgets.button(dom, undefined, 'All', allGroupsClickHandler)
|
|
760
|
+
allGroupsButton.setAttribute('style', 'padding: 0.5em; float: right; ')
|
|
761
|
+
const allGroups = groupsHeader.appendChild(allGroupsButton)
|
|
762
|
+
|
|
759
763
|
kb.fetcher.nowOrWhenFetched(groupIndex.uri, book, function (ok, body) {
|
|
760
764
|
if (!ok) return console.log('Cannot load group index: ' + body)
|
|
761
765
|
syncGroupTable()
|
|
@@ -773,54 +777,44 @@ export default {
|
|
|
773
777
|
peopleMain.setAttribute('style', 'overflow:scroll;')
|
|
774
778
|
|
|
775
779
|
// New Contact button
|
|
776
|
-
const
|
|
780
|
+
const newContactClickHandler = async _event => createNewCard(ns.vcard('Individual'))
|
|
781
|
+
const newContactButton = UI.widgets.button(dom, undefined, 'New Contact', newContactClickHandler)
|
|
782
|
+
newContactButton.setAttribute('style', 'margin: 0.5em;')
|
|
777
783
|
const container = dom.createElement('div')
|
|
778
|
-
newContactButton.setAttribute('type', 'button')
|
|
779
784
|
if (!me) newContactButton.setAttribute('disabled', 'true')
|
|
780
|
-
|
|
785
|
+
authn.checkUser().then(webId => {
|
|
781
786
|
if (webId) {
|
|
782
787
|
me = webId
|
|
783
788
|
newContactButton.removeAttribute('disabled')
|
|
784
789
|
}
|
|
785
790
|
})
|
|
786
791
|
container.appendChild(newContactButton)
|
|
787
|
-
newContactButton.innerHTML = 'New Contact' // + IndividualClassLabel
|
|
788
792
|
peopleFooter.appendChild(container)
|
|
789
|
-
newContactButton.addEventListener('click', async _event => craeteNewCard(ns.vcard('Individual')), false)
|
|
790
793
|
|
|
791
794
|
// New Organization button
|
|
792
|
-
const
|
|
795
|
+
const newOrganizationClickHandler = async _event => createNewCard(ns.vcard('Organization'))
|
|
796
|
+
const newOrganizationButton = UI.widgets.button(dom, undefined, 'New Organization', newOrganizationClickHandler)
|
|
797
|
+
newOrganizationButton.setAttribute('style', 'margin: 0.5em;')
|
|
793
798
|
const container2 = dom.createElement('div')
|
|
794
|
-
newOrganizationButton.setAttribute('type', 'button')
|
|
795
799
|
if (!me) newOrganizationButton.setAttribute('disabled', 'true')
|
|
796
|
-
|
|
800
|
+
authn.checkUser().then(webId => {
|
|
797
801
|
if (webId) {
|
|
798
802
|
me = webId
|
|
799
803
|
newOrganizationButton.removeAttribute('disabled')
|
|
800
804
|
}
|
|
801
805
|
})
|
|
802
806
|
container2.appendChild(newOrganizationButton)
|
|
803
|
-
newOrganizationButton.innerHTML = 'New Organization' // + IndividualClassLabel
|
|
804
807
|
peopleFooter.appendChild(container2)
|
|
805
|
-
newOrganizationButton.addEventListener('click', async _event => craeteNewCard(ns.vcard('Organization')), false)
|
|
806
808
|
|
|
807
809
|
// New Group button
|
|
808
810
|
if (book) {
|
|
809
811
|
const newGroupButton = groupsFooter.appendChild(
|
|
810
|
-
|
|
811
|
-
)
|
|
812
|
-
newGroupButton.setAttribute('type', 'button')
|
|
813
|
-
newGroupButton.innerHTML = 'New Group' // + IndividualClassLabel
|
|
814
|
-
newGroupButton.addEventListener(
|
|
815
|
-
'click', newGroupClickHandler,
|
|
816
|
-
false
|
|
812
|
+
UI.widgets.button(dom, undefined, 'New Group', newGroupClickHandler)
|
|
817
813
|
)
|
|
814
|
+
newGroupButton.setAttribute('style', 'margin: 0.5em;')
|
|
818
815
|
|
|
819
816
|
// Tools button
|
|
820
|
-
const
|
|
821
|
-
toolsButton.setAttribute('type', 'button')
|
|
822
|
-
toolsButton.innerHTML = 'Tools'
|
|
823
|
-
toolsButton.addEventListener('click', function (_event) {
|
|
817
|
+
const toolsClickHandler = (_event) => {
|
|
824
818
|
cardMain.innerHTML = ''
|
|
825
819
|
cardMain.appendChild(
|
|
826
820
|
toolsPane(
|
|
@@ -832,7 +826,9 @@ export default {
|
|
|
832
826
|
me
|
|
833
827
|
)
|
|
834
828
|
)
|
|
835
|
-
}
|
|
829
|
+
}
|
|
830
|
+
const toolsButton = cardFooter.appendChild(UI.widgets.button(dom, undefined, 'Tools', toolsClickHandler))
|
|
831
|
+
toolsButton.setAttribute('style', 'margin: 0.5em;')
|
|
836
832
|
} // if book
|
|
837
833
|
|
|
838
834
|
cardFooter.appendChild(newAddressBookButton(book))
|
|
@@ -860,7 +856,7 @@ export default {
|
|
|
860
856
|
// Render a Group instance
|
|
861
857
|
} else if (t[ns.vcard('Group').uri]) {
|
|
862
858
|
// If we have a main address book, then render this group as a guest group within it
|
|
863
|
-
UI.
|
|
859
|
+
UI.login
|
|
864
860
|
.findAppInstances(context, ns.vcard('AddressBook'))
|
|
865
861
|
.then(function (context) {
|
|
866
862
|
const addressBooks = context.instances
|
|
@@ -888,12 +884,12 @@ export default {
|
|
|
888
884
|
)
|
|
889
885
|
}
|
|
890
886
|
|
|
891
|
-
me =
|
|
887
|
+
me = authn.currentUser()
|
|
892
888
|
if (!me) {
|
|
893
889
|
console.log(
|
|
894
890
|
'(You do not have your Web Id set. Sign in or sign up to make changes.)'
|
|
895
891
|
)
|
|
896
|
-
UI.
|
|
892
|
+
UI.login.ensureLoadedProfile(context).then(
|
|
897
893
|
context => {
|
|
898
894
|
console.log('Logged in as ' + context.me)
|
|
899
895
|
me = context.me
|
package/dev/context.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import {DataBrowserContext, PaneRegistry} from "pane-registry";
|
|
2
|
+
import { store } from "solid-ui";
|
|
3
|
+
import { solidLogicSingleton } from "solid-logic";
|
|
4
|
+
import {default as contactsPane } from "../contactsPane";
|
|
5
|
+
import { LiveStore } from "rdflib";
|
|
6
|
+
|
|
7
|
+
export const context: DataBrowserContext = {
|
|
8
|
+
session: {
|
|
9
|
+
store: store as LiveStore,
|
|
10
|
+
paneRegistry: {
|
|
11
|
+
byName: (name: string) => {
|
|
12
|
+
return contactsPane
|
|
13
|
+
}
|
|
14
|
+
} as PaneRegistry,
|
|
15
|
+
logic: solidLogicSingleton
|
|
16
|
+
},
|
|
17
|
+
dom: document,
|
|
18
|
+
getOutliner: () => null,
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export const fetcher = store.fetcher;
|
package/dev/index.html
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8"/>
|
|
5
|
+
<title>profile-pane dev server</title>
|
|
6
|
+
<style>
|
|
7
|
+
body {
|
|
8
|
+
margin: 0;
|
|
9
|
+
font-family: sans-serif;
|
|
10
|
+
}
|
|
11
|
+
h1 {
|
|
12
|
+
padding: 0.5rem;
|
|
13
|
+
margin: 0;
|
|
14
|
+
color: #666;
|
|
15
|
+
}
|
|
16
|
+
#loginBanner {
|
|
17
|
+
display: grid;
|
|
18
|
+
padding: 0.5rem;
|
|
19
|
+
grid-gap: 1rem;
|
|
20
|
+
grid-auto-flow: column;
|
|
21
|
+
justify-content: flex-start;
|
|
22
|
+
align-items: center;
|
|
23
|
+
}
|
|
24
|
+
.banner {
|
|
25
|
+
margin: 0;
|
|
26
|
+
height: 1rem;
|
|
27
|
+
width: 100%;
|
|
28
|
+
background: repeating-linear-gradient(
|
|
29
|
+
-45deg,
|
|
30
|
+
#ffffff,
|
|
31
|
+
#d8d9d5 20px,
|
|
32
|
+
#d41717 20px,
|
|
33
|
+
#984646 40px
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
</style>
|
|
37
|
+
</head>
|
|
38
|
+
<body>
|
|
39
|
+
<h1>pane under development</h1>
|
|
40
|
+
<div>
|
|
41
|
+
<div id="webId"></div>
|
|
42
|
+
</div>
|
|
43
|
+
<div id="loginBanner"></div>
|
|
44
|
+
<div class="banner"></div>
|
|
45
|
+
<div id="app">Rendering...</div>
|
|
46
|
+
</body>
|
|
47
|
+
</html>
|
package/dev/index.ts
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { sym } from "rdflib";
|
|
2
|
+
import { default as pane } from "../contactsPane";
|
|
3
|
+
import { context, fetcher } from "./context";
|
|
4
|
+
import { authn } from "solid-ui";
|
|
5
|
+
import { loginStatusBox } from "solid-ui/lib/login/login";
|
|
6
|
+
|
|
7
|
+
const loginBanner = document.getElementById("loginBanner");
|
|
8
|
+
const webId = document.getElementById("webId");
|
|
9
|
+
|
|
10
|
+
loginBanner.appendChild(loginStatusBox(document, null, {}));
|
|
11
|
+
|
|
12
|
+
async function finishLogin() {
|
|
13
|
+
await authn.authSession.handleIncomingRedirect();
|
|
14
|
+
const session = authn.authSession;
|
|
15
|
+
if (session.info.isLoggedIn) {
|
|
16
|
+
// Update the page with the status.
|
|
17
|
+
webId.innerHTML = "Logged in as: " + authn.currentUser().uri;
|
|
18
|
+
} else {
|
|
19
|
+
webId.innerHTML = "";
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
// https://testingsolidos.solidcommunity.net/profile/card#me
|
|
27
|
+
// https://timbl.inrupt.net/profile/card#me
|
|
28
|
+
//
|
|
29
|
+
// const webIdToShow = "https://angelo.veltens.org/profile/card#me";
|
|
30
|
+
const webIdToShow = "https://testingsolidos.solidcommunity.net/profile/card#me";
|
|
31
|
+
// const webIdToShow = "https://timbl.inrupt.net/profile/card#me";
|
|
32
|
+
// const addressBookToShow = "https://sstratsianis.solidcommunity.net/private/Friends/index.ttl#this"
|
|
33
|
+
const addressBookToShow = "https://timbl.com/timbl/Public/Test/Contacts/index.ttl#this";
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
finishLogin().then(() => { fetcher.load(webIdToShow).then(() => {
|
|
37
|
+
fetcher.load(addressBookToShow).then(() => {
|
|
38
|
+
const app = pane.render(sym(addressBookToShow), context);
|
|
39
|
+
document.getElementById("app").replaceWith(app)
|
|
40
|
+
})
|
|
41
|
+
})
|
|
42
|
+
})
|
package/diff.txt
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/individual.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as UI from 'solid-ui'
|
|
2
|
+
import { authn, store } from 'solid-logic'
|
|
2
3
|
import { renderMugshotGallery } from './mugshotGallery'
|
|
3
4
|
import { renderWebIdControl, renderPublicIdControl } from './webidControl'
|
|
4
5
|
import { renderGroupMemberships } from './groupMembershipControl.js'
|
|
@@ -7,7 +8,7 @@ import VCARD_ONTOLOGY_TEXT from './lib/vcard.js'
|
|
|
7
8
|
|
|
8
9
|
const $rdf = UI.rdf
|
|
9
10
|
const ns = UI.ns
|
|
10
|
-
const kb =
|
|
11
|
+
const kb = store
|
|
11
12
|
const style = UI.style
|
|
12
13
|
|
|
13
14
|
export function loadTurtleText (kb, thing, text) {
|
|
@@ -68,7 +69,7 @@ export async function renderIndividual (dom, div, subject, dataBrowserContext) {
|
|
|
68
69
|
|
|
69
70
|
div.style = style.paneDivStyle || 'padding: 0.5em 1.5em 1em 1.5em;'
|
|
70
71
|
|
|
71
|
-
|
|
72
|
+
authn.checkUser() // kick off async operation @@@ use async version
|
|
72
73
|
|
|
73
74
|
div.appendChild(renderMugshotGallery(dom, subject))
|
|
74
75
|
|
package/individualForm.js
CHANGED
|
File without changes
|
package/jest.config.js
ADDED
package/jest.setup.ts
ADDED
package/lib/autocompleteBar.js
CHANGED
|
@@ -36,18 +36,18 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
36
36
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
37
37
|
}
|
|
38
38
|
};
|
|
39
|
-
exports
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
40
|
exports.renderAutocompleteControl = void 0;
|
|
41
|
+
var solid_logic_1 = require("solid-logic");
|
|
41
42
|
var solid_ui_1 = require("solid-ui");
|
|
42
|
-
var UI = require("solid-ui");
|
|
43
43
|
var autocompletePicker_1 = require("./autocompletePicker"); // dbpediaParameters
|
|
44
44
|
var publicData_1 = require("./publicData");
|
|
45
45
|
var WEBID_NOUN = 'Solid ID';
|
|
46
|
-
var kb =
|
|
46
|
+
var kb = solid_logic_1.store;
|
|
47
47
|
var AUTOCOMPLETE_THRESHOLD = 4; // don't check until this many characters typed
|
|
48
48
|
var AUTOCOMPLETE_ROWS = 12; // 20?
|
|
49
|
-
var GREEN_PLUS =
|
|
50
|
-
var SEARCH_ICON =
|
|
49
|
+
var GREEN_PLUS = solid_ui_1.icons.iconBase + 'noun_34653_green.svg';
|
|
50
|
+
var SEARCH_ICON = solid_ui_1.icons.iconBase + 'noun_Search_875351.svg';
|
|
51
51
|
function renderAutocompleteControl(dom, person, options, addOneIdAndRefresh) {
|
|
52
52
|
return __awaiter(this, void 0, void 0, function () {
|
|
53
53
|
function autoCompleteDone(object, _name) {
|
|
@@ -65,7 +65,7 @@ function renderAutocompleteControl(dom, person, options, addOneIdAndRefresh) {
|
|
|
65
65
|
var webid;
|
|
66
66
|
return __generator(this, function (_a) {
|
|
67
67
|
switch (_a.label) {
|
|
68
|
-
case 0: return [4 /*yield*/, solid_ui_1.widgets.askName(dom,
|
|
68
|
+
case 0: return [4 /*yield*/, solid_ui_1.widgets.askName(dom, solid_logic_1.store, creationArea, solid_ui_1.ns.vcard('url'), null, WEBID_NOUN)];
|
|
69
69
|
case 1:
|
|
70
70
|
webid = _a.sent();
|
|
71
71
|
if (!webid) {
|
|
@@ -134,10 +134,10 @@ function renderAutocompleteControl(dom, person, options, addOneIdAndRefresh) {
|
|
|
134
134
|
queryParams = options.queryParameters || publicData_1.wikidataParameters;
|
|
135
135
|
acceptButton = solid_ui_1.widgets.continueButton(dom);
|
|
136
136
|
cancelButton = solid_ui_1.widgets.cancelButton(dom, removeDecorated);
|
|
137
|
-
klass = options
|
|
137
|
+
klass = options.class;
|
|
138
138
|
acOptions = {
|
|
139
139
|
queryParams: queryParams,
|
|
140
|
-
|
|
140
|
+
class: klass,
|
|
141
141
|
acceptButton: acceptButton,
|
|
142
142
|
cancelButton: cancelButton
|
|
143
143
|
};
|
|
@@ -162,3 +162,4 @@ function renderAutocompleteControl(dom, person, options, addOneIdAndRefresh) {
|
|
|
162
162
|
} // renderAutocompleteControl
|
|
163
163
|
exports.renderAutocompleteControl = renderAutocompleteControl;
|
|
164
164
|
// ends
|
|
165
|
+
//# sourceMappingURL=autocompleteBar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autocompleteBar.js","sourceRoot":"","sources":["../src/autocompleteBar.ts"],"names":[],"mappings":"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"}
|
package/lib/autocompleteField.js
CHANGED
|
@@ -35,14 +35,14 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
35
35
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
36
|
}
|
|
37
37
|
};
|
|
38
|
-
exports
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
exports.autocompleteField = void 0;
|
|
40
40
|
/* Form field for doing autocompleete
|
|
41
41
|
*/
|
|
42
|
+
var rdflib_1 = require("rdflib");
|
|
43
|
+
var solid_logic_1 = require("solid-logic");
|
|
42
44
|
var solid_ui_1 = require("solid-ui");
|
|
43
45
|
var autocompletePicker_1 = require("./autocompletePicker"); // dbpediaParameters
|
|
44
|
-
var rdflib_1 = require("rdflib");
|
|
45
|
-
var kb = solid_ui_1.store;
|
|
46
46
|
var AUTOCOMPLETE_THRESHOLD = 4; // don't check until this many characters typed
|
|
47
47
|
var AUTOCOMPLETE_ROWS = 12; // 20?
|
|
48
48
|
/**
|
|
@@ -97,7 +97,7 @@ dom, container, already, subject, form, doc, callbackFunction) {
|
|
|
97
97
|
});
|
|
98
98
|
});
|
|
99
99
|
}
|
|
100
|
-
var kb =
|
|
100
|
+
var kb = solid_logic_1.store;
|
|
101
101
|
var formDoc = form.doc ? form.doc() : null; // @@ if blank no way to know
|
|
102
102
|
var box = dom.createElement('tr');
|
|
103
103
|
if (container)
|
|
@@ -151,10 +151,10 @@ dom, container, already, subject, form, doc, callbackFunction) {
|
|
|
151
151
|
queryParams.endPoint = endPoint.uri;
|
|
152
152
|
var searchByNameQuery = kb.the(form, solid_ui_1.ns.ui('searchByNameQuery'), null, formDoc);
|
|
153
153
|
queryParams.searchByNameQuery = searchByNameQuery;
|
|
154
|
-
var queryParams = { label: 'from form', logo: '',
|
|
154
|
+
var queryParams = { label: 'from form', logo: '', class: klass, endPoint: endPoint, searchByNameQuery: searchByNameQuery };
|
|
155
155
|
var options = {
|
|
156
156
|
// acceptButton?: HTMLElement,
|
|
157
|
-
|
|
157
|
+
class: klass,
|
|
158
158
|
queryParams: queryParams
|
|
159
159
|
};
|
|
160
160
|
// const acWiget = rhs.appendChild(await renderAutoComplete(dom, options, addOneIdAndRefresh))
|
|
@@ -195,3 +195,4 @@ dom, container, already, subject, form, doc, callbackFunction) {
|
|
|
195
195
|
}
|
|
196
196
|
exports.autocompleteField = autocompleteField;
|
|
197
197
|
// ends
|
|
198
|
+
//# sourceMappingURL=autocompleteField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autocompleteField.js","sourceRoot":"","sources":["../src/autocompleteField.ts"],"names":[],"mappings":"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"}
|