]> git.proxmox.com Git - pve-manager.git/blame - www/mobile/Workspace.js
use Proxmox.Utils instead of PVE.Utils
[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;
110 PVE.CSRFPreventionToken = loginData.CSRFPreventionToken;
111 PVE.UserName = loginData.username;
112
113 // creates a session cookie (expire = null)
114 // that way the cookie gets deleted after browser window close
115 Ext.util.Cookies.set('PVEAuthCookie', loginData.ticket, null, '/', null, true);
116
117 PVE.Workspace.gotoPage('');
118 },
119
120 showLogin: function() {
e7ade592 121 Proxmox.Utils.authClear();
48295db4
DM
122 PVE.UserName = null;
123 PVE.Workspace.loginData = null;
124
125 PVE.Workspace.gotoPage('');
126 },
127
128 gotoPage: function(loc) {
129 var match;
130
131 var old = PVE.Workspace.appWindow;
132
133 if (old.getAppUrl) {
134 var old_loc = old.getAppUrl();
135 if (old_loc !== loc) {
136 PVE.Workspace.history.add(Ext.create('Ext.app.Action', { url: loc }));
137 } else {
138 PVE.Workspace.loadPage(loc);
139 }
140 } else {
141 PVE.Workspace.history.add(Ext.create('Ext.app.Action', { url: loc }));
142 }
143 },
144
145 loadPage: function(loc) {
146 loc = loc || '';
147
148 var comp;
149
e7ade592 150 if (!Proxmox.Utils.authOK()) {
48295db4
DM
151 comp = Ext.create('PVE.Login', {});
152 } else {
153 Ext.Array.each(PVE.Workspace.pages, function(p, index) {
154 var c = Ext.ClassManager.get(p);
155 var match = c.pathMatch(loc);
156 if (match) {
157 comp = Ext.create(p, { appUrl: loc });
158 return false; // stop iteration
159 }
160 });
161 if (!comp) {
162 comp = Ext.create('PVE.ErrorPage', {});
163 }
164 }
165
166 PVE.Workspace.__setAppWindow(comp, 'noanim');
167 },
168
169 obj_to_kv: function(d, names) {
170 var kv = [];
171 var done = { digest: 1 };
172 var pushItem = function(item) {
173 if (done[item.key]) return;
174 done[item.key] = 1;
175 if (item.value) kv.push(item);
176 }
177
178 var keys = Ext.Array.sort(Ext.Object.getKeys(d));
179 Ext.Array.each(names, function(k) {
180 if (typeof(k) === 'object') {
181 Ext.Array.each(keys, function(n) {
182 if (k.test(n)) {
183 pushItem({ key: n, value: d[n] });
184 }
185 });
186 } else {
187
188 pushItem({ key: k, value: d[k] });
189 }
190 });
191 Ext.Array.each(keys, function(k) {
192 pushItem({ key: k, value: d[k] });
193 });
194 return kv;
195 }
196
197}});