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