]>
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 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) { | |
48295db4 DM |
126 | var old = PVE.Workspace.appWindow; |
127 | ||
128 | if (old.getAppUrl) { | |
129 | var old_loc = old.getAppUrl(); | |
130 | if (old_loc !== loc) { | |
131 | PVE.Workspace.history.add(Ext.create('Ext.app.Action', { url: loc })); | |
132 | } else { | |
133 | PVE.Workspace.loadPage(loc); | |
134 | } | |
135 | } else { | |
136 | PVE.Workspace.history.add(Ext.create('Ext.app.Action', { url: loc })); | |
137 | } | |
138 | }, | |
139 | ||
140 | loadPage: function(loc) { | |
141 | loc = loc || ''; | |
142 | ||
143 | var comp; | |
144 | ||
e7ade592 | 145 | if (!Proxmox.Utils.authOK()) { |
48295db4 DM |
146 | comp = Ext.create('PVE.Login', {}); |
147 | } else { | |
148 | Ext.Array.each(PVE.Workspace.pages, function(p, index) { | |
149 | var c = Ext.ClassManager.get(p); | |
150 | var match = c.pathMatch(loc); | |
151 | if (match) { | |
152 | comp = Ext.create(p, { appUrl: loc }); | |
153 | return false; // stop iteration | |
154 | } | |
155 | }); | |
156 | if (!comp) { | |
157 | comp = Ext.create('PVE.ErrorPage', {}); | |
158 | } | |
159 | } | |
5ba187c1 | 160 | |
48295db4 DM |
161 | PVE.Workspace.__setAppWindow(comp, 'noanim'); |
162 | }, | |
163 | ||
164 | obj_to_kv: function(d, names) { | |
165 | var kv = []; | |
166 | var done = { digest: 1 }; | |
167 | var pushItem = function(item) { | |
168 | if (done[item.key]) return; | |
169 | done[item.key] = 1; | |
170 | if (item.value) kv.push(item); | |
5ba187c1 | 171 | }; |
48295db4 DM |
172 | |
173 | var keys = Ext.Array.sort(Ext.Object.getKeys(d)); | |
174 | Ext.Array.each(names, function(k) { | |
5ba187c1 | 175 | if (typeof k === 'object') { |
48295db4 DM |
176 | Ext.Array.each(keys, function(n) { |
177 | if (k.test(n)) { | |
178 | pushItem({ key: n, value: d[n] }); | |
179 | } | |
180 | }); | |
181 | } else { | |
48295db4 DM |
182 | pushItem({ key: k, value: d[k] }); |
183 | } | |
184 | }); | |
185 | Ext.Array.each(keys, function(k) { | |
186 | pushItem({ key: k, value: d[k] }); | |
187 | }); | |
188 | return kv; | |
5ba187c1 | 189 | }, |
48295db4 | 190 | |
5ba187c1 TL |
191 | }, |
192 | }); |