cob-cli 2.12.0 → 2.13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/README.publish.md +10 -0
  2. package/customizations/backend.js +1 -0
  3. package/customizations/backend.vuepress.js +35 -0
  4. package/customizations/frontend.js +1 -0
  5. package/lib/task_lists/rsyncFilter.txt +3 -2
  6. package/lib/task_lists/test_otherFilesContiousReload.js +1 -1
  7. package/package.json +5 -1
  8. package/templates/backend/vuepress/integrationm/actions/getVuePressDoc.groovy +74 -0
  9. package/templates/backend/vuepress/integrationm/actions/getVuePressSidebarConfig.groovy +42 -0
  10. package/templates/backend/vuepress/integrationm/actions/getVuePressSidebarRootElements.groovy +17 -0
  11. package/templates/backend/vuepress/others/vuepress/definition_contents_v234.json +619 -0
  12. package/templates/backend/vuepress/others/vuepress/nginx/README.md +28 -0
  13. package/templates/backend/vuepress/others/vuepress/package-lock.json +29656 -0
  14. package/templates/backend/vuepress/others/vuepress/package.json +24 -0
  15. package/templates/backend/vuepress/others/vuepress/src/.vuepress/components/DescriptVideo.vue +22 -0
  16. package/templates/backend/vuepress/others/vuepress/src/.vuepress/components/Graph.vue +124 -0
  17. package/templates/backend/vuepress/others/vuepress/src/.vuepress/components/ReadingTime.vue +26 -0
  18. package/templates/backend/vuepress/others/vuepress/src/.vuepress/components/References.vue +228 -0
  19. package/templates/backend/vuepress/others/vuepress/src/.vuepress/components/RestrictedContent.vue +77 -0
  20. package/templates/backend/vuepress/others/vuepress/src/.vuepress/config.js +101 -0
  21. package/templates/backend/vuepress/others/vuepress/src/.vuepress/config.json +31 -0
  22. package/templates/backend/vuepress/others/vuepress/src/.vuepress/enhanceApp.js +14 -0
  23. package/templates/backend/vuepress/others/vuepress/src/.vuepress/nav/getNavTranslated.js +52 -0
  24. package/templates/backend/vuepress/others/vuepress/src/.vuepress/plugins/References.js +96 -0
  25. package/templates/backend/vuepress/others/vuepress/src/.vuepress/public/Logo-Cult-of-Bits-400x400-1.png +0 -0
  26. package/templates/backend/vuepress/others/vuepress/src/.vuepress/public/favicon-cob.png +0 -0
  27. package/templates/backend/vuepress/others/vuepress/src/.vuepress/public/logo.png +0 -0
  28. package/templates/backend/vuepress/others/vuepress/src/.vuepress/styles/index.styl +39 -0
  29. package/templates/backend/vuepress/others/vuepress/src/.vuepress/styles/palette.styl +17 -0
  30. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/LICENSE +21 -0
  31. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/README.md +11 -0
  32. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/components/AlgoliaSearchBox.vue +172 -0
  33. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/components/DropdownLink.vue +252 -0
  34. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/components/DropdownTransition.vue +33 -0
  35. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/components/Home.vue +134 -0
  36. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/components/NavLink.vue +98 -0
  37. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/components/NavLinks.vue +165 -0
  38. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/components/Navbar.vue +140 -0
  39. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/components/Page.vue +31 -0
  40. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/components/PageEdit.vue +119 -0
  41. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/components/PageNav.vue +163 -0
  42. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/components/Sidebar.vue +64 -0
  43. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/components/SidebarButton.vue +40 -0
  44. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/components/SidebarGroup.vue +144 -0
  45. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/components/SidebarLink.vue +140 -0
  46. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/components/SidebarLinks.vue +114 -0
  47. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/global-components/Badge.vue +44 -0
  48. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/global-components/CodeBlock.vue +41 -0
  49. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/global-components/CodeGroup.vue +120 -0
  50. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/index.js +59 -0
  51. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/layouts/404.vue +30 -0
  52. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/layouts/Layout.vue +151 -0
  53. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/noopModule.js +1 -0
  54. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/package.json +44 -0
  55. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/styles/arrow.styl +22 -0
  56. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/styles/code.styl +137 -0
  57. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/styles/config.styl +1 -0
  58. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/styles/custom-blocks.styl +44 -0
  59. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/styles/index.styl +202 -0
  60. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/styles/mobile.styl +37 -0
  61. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/styles/toc.styl +3 -0
  62. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/styles/wrapper.styl +10 -0
  63. package/templates/backend/vuepress/others/vuepress/src/.vuepress/theme/util/index.js +244 -0
  64. package/templates/dashboards/dash/definition_dashboard_v59.json +1 -0
  65. package/templates/dashboards/dash/dist/dashboard.html +8 -3
  66. package/templates/dashboards/dash/dist/js/{app.a65a4c2c.js → app.8423eff3.js} +2 -2
  67. package/templates/dashboards/dash/dist/js/app.8423eff3.js.map +1 -0
  68. package/templates/dashboards/dash/dist/js/app.f9c19b80.js +188 -0
  69. package/templates/dashboards/dash/dist/js/app.f9c19b80.js.map +1 -0
  70. package/templates/dashboards/dash/src/App.vue +32 -212
  71. package/templates/dashboards/dash/src/Dashboard.vue +31 -11
  72. package/templates/dashboards/dash/src/collector.js +35 -3694
  73. package/templates/dashboards/dash/src/components/Menu.vue +15 -4
  74. package/templates/dashboards/dash/src/components/Title.vue +10 -2
  75. package/templates/dashboards/dash/src/components/Totals.vue +19 -9
  76. package/templates/dashboards/dash/src/components/{TotalsBadge.vue → TotalsValue.vue} +12 -12
  77. package/templates/dashboards/dash/src/dashboard.html +6 -1
  78. package/templates/dashboards/dash/src/test_collector.js +3732 -0
  79. package/templates/dashboards/dash/dist/js/app.a65a4c2c.js.map +0 -1
