]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/panel/NotesView.js
ui: disk reasign: condense code, some style improvements
[pve-manager.git] / www / manager6 / panel / NotesView.js
CommitLineData
b49fb084
DM
1Ext.define('PVE.panel.NotesView', {
2 extend: 'Ext.panel.Panel',
ade55c15 3 xtype: 'pveNotesView',
b49fb084 4
6f68dcbe 5 title: gettext("Notes"),
6f68dcbe
EK
6 bodyPadding: 10,
7 scrollable: true,
300c0f73 8 animCollapse: false,
bd800443 9 maxLength: 64 * 1024,
6f68dcbe 10
9db54b1f
DC
11 tbar: {
12 itemId: 'tbar',
13 hidden: true,
14 items: [
15 {
16 text: gettext('Edit'),
17 handler: function() {
193df2f3
DJ
18 let view = this.up('panel');
19 view.run_editor();
f6710aac
TL
20 },
21 },
22 ],
9db54b1f
DC
23 },
24
25 run_editor: function() {
dbf3563f
TL
26 let me = this;
27 Ext.create('PVE.window.NotesEdit', {
9db54b1f 28 pveSelNode: me.pveSelNode,
f6710aac 29 url: me.url,
dbf3563f
TL
30 listeners: {
31 destroy: () => me.load(),
32 },
33 autoShow: true,
a78362cf 34 }).setMaxLength(me.maxLength);
9db54b1f
DC
35 },
36
b49fb084
DM
37 load: function() {
38 var me = this;
9db54b1f 39
e7ade592 40 Proxmox.Utils.API2Request({
b49fb084
DM
41 url: me.url,
42 waitMsgTarget: me,
43 failure: function(response, opts) {
44 me.update(gettext('Error') + " " + response.htmlStatus);
300c0f73 45 me.setCollapsed(false);
b49fb084
DM
46 },
47 success: function(response, opts) {
48 var data = response.result.data.description || '';
236b33e2
TL
49
50 let mdHTML = Proxmox.Markdown.parse(data);
51 me.update(mdHTML);
300c0f73
TL
52
53 if (me.collapsible && me.collapseMode === 'auto') {
54 me.setCollapsed(data === '');
55 }
f6710aac 56 },
b49fb084
DM
57 });
58 },
59
9db54b1f
DC
60 listeners: {
61 render: function(c) {
62 var me = this;
63 me.getEl().on('dblclick', me.run_editor, me);
300c0f73
TL
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 },
9db54b1f
DC
72 },
73
74 tools: [{
75 type: 'gear',
76 handler: function() {
193df2f3
DJ
77 let view = this.up('panel');
78 view.run_editor();
f6710aac 79 },
9db54b1f
DC
80 }],
81
8058410f 82 initComponent: function() {
bd800443
DJ
83 const me = this;
84 const type = me.pveSelNode.data.type;
b49fb084 85
bd800443
DJ
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 }
b49fb084 93
bd800443
DJ
94 if (!Ext.Array.contains(['node', 'qemu', 'lxc'], type)) {
95 throw 'invalid type specified';
96 }
9db54b1f 97
bd800443
DJ
98 const vmid = me.pveSelNode.data.vmid;
99 if (!vmid && type !== 'node') {
100 throw "no VM ID specified";
101 }
b49fb084 102
bd800443 103 me.url = `/api2/extjs/nodes/${nodename}/`;
b49fb084 104
bd800443
DJ
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';
b49fb084
DM
111 }
112
b49fb084 113 me.callParent();
bd800443 114 if (type === 'node' || type === '') { // '' is for datacenter
9db54b1f 115 me.down('#tbar').setVisible(true);
6751013a 116 } else if (me.pveSelNode.data.template !== 1) {
300c0f73
TL
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 }
9db54b1f 126 }
abbf0eb7 127 me.load();
f6710aac 128 },
b49fb084 129});