]>
Commit | Line | Data |
---|---|---|
e9144532 SS |
1 | Ext.define('Proxmox.panel.NotesView', { |
2 | extend: 'Ext.panel.Panel', | |
3 | xtype: 'pmxNotesView', | |
11d4f4de | 4 | mixins: ['Proxmox.Mixin.CBind'], |
e9144532 SS |
5 | |
6 | title: gettext("Notes"), | |
7 | bodyPadding: 10, | |
8 | scrollable: true, | |
9 | animCollapse: false, | |
10 | maxLength: 64 * 1024, | |
11d4f4de SS |
11 | enableTBar: false, |
12 | onlineHelp: 'markdown_basics', | |
e9144532 SS |
13 | |
14 | tbar: { | |
15 | itemId: 'tbar', | |
16 | hidden: true, | |
17 | items: [ | |
18 | { | |
19 | text: gettext('Edit'), | |
20 | handler: function() { | |
21 | let view = this.up('panel'); | |
22 | view.run_editor(); | |
23 | }, | |
24 | }, | |
25 | ], | |
26 | }, | |
27 | ||
11d4f4de SS |
28 | cbindData: function(initalConfig) { |
29 | let me = this; | |
30 | let type = ''; | |
31 | ||
32 | if (me.node) { | |
33 | me.url = `/api2/extjs/nodes/${me.node}/config`; | |
34 | } else if (me.pveSelNode?.data?.id === 'root') { | |
35 | me.url = '/api2/extjs/cluster/options'; | |
36 | type = me.pveSelNode?.data?.type; | |
37 | } else { | |
38 | const nodename = me.pveSelNode?.data?.node; | |
39 | type = me.pveSelNode?.data?.type; | |
40 | ||
41 | if (!nodename) { | |
42 | throw "no node name specified"; | |
43 | } | |
44 | ||
45 | if (!Ext.Array.contains(['node', 'qemu', 'lxc'], type)) { | |
46 | throw 'invalid type specified'; | |
47 | } | |
48 | ||
49 | const vmid = me.pveSelNode?.data?.vmid; | |
50 | ||
51 | if (!vmid && type !== 'node') { | |
52 | throw "no VM ID specified"; | |
53 | } | |
54 | ||
55 | me.url = `/api2/extjs/nodes/${nodename}/`; | |
56 | ||
57 | // add the type specific path if qemu/lxc and set the backend's maxLen | |
58 | if (type === 'qemu' || type === 'lxc') { | |
59 | me.url += `${type}/${vmid}/`; | |
60 | me.maxLength = 8 * 1024; | |
61 | } | |
62 | ||
63 | me.url += 'config'; | |
64 | } | |
65 | ||
66 | me.pveType = type; | |
67 | ||
68 | me.load(); | |
69 | return {}; | |
70 | }, | |
71 | ||
e9144532 SS |
72 | run_editor: function() { |
73 | let me = this; | |
74 | Ext.create('Proxmox.window.NotesEdit', { | |
e9144532 | 75 | url: me.url, |
11d4f4de | 76 | onlineHelp: me.onlineHelp, |
e9144532 SS |
77 | listeners: { |
78 | destroy: () => me.load(), | |
79 | }, | |
80 | autoShow: true, | |
81 | }).setMaxLength(me.maxLength); | |
82 | }, | |
83 | ||
11d4f4de SS |
84 | setNotes: function(value = '') { |
85 | let me = this; | |
86 | ||
87 | let mdHtml = Proxmox.Markdown.parse(value); | |
88 | me.update(mdHtml); | |
89 | ||
90 | if (me.collapsible && me.collapseMode === 'auto') { | |
91 | me.setCollapsed(!value); | |
92 | } | |
93 | }, | |
94 | ||
e9144532 | 95 | load: function() { |
11d4f4de | 96 | let me = this; |
e9144532 SS |
97 | |
98 | Proxmox.Utils.API2Request({ | |
99 | url: me.url, | |
100 | waitMsgTarget: me, | |
11d4f4de | 101 | failure: (response, opts) => { |
e9144532 SS |
102 | me.update(gettext('Error') + " " + response.htmlStatus); |
103 | me.setCollapsed(false); | |
104 | }, | |
11d4f4de | 105 | success: ({ result }) => me.setNotes(result.data.description), |
e9144532 SS |
106 | }); |
107 | }, | |
108 | ||
109 | listeners: { | |
110 | render: function(c) { | |
11d4f4de | 111 | let me = this; |
e9144532 SS |
112 | me.getEl().on('dblclick', me.run_editor, me); |
113 | }, | |
114 | afterlayout: function() { | |
115 | let me = this; | |
116 | if (me.collapsible && !me.getCollapsed() && me.collapseMode === 'always') { | |
117 | me.setCollapsed(true); | |
118 | me.collapseMode = ''; // only once, on initial load! | |
119 | } | |
120 | }, | |
121 | }, | |
122 | ||
11d4f4de SS |
123 | tools: [ |
124 | { | |
125 | type: 'gear', | |
126 | handler: function() { | |
127 | let view = this.up('panel'); | |
128 | view.run_editor(); | |
129 | }, | |
e9144532 | 130 | }, |
11d4f4de | 131 | ], |
e9144532 SS |
132 | |
133 | initComponent: function() { | |
11d4f4de | 134 | let me = this; |
e9144532 | 135 | me.callParent(); |
11d4f4de SS |
136 | |
137 | // '' is for datacenter | |
138 | if (me.enableTBar === true || me.pveType === 'node' || me.pveType === '') { | |
e9144532 | 139 | me.down('#tbar').setVisible(true); |
11d4f4de | 140 | } else if (me.pveSelNode?.data?.template !== 1) { |
e9144532 SS |
141 | me.setCollapsible(true); |
142 | me.collapseDirection = 'right'; | |
143 | ||
144 | let sp = Ext.state.Manager.getProvider(); | |
145 | me.collapseMode = sp.get('guest-notes-collapse', 'never'); | |
146 | ||
147 | if (me.collapseMode === 'auto') { | |
148 | me.setCollapsed(true); | |
149 | } | |
150 | } | |
e9144532 SS |
151 | }, |
152 | }); |