]> git.proxmox.com Git - pve-manager.git/blame - www/mobile/Workspace.js
ui: restore: display "Hostname" for container
[pve-manager.git] / www / mobile / Workspace.js
CommitLineData
48295db4
DM
1Ext.define('PVE.Page', {
2 extend: 'Ext.Container',
3 alias: 'widget.pvePage',
4
5 statics: {
6 pathMatch: function(loc) {
7 throw "implement this in subclass";
8 }
9 },
10
11 config: {
12 layout: 'vbox',
13 appUrl: undefined
14 }
15});
16
17Ext.define('PVE.ErrorPage', {
18 extend: 'Ext.Panel',
19
20 config: {
21 html: "no such page",
22 padding: 10,
23 layout: {
24 type: 'vbox',
25 pack: 'center',
26 align: 'stretch'
27 },
28 items: [
7853a5ff
TL
29 {
30 xtype: 'pveTitleBar',
60d08d80 31 pveReloadButton: false,
7853a5ff 32 title: gettext('Error')
48295db4
DM
33 }
34 ]
35 }
36});
37
38Ext.define('PVE.Workspace', { statics: {
39 // this class only contains static functions
40
41 loginData: null, // Data from last login call
42
43 appWindow: null,
44
45 history: null,
46
47 pages: [
617c5801
TL
48 'PVE.LXCMigrate',
49 'PVE.LXCSummary',
48295db4
DM
50 'PVE.QemuMigrate',
51 'PVE.QemuSummary',
52 'PVE.NodeSummary',
53 'PVE.ClusterTaskList',
54 'PVE.NodeTaskList',
55 'PVE.TaskViewer',
56 'PVE.Datacenter'
57 ],
58
59 setHistory: function(h) {
60 PVE.Workspace.history = h;
61
62 PVE.Workspace.history.setUpdateUrl(true);
63
64 PVE.Workspace.loadPage(PVE.Workspace.history.getToken());
65 PVE.Workspace.history.on('change', function(loc) {
66 PVE.Workspace.loadPage(loc);
67 });
68 },
69
abfdd685
TL
70 goBack: function() {
71 var actions = PVE.Workspace.history.getActions(),
72 lastAction = actions[actions.length - 2];
73
74 var url = '';
75 if(lastAction) {
76 actions.pop();
77 url = lastAction.getUrl();
78 }
79
80 // use loadPage directly so we don't cause new additions to the history
81 PVE.Workspace.loadPage(url);
82 },
83
48295db4
DM
84 __setAppWindow: function(comp, dir) {
85
86 var old = PVE.Workspace.appWindow;
87
88 PVE.Workspace.appWindow = comp;
89
90 if (old) {
91 if (dir === 'noanim') {
92 Ext.Viewport.setActiveItem(PVE.Workspace.appWindow);
93 } else {
94 var anim = { type: 'slide', direction: dir || 'left' };
95 Ext.Viewport.animateActiveItem(PVE.Workspace.appWindow, anim);
96 }
97 // remove old after anim (hack, because anim.after does not work in 2.3.1a)
98 Ext.Function.defer(function(){
99 if (comp !== old) {
100 Ext.Viewport.remove(old);
101 }
102 }, 500);
103 } else {
abfdd685 104 Ext.Viewport.setActiveItem(PVE.Workspace.appWindow);
48295db4
DM
105 }
106 },
107
108 updateLoginData: function(loginData) {
109 PVE.Workspace.loginData = loginData;
48295db4 110
ab17ebcd
TL
111 // also sets the cookie
112 Proxmox.Utils.setAuthData(loginData);
48295db4
DM
113
114 PVE.Workspace.gotoPage('');
115 },
116
117 showLogin: function() {
e7ade592 118 Proxmox.Utils.authClear();
35a04562 119 Proxmox.UserName = null;
48295db4
DM
120 PVE.Workspace.loginData = null;
121
122 PVE.Workspace.gotoPage('');
123 },
124
125 gotoPage: function(loc) {
126 var match;
127
128 var old = PVE.Workspace.appWindow;
129
130 if (old.getAppUrl) {
131 var old_loc = old.getAppUrl();
132 if (old_loc !== loc) {
133 PVE.Workspace.history.add(Ext.create('Ext.app.Action', { url: loc }));
134 } else {
135 PVE.Workspace.loadPage(loc);
136 }
137 } else {
138 PVE.Workspace.history.add(Ext.create('Ext.app.Action', { url: loc }));
139 }
140 },
141
142 loadPage: function(loc) {
143 loc = loc || '';
144
145 var comp;
146
e7ade592 147 if (!Proxmox.Utils.authOK()) {
48295db4
DM
148 comp = Ext.create('PVE.Login', {});
149 } else {
150 Ext.Array.each(PVE.Workspace.pages, function(p, index) {
151 var c = Ext.ClassManager.get(p);
152 var match = c.pathMatch(loc);
153 if (match) {
154 comp = Ext.create(p, { appUrl: loc });
155 return false; // stop iteration
156 }
157 });
158 if (!comp) {
159 comp = Ext.create('PVE.ErrorPage', {});
160 }
161 }
162
163 PVE.Workspace.__setAppWindow(comp, 'noanim');
164 },
165
166 obj_to_kv: function(d, names) {
167 var kv = [];
168 var done = { digest: 1 };
169 var pushItem = function(item) {
170 if (done[item.key]) return;
171 done[item.key] = 1;
172 if (item.value) kv.push(item);
173 }
174
175 var keys = Ext.Array.sort(Ext.Object.getKeys(d));
176 Ext.Array.each(names, function(k) {
177 if (typeof(k) === 'object') {
178 Ext.Array.each(keys, function(n) {
179 if (k.test(n)) {
180 pushItem({ key: n, value: d[n] });
181 }
182 });
183 } else {
184
185 pushItem({ key: k, value: d[k] });
186 }
187 });
188 Ext.Array.each(keys, function(k) {
189 pushItem({ key: k, value: d[k] });
190 });
191 return kv;
192 }
193
194}});