/* 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