]> git.proxmox.com Git - pve-manager.git/blame - www/mobile/Workspace.js
ui: mobile: enable subscription popup
[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";
5ba187c1 8 },
48295db4
DM
9 },
10
11 config: {
12 layout: 'vbox',
5ba187c1
TL
13 appUrl: undefined,
14 },
48295db4
DM
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',
5ba187c1 26 align: 'stretch',
48295db4
DM
27 },
28 items: [
7853a5ff
TL
29 {
30 xtype: 'pveTitleBar',
60d08d80 31 pveReloadButton: false,
5ba187c1
TL
32 title: gettext('Error'),
33 },
34 ],
35 },
48295db4
DM
36});
37
5ba187c1
TL
38Ext.define('PVE.Workspace', {
39 statics: {
48295db4
DM
40 // this class only contains static functions
41
42 loginData: null, // Data from last login call
43
44 appWindow: null,
45
46 history: null,
47
5ba187c1 48 pages: [
617c5801
TL
49 'PVE.LXCMigrate',
50 'PVE.LXCSummary',
48295db4
DM
51 'PVE.QemuMigrate',
52 'PVE.QemuSummary',
5ba187c1 53 'PVE.NodeSummary',
48295db4
DM
54 'PVE.ClusterTaskList',
55 'PVE.NodeTaskList',
56 'PVE.TaskViewer',
5ba187c1 57 'PVE.Datacenter',
48295db4
DM
58 ],
59
60 setHistory: function(h) {
61 PVE.Workspace.history = h;
62
63 PVE.Workspace.history.setUpdateUrl(true);
64
65 PVE.Workspace.loadPage(PVE.Workspace.history.getToken());
66 PVE.Workspace.history.on('change', function(loc) {
67 PVE.Workspace.loadPage(loc);
68 });
69 },
70
abfdd685
TL
71 goBack: function() {
72 var actions = PVE.Workspace.history.getActions(),
73 lastAction = actions[actions.length - 2];
74
75 var url = '';
5ba187c1 76 if (lastAction) {
abfdd685
TL
77 actions.pop();
78 url = lastAction.getUrl();
79 }
80
81 // use loadPage directly so we don't cause new additions to the history
82 PVE.Workspace.loadPage(url);
83 },
84
48295db4 85 __setAppWindow: function(comp, dir) {
48295db4
DM
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)
5ba187c1 98 Ext.Function.defer(function() {
48295db4
DM
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 113
a1392841
DC
114 Proxmox.Utils.checked_command(Ext.emptyFn); // display subscription status
115
48295db4
DM
116 PVE.Workspace.gotoPage('');
117 },
118
119 showLogin: function() {
e7ade592 120 Proxmox.Utils.authClear();
35a04562 121 Proxmox.UserName = null;
48295db4
DM
122 PVE.Workspace.loginData = null;
123
124 PVE.Workspace.gotoPage('');
125 },
126
127 gotoPage: function(loc) {
48295db4
DM
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 }
5ba187c1 162
48295db4
DM
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);
5ba187c1 173 };
48295db4
DM
174
175 var keys = Ext.Array.sort(Ext.Object.getKeys(d));
176 Ext.Array.each(names, function(k) {
5ba187c1 177 if (typeof k === 'object') {
48295db4
DM
178 Ext.Array.each(keys, function(n) {
179 if (k.test(n)) {
180 pushItem({ key: n, value: d[n] });
181 }
182 });
183 } else {
48295db4
DM
184 pushItem({ key: k, value: d[k] });
185 }
186 });
187 Ext.Array.each(keys, function(k) {
188 pushItem({ key: k, value: d[k] });
189 });
190 return kv;
5ba187c1 191 },
48295db4 192
5ba187c1
TL
193},
194});