@things-factory/board-ui 8.0.38 → 9.0.0-9.0.0-beta.59.0
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-client/apptools/favorite-tool.js +1 -1
- package/dist-client/apptools/favorite-tool.js.map +1 -1
- package/dist-client/board-list/board-tile-list.js +1 -1
- package/dist-client/board-list/board-tile-list.js.map +1 -1
- package/dist-client/board-list/group-bar.js +1 -1
- package/dist-client/board-list/group-bar.js.map +1 -1
- package/dist-client/board-list/play-group-bar.js +1 -1
- package/dist-client/board-list/play-group-bar.js.map +1 -1
- package/dist-client/board-provider.js +0 -4
- package/dist-client/board-provider.js.map +1 -1
- package/dist-client/bootstrap.js +4 -4
- package/dist-client/bootstrap.js.map +1 -1
- package/dist-client/data-grist/board-editor.d.ts +1 -1
- package/dist-client/data-grist/board-editor.js +1 -1
- package/dist-client/data-grist/board-editor.js.map +1 -1
- package/dist-client/entries/headless-scene-components.d.ts +1 -0
- package/dist-client/entries/headless-scene-components.js +4 -0
- package/dist-client/entries/headless-scene-components.js.map +1 -0
- package/dist-client/entries/scene-player.d.ts +5 -0
- package/dist-client/entries/scene-player.js +84 -0
- package/dist-client/entries/scene-player.js.map +1 -0
- package/dist-client/entries/scene-viewer.d.ts +5 -0
- package/dist-client/entries/scene-viewer.js +85 -0
- package/dist-client/entries/scene-viewer.js.map +1 -0
- package/dist-client/entries/things-scene-components.import +1 -0
- package/dist-client/graphql/index.d.ts +6 -6
- package/dist-client/graphql/index.js +6 -6
- package/dist-client/graphql/index.js.map +1 -1
- package/dist-client/index.d.ts +8 -8
- package/dist-client/index.js +8 -8
- package/dist-client/index.js.map +1 -1
- package/dist-client/pages/board-list-page.d.ts +4 -4
- package/dist-client/pages/board-list-page.js +5 -5
- package/dist-client/pages/board-list-page.js.map +1 -1
- package/dist-client/pages/board-modeller-page.js +2 -2
- package/dist-client/pages/board-modeller-page.js.map +1 -1
- package/dist-client/pages/board-player-by-name-page.d.ts +1 -1
- package/dist-client/pages/board-player-by-name-page.js +1 -1
- package/dist-client/pages/board-player-by-name-page.js.map +1 -1
- package/dist-client/pages/board-player-page.js +1 -1
- package/dist-client/pages/board-player-page.js.map +1 -1
- package/dist-client/pages/board-template/board-template-list-page.js +1 -1
- package/dist-client/pages/board-template/board-template-list-page.js.map +1 -1
- package/dist-client/pages/board-viewer-by-name-page.d.ts +1 -1
- package/dist-client/pages/board-viewer-by-name-page.js +1 -1
- package/dist-client/pages/board-viewer-by-name-page.js.map +1 -1
- package/dist-client/pages/board-viewer-page.js +1 -1
- package/dist-client/pages/board-viewer-page.js.map +1 -1
- package/dist-client/pages/play-list-page.d.ts +3 -3
- package/dist-client/pages/play-list-page.js +3 -3
- package/dist-client/pages/play-list-page.js.map +1 -1
- package/dist-client/pages/printable-board-viewer-page.d.ts +1 -1
- package/dist-client/pages/printable-board-viewer-page.js +9 -4
- package/dist-client/pages/printable-board-viewer-page.js.map +1 -1
- package/dist-client/pages/theme/theme-list-page.js +1 -1
- package/dist-client/pages/theme/theme-list-page.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-client/viewparts/board-basic-info.js +1 -1
- package/dist-client/viewparts/board-basic-info.js.map +1 -1
- package/dist-client/viewparts/board-info.d.ts +3 -3
- package/dist-client/viewparts/board-info.js +3 -3
- package/dist-client/viewparts/board-info.js.map +1 -1
- package/dist-client/viewparts/board-versions.js +1 -1
- package/dist-client/viewparts/board-versions.js.map +1 -1
- package/dist-client/viewparts/group-info-import.js +1 -1
- package/dist-client/viewparts/group-info-import.js.map +1 -1
- package/dist-client/viewparts/group-info.d.ts +2 -2
- package/dist-client/viewparts/group-info.js +2 -2
- package/dist-client/viewparts/group-info.js.map +1 -1
- package/dist-client/viewparts/index.d.ts +3 -3
- package/dist-client/viewparts/index.js +3 -3
- package/dist-client/viewparts/index.js.map +1 -1
- package/dist-client/viewparts/link-builder.js +1 -1
- package/dist-client/viewparts/link-builder.js.map +1 -1
- package/dist-client/viewparts/play-group-info-basic.js +1 -1
- package/dist-client/viewparts/play-group-info-basic.js.map +1 -1
- package/dist-client/viewparts/play-group-info.d.ts +2 -2
- package/dist-client/viewparts/play-group-info.js +2 -2
- package/dist-client/viewparts/play-group-info.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/helps/board-modeller/effects/hover-event.ko.md +3 -3
- package/helps/board-modeller/effects/hover-event.md +6 -4
- package/helps/board-modeller/effects/hover-event.zh.md +3 -3
- package/package.json +20 -19
- package/things-factory.config.js +12 -48
- package/translations/en.json +42 -31
- package/translations/ja.json +43 -32
- package/translations/ko.json +43 -32
- package/translations/ms.json +31 -25
- package/translations/zh.json +41 -30
- package/assets/images/bg-blue.png +0 -0
- package/assets/images/bg-green.png +0 -0
- package/assets/images/bg-input-select.png +0 -0
- package/assets/images/bg-rail.png +0 -0
- package/assets/images/forklift.png +0 -0
- package/assets/images/icon-backinfo.png +0 -0
- package/assets/images/icon-brand.png +0 -0
- package/assets/images/icon-close.png +0 -0
- package/assets/images/icon-editor-gradient-direction.png +0 -0
- package/assets/images/icon-mobile-brand.png +0 -0
- package/assets/images/icon-nametag.png +0 -0
- package/assets/images/icon-properties-label.png +0 -0
- package/assets/images/icon-properties-line-type.png +0 -0
- package/assets/images/icon-properties-table.png +0 -0
- package/assets/images/icon-resource-select.png +0 -0
- package/assets/images/person.png +0 -0
- package/assets/images/profile.png +0 -0
- package/client/apptools/favorite-tool.ts +0 -124
- package/client/board-list/board-tile-list.ts +0 -272
- package/client/board-list/group-bar-styles.ts +0 -63
- package/client/board-list/group-bar.ts +0 -99
- package/client/board-list/play-group-bar.ts +0 -88
- package/client/board-provider.ts +0 -92
- package/client/bootstrap.ts +0 -39
- package/client/data-grist/board-editor.ts +0 -113
- package/client/data-grist/board-renderer.ts +0 -134
- package/client/data-grist/color-map-editor.ts +0 -17
- package/client/data-grist/color-ranges-editor.ts +0 -17
- package/client/graphql/board-template.ts +0 -141
- package/client/graphql/board.ts +0 -273
- package/client/graphql/favorite-board.ts +0 -25
- package/client/graphql/group.ts +0 -138
- package/client/graphql/index.ts +0 -6
- package/client/graphql/my-board.ts +0 -25
- package/client/graphql/play-group.ts +0 -189
- package/client/index.ts +0 -10
- package/client/pages/attachment-list-page.ts +0 -142
- package/client/pages/board-list-page.ts +0 -603
- package/client/pages/board-modeller-page.ts +0 -288
- package/client/pages/board-player-by-name-page.ts +0 -29
- package/client/pages/board-player-page.ts +0 -241
- package/client/pages/board-template/board-template-list-page.ts +0 -248
- package/client/pages/board-viewer-by-name-page.ts +0 -24
- package/client/pages/board-viewer-page.ts +0 -271
- package/client/pages/font-list-page.ts +0 -31
- package/client/pages/play-list-page.ts +0 -400
- package/client/pages/printable-board-viewer-page.ts +0 -54
- package/client/pages/theme/theme-editors.ts +0 -56
- package/client/pages/theme/theme-list-page.ts +0 -313
- package/client/pages/things-scene-components-with-tools.import +0 -0
- package/client/pages/things-scene-components.import +0 -0
- package/client/route.ts +0 -51
- package/client/setting-let/board-view-setting-let.ts +0 -68
- package/client/themes/board-theme.css +0 -77
- package/client/things-scene-import.d.ts +0 -4
- package/client/viewparts/board-basic-info.ts +0 -646
- package/client/viewparts/board-info-link.ts +0 -56
- package/client/viewparts/board-info.ts +0 -85
- package/client/viewparts/board-template-builder.ts +0 -135
- package/client/viewparts/board-versions.ts +0 -172
- package/client/viewparts/group-info-basic.ts +0 -267
- package/client/viewparts/group-info-import.ts +0 -132
- package/client/viewparts/group-info.ts +0 -87
- package/client/viewparts/index.ts +0 -3
- package/client/viewparts/link-builder.ts +0 -210
- package/client/viewparts/play-group-info-basic.ts +0 -268
- package/client/viewparts/play-group-info-link.ts +0 -46
- package/client/viewparts/play-group-info.ts +0 -81
- package/images/icon-properties-arrow-type.png +0 -0
- package/images/icon-properties-gradient-direction.png +0 -0
- package/images/icon-properties-line-type.png +0 -0
- package/images/icon-properties-padding.png +0 -0
- package/images/icon-properties-table.png +0 -0
- package/images/icon-shell-inspector.png +0 -0
- package/server/index.ts +0 -0
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import '@material/web/icon/icon.js'
|
|
2
|
-
|
|
3
|
-
import { html, LitElement } from 'lit'
|
|
4
|
-
import { customElement, property } from 'lit/decorators.js'
|
|
5
|
-
import ScrollBooster from 'scrollbooster'
|
|
6
|
-
|
|
7
|
-
import { longpressable } from '@operato/utils'
|
|
8
|
-
import { privileged } from '@things-factory/auth-base/dist-client'
|
|
9
|
-
import { GroupBarStyles } from './group-bar-styles'
|
|
10
|
-
|
|
11
|
-
@customElement('group-bar')
|
|
12
|
-
export default class GroupBar extends LitElement {
|
|
13
|
-
static styles = [GroupBarStyles]
|
|
14
|
-
|
|
15
|
-
@property({ type: Array }) groups?: any[]
|
|
16
|
-
@property({ type: String }) groupId?: string
|
|
17
|
-
@property({ type: String }) targetPage?: string
|
|
18
|
-
|
|
19
|
-
private __sb?: ScrollBooster
|
|
20
|
-
|
|
21
|
-
render() {
|
|
22
|
-
return html`
|
|
23
|
-
<ul>
|
|
24
|
-
<li ?active=${!this.groupId}>
|
|
25
|
-
<a href=${this.targetPage || ''}><md-icon>dashboard</md-icon></a>
|
|
26
|
-
</li>
|
|
27
|
-
|
|
28
|
-
<li ?active=${this.groupId === 'favor'}>
|
|
29
|
-
<a href="${this.targetPage}/favor"><md-icon>star</md-icon></a>
|
|
30
|
-
</li>
|
|
31
|
-
|
|
32
|
-
${privileged(
|
|
33
|
-
{ privilege: 'mutation', category: 'board' },
|
|
34
|
-
html`<li ?active=${this.groupId === 'mywork'}>
|
|
35
|
-
<a href="${this.targetPage}/mywork"><md-icon>engineering</md-icon></a>
|
|
36
|
-
</li>`
|
|
37
|
-
)}
|
|
38
|
-
${(this.groups || []).map(
|
|
39
|
-
group => html`
|
|
40
|
-
<li ?active=${this.groupId === group.id} @long-press=${e => this.infoGroup(group.id)}>
|
|
41
|
-
<a href=${`${this.targetPage}/${group.id}`}>${group.name}</a>
|
|
42
|
-
</li>
|
|
43
|
-
`
|
|
44
|
-
)}
|
|
45
|
-
|
|
46
|
-
<li padding></li>
|
|
47
|
-
|
|
48
|
-
<li add>
|
|
49
|
-
<md-icon @click=${e => this.infoGroup()}>add</md-icon>
|
|
50
|
-
</li>
|
|
51
|
-
</ul>
|
|
52
|
-
`
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
infoGroup(groupId?: string) {
|
|
56
|
-
this.dispatchEvent(
|
|
57
|
-
new CustomEvent('info-group', {
|
|
58
|
-
detail: groupId
|
|
59
|
-
})
|
|
60
|
-
)
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
onWheelEvent(e) {
|
|
64
|
-
var delta = Math.max(-1, Math.min(1, e.wheelDelta || -e.detail))
|
|
65
|
-
this.scrollLeft -= delta * 40
|
|
66
|
-
|
|
67
|
-
e.preventDefault()
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
updated(change) {
|
|
71
|
-
if (change.has('groups')) {
|
|
72
|
-
/* groups가 바뀔 때마다, contents의 폭이 달라지므로, 다시 폭을 계산해준다. */
|
|
73
|
-
this.__sb && this.__sb.updateMetrics()
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
if (change.has('groupId')) {
|
|
77
|
-
var active = this.renderRoot.querySelector('li[active]')
|
|
78
|
-
active && active.scrollIntoView()
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
firstUpdated() {
|
|
83
|
-
var scrollTarget = this.renderRoot.querySelector('ul')
|
|
84
|
-
|
|
85
|
-
/* long-press */
|
|
86
|
-
longpressable(scrollTarget!)
|
|
87
|
-
|
|
88
|
-
scrollTarget!.addEventListener('mousewheel', this.onWheelEvent.bind(this), false)
|
|
89
|
-
|
|
90
|
-
this.__sb = new ScrollBooster({
|
|
91
|
-
viewport: this,
|
|
92
|
-
content: scrollTarget,
|
|
93
|
-
mode: 'x',
|
|
94
|
-
onUpdate: data => {
|
|
95
|
-
this.scrollLeft = data.position.x
|
|
96
|
-
}
|
|
97
|
-
})
|
|
98
|
-
}
|
|
99
|
-
}
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import '@material/web/icon/icon.js'
|
|
2
|
-
|
|
3
|
-
import { html, LitElement } from 'lit'
|
|
4
|
-
import { customElement, property } from 'lit/decorators.js'
|
|
5
|
-
import ScrollBooster from 'scrollbooster'
|
|
6
|
-
|
|
7
|
-
import { longpressable } from '@operato/utils'
|
|
8
|
-
import { GroupBarStyles } from './group-bar-styles'
|
|
9
|
-
|
|
10
|
-
@customElement('play-group-bar')
|
|
11
|
-
export default class PlayGroupBar extends LitElement {
|
|
12
|
-
static styles = [GroupBarStyles]
|
|
13
|
-
|
|
14
|
-
@property({ type: Array }) groups: { id: string; name: string }[] = []
|
|
15
|
-
@property({ type: String }) groupId: string = ''
|
|
16
|
-
@property({ type: String, attribute: 'target-page' }) targetPage: string = ''
|
|
17
|
-
|
|
18
|
-
private __sb?: ScrollBooster
|
|
19
|
-
|
|
20
|
-
render() {
|
|
21
|
-
return html`
|
|
22
|
-
<ul>
|
|
23
|
-
${(this.groups || []).map(
|
|
24
|
-
group => html`
|
|
25
|
-
<li ?active=${this.groupId === group.id} @long-press=${e => this._infoGroup(group)}>
|
|
26
|
-
<a href=${`${this.targetPage}/${group.id}`}>${group.name}</a>
|
|
27
|
-
</li>
|
|
28
|
-
`
|
|
29
|
-
)}
|
|
30
|
-
|
|
31
|
-
<li padding> </li>
|
|
32
|
-
|
|
33
|
-
<li add>
|
|
34
|
-
<md-icon @click=${e => this._infoGroup()}>add</md-icon>
|
|
35
|
-
</li>
|
|
36
|
-
</ul>
|
|
37
|
-
`
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
_infoGroup(group?: { id: string; name: string }) {
|
|
41
|
-
this.dispatchEvent(
|
|
42
|
-
new CustomEvent('info-play-group', {
|
|
43
|
-
detail: group
|
|
44
|
-
})
|
|
45
|
-
)
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
_onWheelEvent(e) {
|
|
49
|
-
var delta = Math.max(-1, Math.min(1, e.wheelDelta || -e.detail))
|
|
50
|
-
this.scrollLeft -= delta * 40
|
|
51
|
-
|
|
52
|
-
e.preventDefault()
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
_onClickAdd(e) {
|
|
56
|
-
// TODO Implements
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
updated(change) {
|
|
60
|
-
if (change.has('groups')) {
|
|
61
|
-
/* groups가 바뀔 때마다, contents의 폭이 달라지므로, 다시 폭을 계산해준다. */
|
|
62
|
-
this.__sb && this.__sb.updateMetrics()
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
if (change.has('groupId')) {
|
|
66
|
-
var active = this.renderRoot.querySelector('li[active]')
|
|
67
|
-
active && active.scrollIntoView()
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
firstUpdated() {
|
|
72
|
-
var scrollTarget = this.renderRoot.querySelector('ul')
|
|
73
|
-
|
|
74
|
-
/* long-press */
|
|
75
|
-
longpressable(scrollTarget!)
|
|
76
|
-
|
|
77
|
-
scrollTarget!.addEventListener('mousewheel', this._onWheelEvent.bind(this), false)
|
|
78
|
-
|
|
79
|
-
this.__sb = new ScrollBooster({
|
|
80
|
-
viewport: this,
|
|
81
|
-
content: scrollTarget,
|
|
82
|
-
mode: 'x',
|
|
83
|
-
onUpdate: data => {
|
|
84
|
-
this.scrollLeft = data.position.x
|
|
85
|
-
}
|
|
86
|
-
})
|
|
87
|
-
}
|
|
88
|
-
}
|
package/client/board-provider.ts
DELETED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import gql from 'graphql-tag'
|
|
2
|
-
|
|
3
|
-
import { create, error, ReferenceMap, Scene } from '@hatiolab/things-scene'
|
|
4
|
-
import { BoardDataStorage } from '@operato/board'
|
|
5
|
-
import { client, gqlContext, subscribe } from '@operato/graphql'
|
|
6
|
-
|
|
7
|
-
export function createBoardProvider() {
|
|
8
|
-
var _provider = new ReferenceMap<Scene>(
|
|
9
|
-
async (boardId, resolve, reject): Promise<any> => {
|
|
10
|
-
try {
|
|
11
|
-
const response = await client.query({
|
|
12
|
-
query: gql`
|
|
13
|
-
query FetchBoardById($id: String!) {
|
|
14
|
-
board(id: $id) {
|
|
15
|
-
model
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
`,
|
|
19
|
-
variables: { id: boardId },
|
|
20
|
-
context: gqlContext()
|
|
21
|
-
})
|
|
22
|
-
|
|
23
|
-
const board = response.data?.board
|
|
24
|
-
|
|
25
|
-
if (!board) {
|
|
26
|
-
reject(new Error('Failed to get the requested board.'))
|
|
27
|
-
return
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
var model = JSON.parse(board.model)
|
|
31
|
-
|
|
32
|
-
var scene: Scene
|
|
33
|
-
|
|
34
|
-
try {
|
|
35
|
-
scene = await provider.get(boardId)
|
|
36
|
-
console.warn('Board fetched more than twice.', boardId)
|
|
37
|
-
} catch (e) {
|
|
38
|
-
scene = create({
|
|
39
|
-
model,
|
|
40
|
-
mode: 0,
|
|
41
|
-
refProvider: provider as any,
|
|
42
|
-
dataStorage: new BoardDataStorage(boardId),
|
|
43
|
-
dataSubscriptionProvider: {
|
|
44
|
-
subscribe: async (tag, component) => {
|
|
45
|
-
return await subscribe(
|
|
46
|
-
{
|
|
47
|
-
query: gql`
|
|
48
|
-
subscription {
|
|
49
|
-
data(tag: "${tag}") {
|
|
50
|
-
tag
|
|
51
|
-
data
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
`
|
|
55
|
-
},
|
|
56
|
-
{
|
|
57
|
-
next: async ({ data }) => {
|
|
58
|
-
if (data) {
|
|
59
|
-
component.data = data.data.data
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
)
|
|
64
|
-
},
|
|
65
|
-
|
|
66
|
-
dispose() {}
|
|
67
|
-
}
|
|
68
|
-
})
|
|
69
|
-
|
|
70
|
-
// s.app.baseUrl = undefined;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
resolve(scene)
|
|
74
|
-
|
|
75
|
-
// resolve(scene, {
|
|
76
|
-
// ...board,
|
|
77
|
-
// model
|
|
78
|
-
// })
|
|
79
|
-
} catch (e) {
|
|
80
|
-
error(e)
|
|
81
|
-
reject(e)
|
|
82
|
-
}
|
|
83
|
-
},
|
|
84
|
-
async (id, ref) => {
|
|
85
|
-
ref.dispose()
|
|
86
|
-
}
|
|
87
|
-
)
|
|
88
|
-
|
|
89
|
-
return _provider
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
export const provider = createBoardProvider()
|
package/client/bootstrap.ts
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import '@operato/board/ox-property-editor-board-selector.js'
|
|
2
|
-
|
|
3
|
-
import { OxPropertyEditor } from '@operato/property-editor'
|
|
4
|
-
import { OxGristRendererJson5, registerEditor, registerRenderer } from '@operato/data-grist'
|
|
5
|
-
import { appendViewpart, VIEWPART_POSITION } from '@operato/layout'
|
|
6
|
-
import { OxGristEditorHashtags } from '@operato/grist-editor/ox-grist-editor-hashtags.js'
|
|
7
|
-
import { OxGristRendererHashtags } from '@operato/grist-editor/ox-grist-renderer-hashtags.js'
|
|
8
|
-
|
|
9
|
-
import { BoardEditor } from './data-grist/board-editor'
|
|
10
|
-
import { BoardRenderer } from './data-grist/board-renderer'
|
|
11
|
-
import { ColorMapEditor } from './data-grist/color-map-editor'
|
|
12
|
-
import { ColorRangesEditor } from './data-grist/color-ranges-editor'
|
|
13
|
-
|
|
14
|
-
export default function bootstrap() {
|
|
15
|
-
registerRenderer('board', BoardRenderer)
|
|
16
|
-
registerRenderer('color-map', OxGristRendererJson5)
|
|
17
|
-
registerRenderer('color-ranges', OxGristRendererJson5)
|
|
18
|
-
registerRenderer('hashtags', OxGristRendererHashtags)
|
|
19
|
-
|
|
20
|
-
registerEditor('board', BoardEditor)
|
|
21
|
-
registerEditor('color-map', ColorMapEditor)
|
|
22
|
-
registerEditor('color-ranges', ColorRangesEditor)
|
|
23
|
-
registerEditor('hashtags', OxGristEditorHashtags)
|
|
24
|
-
|
|
25
|
-
OxPropertyEditor.register({
|
|
26
|
-
'board-selector': 'ox-property-editor-board-selector'
|
|
27
|
-
})
|
|
28
|
-
|
|
29
|
-
/* append viewpart anchor to asidebar */
|
|
30
|
-
appendViewpart({
|
|
31
|
-
name: 'viewpart-info',
|
|
32
|
-
viewpart: {
|
|
33
|
-
show: false,
|
|
34
|
-
hovering: 'edge',
|
|
35
|
-
backdrop: true
|
|
36
|
-
},
|
|
37
|
-
position: VIEWPART_POSITION.ASIDEBAR
|
|
38
|
-
})
|
|
39
|
-
}
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import '@operato/board/ox-board-selector.js'
|
|
2
|
-
import './board-renderer'
|
|
3
|
-
|
|
4
|
-
import { css, html } from 'lit'
|
|
5
|
-
import { customElement, property, query } from 'lit/decorators.js'
|
|
6
|
-
|
|
7
|
-
import { OxGristEditor } from '@operato/data-grist'
|
|
8
|
-
import { i18next } from '@operato/i18n'
|
|
9
|
-
import { openPopup } from '@operato/layout'
|
|
10
|
-
|
|
11
|
-
@customElement('board-editor')
|
|
12
|
-
export class BoardEditor extends OxGristEditor {
|
|
13
|
-
static styles = [
|
|
14
|
-
css`
|
|
15
|
-
:host {
|
|
16
|
-
display: flex;
|
|
17
|
-
flex-flow: row nowrap;
|
|
18
|
-
align-items: center;
|
|
19
|
-
|
|
20
|
-
box-sizing: border-box;
|
|
21
|
-
|
|
22
|
-
width: 100%;
|
|
23
|
-
height: 100%;
|
|
24
|
-
|
|
25
|
-
border: 0;
|
|
26
|
-
background-color: transparent;
|
|
27
|
-
|
|
28
|
-
font: var(--grist-object-editor-font);
|
|
29
|
-
color: var(--grist-object-editor-color);
|
|
30
|
-
|
|
31
|
-
justify-content: inherit;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
board-renderer {
|
|
35
|
-
display: flex;
|
|
36
|
-
flex: auto;
|
|
37
|
-
|
|
38
|
-
justify-content: inherit;
|
|
39
|
-
}
|
|
40
|
-
`
|
|
41
|
-
]
|
|
42
|
-
|
|
43
|
-
@property({ type: Object }) value: any
|
|
44
|
-
@property({ type: Object }) column: any
|
|
45
|
-
@property({ type: Object }) record: any
|
|
46
|
-
@property({ type: Number }) row?: number
|
|
47
|
-
|
|
48
|
-
popup
|
|
49
|
-
|
|
50
|
-
render() {
|
|
51
|
-
var { boardViewerPage } = this.column.record.options || {}
|
|
52
|
-
return html` <board-renderer .value=${this.value} .boardViewerPage=${boardViewerPage}></board-renderer> `
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
async firstUpdated() {
|
|
56
|
-
this.value = this.record[this.column.name]
|
|
57
|
-
|
|
58
|
-
await this.updateComplete
|
|
59
|
-
|
|
60
|
-
this.renderRoot.addEventListener('click', e => {
|
|
61
|
-
e.stopPropagation()
|
|
62
|
-
|
|
63
|
-
this.openSelector()
|
|
64
|
-
})
|
|
65
|
-
|
|
66
|
-
this.openSelector()
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
openSelector() {
|
|
70
|
-
if (this.popup) {
|
|
71
|
-
delete this.popup
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
/*
|
|
75
|
-
* 기존 설정된 보드가 선택된 상태가 되게 하기 위해서는 selector에 value를 전달해줄 필요가 있음.
|
|
76
|
-
* 주의. value는 object일 수도 있고, string일 수도 있다.
|
|
77
|
-
* string인 경우에는 해당 보드의 id로 해석한다.
|
|
78
|
-
*/
|
|
79
|
-
var value = this.value || {}
|
|
80
|
-
|
|
81
|
-
var template = html`
|
|
82
|
-
<ox-board-selector
|
|
83
|
-
.creatable=${true}
|
|
84
|
-
.value=${this.value}
|
|
85
|
-
@board-selected=${async e => {
|
|
86
|
-
var board = e.detail.board
|
|
87
|
-
|
|
88
|
-
this.dispatchEvent(
|
|
89
|
-
new CustomEvent('field-change', {
|
|
90
|
-
bubbles: true,
|
|
91
|
-
composed: true,
|
|
92
|
-
detail: {
|
|
93
|
-
before: this.value,
|
|
94
|
-
after: this.column.type == 'board' ? board : board.id || '',
|
|
95
|
-
record: this.record,
|
|
96
|
-
column: this.column,
|
|
97
|
-
row: this.row
|
|
98
|
-
}
|
|
99
|
-
})
|
|
100
|
-
)
|
|
101
|
-
|
|
102
|
-
this.popup && this.popup.close()
|
|
103
|
-
}}
|
|
104
|
-
></ox-board-selector>
|
|
105
|
-
`
|
|
106
|
-
|
|
107
|
-
this.popup = openPopup(template, {
|
|
108
|
-
backdrop: true,
|
|
109
|
-
size: 'large',
|
|
110
|
-
title: i18next.t('title.select board')
|
|
111
|
-
})
|
|
112
|
-
}
|
|
113
|
-
}
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
import '@material/web/icon/icon.js'
|
|
2
|
-
|
|
3
|
-
import gql from 'graphql-tag'
|
|
4
|
-
import { css, html, LitElement } from 'lit'
|
|
5
|
-
import { customElement, property, query } from 'lit/decorators.js'
|
|
6
|
-
|
|
7
|
-
import { navigate } from '@operato/shell'
|
|
8
|
-
import { client, gqlContext } from '@operato/graphql'
|
|
9
|
-
|
|
10
|
-
const FETCH_BOARD_GQL = id => {
|
|
11
|
-
return gql`
|
|
12
|
-
{
|
|
13
|
-
board(id:"${id}") {
|
|
14
|
-
id
|
|
15
|
-
name
|
|
16
|
-
description
|
|
17
|
-
thumbnail
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
`
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
@customElement('board-renderer')
|
|
24
|
-
class BoardRendererElement extends LitElement {
|
|
25
|
-
static styles = [
|
|
26
|
-
css`
|
|
27
|
-
:host {
|
|
28
|
-
display: flex;
|
|
29
|
-
justify-content: center;
|
|
30
|
-
position: relative;
|
|
31
|
-
|
|
32
|
-
max-width: var(--board-renderer-max-width);
|
|
33
|
-
border: var(--board-renderer-border);
|
|
34
|
-
|
|
35
|
-
width: 100%;
|
|
36
|
-
}
|
|
37
|
-
span {
|
|
38
|
-
position: absolute;
|
|
39
|
-
bottom: 0;
|
|
40
|
-
width: 100%;
|
|
41
|
-
text-indent: 5px;
|
|
42
|
-
|
|
43
|
-
font: var(--board-renderer-name-font);
|
|
44
|
-
color: var(--md-sys-color-on-primary);
|
|
45
|
-
background-color: var(--md-sys-color-primary);
|
|
46
|
-
}
|
|
47
|
-
img {
|
|
48
|
-
object-fit: contain;
|
|
49
|
-
max-width: 100%;
|
|
50
|
-
max-height: 100%;
|
|
51
|
-
}
|
|
52
|
-
md-icon {
|
|
53
|
-
position: absolute;
|
|
54
|
-
top: 0;
|
|
55
|
-
text-align: center;
|
|
56
|
-
color: var(--md-sys-color-on-primary);
|
|
57
|
-
background-color: var(--md-sys-color-primary);
|
|
58
|
-
|
|
59
|
-
width: var(--board-renderer-icon-size);
|
|
60
|
-
height: var(--board-renderer-icon-size);
|
|
61
|
-
font: var(--board-renderer-font);
|
|
62
|
-
}
|
|
63
|
-
md-icon[edit] {
|
|
64
|
-
right: 0;
|
|
65
|
-
|
|
66
|
-
border-bottom-left-radius: var(--board-renderer-icon-border-radius);
|
|
67
|
-
}
|
|
68
|
-
md-icon[view] {
|
|
69
|
-
left: 0;
|
|
70
|
-
|
|
71
|
-
border-bottom-right-radius: var(--board-renderer-icon-border-radius);
|
|
72
|
-
}
|
|
73
|
-
`
|
|
74
|
-
]
|
|
75
|
-
|
|
76
|
-
@property({ type: Object }) value: any
|
|
77
|
-
@property({ type: String }) boardViewerPage?: string
|
|
78
|
-
@property({ type: Object }) _value: any
|
|
79
|
-
|
|
80
|
-
async updated(changes) {
|
|
81
|
-
if (changes.has('value')) {
|
|
82
|
-
if (typeof this.value == 'string' && this.value) {
|
|
83
|
-
/* fetchBoard..., */
|
|
84
|
-
try {
|
|
85
|
-
var response = await client.query({
|
|
86
|
-
query: FETCH_BOARD_GQL(this.value),
|
|
87
|
-
context: gqlContext()
|
|
88
|
-
})
|
|
89
|
-
|
|
90
|
-
this._value = (response && response.data && response.data.board) || {}
|
|
91
|
-
} catch (e) {
|
|
92
|
-
console.error(e)
|
|
93
|
-
}
|
|
94
|
-
} else {
|
|
95
|
-
this._value = this.value || {}
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
render() {
|
|
101
|
-
var { id, name = '', thumbnail = 'image/gif' } = this._value || {}
|
|
102
|
-
|
|
103
|
-
return id
|
|
104
|
-
? html`
|
|
105
|
-
<span>${name}</span>
|
|
106
|
-
<img src=${thumbnail} alt="no thumbnail!" />
|
|
107
|
-
<md-icon view @mousedown=${e => this.onClickViewer(e, id)}>search</md-icon>
|
|
108
|
-
<md-icon edit @mousedown=${e => this.onClickModeler(e, id)}>edit</md-icon>
|
|
109
|
-
`
|
|
110
|
-
: html` choose board.. `
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
onClickViewer(e, id) {
|
|
114
|
-
e.preventDefault()
|
|
115
|
-
e.stopPropagation()
|
|
116
|
-
|
|
117
|
-
var boardViewerPage = this.boardViewerPage || 'board-viewer'
|
|
118
|
-
|
|
119
|
-
navigate(`${boardViewerPage}/${id}${window.location.search}`)
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
onClickModeler(e, id) {
|
|
123
|
-
e.preventDefault()
|
|
124
|
-
e.stopPropagation()
|
|
125
|
-
|
|
126
|
-
navigate(`board-modeller/${id}${window.location.search}`)
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
export const BoardRenderer = (value, column, record) => {
|
|
131
|
-
var { boardViewerPage = '' } = column.record.options || {}
|
|
132
|
-
|
|
133
|
-
return html` <board-renderer .value=${value} .boardViewerPage=${boardViewerPage}></board-renderer> `
|
|
134
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { customElement } from 'lit/decorators.js'
|
|
2
|
-
|
|
3
|
-
import { OxGristEditorValueMap } from '@operato/grist-editor/ox-grist-editor-value-map.js'
|
|
4
|
-
|
|
5
|
-
@customElement('color-map-editor')
|
|
6
|
-
export class ColorMapEditor extends OxGristEditorValueMap {
|
|
7
|
-
get options() {
|
|
8
|
-
const overidable = this.column.record?.options || {}
|
|
9
|
-
|
|
10
|
-
return {
|
|
11
|
-
name: `Color Map : ${this.record.name}`,
|
|
12
|
-
valuetype: 'color',
|
|
13
|
-
objectified: true,
|
|
14
|
-
...overidable
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { customElement } from 'lit/decorators.js'
|
|
2
|
-
|
|
3
|
-
import { OxGristEditorValueRanges } from '@operato/grist-editor/ox-grist-editor-value-ranges.js'
|
|
4
|
-
|
|
5
|
-
@customElement('color-ranges-editor')
|
|
6
|
-
export class ColorRangesEditor extends OxGristEditorValueRanges {
|
|
7
|
-
get options() {
|
|
8
|
-
const overidable = this.column.record?.options || {}
|
|
9
|
-
|
|
10
|
-
return {
|
|
11
|
-
name: `Color Ranges : ${this.record.name}`,
|
|
12
|
-
valuetype: 'color',
|
|
13
|
-
objectified: true,
|
|
14
|
-
...overidable
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
}
|