seitime-frappe/js/webpage/loaders.js
2011-06-08 14:24:18 +05:30

274 lines
6.3 KiB
JavaScript

// Load Report
// -------------------------------------------------------------------------------
function loadreport(dt, rep_name, onload, menuitem, reset_report) {
dt = get_label_doctype(dt);
var show_report_builder = function(rb_con) {
if(!_r.rb_con) {
// first load
_r.rb_con = rb_con;
}
_r.rb_con.set_dt(dt, function(rb) {
if(rep_name) {
var t = rb.current_loaded;
rb.load_criteria(rep_name);
// call onload
if(onload)
onload(rb);
// if loaded, then run
if((rb.dt) && (!rb.dt.has_data() || rb.current_loaded!=t))
rb.dt.run();
} else {
// reset if from toolbar
if(reset_report) {
rb.reset_report();
}
}
// show
if(!rb.forbidden) {
page_body.change_to('Report Builder');
nav_obj.open_notify('Report',dt,rep_name);
}
} );
}
new_widget('_r.ReportContainer', show_report_builder, 1);
}
// Load Doc
// -------------------------------------------------------------------------------
var load_doc = loaddoc;
function loaddoc(doctype, name, onload, menuitem, from_archive) {
doctype = get_label_doctype(doctype);
// validate
if(frms['DocType'] && frms['DocType'].opendocs[doctype]) {
msgprint("Cannot open an instance of \"" + doctype + "\" when the DocType is open.");
return;
}
// reverse validation - do not open DocType when an instance is open
if(doctype=='DocType' && frms[name]) {
msgprint("Cannot open DocType \"" + name + "\" when its instance is open.");
return;
}
var show_form = function(f) {
// load the frm container
if(!_f.frm_con && f) {
_f.frm_con = f; //new _f.FrmContainer();
}
// case A - frm not loaded
if(!frms[doctype]) {
_f.add_frm(doctype, show_doc, name, from_archive);
// case B - both loaded
} else if(LocalDB.is_doc_loaded(doctype, name)) {
show_doc();
// case C - only frm loaded
} else {
$c('webnotes.widgets.form.getdoc', {'name':name, 'doctype':doctype, 'user':user, 'from_archive':(from_archive ? 1 : 0) }, show_doc, null, null); // onload
}
}
var show_doc = function(r,rt) {
if(locals[doctype] && locals[doctype][name]) {
page_body.set_status('Done');
var frm = frms[doctype];
// show
frm.refresh(name);
// notify for back button
if(!frm.in_dialog)
nav_obj.open_notify('Form',doctype,name);
if(onload) onload();
} else {
// nothing, go home - there were errors
if(r.exc) { msgprint('There were errors while loading ' + doctype + ' ' + name); }
loadpage('_home');
}
}
//// is libary loaded?
new_widget('_f.FrmContainer', show_form, 1);
}
// New Doc
// -------------------------------------------------------------------------------
function new_doc(doctype, onload, in_dialog, on_save_callback, cdt, cdn, cnic) {
// cnic = caller not in container (caller is a dialog)
doctype = get_label_doctype(doctype);
if(!doctype) {
if(cur_frm)doctype = cur_frm.doctype; else return;
}
var show_doc = function() {
frm = frms[doctype];
if (frm.perm[0][CREATE]==1) {
// load new doc - create the new doc (if single, just load it)
if(frm.meta.issingle) {
var dn = doctype;
LocalDB.set_default_values(locals[doctype][doctype]);
} else
var dn = LocalDB.create(doctype);
// call (optional) onload
if(onload)onload(dn);
if(frm.in_dialog) {
// attach values so that the "new" value is set in the field from which it was set
var fd = _f.frm_dialog;
fd.cdt = cdt;
fd.cdn = cdn;
fd.cnic = cnic;
fd.on_save_callback = on_save_callback;
} else {
nav_obj.open_notify('Form',doctype,dn);
}
// show the form
frm.refresh(dn);
} else {
msgprint('error:Not Allowed To Create '+doctype+'\nContact your Admin for help');
}
}
var show_form = function() {
// load the frm container
if(!_f.frm_con) {
_f.frm_con = new _f.FrmContainer();
}
if(!frms[doctype])
_f.add_frm(doctype, show_doc); // load
else
show_doc(frms[doctype]); // directly
}
new_widget('_f.FrmContainer', show_form, 1);
}
var newdoc = new_doc;
//
// Load Page
//
var pscript={};
var cur_page;
function loadpage(page_name, call_back, no_history) {
if(page_name=='_home')
page_name = home_page;
var fn = function(r,rt) {
page_body.set_status('Done');
if(page_body.pages[page_name]) {
// loaded
var p = page_body.pages[page_name]
// show
page_body.change_to(page_name);
} else {
// new page
var p = render_page(page_name);
if(!p)return;
}
// execute callback
cur_page = page_name;
if(call_back)call_back();
// scroll to top
scroll(0,0);
// update "back"
pscript.update_page_history(page_name, no_history)
// call refresh script
try {
if(pscript['refresh_'+page_name]) pscript['refresh_'+page_name](); // onload
} catch(e) {
submit_error(e);
}
}
if(get_local('Page', page_name) || page_body.pages[page_name])
fn();
else {
args = get_url_dict(); // send everything to the page
args.name = page_name;
$c('webnotes.widgets.page.getpage', args, fn);
}
}
//
// adds to the url (if called using loadpage and not the url) - if i do not do this then it will overwrite
// this is useful when an argument is passed to the page separated by a /
//
pscript.update_page_history = function(page_name, no_history) {
var arg = null;
// get from page
if(window.location.hash) {
var t = nav_obj.get_page(window.location.hash)
} else if(get_url_arg('page')) {
var t = nav_obj.get_page(get_url_arg('page'))
} else {
return;
}
if(t[1]==page_name) arg = t[2];
nav_obj.open_notify('Page', page_name, arg, no_history);
}
//
// Load Script
//
function loadscript(src, call_back) {
set_loading();
var script = $a('head','script');
script.type = 'text/javascript';
script.src = src;
script.onload = function() {
if(call_back)call_back(); hide_loading();
}
// IE 6 & 7
script.onreadystatechange = function() {
if (this.readyState == 'complete' || this.readyState == 'loaded') {
hide_loading();
call_back();
}
}
}
// Load DocBrowser
// -------------------------------------------------------------------------------
var doc_browser_page;
function loaddocbrowser(dt, label, fields) {
dt = get_label_doctype(dt);
if(!doc_browser_page)
doc_browser_page = new ItemBrowserPage();
doc_browser_page.show(dt, label, fields);
nav_obj.open_notify('List',dt,'');
}