@@ -13,8 +13,9 @@
13
13
  <script>
14
14
  import axios from 'axios';
15
15
  import { umLoggedin } from '@cob/rest-api-wrapper';
16
- import { instancesList, domainCount, definitionCount, fieldSum } from '@cob/dashboard-info';
16
+ import { instancesList } from '@cob/dashboard-info';
17
17
  import Dashboard from './Dashboard.vue'
18
+ import {parseDashboard} from './collector.js'
18
19
 
19
20
  export default {
20
21
  name: 'App',
@@ -27,231 +28,50 @@ export default {
27
28
  error:"",
28
29
  currentDashboardInstance: null,
29
30
  dashboard: null,
31
+ page_title: null
30
32
  }),
31
33
  created() {
32
34
  umLoggedin().then( userInfo => this.userInfo = userInfo )
33
35
  //At the initial load we get the dashboard instance from the url
34
- let page_title = document.getElementById("dash").getAttribute('data-name')
35
- this.currentDashboardInstance = instancesList("Dashboard", "page_title.raw:\"" + page_title+"\"", 1, { changeCB: this.loadDashboard })
36
+ this.page_title = document.getElementById("dash").getAttribute('data-name')
37
+ this.currentDashboardInstance = instancesList("Dashboard", "page_title.raw:\"" + this.page_title + "\"", 1)
36
38
 
37
39
  $('section.custom-resource').on('resume', (e, params) => {
38
- //register this callback to every anchor navigation. In these cases we get the dashboard instance from the first param of the callback
39
- this.currentDashboardInstance.changeArgs({query:"page_title.raw:\""+params[0]+"\""})
40
+ //register this callback to every anchor navigation. In these cases we get the dashboard instance from the first param to the callback
41
+ this.page_title = params[0]
42
+ this.currentDashboardInstance.changeArgs({query:"page_title.raw:\"" + this.page_title + "\""})
40
43
  });
41
44
  },
