jh-componentj 0.2.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.
Files changed (37) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +61 -0
  3. package/dist/tvjs-xp.js +2375 -0
  4. package/dist/tvjs-xp.min.js +5 -0
  5. package/dist/tvjs-xp.min.js.LICENSE.txt +6 -0
  6. package/package.json +69 -0
  7. package/src/Main.vue +170 -0
  8. package/src/apps/App1.vue +71 -0
  9. package/src/apps/App2.vue +155 -0
  10. package/src/components/AppTag.vue +48 -0
  11. package/src/components/Chartbox.vue +87 -0
  12. package/src/components/Codepane.vue +260 -0
  13. package/src/components/Multiselect.vue +106 -0
  14. package/src/components/MyVueComponent.vue +26 -0
  15. package/src/components/StdInput.vue +70 -0
  16. package/src/components/Window.vue +95 -0
  17. package/src/components/dragg.js +32 -0
  18. package/src/extensions/chart-link/main.js +299 -0
  19. package/src/extensions/chart-link/shared.js +10 -0
  20. package/src/extensions/chart-link/utils.js +17 -0
  21. package/src/extensions/chart-link/x.json +11 -0
  22. package/src/extensions/grid-resize/Splitter.vue +80 -0
  23. package/src/extensions/grid-resize/main.js +152 -0
  24. package/src/extensions/grid-resize/utils.js +25 -0
  25. package/src/extensions/grid-resize/x.json +11 -0
  26. package/src/extensions/legend-buttons/AddWin.vue +91 -0
  27. package/src/extensions/legend-buttons/main.js +156 -0
  28. package/src/extensions/legend-buttons/x.json +11 -0
  29. package/src/extensions/settings-win/SettingsWin.vue +76 -0
  30. package/src/extensions/settings-win/main.js +39 -0
  31. package/src/extensions/settings-win/utils.js +19 -0
  32. package/src/extensions/settings-win/x.json +11 -0
  33. package/src/index.html +19 -0
  34. package/src/index_dev.js +27 -0
  35. package/src/index_prod.js +28 -0
  36. package/src/main.js +14 -0
  37. package/src/stuff/utils.js +16 -0
