-
Notifications
You must be signed in to change notification settings - Fork 60
/
umd_plugin.js
143 lines (134 loc) · 4.16 KB
/
umd_plugin.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
/* eslint-disable no-restricted-globals */
// we put the code in a function to avoid variable name collisions with the
// global scope
;(function () {
class Plugin {
name = 'UMDLocPlugin'
version = '1.0'
install(pluginManager) {
const React = pluginManager.jbrequire('react')
function NewAboutComponent() {
return React.createElement(
'div',
null,
'This is a replaced about dialog',
)
}
function ExtraAboutPanel() {
return React.createElement('div', null, 'This is a custom about dialog')
}
function ExtraFeaturePanel() {
return React.createElement(
'div',
null,
'This is a custom feature panel',
)
}
function ReplaceFeatureWidget() {
return React.createElement(
'div',
null,
'This is a replaced feature panel',
)
}
pluginManager.addToExtensionPoint(
'Core-replaceAbout',
(DefaultAboutComponent, { /*session,*/ config }) => {
return config.trackId === 'volvox.inv.vcf'
? NewAboutComponent
: DefaultAboutComponent
},
)
pluginManager.addToExtensionPoint(
'Core-extraAboutPanel',
(DefaultAboutExtra, { /*session,*/ config }) => {
return config.trackId === 'volvox_sv_test'
? { name: 'More info', Component: ExtraAboutPanel }
: DefaultAboutExtra
},
)
pluginManager.addToExtensionPoint(
'Core-extraFeaturePanel',
(DefaultFeatureExtra, { model }) => {
return model.trackId === 'volvox_filtered_vcf'
? { name: 'Extra info', Component: ExtraFeaturePanel }
: DefaultFeatureExtra
},
)
pluginManager.addToExtensionPoint('Core-extendSession', session => {
return session.extend(self => {
const superThemes = self.allThemes
return {
views: {
allThemes() {
return {
...superThemes(),
custom: {
name: 'Custom theme from plugin',
palette: {
primary: { main: '#0f0' },
secondary: { main: '#f00' },
},
},
}
},
},
}
})
})
// extend session twice, just to ensure both work
pluginManager.addToExtensionPoint('Core-extendSession', session => {
return session.extend(self => {
const superThemes = self.allThemes
return {
views: {
allThemes() {
const s = superThemes()
return {
...s,
// modify the default theme
default: {
...s.default,
palette: {
...s.default.palette,
quaternary: { main: '#090' },
},
},
custom2: {
name: 'Custom theme from plugin 2',
palette: {
primary: { main: '#00f' },
secondary: { main: '#0ff' },
},
},
}
},
},
}
})
})
pluginManager.addToExtensionPoint(
'Core-replaceWidget',
(DefaultWidget, { model }) => {
return model.trackId === 'volvox.inv.vcf'
? ReplaceFeatureWidget
: DefaultWidget
},
)
pluginManager.addToExtensionPoint('Core-preProcessTrackConfig', snap => {
snap.metadata = {
...snap.metadata,
'metadata from plugin':
'added by umd_plugin.js using Core-preProcessTrackConfig',
}
return snap
})
}
configure(/* pluginManager */) {}
}
// the plugin will be included in both the main thread and web worker, so
// install plugin to either window or self (webworker global scope)
;(typeof self !== 'undefined' ? self : window).JBrowsePluginUMDLocPlugin = {
default: Plugin,
}
})()