blob: 0280c742651548edfed7a6e2fe1653018ccb06c8 [file] [log] [blame]
Rushabh Mehta865c00a2012-01-24 14:33:21 +05301// ====================================================================
2
3pscript.startup_make_sidebar = function() {
4 $y(page_body.left_sidebar, {width:(100/6)+'%', paddingTop:'8px'});
5
6 var callback = function(r,rt) {
7 // menu
8 var ml = r.message;
9
10 // clear
11 page_body.left_sidebar.innerHTML = '';
12
13 for(var m=0; m<ml.length; m++){
14 if(ml[m]) {
15 new SidebarItem(ml[m]);
16 }
17 }
Rushabh Mehta865c00a2012-01-24 14:33:21 +053018 nav_obj.observers.push({notify:function(t,dt,dn) { pscript.select_sidebar_menu(t, dt, dn); }});
19
20 // select current
21 var no = nav_obj.ol[nav_obj.ol.length-1];
22 if(no && menu_item_map[decodeURIComponent(no[0])][decodeURIComponent(no[1])])
23 pscript.select_sidebar_menu(decodeURIComponent(no[0]), decodeURIComponent(no[1]));
24 }
25 $c_obj('Home Control', 'get_modules', '', callback);
26}
27
28// ====================================================================
29// Menu observer
30// ====================================================================
31
32cur_menu_pointer = null;
33var menu_item_map = {'Form':{}, 'Page':{}, 'Report':{}, 'List':{}}
34
35pscript.select_sidebar_menu = function(t, dt, dn) {
36 // get menu item
37 if(menu_item_map[t][dt]) {
38 // select
39 menu_item_map[t][dt].select();
40 } else {
41 // none found :-( Unselect
42 if(cur_menu_pointer)
43 cur_menu_pointer.deselect();
44 }
45}
46
47// ====================================================================
48// Menu pointer
49// ====================================================================
50
51var body_background = '#e2e2e2';
52
53MenuPointer = function(parent, label) {
Rushabh Mehta7018b192012-02-02 13:42:28 +053054 var me = this;
Rushabh Mehta865c00a2012-01-24 14:33:21 +053055 this.wrapper = $a(parent, 'div', '', {padding:'0px', cursor:'pointer', margin:'2px 0px'});
56 $br(this.wrapper, '3px');
57
58 this.tab = make_table($a(this.wrapper, 'div'), 1, 2, '100%', ['', '11px'], {height:'22px',
59 verticalAlign:'middle', padding:'0px'}, {borderCollapse:'collapse', tableLayout:'fixed'});
60
61 $y($td(this.tab, 0, 0), {padding:'0px 4px', color:'#444', whiteSpace:'nowrap'});
62
63 // triangle border (?)
64 this.tab.triangle_div = $a($td(this.tab, 0, 1), 'div','', {
65 borderColor: body_background + ' ' + body_background + ' ' + body_background + ' ' + 'transparent',
66 borderWidth:'11px', borderStyle:'solid', height:'0px', width:'0px', marginRight:'-11px'});
67
68 this.label_area = $a($td(this.tab, 0, 0), 'span', '', '', label);
69
70 $(this.wrapper)
71 .hover(
Rushabh Mehta7018b192012-02-02 13:42:28 +053072 function() { if(!me.selected)
73 $bg(this, '#eee'); } ,
74 function() { if(!me.selected)
75 $bg(this, body_background); }
Rushabh Mehta865c00a2012-01-24 14:33:21 +053076 )
77
78 $y($td(this.tab, 0, 0), {borderBottom:'1px solid #ddd'});
79
80}
81
82// ====================================================================
83
84MenuPointer.prototype.select = function(grey) {
Rushabh Mehta7018b192012-02-02 13:42:28 +053085 $y($td(this.tab, 0, 0), {
86 color:'#fff', borderBottom:'0px solid #000'
87 });
88 $(this.wrapper).css('background-color', '#999');
Rushabh Mehta865c00a2012-01-24 14:33:21 +053089 this.selected = 1;
90
91 if(cur_menu_pointer && cur_menu_pointer != this)
92 cur_menu_pointer.deselect();
93
94 cur_menu_pointer = this;
95}
96
97// ====================================================================
98
99MenuPointer.prototype.deselect = function() {
100 $y($td(this.tab, 0, 0), {color:'#444', borderBottom:'1px solid #ddd'});
Rushabh Mehta7018b192012-02-02 13:42:28 +0530101 $(this.wrapper).css('background-color', body_background);
Rushabh Mehta865c00a2012-01-24 14:33:21 +0530102 this.selected = 0;
103}
104
105
106// ====================================================================
107// Sidebar Item
108// ====================================================================
109
110var cur_sidebar_item = null;
111
112SidebarItem = function(det) {
113 var me = this;
114 this.det = det;
115 this.wrapper = $a(page_body.left_sidebar, 'div', '', {marginRight:'12px'});
116
117 this.body = $a(this.wrapper, 'div');
118 this.tab = make_table(this.body, 1, 2, '100%', ['24px', null], {verticalAlign:'middle'}, {tableLayout:'fixed'});
119
120 // icon
121 var ic = $a($td(this.tab, 0, 0), 'div', 'module-icons module-icons-' + det.module_label.toLowerCase(), {marginLeft:'3px', marginBottom:'-2px'});
122
123 // pointer table
124 this.pointer = new MenuPointer($td(this.tab, 0, 1), det.module_label);
125 $y($td(this.pointer.tab, 0, 0), {fontWeight:'bold'});
126
127 // for page type
128 if(det.module_page) {
129 menu_item_map.Page[det.module_page] = this.pointer;
130 }
131
132 // items area
133 this.items_area = $a(this.wrapper, 'div');
134
135 this.body.onclick = function() { me.onclick(); }
136}
137
138// ====================================================================
139
140SidebarItem.prototype.onclick = function() {
141 var me = this;
142
143 if(this.det.module_page) {
144 // page type
145 this.pointer.select();
146
Rushabh Mehta949496c2012-01-25 18:48:46 +0530147 $(me.pointer.label_area).set_working();
148 loadpage(this.det.module_page, function() {
149 $(me.pointer.label_area).done_working();
150 });
Rushabh Mehta865c00a2012-01-24 14:33:21 +0530151
152 } else {
153 // show sub items
154 this.toggle();
155 }
156}
157
158// ====================================================================
159
160SidebarItem.prototype.collapse = function() {
161 $(this.items_area).slideUp();
162 this.is_open = 0;
163 $fg(this.pointer.label_area, '#444')
164}
165
166// ====================================================================
167
168SidebarItem.prototype.toggle = function() {
169 if(this.loading) return;
170
171 if(this.is_open) {
172 this.collapse();
173 } else {
174 if(this.loaded) $(this.items_area).slideDown();
175 else this.show_items();
176 this.is_open = 1;
177 $fg(this.pointer.label_area, '#000')
178 //this.pointer.select(1);
179
180 // close existing open
181 if(cur_sidebar_item && cur_sidebar_item != this) {
182 cur_sidebar_item.collapse();
183 }
184 cur_sidebar_item = this;
185 }
186}
187
188// ====================================================================
189
190SidebarItem.prototype.show_items = function() {
191 this.loading = 1;
192 var me = this;
193
Rushabh Mehta949496c2012-01-25 18:48:46 +0530194 $(this.pointer.label_area).set_working();
Rushabh Mehta865c00a2012-01-24 14:33:21 +0530195 var callback = function(r,rt){
196 me.loaded = 1;
197 me.loading = 0;
198 var smi = null;
199 var has_reports = 0;
200 var has_tools = 0;
201
202 // widget code
Rushabh Mehta949496c2012-01-25 18:48:46 +0530203 $(me.pointer.label_area).done_working();
Rushabh Mehta865c00a2012-01-24 14:33:21 +0530204
205 if(r.message.il) {
206 me.il = r.message.il;
207
208 // forms
209 for(var i=0; i<me.il.length;i++){
210 if(me.il[i].doc_type == 'Forms') {
211 if(in_list(profile.can_read, me.il[i].doc_name)) {
212 var smi = new SidebarModuleItem(me, me.il[i]);
213
214 menu_item_map['Form'][me.il[i].doc_name] = smi.pointer;
215 menu_item_map['List'][me.il[i].doc_name] = smi.pointer;
216 }
217 }
218 if(me.il[i].doc_type=='Reports') has_reports = 1;
Rushabh Mehtaa8ad3902012-01-25 10:37:35 +0530219 if(in_list(['Single DocType', 'Pages', 'Setup Forms'], me.il[i].doc_type))
220 has_tools = 1;
Rushabh Mehta865c00a2012-01-24 14:33:21 +0530221 }
222 // reports
223 if(has_reports) {
224 var smi = new SidebarModuleItem(me, {doc_name:'Reports', doc_type:'Reports'});
225
226 // add to menu-item mapper
227 menu_item_map['Page'][me.det.module_label + ' Reports'] = smi.pointer;
228 }
229
230 // tools
231 if(has_tools) {
232 var smi = new SidebarModuleItem(me, {doc_name:'Tools', doc_type:'Tools'});
233
234 // add to menu-item mapper
235 menu_item_map['Page'][me.det.module_label + ' Tools'] = smi.pointer;
236 }
237
238 // custom reports
239 if(r.message.custom_reports.length) {
240 me.il = add_lists(r.message.il, r.message.custom_reports);
241 var smi = new SidebarModuleItem(me, {doc_name:'Custom Reports', doc_type:'Custom Reports'});
242
243 // add to menu-item mapper
244 menu_item_map['Page'][me.det.module_label + ' Custom Reports'] = smi.pointer;
245 }
246 }
247
248
249 $(me.items_area).slideDown();
250
251 // high light
252 var no = nav_obj.ol[nav_obj.ol.length-1];
253 if(no && menu_item_map[decodeURIComponent(no[0])][decodeURIComponent(no[1])])
254 pscript.select_sidebar_menu(decodeURIComponent(no[0]), decodeURIComponent(no[1]));
255
256 }
257
258 $c_obj('Home Control', 'get_module_details', me.det.name, callback);
259}
260
261// ====================================================================
262// Show Reports
263// ====================================================================
264
265SidebarItem.prototype.show_section = function(sec_type) {
266 var me = this;
267 var label = this.det.module_label + ' ' + sec_type;
Rushabh Mehtaab1148c2012-01-31 18:01:16 +0530268 var type_map = {'Reports':'Reports', 'Custom Reports':'Custom Reports',
269 'Pages':'Tools', 'Single DocType':'Tools', 'Setup Forms':'Tools'}
270
Rushabh Mehta865c00a2012-01-24 14:33:21 +0530271
272 if(page_body.pages[label]) {
273 loadpage(label, null, 1);
274 } else {
Rushabh Mehtaab1148c2012-01-31 18:01:16 +0530275
Rushabh Mehta865c00a2012-01-24 14:33:21 +0530276 // make the reports page
277 var page = page_body.add_page(label);
278 this.wrapper = $a(page,'div','layout_wrapper');
279
280
281 // head
282 this.head = new PageHeader(this.wrapper, label);
283
284 // body
285 this.body1 = $a(this.wrapper, 'div', '', {marginTop:'16px'});
286
287 // add a report link
288 var add_link = function(det) {
289 var div = $a(me.body1, 'div', '', {marginBottom:'6px'});
290 var span = $a(div, 'span', 'link_type');
291
292 // tag the span
293 span.innerHTML = det.display_name; span.det = det;
294 if(sec_type=='Reports' || sec_type=='Custom Reports') {
295 // Reports
296 // -------
297 span.onclick = function() { loadreport(this.det.doc_name, this.det.display_name); }
298
299 } else {
300 // Tools
301 // -----
302
303 if(det.doc_type=='Pages') {
304 // Page
305 if(det.click_function) {
306 span.onclick = function() { eval(this.det.click_function) }
307 span.click_function = det.click_function;
308 } else {
309 span.onclick = function() { loadpage(this.det.doc_name); }
310 }
311 } else if(det.doc_type=='Setup Forms') {
312 // Doc Browser
313 span.onclick = function() { loaddocbrowser(this.det.doc_name); }
314 } else {
315 // Single
316 span.onclick = function() { loaddoc(this.det.doc_name, this.det.doc_name); }
317 }
318 }
319 }
320
321 // item list
322 for(var i=0; i<me.il.length;i++){
323 if(type_map[me.il[i].doc_type] == sec_type) {
324 add_link(me.il[i]);
325 }
326 }
327 loadpage(label, null, 1);
328 }
329}
330
331
332// ====================================================================
333// Sidebar module item
334// ====================================================================
335
336SidebarModuleItem = function(si, det) {
337 this.det = det;
338 var me= this;
339
340 this.pointer = new MenuPointer(si.items_area, get_doctype_label(det.doc_name));
341 $y(si.items_area, {marginLeft:'32px'})
342 $y($td(this.pointer.tab, 0, 0), {fontSize:'11px'});
343
344 this.pointer.wrapper.onclick = function() {
345 if(me.det.doc_type=='Forms')
346 loaddocbrowser(det.doc_name);
347 else
348 si.show_section(me.det.doc_type);
349 }
350}