blob: c22aee00b25d6c18acbe4521d9cd7353001276d9 [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 }
18 if(in_list(user_roles, 'System Manager')) {
19 var div = $a(page_body.left_sidebar, 'div', 'link_type', {padding:'8px', fontSize:'11px'});
20 $(div).html('[edit]').click(pscript.startup_set_module_order)
21 }
22 nav_obj.observers.push({notify:function(t,dt,dn) { pscript.select_sidebar_menu(t, dt, dn); }});
23
24 // select current
25 var no = nav_obj.ol[nav_obj.ol.length-1];
26 if(no && menu_item_map[decodeURIComponent(no[0])][decodeURIComponent(no[1])])
27 pscript.select_sidebar_menu(decodeURIComponent(no[0]), decodeURIComponent(no[1]));
28 }
29 $c_obj('Home Control', 'get_modules', '', callback);
30}
31
32// ====================================================================
33// Menu observer
34// ====================================================================
35
36cur_menu_pointer = null;
37var menu_item_map = {'Form':{}, 'Page':{}, 'Report':{}, 'List':{}}
38
39pscript.select_sidebar_menu = function(t, dt, dn) {
40 // get menu item
41 if(menu_item_map[t][dt]) {
42 // select
43 menu_item_map[t][dt].select();
44 } else {
45 // none found :-( Unselect
46 if(cur_menu_pointer)
47 cur_menu_pointer.deselect();
48 }
49}
50
51// ====================================================================
52// Menu pointer
53// ====================================================================
54
55var body_background = '#e2e2e2';
56
57MenuPointer = function(parent, label) {
Rushabh Mehta7018b192012-02-02 13:42:28 +053058 var me = this;
Rushabh Mehta865c00a2012-01-24 14:33:21 +053059 this.wrapper = $a(parent, 'div', '', {padding:'0px', cursor:'pointer', margin:'2px 0px'});
60 $br(this.wrapper, '3px');
61
62 this.tab = make_table($a(this.wrapper, 'div'), 1, 2, '100%', ['', '11px'], {height:'22px',
63 verticalAlign:'middle', padding:'0px'}, {borderCollapse:'collapse', tableLayout:'fixed'});
64
65 $y($td(this.tab, 0, 0), {padding:'0px 4px', color:'#444', whiteSpace:'nowrap'});
66
67 // triangle border (?)
68 this.tab.triangle_div = $a($td(this.tab, 0, 1), 'div','', {
69 borderColor: body_background + ' ' + body_background + ' ' + body_background + ' ' + 'transparent',
70 borderWidth:'11px', borderStyle:'solid', height:'0px', width:'0px', marginRight:'-11px'});
71
72 this.label_area = $a($td(this.tab, 0, 0), 'span', '', '', label);
73
74 $(this.wrapper)
75 .hover(
Rushabh Mehta7018b192012-02-02 13:42:28 +053076 function() { if(!me.selected)
77 $bg(this, '#eee'); } ,
78 function() { if(!me.selected)
79 $bg(this, body_background); }
Rushabh Mehta865c00a2012-01-24 14:33:21 +053080 )
81
82 $y($td(this.tab, 0, 0), {borderBottom:'1px solid #ddd'});
83
84}
85
86// ====================================================================
87
88MenuPointer.prototype.select = function(grey) {
Rushabh Mehta7018b192012-02-02 13:42:28 +053089 $y($td(this.tab, 0, 0), {
90 color:'#fff', borderBottom:'0px solid #000'
91 });
92 $(this.wrapper).css('background-color', '#999');
Rushabh Mehta865c00a2012-01-24 14:33:21 +053093 this.selected = 1;
94
95 if(cur_menu_pointer && cur_menu_pointer != this)
96 cur_menu_pointer.deselect();
97
98 cur_menu_pointer = this;
99}
100
101// ====================================================================
102
103MenuPointer.prototype.deselect = function() {
104 $y($td(this.tab, 0, 0), {color:'#444', borderBottom:'1px solid #ddd'});
Rushabh Mehta7018b192012-02-02 13:42:28 +0530105 $(this.wrapper).css('background-color', body_background);
Rushabh Mehta865c00a2012-01-24 14:33:21 +0530106 this.selected = 0;
107}
108
109
110// ====================================================================
111// Sidebar Item
112// ====================================================================
113
114var cur_sidebar_item = null;
115
116SidebarItem = function(det) {
117 var me = this;
118 this.det = det;
119 this.wrapper = $a(page_body.left_sidebar, 'div', '', {marginRight:'12px'});
120
121 this.body = $a(this.wrapper, 'div');
122 this.tab = make_table(this.body, 1, 2, '100%', ['24px', null], {verticalAlign:'middle'}, {tableLayout:'fixed'});
123
124 // icon
125 var ic = $a($td(this.tab, 0, 0), 'div', 'module-icons module-icons-' + det.module_label.toLowerCase(), {marginLeft:'3px', marginBottom:'-2px'});
126
127 // pointer table
128 this.pointer = new MenuPointer($td(this.tab, 0, 1), det.module_label);
129 $y($td(this.pointer.tab, 0, 0), {fontWeight:'bold'});
130
131 // for page type
132 if(det.module_page) {
133 menu_item_map.Page[det.module_page] = this.pointer;
134 }
135
136 // items area
137 this.items_area = $a(this.wrapper, 'div');
138
139 this.body.onclick = function() { me.onclick(); }
140}
141
142// ====================================================================
143
144SidebarItem.prototype.onclick = function() {
145 var me = this;
146
147 if(this.det.module_page) {
148 // page type
149 this.pointer.select();
150
Rushabh Mehta949496c2012-01-25 18:48:46 +0530151 $(me.pointer.label_area).set_working();
152 loadpage(this.det.module_page, function() {
153 $(me.pointer.label_area).done_working();
154 });
Rushabh Mehta865c00a2012-01-24 14:33:21 +0530155
156 } else {
157 // show sub items
158 this.toggle();
159 }
160}
161
162// ====================================================================
163
164SidebarItem.prototype.collapse = function() {
165 $(this.items_area).slideUp();
166 this.is_open = 0;
167 $fg(this.pointer.label_area, '#444')
168}
169
170// ====================================================================
171
172SidebarItem.prototype.toggle = function() {
173 if(this.loading) return;
174
175 if(this.is_open) {
176 this.collapse();
177 } else {
178 if(this.loaded) $(this.items_area).slideDown();
179 else this.show_items();
180 this.is_open = 1;
181 $fg(this.pointer.label_area, '#000')
182 //this.pointer.select(1);
183
184 // close existing open
185 if(cur_sidebar_item && cur_sidebar_item != this) {
186 cur_sidebar_item.collapse();
187 }
188 cur_sidebar_item = this;
189 }
190}
191
192// ====================================================================
193
194SidebarItem.prototype.show_items = function() {
195 this.loading = 1;
196 var me = this;
197
Rushabh Mehta949496c2012-01-25 18:48:46 +0530198 $(this.pointer.label_area).set_working();
Rushabh Mehta865c00a2012-01-24 14:33:21 +0530199 var callback = function(r,rt){
200 me.loaded = 1;
201 me.loading = 0;
202 var smi = null;
203 var has_reports = 0;
204 var has_tools = 0;
205
206 // widget code
Rushabh Mehta949496c2012-01-25 18:48:46 +0530207 $(me.pointer.label_area).done_working();
Rushabh Mehta865c00a2012-01-24 14:33:21 +0530208
209 if(r.message.il) {
210 me.il = r.message.il;
211
212 // forms
213 for(var i=0; i<me.il.length;i++){
214 if(me.il[i].doc_type == 'Forms') {
215 if(in_list(profile.can_read, me.il[i].doc_name)) {
216 var smi = new SidebarModuleItem(me, me.il[i]);
217
218 menu_item_map['Form'][me.il[i].doc_name] = smi.pointer;
219 menu_item_map['List'][me.il[i].doc_name] = smi.pointer;
220 }
221 }
222 if(me.il[i].doc_type=='Reports') has_reports = 1;
Rushabh Mehtaa8ad3902012-01-25 10:37:35 +0530223 if(in_list(['Single DocType', 'Pages', 'Setup Forms'], me.il[i].doc_type))
224 has_tools = 1;
Rushabh Mehta865c00a2012-01-24 14:33:21 +0530225 }
226 // reports
227 if(has_reports) {
228 var smi = new SidebarModuleItem(me, {doc_name:'Reports', doc_type:'Reports'});
229
230 // add to menu-item mapper
231 menu_item_map['Page'][me.det.module_label + ' Reports'] = smi.pointer;
232 }
233
234 // tools
235 if(has_tools) {
236 var smi = new SidebarModuleItem(me, {doc_name:'Tools', doc_type:'Tools'});
237
238 // add to menu-item mapper
239 menu_item_map['Page'][me.det.module_label + ' Tools'] = smi.pointer;
240 }
241
242 // custom reports
243 if(r.message.custom_reports.length) {
244 me.il = add_lists(r.message.il, r.message.custom_reports);
245 var smi = new SidebarModuleItem(me, {doc_name:'Custom Reports', doc_type:'Custom Reports'});
246
247 // add to menu-item mapper
248 menu_item_map['Page'][me.det.module_label + ' Custom Reports'] = smi.pointer;
249 }
250 }
251
252
253 $(me.items_area).slideDown();
254
255 // high light
256 var no = nav_obj.ol[nav_obj.ol.length-1];
257 if(no && menu_item_map[decodeURIComponent(no[0])][decodeURIComponent(no[1])])
258 pscript.select_sidebar_menu(decodeURIComponent(no[0]), decodeURIComponent(no[1]));
259
260 }
261
262 $c_obj('Home Control', 'get_module_details', me.det.name, callback);
263}
264
265// ====================================================================
266// Show Reports
267// ====================================================================
268
269SidebarItem.prototype.show_section = function(sec_type) {
270 var me = this;
271 var label = this.det.module_label + ' ' + sec_type;
Rushabh Mehtaab1148c2012-01-31 18:01:16 +0530272 var type_map = {'Reports':'Reports', 'Custom Reports':'Custom Reports',
273 'Pages':'Tools', 'Single DocType':'Tools', 'Setup Forms':'Tools'}
274
Rushabh Mehta865c00a2012-01-24 14:33:21 +0530275
276 if(page_body.pages[label]) {
277 loadpage(label, null, 1);
278 } else {
Rushabh Mehtaab1148c2012-01-31 18:01:16 +0530279
Rushabh Mehta865c00a2012-01-24 14:33:21 +0530280 // make the reports page
281 var page = page_body.add_page(label);
282 this.wrapper = $a(page,'div','layout_wrapper');
283
284
285 // head
286 this.head = new PageHeader(this.wrapper, label);
287
288 // body
289 this.body1 = $a(this.wrapper, 'div', '', {marginTop:'16px'});
290
291 // add a report link
292 var add_link = function(det) {
293 var div = $a(me.body1, 'div', '', {marginBottom:'6px'});
294 var span = $a(div, 'span', 'link_type');
295
296 // tag the span
297 span.innerHTML = det.display_name; span.det = det;
298 if(sec_type=='Reports' || sec_type=='Custom Reports') {
299 // Reports
300 // -------
301 span.onclick = function() { loadreport(this.det.doc_name, this.det.display_name); }
302
303 } else {
304 // Tools
305 // -----
306
307 if(det.doc_type=='Pages') {
308 // Page
309 if(det.click_function) {
310 span.onclick = function() { eval(this.det.click_function) }
311 span.click_function = det.click_function;
312 } else {
313 span.onclick = function() { loadpage(this.det.doc_name); }
314 }
315 } else if(det.doc_type=='Setup Forms') {
316 // Doc Browser
317 span.onclick = function() { loaddocbrowser(this.det.doc_name); }
318 } else {
319 // Single
320 span.onclick = function() { loaddoc(this.det.doc_name, this.det.doc_name); }
321 }
322 }
323 }
324
325 // item list
326 for(var i=0; i<me.il.length;i++){
327 if(type_map[me.il[i].doc_type] == sec_type) {
328 add_link(me.il[i]);
329 }
330 }
331 loadpage(label, null, 1);
332 }
333}
334
335
336// ====================================================================
337// Sidebar module item
338// ====================================================================
339
340SidebarModuleItem = function(si, det) {
341 this.det = det;
342 var me= this;
343
344 this.pointer = new MenuPointer(si.items_area, get_doctype_label(det.doc_name));
345 $y(si.items_area, {marginLeft:'32px'})
346 $y($td(this.pointer.tab, 0, 0), {fontSize:'11px'});
347
348 this.pointer.wrapper.onclick = function() {
349 if(me.det.doc_type=='Forms')
350 loaddocbrowser(det.doc_name);
351 else
352 si.show_section(me.det.doc_type);
353 }
354}
355
356
357// ====================================================================
358// Drag & Drop order selection
359// ====================================================================
360
361pscript.startup_set_module_order = function() {
362 var update_order= function(ml) {
363 mdict = {};
364 for(var i=0; i<ml.length; i++) {
365 mdict[ml[i][3][3]] = {'module_seq':ml[i][1], 'is_hidden':(ml[i][2] ? 'No' : 'Yes')}
366 }
367 $c_obj('Home Control', 'set_module_order', JSON.stringify(mdict), function(r,rt) { pscript.startup_make_sidebar(); } )
368 }
369
370 var callback = function(r, rt) {
371 var ml = [];
372 for(var i=0; i<r.message.length; i++) {
373 var det = r.message[i];
374 ml.push([det[1], det[2], (det[3]!='No' ? 0 : 1), det[0]]);
375 }
376 new ListSelector('Set Module Sequence', 'Select items and set the order you want them to appear'+
377 '<br><b>Note:</b> <i>These changes will apply to all users!</i>', ml, update_order, 1);
378 }
379 $c_obj('Home Control', 'get_module_order', '', callback)
380
381}
Rushabh Mehtaab1148c2012-01-31 18:01:16 +0530382
383
384