]> git.proxmox.com Git - pve-manager.git/blame - www/mobile/Workspace.js
Allow typeahead selection of Firewall macros
[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: [
29 {
30 xtype: 'titlebar',
31 docked: 'top',
32 title: gettext('Error'),
33 items: [
34 {
35 xtype: 'pveMenuButton',
36 align: 'right',
37 pveStdMenu: true
38 }
39 ]
40 }
41 ]
42 }
43});
44
45Ext.define('PVE.Workspace', { statics: {
46 // this class only contains static functions
47
48 loginData: null, // Data from last login call
49
50 appWindow: null,
51
52 history: null,
53
54 pages: [
f8ffb2ef 55 'PVE.OpenVzMigrate',
48295db4
DM
56 'PVE.OpenVzSummary',
57 'PVE.QemuMigrate',
58 'PVE.QemuSummary',
59 'PVE.NodeSummary',
60 'PVE.ClusterTaskList',
61 'PVE.NodeTaskList',
62 'PVE.TaskViewer',
63 'PVE.Datacenter'
64 ],
65
66 setHistory: function(h) {
67 PVE.Workspace.history = h;
68
69 PVE.Workspace.history.setUpdateUrl(true);
70
71 PVE.Workspace.loadPage(PVE.Workspace.history.getToken());
72 PVE.Workspace.history.on('change', function(loc) {
73 PVE.Workspace.loadPage(loc);
74 });
75 },
76
77 __setAppWindow: function(comp, dir) {
78
79 var old = PVE.Workspace.appWindow;
80
81 PVE.Workspace.appWindow = comp;
82
83 if (old) {
84 if (dir === 'noanim') {
85 Ext.Viewport.setActiveItem(PVE.Workspace.appWindow);
86 } else {
87 var anim = { type: 'slide', direction: dir || 'left' };
88 Ext.Viewport.animateActiveItem(PVE.Workspace.appWindow, anim);
89 }
90 // remove old after anim (hack, because anim.after does not work in 2.3.1a)
91 Ext.Function.defer(function(){
92 if (comp !== old) {
93 Ext.Viewport.remove(old);
94 }
95 }, 500);
96 } else {
97 Ext.Viewport.setActiveItem(PVE.Workspace.appWindow, anim);
98 }
99 },
100
101 updateLoginData: function(loginData) {
102 PVE.Workspace.loginData = loginData;
103 PVE.CSRFPreventionToken = loginData.CSRFPreventionToken;
104 PVE.UserName = loginData.username;
105
106 // creates a session cookie (expire = null)
107 // that way the cookie gets deleted after browser window close
108 Ext.util.Cookies.set('PVEAuthCookie', loginData.ticket, null, '/', null, true);
109
110 PVE.Workspace.gotoPage('');
111 },
112
113 showLogin: function() {
114 PVE.Utils.authClear();
115 PVE.UserName = null;
116 PVE.Workspace.loginData = null;
117
118 PVE.Workspace.gotoPage('');
119 },
120
121 gotoPage: function(loc) {
122 var match;
123
124 var old = PVE.Workspace.appWindow;
125
126 if (old.getAppUrl) {
127 var old_loc = old.getAppUrl();
128 if (old_loc !== loc) {
129 PVE.Workspace.history.add(Ext.create('Ext.app.Action', { url: loc }));
130 } else {
131 PVE.Workspace.loadPage(loc);
132 }
133 } else {
134 PVE.Workspace.history.add(Ext.create('Ext.app.Action', { url: loc }));
135 }
136 },
137
138 loadPage: function(loc) {
139 loc = loc || '';
140
141 var comp;
142
143 if (!PVE.Utils.authOK()) {
144 comp = Ext.create('PVE.Login', {});
145 } else {
146 Ext.Array.each(PVE.Workspace.pages, function(p, index) {
147 var c = Ext.ClassManager.get(p);
148 var match = c.pathMatch(loc);
149 if (match) {
150 comp = Ext.create(p, { appUrl: loc });
151 return false; // stop iteration
152 }
153 });
154 if (!comp) {
155 comp = Ext.create('PVE.ErrorPage', {});
156 }
157 }
158
159 PVE.Workspace.__setAppWindow(comp, 'noanim');
160 },
161
162 obj_to_kv: function(d, names) {
163 var kv = [];
164 var done = { digest: 1 };
165 var pushItem = function(item) {
166 if (done[item.key]) return;
167 done[item.key] = 1;
168 if (item.value) kv.push(item);
169 }
170
171 var keys = Ext.Array.sort(Ext.Object.getKeys(d));
172 Ext.Array.each(names, function(k) {
173 if (typeof(k) === 'object') {
174 Ext.Array.each(keys, function(n) {
175 if (k.test(n)) {
176 pushItem({ key: n, value: d[n] });
177 }
178 });
179 } else {
180
181 pushItem({ key: k, value: d[k] });
182 }
183 });
184 Ext.Array.each(keys, function(k) {
185 pushItem({ key: k, value: d[k] });
186 });
187 return kv;
188 }
189
190}});