/* ItemBrowserPage + this.my_page + this.page_layout (wn.PageLayout) + this.wrapper + this.body + ItemBrowser + this.wrapper + this.wtab + body + has_results + head + toolbar_area + no_result + loading_div + sidebar */ ItemBrowserPage = function() { this.lists = {}; this.dt_details = {}; this.cur_list = null; this.my_page = page_body.add_page('ItemBrowser'); this.wrapper = $a(this.my_page,'div'); } // ------------------------------------------------- ItemBrowserPage.prototype.show = function(dt, label, field_list) { var me = this; if(this.cur_list && this.cur_list.dt != dt) $dh(this.cur_list.layout.wrapper); if(!me.lists[dt]) { me.lists[dt] = new ItemBrowser(me.wrapper, dt, label, field_list); } me.cur_list = me.lists[dt]; me.cur_list.show(); page_body.change_to('ItemBrowser'); } // ------------------------------------------------- ItemBrowser = function(parent, dt, label, field_list) { var me = this; this.label = label ? label : dt; this.dt = dt; this.field_list = field_list; this.tag_filter_dict = {}; this.items = []; this.cscript = {}; // dictionary for custom scripting // heading var l = get_doctype_label(dt); l = (l.toLowerCase().substr(-4) == 'list') ? l : (l + ' List') // make the layout this.layout = new wn.PageLayout({ parent: parent, main_width: '75%', sidebar_width: '25%', heading: l }) this.layout.no_records = $a($td(this.layout.wtab,0,0), 'div'); // header (?) this.desc_area = $a(this.layout.head, 'div', 'field_description', ''); $dh(this.layout.page_head.separator); // areas this.no_result_area = $a(this.layout.no_records, 'div','layout_wrapper',{fontSize:'14px', textAlign:'center', padding:'200px 0px'}); // loading... this.layout.loading = $a($td(this.layout.wtab,0,0), 'div','layout_wrapper',{padding:'200px 0px', textAlign:'center', fontSize:'14px', color:'#444', display:'none'}); this.layout.loading.innerHTML = 'Loading'; // setup toolbar this.setup_toolbar(); // setup list and sidebar this.setup_sidebar(); } // one of "loading", "no_result", "main" ItemBrowser.prototype.show_area = function(area) { $ds(this.layout[area]); var al = ['loading','no_records','main']; for(var a in al) { if(al[a]!=area) $dh(this.layout[al[a]]); } } ItemBrowser.prototype.setup_sidebar = function() { var me = this; // table $y(this.layout.sidebar_area, {paddingTop:'53px'}); // sidebar this.sidebar = new wn.widgets.PageSidebar(this.layout.sidebar_area, { sections: [ { title: 'Top Tags', render: function(body) { new wn.widgets.TagCloud(body, me.dt, function(tag) { me.set_tag_filter(tag) }); } } ] }); } // setup the toolbar and archiving and deleteing functionality ItemBrowser.prototype.setup_toolbar = function() { var me = this; var parent = this.layout.toolbar_area // toolbar this.main_toolbar = $a(parent, 'div', '', {padding: '3px', backgroundColor:'#EEE'}); $br(this.main_toolbar, '3px'); $gr(this.main_toolbar, '#DDD', '#CCC'); this.sub_toolbar = $a(parent, 'div', '', {marginBottom:'7px', padding: '3px', textAlign:'right', fontSize:'11px', color:'#444'}); // archives label this.archives_label = $a(parent, 'div', 'help_box_big',{display:'none'},'Showing from Archives'); var span = $a(this.archives_label, 'span', 'link_type', {marginLeft:'8px'}, 'Show Active'); span.onclick = function() { me.show_archives.checked = 0; me.show_archives.onclick(); } this.trend_area = $a(parent, 'div', '', {marginBottom:'16px', padding: '4px', backgroundColor:'#EEF', border: '1px solid #CCF', display:'none'}); $br(this.trend_area, '5px'); // tag filters this.tag_filters = $a(parent, 'div', '', {marginBottom:'8px', display:'none', padding:'6px 8px 8px 8px', backgroundColor:'#FFD'}); var span = $a(this.tag_filters,'span','',{marginRight:'4px',color:'#444'}); span.innerHTML = 'Showing for:'; this.tag_area = $a(this.tag_filters, 'span'); // select all area var div = $a(parent, 'div', '', {margin:'3px 5px'}); var chk = $a_input(div, 'checkbox'); var lab = $a(div, 'span', '', {marginLeft:'9px'}, 'Select All'); chk.onclick = function() { for(var i=0; imaxval) maxval = trend[key] }; // head var div = $a(this.trend_area, 'div','',{marginLeft:'32px'}); div.innerHTML = 'Activity in last 30 days'; var wrapper_tab = make_table(this.trend_area, 1, 2, '100%', ['20px',null], {padding:'2px 4px',fontSize:'10px',color:'#888'}); // y-label var ylab_tab = make_table($td(wrapper_tab,0,0),2,1,'100%',['100%'],{verticalAlign:'top', textAlign:'right',height:'24px'}); $td(ylab_tab,0,0).innerHTML = maxval; $y($td(ylab_tab,1,0),{verticalAlign:'bottom'}); $td(ylab_tab,1,0).innerHTML = '0'; // infogrid var tab = make_table($td(wrapper_tab,0,1), 1, 30, '100%', [], {width:10/3 + '%', border:'1px solid #DDD', height:'40px', verticalAlign:'bottom', textAlign:'center', padding:'2px', backgroundColor:'#FFF'}); // labels var labtab = make_table($td(wrapper_tab,0,1), 1, 6, '100%', [], {width:100/6 + '%', border:'1px solid #EEF', height:'16px',color:'#888',textAlign:'right',fontSize:'10px'}); for(var i=0; i<30; i++) { var div = $a($td(tab,0,29-i),'div','',{backgroundColor:'#4AC', width:'50%', margin:'auto', height:(trend[i+''] ? (trend[i+'']*100/maxval) : 0) + '%'}); div.setAttribute('title', trend[i] + ' records'); // date string if(i % 5 == 0) { $td(labtab,0,5-(i/5)).innerHTML = dateutil.obj_to_user(dateutil.add_days(new Date(), -i)); $y($td(tab,0,i-1),{'backgroundColor':'#EEE'}); } } $td(labtab,0,5).innerHTML = 'Today'; } // ------------------------------------------------- ItemBrowser.prototype.show_no_result = function() { this.show_area('no_records'); this.no_result_area.innerHTML = repl('No %(dt)s found. Click here to create your first %(dt)s!', {dt:get_doctype_label(this.dt)}); set_title(get_doctype_label(this.label)); } // ------------------------------------------------- ItemBrowser.prototype.make_new = function(dt, label, field_list) { // make the list this.make_the_list(dt, this.layout.body); } // ------------------------------------------------- ItemBrowser.prototype.add_search_conditions = function(q) { if(this.search_input.value) { q.conds += ' AND ' + q.table + '.name LIKE "%'+ this.search_input.value +'%"'; } } // ------------------------------------------------- ItemBrowser.prototype.add_tag_conditions = function(q) { var me = this; if(keys(me.tag_filter_dict).length) { var cl = []; for(var key in me.tag_filter_dict) { var val = key; var op = '='; var fn = me.tag_filter_dict[key].fieldname; fn = fn ? fn : '_user_tags'; // conditions based on user tags if(fn=='docstatus')val=(key=='Draft'?'0':'1'); else if(fn=='_user_tags'){ val='%,'+key + '%'; op=' LIKE '; } cl.push(q.table + '.`' + fn + '`'+op+'"' + val + '"'); } if(cl) q.conds += ' AND ' + cl.join(' AND ') + ' '; } } // ------------------------------------------------- ItemBrowser.prototype.make_the_list = function(dt, wrapper) { var me = this; var lst = new Listing(dt, 1); lst.dt = dt; lst.cl = this.dt_details.columns; lst.opts = { cell_style : {padding:'0px 2px'}, alt_cell_style : {backgroundColor:'#FFFFFF'}, hide_export : 1, hide_print : 1, hide_rec_label: 0, show_calc: 0, show_empty_tab : 0, show_no_records_label: 1, show_new: 0, show_report: 1, no_border: 1, append_records: 1, formatted: 1 } if(user_defaults.hide_report_builder) lst.opts.show_report = 0; // build th query lst.is_std_query = 1; lst.get_query = function() { q = {}; var fl = []; q.table = repl('`%(prefix)s%(dt)s`', {prefix:(me.show_archives.checked ? 'arc' : 'tab'), dt:this.dt}); // columns for(var i=0;i='); lst.add_filter('To '+label, ftype, fopts, dt, fname, '<='); } else { lst.add_filter(label, ftype, fopts, dt, fname, (in_list(['Data','Text','Link'], ftype) ? 'LIKE' : '')); } } $dh(lst.filter_wrapper); // default sort lst.set_default_sort('modified', 'DESC'); this.lst = lst; lst.run(); } // ------------------------------------------------- ItemBrowser.prototype.run = function() { this.items = []; this.select_all.checked = false; this.lst.run(); } // ------------------------------------------------- ItemBrowser.prototype.get_checked = function() { var il = []; for(var i=0; i