42
- methods: {
43
- loadDashboard(newResult) {
44
- if(newResult.value.length > 0) {
45
+ watch: {
46
+ 'currentDashboardInstance.state'(state) {
47
+ if(state == "loading" || state == "updating") {
45
48
  this.state = "Loading"
46
- let instance = newResult.value[0].id
47
- axios.get("/recordm/recordm/instances/" + instance)
49
+ } else if(state == "error") {
50
+ this.error = "Error: error getting dashboard"
51
+ this.state = "Error"
52
+ } else if( this.currentDashboardInstance.value.length > 0) {
53
+ this.state = "Loading"
54
+ let instanceId = this.currentDashboardInstance.value[0].id
55
+ axios.get("/recordm/recordm/instances/" + instanceId)
48
56
  .then(resp => {
49
- let raw_dashboard = resp.data
50
- const dashboard_thunk = this.parseDashboard(raw_dashboard)
51
- this.dashboard = this.createDashboardFromThunk(dashboard_thunk)
52
- this.state = "Ready"
57
+ try {
58
+ this.dashboard = parseDashboard(resp.data)
59
+ this.state = "Ready"
60
+ }
61
+ catch(e) {
62
+ this.error = "Error: error processing dashboard " + instanceId
63
+ this.state = "Error"
64
+ }
65
+ })
66
+ .catch( (e) => {
67
+ this.error = "Error: error getting dashboard " + instanceId
68
+ this.state = "Error"
53
69
  })
54
- .catch( (e) => this.error = "Error: error getting dashboard", this.state = "Error" )
55
70
  } else {
56
- this.error = "Error: invalid dashboard"
71
+ this.error = "Error: dashboard '" + this.page_title + "' not found"
57
72
  this.state = "Error"
58
73
  }
59
- },
60
- createDashboardFromThunk(dashboard) {
61
- dashboard.boards.forEach(b => b.components.forEach(c => {
62
- if (c.component_type == "Totals")
63
- c.lines.forEach(l => {
64
- l.values = l.values.map(v => {
65
- if(v.args[2] && v.args[2].startsWith("{")) {
66
- v.args[2] = JSON.parse(v.args[2])
67
- }
68
- return ({
69
- dash_info: this[v.type].apply(this, v.args), // Return DashInfo, which is used by the component
70
- style: v.style
71
- })
72
- })
73
- })
74
- }))
75
- return dashboard
76
- },
77
- parseDashboard(raw_dashboard_origin) {
78
- // Parse raw dashboard
79
-
80
- let raw_dashboard = JSON.parse(JSON.stringify(raw_dashboard_origin)) // TODO: Is this deep copy slow?
81
- let dashboard = {
82
- page_title: undefined,
83
- grid_cols: undefined,
84
- max_width: undefined,
85
- boards: [],
86
- permission: undefined
87
- }
88
-
89
- let _ignore = raw_dashboard.fields.shift() // Dashboard Info Label
90
-
91
- const raw_page = raw_dashboard.fields.shift()
92
- console.assert(raw_page.fieldDefinition.name == "Page Title")
93
- dashboard.page_title = raw_page.value
94
-
95
- const raw_grid_cols = raw_dashboard.fields.shift()
96
- console.assert(raw_grid_cols.fieldDefinition.name == "Grid Columns")
97
- dashboard.grid_cols = raw_grid_cols.value
98
-
99
- const raw_max_width = raw_dashboard.fields.shift()
100
- console.assert(raw_max_width.fieldDefinition.name == "Max Width")
101
- dashboard.max_width = raw_max_width.value
102
-
103
- const raw_permission = raw_dashboard.fields.shift() // remove last value from raw_page fields (permission) leaving raw_page fields as a list of boards
104
- console.assert(raw_permission.fieldDefinition.name == "Permission")
105
- dashboard.permission = raw_permission.value
106
-
107
- _ignore = raw_dashboard.fields.shift() // Boards Label
108
-
109
- const raw_boards = raw_dashboard.fields // raw page fields without the last field which was /permission/
110
-
111
- for (let raw_board of raw_boards) {
112
- console.assert(raw_board.fieldDefinition.name == "Board Title")
113
- let board = {
114
- board_title: raw_board.value,
115
- row_span: undefined,
116
- col_span: undefined,
117
- components: [ ]
118
- }
119
-
120
- const raw_col_span = raw_board.fields.shift()
121
- console.assert(raw_col_span.fieldDefinition.name == "Col Span")
122
- board.col_span = raw_col_span.value
123
-
124
- const raw_row_span = raw_board.fields.shift()
125
- console.assert(raw_row_span.fieldDefinition.name == "Row Span")
126
- board.row_span = raw_row_span.value
127
-
128
- const raw_components = raw_board.fields
129
-
130
- for (let raw_component of raw_components) {
131
- console.assert(raw_component.fieldDefinition.name == "Component")
132
-
133
- const componentsTypes = {
134
- 'Totals': {
135
- headers: [],
136
- headers_style: null,
137
- lines: []
138
- },
139
- 'Menu': {
140
- items: []
141
- },
142
- 'Title': {
143
- title_text: null
144
- }
145
- }
146
-
147
- let component = {
148
- component_type: raw_component.value,
149
- ...JSON.parse(JSON.stringify(componentsTypes[raw_component.value] ? componentsTypes[raw_component.value] : {}))
150
- }
151
-
152
- const raw_parts = raw_component.fields
153
- if (component.component_type == 'Totals') { /// {{{
154
-
155
- let raw_headers = raw_parts.shift().fields // "Pop" first element (Headers)
156
- const raw_header_style = raw_headers.pop() // and its last field (Headers Style)
157
- console.assert(raw_header_style.fieldDefinition.name == "Style Header")
158
- component.headers_style = raw_header_style.value
159
- component.headers = raw_headers.map(x => x["value"])
160
-
161
- const raw_lines = raw_parts.filter(x => x.fieldDefinition.name == "Line")
162
-
163
- for (let raw_line of raw_lines) {
164
-
165
- let line = {
166
- text: raw_line.value,
167
- text_style: undefined,
168
- values: [
169
- /*
170
- {
171
- type: undefined,
172
- args: []
173
- style: undefined
174
- }
175
- */
176
- ]
177
- }
178
-
179
- const raw_text_style = raw_line.fields.pop() // Style Line (Last field)
180
- console.assert(raw_text_style.fieldDefinition.name == "Style Line")
181
- line.text_style = raw_text_style.value
182
-
183
- line.values = raw_line.fields.map(v => { // Remaining list of Values
184
- console.assert(v.fieldDefinition.name == "Value")
185
- const value_type = v.value
186
-
187
- const raw_style = v.fields.shift()
188
- console.assert(raw_style.fieldDefinition.name == "Style Value")
189
-
190
- const args = v.fields.map(v => v.value)
191
-
192
- return {
193
- type: value_type,
194
- style: raw_style.value,
195
- args: args
196
- }
197
- })
198
-
199
- component.lines.push(line)
200
-
201
- }
202
-
203
- } /// }}}
204
- else if (component.component_type == 'Menu') { /// {{{
205
-
206
- const raw_items = raw_parts.filter(x => x.fieldDefinition.name == "Text") // We removed the 2 first fields and only have the lines left
207
-
208
- for (let raw_item of raw_items) {
209
-
210
- let item = {
211
- text: raw_item.value,
212
- text_style: undefined,
213
- link: undefined
214
- }
215
-
216
- const raw_link = raw_item.fields.shift() // Link
217
- console.assert(raw_link.fieldDefinition.name == "Link")
218
- item.link = raw_link.value
219
-
220
- const raw_text_style = raw_item.fields.shift() // Style Text
221
- console.assert(raw_text_style.fieldDefinition.name == "Style Text")
222
- item.text_style = raw_text_style.value
223
-
224
- component.items.push(item)
225
- }
226
-
227
- } /// }}}
228
- else if (component.component_type == 'Title') { /// {{{
229
- const raw_items = raw_parts.filter(x => x.fieldDefinition.name == "Title") // We removed the 2 first fields and only have the lines left
230
- console.assert(raw_items.length == 1)
231
- component.title_text = raw_items[0].value
232
- } /// }}}
233
- else if (component.component_type == null) {
234
- // Empty component
235
- }
236
- else console.error("Undefined component type!", component.component_type)
237
-
238
- board.components.push(component)
239
- }
240
-
241
- dashboard.boards.push(board)
242
- }
243
-
244
- console.log("finished parsing!", dashboard)
245
- return dashboard
246
- },
247
-
248
- // Register functions for dynamic use in createDashboardFromThunk
249
- definitionCount: definitionCount,
250
- domainCount: domainCount,
251
- fieldSum: fieldSum,
252
- link(url, icon) {
253
- return { value: icon, href: url, state: undefined, isLink: true }
254
74
  }
255
75
  }
256
76
  };
257
- </script>
77
+ </script>
@@ -1,15 +1,17 @@
1
1
  <template>
2
2
  <div :class="'flex ' + maxWidthClass">
3
- <!-- <BoardsNav class="w-48" /> and pl-2 on the page -->
4
- <BoardsPage class="w-full h-full" :grid-cols="dashboard.grid_cols">
3
+ <BoardsPage class="w-full h-full" :grid-cols="gridColumns">
5
4
  <Board
6
- v-for="board in dashboard.boards"
7
- :key="board.board_title"
8
- :title="board.board_title" :show-title="board.show_board_title" :row-span="board.row_span" :col-span="board.col_span">
5
+ v-for="(board,i) in boards"
6
+ :key="'board-' + i"
7
+ :title="board.title"
8
+ :row-span="board.rowSpan"
9
+ :col-span="board.colSpan"
10
+ >
9
11
  <template v-for="(component, i) in board.components">
10
- <Totals v-if="component.component_type == 'Totals'" :component-data="component" :key="component.component_type + i" />
11
- <Menu v-if="component.component_type == 'Menu'" :component-data="component" :key="component.component_type + i" />
12
- <Title v-if="component.component_type == 'Title'" :component-data="component" :key="component.component_type + i" />
12
+ <Totals v-if="component.type == 'Totals'" :component-data="component.data" :key="'component-' + i" />
13
+ <Menu v-if="component.type == 'Menu'" :component-data="component.data" :key="'component-' + i" />
14
+ <Title v-if="component.type == 'Title'" :component-data="component.data" :key="'component-' + i" />
13
15
  </template>
14
16
  </Board>
15
17
  </BoardsPage>
@@ -17,7 +19,6 @@
17
19
  </template>
18
20
 
19
21
  <script>
20
- import BoardsNav from './components/BoardsNav.vue'
21
22
  import BoardsPage from './components/BoardsPage.vue'
22
23
  import Board from './components/Board.vue'
23
24
  import Totals from './components/Totals.vue'
@@ -25,9 +26,28 @@ import Menu from './components/Menu.vue'
25
26
  import Title from './components/Title.vue'
26
27
 
27
28
  export default {
28
- components: { BoardsNav, BoardsPage, Board, Totals, Menu, Title },
29
+ components: { BoardsPage, Board, Totals, Menu, Title },
29
30
  props: { dashboard: Object },
30
31
  computed: {
32
+ gridColumns() {
33
+ return this.dashboard['Grid Columns']
34
+ },
35
+ maxWidth() {
36
+ return this.dashboard['Max Width']
37
+ },
38
+ boards() {
39
+ return this.dashboard['Board Title'].map( b => ({
40
+ title: b['Board Title'],
41
+ rowSpan: b['Row Span'],
42
+ colSpan: b['Col Span'],
43
+ components: b['Component'].map( c => ({
44
+ type: c['Component'],
45
+ data: c
46
+
47
+ }))
48
+ }))
49
+ },
50
+
31
51
  maxWidthClass() {
32
52
  // The full class name lookup is important for tailwind to build all classes
33
53
  const lookup = {
@@ -39,7 +59,7 @@ export default {
39
59
  "6xl": "max-w-6xl",
40
60
  "full": "max-w-full"
41
61
  }
42
- return "mx-auto " + lookup[this.dashboard.max_width]
62
+ return "mx-auto " + lookup[this.maxWidth]
43
63
  }
44
64
  }
45
65
  }