@@ -0,0 +1,156 @@
1
+ // Extension's controller
2
+
3
+ import { Utils } from "trading-vue-js";
4
+ import Vue from "vue";
5
+ import AddWin from "./AddWin.vue";
6
+
7
+ export default class Main {
8
+ constructor(tv, dc, sett) {
9
+ console.log(dc, "usydfufgysdguydsguy");
10
+
11
+ this.widgets = {};
12
+ this.tv = tv;
13
+ this.dc = dc;
14
+ this.sett = sett;
15
+ }
16
+
17
+ // Listens to all tvjs events, creates new widgets
18
+ update(e) {
19
+ switch (e.event) {
20
+ case "legend-button-click":
21
+ this.onbutton(e.args[0]);
22
+ break;
23
+ }
24
+ }
25
+
26
+ onbutton(e) {
27
+ let ov = this.dc.get(e.type)[e.dataIndex];
28
+ let onchart = this.dc.data.onchart;
29
+ let offchart = this.dc.data.offchart;
30
+ console.log(e.button);
31
+ if (!ov) return;
32
+ switch (e.button) {
33
+ case "display":
34
+ if (ov.settings.display === undefined) {
35
+ var flag = false;
36
+ } else {
37
+ flag = !ov.settings.display;
38
+ }
39
+ this.tv.$set(ov.settings, "display", flag);
40
+ break;
41
+ case "up":
42
+ if (e.type === "offchart") {
43
+ if (e.dataIndex === 0) {
44
+ offchart.splice(e.dataIndex, 1);
45
+ onchart.push(ov);
46
+ } else {
47
+ let data = offchart;
48
+ let i0 = e.dataIndex;
49
+ let i1 = e.dataIndex - 1;
50
+ data[i0] = data.splice(i1, 1, data[i0])[0];
51
+ }
52
+ }
53
+ this.dc.update_ids();
54
+ break;
55
+ case "down":
56
+ if (e.type === "onchart") {
57
+ let h = this.avg_grid_h(offchart);
58
+ onchart.splice(e.dataIndex, 1);
59
+ offchart.unshift(ov);
60
+ this.tv.$set(ov, "grid", { height: h });
61
+ } else {
62
+ let n = offchart.length;
63
+ let data = offchart;
64
+ if (e.dataIndex < n - 1) {
65
+ let i0 = e.dataIndex;
66
+ let i1 = e.dataIndex + 1;
67
+ data[i0] = data.splice(i1, 1, data[i0])[0];
68
+ }
69
+ }
70
+ this.dc.update_ids();
71
+ break;
72
+ case "add":
73
+ try {
74
+ let id = `AddWin-${Utils.uuid2()}`;
75
+ let ov = this.dc.data[e.type][e.dataIndex];
76
+ let f = Object.values(this.widgets).find((x) => x.data.ov === ov);
77
+ console.log(" ov data", ov);
78
+ if (f) {
79
+ this.tv.$delete(this.widgets, f.id);
80
+ break;
81
+ }
82
+ this.tv.$set(this.widgets, id, {
83
+ id,
84
+ cls: AddWin,
85
+ data: {
86
+ ov: ov,
87
+ type: e.type,
88
+ index: e.dataIndex,
89
+ },
90
+ });
91
+ } catch (e) {
92
+ console.log(e);
93
+ }
94
+ break;
95
+ case "remove":
96
+ this.dc.data[e.type].splice(e.dataIndex, 1);
97
+ this.dc.update_ids();
98
+ break;
99
+ }
100
+ }
101
+
102
+ // Called from AddWin.vue
103
+ add_overlay(e) {
104
+ let preset = this.get_preset(e.type) || {};
105
+ if (preset.side) e.side = preset.side;
106
+ let onchart = this.dc.data.onchart;
107
+ let offchart = this.dc.data.offchart;
108
+ if (e.side === "onchart") {
109
+ onchart.splice(e.index + 1, 0, {
110
+ name: preset.name,
111
+ type: e.type,
112
+ data: [],
113
+ settings: preset.settings || {},
114
+ });
115
+ } else {
116
+ let h = this.avg_grid_h(offchart);
117
+ offchart.splice(e.index + 1, 0, {
118
+ name: preset.name,
119
+ type: e.type,
120
+ data: [],
121
+ settings: preset.settings || {},
122
+ grid: { height: h },
123
+ });
124
+ }
125
+ this.dc.update_ids();
126
+ }
127
+
128
+ // Get preset (default settings, colors) if defined
129
+ get_preset(type) {
130
+ let proto = this.tv.overlays.find((x) => x.name === type);
131
+ if (proto && proto.methods.meta_info) {
132
+ let meta = proto.methods.meta_info();
133
+ return meta.preset;
134
+ }
135
+ }
136
+
137
+ // Extension settings has changed
138
+ onsettings(sett) {}
139
+
140
+ avg_grid_h(ovs) {
141
+ if (!ovs.length) return 0.25;
142
+ let gh = 0;
143
+ for (var ov of ovs) {
144
+ if (ov.grid && typeof ov.grid.height === "number") {
145
+ gh += ov.grid.height;
146
+ }
147
+ }
148
+ return gh / ovs.length;
149
+ }
150
+
151
+ remove_widget(id) {
152
+ this.tv.$delete(this.widgets, id);
153
+ }
154
+
155
+ destroy() {}
156
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "name": "legend-buttons",
3
+ "author": "StdSquad",
4
+ "version": "1.0.0",
5
+ "components": [],
6
+ "widgets": [],
7
+ "overlays": [],
8
+ "skins": [],
9
+ "colorpacks": [],
10
+ "deps": {}
11
+ }
@@ -0,0 +1,76 @@
1
+ <template>
2
+ <window :title="data.ov.name" class="sett-win"
3
+ @close="on_close" :tv='tv'>
4
+ <div v-for="k in settlist" class="sett-win-item">
5
+ <label>{{s2d(k)}}</label>
6
+ <std-input :value="sett[k]"
7
+ @input="update_sett(k, $event)"/>
8
+ </div>
9
+ <span v-if="!settlist.length" class="sett-win-empty">
10
+ <i>No script settings</i>
11
+ </span>
12
+ </window>
13
+ </template>
14
+ <script>
15
+
16
+ import Window from '../../components/Window.vue'
17
+ import StdInput from '../../components/StdInput.vue'
18
+ import Utils from './utils.js'
19
+
20
+ export default {
21
+ name: 'SettingsWin',
22
+ props: ['id', 'main', 'dc', 'tv', 'data'],
23
+ components: { Window, StdInput },
24
+ mounted() {
25
+ },
26
+ methods: {
27
+ s2d(str) {
28
+ return Utils.sett2desc(str)
29
+ },
30
+ on_close() {
31
+ this.$props.main.remove_widget(this.$props.id)
32
+ },
33
+ update_sett(k, val) {
34
+ let dcid = this.$props.data.ov.id
35
+
36
+ let valN = parseFloat(val)
37
+ if (valN !== valN) valN = val
38
+
39
+ this.$props.dc.merge(`${dcid}.settings`,
40
+ { [k]: valN }
41
+ )
42
+ }
43
+ },
44
+ computed: {
45
+ sett() {
46
+ return this.$props.data.ov.settings
47
+ },
48
+ settlist() {
49
+ return Object.keys(this.sett).filter(x =>
50
+ x[0] !== '$' && this.sett.$props &&
51
+ this.sett.$props.includes(x))
52
+ }
53
+ }
54
+ }
55
+ </script>
56
+ <style scoped>
57
+ .tvjs-x-window.sett-win {
58
+ padding-bottom: 30px;
59
+ border: 1px solid #80808011;
60
+ }
61
+ .sett-win-item {
62
+ display: flex;
63
+ flex-direction: row;
64
+ flex-wrap: nowrap;
65
+ justify-content: flex-start;
66
+ align-content: center;
67
+ align-items: center;
68
+ }
69
+ .sett-win-item label {
70
+ min-width: 80px;
71
+ color: #35a776;
72
+ }
73
+ .sett-win-empty {
74
+ opacity: 0.5;
75
+ }
76
+ </style>
@@ -0,0 +1,39 @@
1
+ import { Utils } from "trading-vue-js";
2
+ import SettingsWin from "./SettingsWin.vue";
3
+
4
+ export default class Main {
5
+ constructor(tv, dc) {
6
+ this.widgets = {};
7
+ this.tv = tv;
8
+ this.dc = dc;
9
+ }
10
+
11
+ update(e) {
12
+ switch (e.event) {
13
+ case "legend-button-click":
14
+ let id = `SettingsWin-${Utils.uuid2()}`;
15
+ let args = e.args[0];
16
+ if (args.button !== "settings") break;
17
+ try {
18
+ let ov = this.dc.data[args.type][args.dataIndex];
19
+ let f = Object.values(this.widgets).find((x) => x.data.ov === ov);
20
+ if (f) {
21
+ this.tv.$delete(this.widgets, f.id);
22
+ break;
23
+ }
24
+ this.tv.$set(this.widgets, id, {
25
+ id,
26
+ cls: SettingsWin,
27
+ data: { ov: ov },
28
+ });
29
+ } catch (e) {
30
+ console.log(e);
31
+ }
32
+ break;
33
+ }
34
+ }
35
+
36
+ remove_widget(id) {
37
+ this.tv.$delete(this.widgets, id);
38
+ }
39
+ }
@@ -0,0 +1,19 @@
1
+
2
+ export default {
3
+
4
+ sett2desc(sett) {
5
+ function setCharAt(str,index,chr) {
6
+ if(index > str.length-1) return str
7
+ return str.substring(0,index) + chr + str.substring(index+1)
8
+ }
9
+
10
+ sett = sett.replace(/([^A-Z])([A-Z])/g, '$1 $2')
11
+ sett = sett.replace(/-|_/g, ' ')
12
+ let tuple = sett.split(' ')
13
+ tuple = tuple
14
+ .filter(x => x.length)
15
+ .map(x => setCharAt(x, 0, x[0].toUpperCase()))
16
+ return tuple.join(' ')
17
+ }
18
+
19
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "name": "settings-win",
3
+ "author": "StdSquad",
4
+ "version": "1.0.0",
5
+ "components": [],
6
+ "widgets": ["SettingsWin.vue"],
7
+ "overlays": [],
8
+ "skins": [],
9
+ "colorpacks": [],
10
+ "deps": {}
11
+ }
package/src/index.html ADDED
@@ -0,0 +1,19 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
7
+ <meta name="viewport" content="width=device-width, initial-scale=1">
8
+ <title>TradingVue Std XP</title>
9
+ <style>
10
+ </style>
11
+ </head>
12
+
13
+ <body>
14
+ <!-- Our vue app will be mounted on this DOM element -->
15
+ <div id="app"></div>
16
+ <!-- Bundle will be injected below -->
17
+ </body>
18
+
19
+ </html>
@@ -0,0 +1,27 @@
1
+
2
+
3
+ // -------- Development extension index ---------
4
+ // ! THIS FILE WAS AUTO-GENERATED !
5
+ //
6
+ // You can overwrite it and have fun, to restore
7
+ // the default state: 'npm run compile'
8
+
9
+ import ChartLink from '../build/chart-link/chart-link-dev.js'
10
+ import GridResize from '../build/grid-resize/grid-resize-dev.js'
11
+ import LegendButtons from '../build/legend-buttons/legend-buttons-dev.js'
12
+ import SettingsWin from '../build/settings-win/settings-win-dev.js'
13
+
14
+
15
+
16
+ const Pack = {
17
+ 'chart-link': ChartLink,
18
+ 'grid-resize': GridResize,
19
+ 'legend-buttons': LegendButtons,
20
+ 'settings-win': SettingsWin
21
+ }
22
+
23
+ export default Pack
24
+
25
+ export {
26
+
27
+ }
@@ -0,0 +1,28 @@
1
+
2
+
3
+ // -------- Production extension index ---------
4
+ // ! THIS FILE WAS AUTO-GENERATED !
5
+ //
6
+ // Do not commit this file, the final index is
7
+ // compiled by the repo owner, use index_dev.js to
8
+ // experiment: 'npm run compile'
9
+
10
+ import ChartLink from '../build/chart-link/chart-link.js'
11
+ import GridResize from '../build/grid-resize/grid-resize.js'
12
+ import LegendButtons from '../build/legend-buttons/legend-buttons.js'
13
+ import SettingsWin from '../build/settings-win/settings-win.js'
14
+
15
+
16
+
17
+ const Pack = {
18
+ 'chart-link': ChartLink,
19
+ 'grid-resize': GridResize,
20
+ 'legend-buttons': LegendButtons,
21
+ 'settings-win': SettingsWin
22
+ }
23
+
24
+ export default Pack
25
+
26
+ export {
27
+
28
+ }
package/src/main.js ADDED
@@ -0,0 +1,14 @@
1
+ // import Vue from "vue";
2
+ // import App from "./Main.vue";
3
+
4
+ // new Vue({
5
+ // el: "#app",
6
+ // render: (h) => h(App),
7
+ // });
8
+
9
+ import Vue from "vue";
10
+ import VueCustomElement from "vue-custom-element";
11
+ import App from "./Main.vue";
12
+ Vue.use(VueCustomElement);
13
+
14
+ Vue.customElement("my-component", App);
@@ -0,0 +1,16 @@
1
+ export default {
2
+ name2Name(sett) {
3
+ function setCharAt(str,index,chr) {
4
+ if(index > str.length-1) return str
5
+ return str.substring(0,index) + chr + str.substring(index+1)
6
+ }
7
+
8
+ sett = sett.replace(/([^A-Z])([A-Z])/g, '$1 $2')
9
+ sett = sett.replace(/-|_/g, ' ')
10
+ let tuple = sett.split(' ')
11
+ tuple = tuple
12
+ .filter(x => x.length)
13
+ .map(x => setCharAt(x, 0, x[0].toUpperCase()))
14
+ return tuple.join('')
15
+ }
16
+ }