]>
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"; | |
8 | } | |
9 | }, | |
10 | ||
11 | config: { | |
12 | layout: 'vbox', | |
13 | appUrl: undefined | |
14 | } | |
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', | |
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 | ||
38 | Ext.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; | |
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) { | |
126 | var match; | |
127 | ||
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 | } | |
162 | ||
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); | |
173 | } | |
174 | ||
175 | var keys = Ext.Array.sort(Ext.Object.getKeys(d)); | |
176 | Ext.Array.each(names, function(k) { | |
177 | if (typeof(k) === 'object') { | |
178 | Ext.Array.each(keys, function(n) { | |
179 | if (k.test(n)) { | |
180 | pushItem({ key: n, value: d[n] }); | |
181 | } | |
182 | }); | |
183 | } else { | |
184 | ||
185 | pushItem({ key: k, value: d[k] }); | |
186 | } | |
187 | }); | |
188 | Ext.Array.each(keys, function(k) { | |
189 | pushItem({ key: k, value: d[k] }); | |
190 | }); | |
191 | return kv; | |
192 | } | |
193 | ||
194 | }}); |