]>
Commit | Line | Data |
---|---|---|
48295db4 DM |
1 | Ext.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 | ||
17 | Ext.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 |
38 | Ext.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 | }); |