]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/panel/NotesView.js
ui: notes edit: set maxLength on text area
[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 bodyStyle: 'white-space:pre',
7 bodyPadding: 10,
8 scrollable: true,
300c0f73 9 animCollapse: false,
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 || '';
49 me.update(Ext.htmlEncode(data));
300c0f73
TL
50
51 if (me.collapsible && me.collapseMode === 'auto') {
52 me.setCollapsed(data === '');
53 }
f6710aac 54 },
b49fb084
DM
55 });
56 },
57
9db54b1f
DC
58 listeners: {
59 render: function(c) {
60 var me = this;
61 me.getEl().on('dblclick', me.run_editor, me);
300c0f73
TL
62 },
63 afterlayout: function() {
64 let me = this;
65 if (me.collapsible && !me.getCollapsed() && me.collapseMode === 'always') {
66 me.setCollapsed(true);
67 me.collapseMode = ''; // only once, on initial load!
68 }
69 },
9db54b1f
DC
70 },
71
72 tools: [{
73 type: 'gear',
74 handler: function() {
193df2f3
DJ
75 let view = this.up('panel');
76 view.run_editor();
f6710aac 77 },
9db54b1f
DC
78 }],
79
8058410f 80 initComponent: function() {
b49fb084
DM
81 var me = this;
82
83 var nodename = me.pveSelNode.data.node;
84 if (!nodename) {
85 throw "no node name specified";
86 }
87
dbf3563f 88 let type = me.pveSelNode.data.type;
9db54b1f
DC
89 if (!Ext.Array.contains(['node', 'qemu', 'lxc'], type)) {
90 throw 'invalid type specified';
91 }
92
b49fb084 93 var vmid = me.pveSelNode.data.vmid;
9db54b1f 94 if (!vmid && type !== 'node') {
b49fb084
DM
95 throw "no VM ID specified";
96 }
97
dbf3563f 98 me.url = `/api2/extjs/nodes/${nodename}/`;
b49fb084 99
dbf3563f 100 // add the type specific path if qemu/lxc and set the backend's maxLen
9db54b1f 101 if (type === 'qemu' || type === 'lxc') {
dbf3563f 102 me.url += `${type}/${vmid}/`;
a78362cf
TL
103 me.maxLength = 8 * 1024;
104 } else {
105 me.maxLength = 64 * 1024;
b49fb084
DM
106 }
107
9db54b1f 108 me.url += 'config';
b49fb084
DM
109
110 me.callParent();
9db54b1f
DC
111 if (type === 'node') {
112 me.down('#tbar').setVisible(true);
6751013a 113 } else if (me.pveSelNode.data.template !== 1) {
300c0f73
TL
114 me.setCollapsible(true);
115 me.collapseDirection = 'right';
116
117 let sp = Ext.state.Manager.getProvider();
118 me.collapseMode = sp.get('guest-notes-collapse', 'never');
119
120 if (me.collapseMode === 'auto') {
121 me.setCollapsed(true);
122 }
9db54b1f 123 }
abbf0eb7 124 me.load();
f6710aac 125 },
b49fb084 126});