cleaned up handlerpy, build and made ajax crawler friendly
This commit is contained in:
parent
9ba0bff606
commit
5d2c362963
23 changed files with 526 additions and 690 deletions
15
conf/index.html
Normal file
15
conf/index.html
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>ERPNext</title>
|
||||
{{ ajax_meta_tag }}
|
||||
<meta name="author" content="">
|
||||
<script type="text/javascript">
|
||||
{{ bootinfo }};
|
||||
|
||||
{{ corejs }}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
{{ body_html }}
|
||||
</body>
|
||||
|
|
@ -1,8 +1,7 @@
|
|||
|
||||
/*
|
||||
* lib/css/legacy/body.css
|
||||
*/
|
||||
html {
|
||||
* lib/css/legacy/body.css
|
||||
*/html {
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
|
@ -179,9 +178,8 @@ div.std-footer-item {
|
|||
}
|
||||
|
||||
/*
|
||||
* lib/css/legacy/menus.css
|
||||
*/
|
||||
|
||||
* lib/css/legacy/menus.css
|
||||
*/
|
||||
/******** Menus - menu.js ************/
|
||||
|
||||
ul.menu_toolbar {
|
||||
|
|
@ -233,9 +231,8 @@ div.dd_item {
|
|||
}
|
||||
div.dd_item_mo { background-color: #FE8; }
|
||||
/*
|
||||
* lib/css/legacy/messages.css
|
||||
*/
|
||||
|
||||
* lib/css/legacy/messages.css
|
||||
*/
|
||||
/* FLOATING MESSAGE */
|
||||
|
||||
.btn-img { cursor: pointer; }
|
||||
|
|
@ -284,9 +281,8 @@ div.notice {
|
|||
font-size: 14px;
|
||||
}
|
||||
/*
|
||||
* lib/css/legacy/forms.css
|
||||
*/
|
||||
/* FORMS */
|
||||
* lib/css/legacy/forms.css
|
||||
*//* FORMS */
|
||||
|
||||
|
||||
div.frm_print_wrapper {
|
||||
|
|
@ -508,9 +504,8 @@ div.sidebar-comment-info {
|
|||
color: #777;
|
||||
}
|
||||
/*
|
||||
* lib/css/legacy/grid.css
|
||||
*/
|
||||
|
||||
* lib/css/legacy/grid.css
|
||||
*/
|
||||
|
||||
/* Grid */
|
||||
|
||||
|
|
@ -633,9 +628,8 @@ div.sidebar-comment-info {
|
|||
|
||||
.gridDivSelected option { border: 0px; }
|
||||
/*
|
||||
* lib/css/legacy/listing.css
|
||||
*/
|
||||
/* listing 2.0 */
|
||||
* lib/css/legacy/listing.css
|
||||
*//* listing 2.0 */
|
||||
|
||||
div.listing-more {
|
||||
margin: 7px 0px 17px 0px;
|
||||
|
|
@ -693,9 +687,8 @@ div.srs_filter_area td {
|
|||
|
||||
|
||||
/*
|
||||
* lib/css/legacy/report.css
|
||||
*/
|
||||
|
||||
* lib/css/legacy/report.css
|
||||
*/
|
||||
/* Reports */
|
||||
|
||||
div.report_grid_area {
|
||||
|
|
@ -876,9 +869,8 @@ table.builder_tab td {
|
|||
padding: 2px;
|
||||
}
|
||||
/*
|
||||
* lib/css/legacy/calendar.css
|
||||
*/
|
||||
/**** CALENDAR ****/
|
||||
* lib/css/legacy/calendar.css
|
||||
*//**** CALENDAR ****/
|
||||
|
||||
.caldiv {
|
||||
position:absolute;
|
||||
|
|
@ -1051,9 +1043,8 @@ div.cal_event_hover {
|
|||
}
|
||||
|
||||
/*
|
||||
* lib/css/legacy/autosuggest.css
|
||||
*/
|
||||
/*
|
||||
* lib/css/legacy/autosuggest.css
|
||||
*//*
|
||||
================================================
|
||||
autosuggest, inquisitor style
|
||||
================================================
|
||||
|
|
@ -1146,9 +1137,8 @@ div.autosuggest ul em
|
|||
}
|
||||
|
||||
/*
|
||||
* lib/css/legacy/dialog.css
|
||||
*/
|
||||
/***** Dialogs *******/
|
||||
* lib/css/legacy/dialog.css
|
||||
*//***** Dialogs *******/
|
||||
|
||||
div.dialog_wrapper {
|
||||
position: absolute;
|
||||
|
|
@ -1227,9 +1217,8 @@ div.dialog_row table td textarea {
|
|||
}
|
||||
|
||||
/*
|
||||
* lib/css/legacy/wntoolbar.css
|
||||
*/
|
||||
|
||||
* lib/css/legacy/wntoolbar.css
|
||||
*/
|
||||
/* Recent */
|
||||
|
||||
div.status_flag {
|
||||
|
|
@ -1256,9 +1245,8 @@ div.status_flag {
|
|||
.sprite-search { background-position: 0 -330px; }
|
||||
.sprite-tools { background-position: 0 -396px; }
|
||||
/*
|
||||
* lib/css/legacy/tabs.css
|
||||
*/
|
||||
|
||||
* lib/css/legacy/tabs.css
|
||||
*/
|
||||
/******* TABS ********/
|
||||
|
||||
div.box_label_wrapper {
|
||||
|
|
@ -1318,9 +1306,8 @@ ul.box_tabs li.box_tab_selected a {
|
|||
}
|
||||
|
||||
/*
|
||||
* lib/css/legacy/bw-icons.css
|
||||
*/
|
||||
|
||||
* lib/css/legacy/bw-icons.css
|
||||
*/
|
||||
/** general icons **/
|
||||
|
||||
.wn-icon { background: url('lib/images/icons/icons.png'); width: 16px; height: 16px; cursor: pointer; }
|
||||
|
|
@ -1572,9 +1559,8 @@ ul.box_tabs li.box_tab_selected a {
|
|||
|
||||
|
||||
/*
|
||||
* lib/css/legacy/sidebar.css
|
||||
*/
|
||||
div.psidebar-wrapper {
|
||||
* lib/css/legacy/sidebar.css
|
||||
*/div.psidebar-wrapper {
|
||||
margin: 0px 8px;
|
||||
}
|
||||
|
||||
|
|
@ -1624,9 +1610,8 @@ div.follower-list {
|
|||
font-size: 11px;
|
||||
}
|
||||
/*
|
||||
* lib/css/legacy/bootstrap-buttons.css
|
||||
*/
|
||||
.btn.danger,
|
||||
* lib/css/legacy/bootstrap-buttons.css
|
||||
*/.btn.danger,
|
||||
.alert-message.danger,
|
||||
.btn.danger:hover,
|
||||
.alert-message.danger:hover,
|
||||
|
|
|
|||
54
js/core.min.js
vendored
54
js/core.min.js
vendored
|
|
@ -1,53 +1,46 @@
|
|||
|
||||
/*
|
||||
* lib/js/wn/class.js
|
||||
*/
|
||||
|
||||
* lib/js/wn/class.js
|
||||
*/
|
||||
(function(){var initializing=false,fnTest=/xyz/.test(function(){xyz;})?/\b_super\b/:/.*/;this.Class=function(){};Class.extend=function(prop){var _super=this.prototype;initializing=true;var prototype=new this();initializing=false;for(var name in prop){prototype[name]=typeof prop[name]=="function"&&typeof _super[name]=="function"&&fnTest.test(prop[name])?(function(name,fn){return function(){var tmp=this._super;this._super=_super[name];var ret=fn.apply(this,arguments);this._super=tmp;return ret;};})(name,prop[name]):prop[name];}
|
||||
function Class(){if(!initializing&&this.init)
|
||||
this.init.apply(this,arguments);}
|
||||
Class.prototype=prototype;Class.prototype.constructor=Class;Class.extend=arguments.callee;return Class;};})();
|
||||
/*
|
||||
* lib/js/wn/provide.js
|
||||
*/
|
||||
|
||||
wn={}
|
||||
* lib/js/wn/provide.js
|
||||
*/
|
||||
if(!window.wn)wn={}
|
||||
wn.provide=function(namespace){var nsl=namespace.split('.');var l=nsl.length;var parent=window;for(var i=0;i<l;i++){var n=nsl[i];if(!parent[n]){parent[n]={}}
|
||||
parent=parent[n];}}
|
||||
wn.provide('wn.settings');wn.provide('wn.ui');
|
||||
/*
|
||||
* lib/js/wn/xmlhttp.js
|
||||
*/
|
||||
|
||||
* lib/js/wn/xmlhttp.js
|
||||
*/
|
||||
wn.xmlhttp={request:function(){if(window.XMLHttpRequest)
|
||||
return new XMLHttpRequest();else if(window.ActiveXObject)
|
||||
return new ActiveXObject("MsXml2.XmlHttp");},complete:function(req,callback,url){if(req.status==200||req.status==304){callback(req.responseText);}else{alert(url+' request error: '+req.statusText+' ('+req.status+')');}},get:function(url,callback,args,async){if(async===null)async=true;var req=wn.xmlhttp.request();req.onreadystatechange=function(){if(req.readyState==4){wn.xmlhttp.complete(req,callback,url)}}
|
||||
var sep=((args&&args.indexOf('?'))==-1)?'?':'&';var u=args?(url+sep+args):url;req.open('GET',u,async);req.send(null);if(!async){wn.xmlhttp.complete(req,callback,url)}}}
|
||||
/*
|
||||
* lib/js/wn/versions.js
|
||||
*/
|
||||
|
||||
wn.versions={check:function(){if(localStorage){if(window._version_number==-1||parseInt(localStorage._version_number)!=parseInt(window._version_number)){localStorage.clear();}
|
||||
* lib/js/wn/versions.js
|
||||
*/
|
||||
wn.versions={check:function(){if(localStorage){if(window._version_number==-1||parseInt(localStorage._version_number)!=parseInt(window._version_number)){localStorage.clear();console.log("Cache cleared - version: "+_version_number)}
|
||||
localStorage.setItem('_version_number',window._version_number);}}}
|
||||
/*
|
||||
* lib/js/wn/assets.js
|
||||
*/
|
||||
|
||||
* lib/js/wn/assets.js
|
||||
*/
|
||||
wn.assets={executed_:{},exists:function(src){if('localStorage'in window&&localStorage.getItem(src))
|
||||
return true},add:function(src,txt){if('localStorage'in window){localStorage.setItem(src,txt);}},get:function(src){return localStorage.getItem(src);},extn:function(src){if(src.indexOf('?')!=-1){src=src.split('?').slice(-1)[0];}
|
||||
return src.split('.').slice(-1)[0];},load:function(src){var t=src;wn.xmlhttp.get(t,function(txt){wn.assets.add(src,txt);},'q='+Math.floor(Math.random()*1000),false)},execute:function(src){if(!wn.assets.exists(src)){wn.assets.load(src);}
|
||||
var type=wn.assets.extn(src);if(wn.assets.handler[type]){wn.assets.handler[type](wn.assets.get(src),src);wn.assets.executed_[src]=1;}},handler:{js:function(txt,src){wn.dom.eval(txt);},css:function(txt,src){var se=document.createElement('style');se.type="text/css";if(se.styleSheet){se.styleSheet.cssText=txt;}else{se.appendChild(document.createTextNode(txt));}
|
||||
document.getElementsByTagName('head')[0].appendChild(se);},cgi:function(txt,src){wn.dom.eval(txt)}}}
|
||||
/*
|
||||
* lib/js/wn/require.js
|
||||
*/
|
||||
|
||||
* lib/js/wn/require.js
|
||||
*/
|
||||
wn.require=function(items){if(typeof items==="string"){items=[items];}
|
||||
var l=items.length;for(var i=0;i<l;i++){var src=items[i];if(!(src in wn.assets.executed_)){wn.assets.execute(src);}}}
|
||||
/*
|
||||
* lib/js/wn/dom.js
|
||||
*/
|
||||
|
||||
* lib/js/wn/dom.js
|
||||
*/
|
||||
wn.provide('wn.dom');wn.dom.by_id=function(id){return document.getElementById(id);}
|
||||
wn.dom.eval=function(txt){var el=document.createElement('script');el.appendChild(document.createTextNode(txt));document.getElementsByTagName('head')[0].appendChild(el);}
|
||||
wn.dom.add=function(parent,newtag,className,cs,innerHTML,onclick){if(parent&&parent.substr)parent=wn.dom.by_id(parent);var c=document.createElement(newtag);if(parent)
|
||||
|
|
@ -60,17 +53,15 @@ wn.dom.css=function(ele,s){if(ele&&s){for(var i in s)ele.style[i]=s[i];};return
|
|||
wn.dom.hide=function(ele){ele.style.display='none';}
|
||||
wn.dom.show=function(ele,value){if(!value)value='block';ele.style.display=value;}
|
||||
/*
|
||||
* lib/js/wn/page.js
|
||||
*/
|
||||
|
||||
* lib/js/wn/page.js
|
||||
*/
|
||||
wn.page={set:function(src){var new_selection=$('.inner div.content[_src="'+src+'"]');if(!new_selection.length){wn.assets.execute(src);new_selection=$('.inner div.content[_src="'+src+'"]');}
|
||||
$('.inner .current_page').removeClass('current_page');new_selection.addClass('current_page');var title=$('nav ul li a[href*="'+src+'"]').attr('title')||'No Title'
|
||||
state=window.location.hash;if(state!=src){window.location.hash=state;}
|
||||
else{document.title=title;}}}
|
||||
/*
|
||||
* lib/js/lib/json2.js
|
||||
*/
|
||||
|
||||
* lib/js/lib/json2.js
|
||||
*/
|
||||
var JSON;if(!JSON){JSON={};}
|
||||
(function(){"use strict";function f(n){return n<10?'0'+n:n;}
|
||||
if(typeof Date.prototype.toJSON!=='function'){Date.prototype.toJSON=function(key){return isFinite(this.valueOf())?this.getUTCFullYear()+'-'+
|
||||
|
|
@ -97,7 +88,6 @@ text=String(text);cx.lastIndex=0;if(cx.test(text)){text=text.replace(cx,function
|
|||
if(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,'@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']').replace(/(?:^|:|,)(?:\s*\[)+/g,''))){j=eval('('+text+')');return typeof reviver==='function'?walk({'':j},''):j;}
|
||||
throw new SyntaxError('JSON.parse');};}}());
|
||||
/*
|
||||
* lib/js/core.js
|
||||
*/
|
||||
|
||||
* lib/js/core.js
|
||||
*/
|
||||
wn.versions.check();wn.require("lib/js/lib/jquery.min.js");wn.require("lib/js/lib/history/history.min.js");$(document).bind('ready',function(){var base=window.location.href.split('#')[0];$.each($('a[softlink!="false"]'),function(i,v){if(v.href.substr(0,base.length)==base){var path=(v.href.substr(base.length));if(path.substr(0,1)!='#'){v.href=base+'#'+path;}}});if(!wn.settings.no_history&&window.location.hash){wn.page.set(window.location.hash.substr(1));}});
|
||||
|
|
@ -97,12 +97,13 @@ function startup() {
|
|||
}
|
||||
page_body.ready();
|
||||
}
|
||||
if(_startup_data && keys(_startup_data).length && _startup_data.docs) {
|
||||
LocalDB.sync(_startup_data.docs);
|
||||
callback(_startup_data, '');
|
||||
|
||||
// for debug
|
||||
if(_startup_data.server_messages) msgprint(_startup_data.server_messages);
|
||||
if(wn.boot) {
|
||||
LocalDB.sync(wn.boot.docs);
|
||||
callback(wn.boot, '');
|
||||
if(wn.boot.error_messages)
|
||||
console.log(wn.boot.error_messages)
|
||||
if(wn.boot.server_messages)
|
||||
msgprint(wn.boot.server_messages);
|
||||
} else {
|
||||
if($i('startup_div'))
|
||||
$c('startup',{},callback,null,1);
|
||||
|
|
|
|||
|
|
@ -1,8 +1,7 @@
|
|||
|
||||
/*
|
||||
* lib/js/legacy/widgets/form/form_container.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/widgets/form/form_container.js
|
||||
*/
|
||||
_f.FrmContainer=function(){this.wrapper=page_body.add_page("Forms",function(){},function(){});this.last_displayed=null;$dh(this.wrapper);this.body=$a(this.wrapper,'div','frm_container');_f.frm_dialog=new _f.FrmDialog();}
|
||||
_f.frm_dialog=null;_f.calling_doc_stack=[];_f.temp_access={};_f.FrmDialog=function(){var me=this;this.last_displayed=null;var d=new Dialog(640,null,'Edit Row');this.body=$a(d.body,'div','dialog_frm');$y(d.body,{backgroundColor:'#EEE'});d.done_btn_area=$a(d.body,'div','',{margin:'8px'});me.on_complete=function(){if(me.table_form){me.dialog.hide();}else{var callback=function(r){var dn=cur_frm.docname;if(!r.exc){me.dialog.hide();}
|
||||
if(me.on_save_callback)
|
||||
|
|
@ -24,9 +23,8 @@ var f=new _f.Frm(doctype,parent);f.in_dialog=in_dialog;if(onload)onload(r,rt);}
|
|||
var is_new=0;if(opt_name&&locals[doctype]&&locals[doctype][opt_name]&&locals[doctype][opt_name].__islocal){is_new=1;}
|
||||
if(opt_name&&!is_new){var args={'name':opt_name,'doctype':doctype,'getdoctype':1,'user':user};if(get_url_arg('akey'))args['akey']=get_url_arg('akey');if(from_archive)args['from_archive']=1;$c('webnotes.widgets.form.load.getdoc',args,callback);}else{$c('webnotes.widgets.form.load.getdoctype',args={'doctype':doctype},callback);}}
|
||||
/*
|
||||
* lib/js/legacy/widgets/form/form_header.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/widgets/form/form_header.js
|
||||
*/
|
||||
_f.FrmHeader=function(parent,frm){var me=this;this.wrapper=$a(parent,'div');if(frm.meta.in_dialog)$y(this.wrapper,{marginLeft:'8px',marginRight:'8px'});this.page_head=new PageHeader(this.wrapper);this.dt_area=$a(this.page_head.main_head,'h1','',{marginRight:'8px',display:'inline'})
|
||||
var div=$a(null,'div','',{marginBottom:'4px'});this.page_head.lhs.insertBefore(div,this.page_head.sub_head);this.dn_area=$a(div,'span','',{fontSize:'14px',fontWeight:'normal',marginRight:'8px'})
|
||||
this.status_area=$a(div,'span','',{marginRight:'8px',marginBottom:'2px',cursor:'pointer',textShadow:'none'})
|
||||
|
|
@ -57,9 +55,8 @@ _f.FrmHeader.prototype.set_save_submit_color=function(doc){var save_btn=this.pag
|
|||
_f.FrmHeader.prototype.refresh_labels=function(f){var ph=this.page_head;var me=this;this.dt_area.innerHTML=get_doctype_label(f.doctype);this.dn_area.innerHTML='';if(!f.meta.issingle)
|
||||
this.dn_area.innerHTML=f.docname;var doc=locals[f.doctype][f.docname];var sl=this.get_status_tags(doc,f);this.set_save_submit_color(doc);var t=this.status_area;t.innerHTML='';t.appendChild(sl[0]);if(sl[1])t.appendChild(sl[1]);this.timestamp_area.innerHTML=me.get_timestamp(doc);}
|
||||
/*
|
||||
* lib/js/legacy/widgets/form/form.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/widgets/form/form.js
|
||||
*/
|
||||
wn.provide('_f');_f.edit_record=function(dt,dn){d=_f.frm_dialog;var show_dialog=function(){var f=frms[dt];if(f.meta.istable){f.parent_doctype=cur_frm.doctype;f.parent_docname=cur_frm.docname;}
|
||||
d.cur_frm=f;d.dn=dn;d.table_form=f.meta.istable;f.refresh(dn);}
|
||||
if(!frms[dt]){_f.add_frm(dt,show_dialog,null);}else{show_dialog();}}
|
||||
|
|
@ -209,9 +206,8 @@ if(frm&&frm==cur_frm){frm.set_heading();}}}
|
|||
_f.Frm.prototype.show_comments=function(){if(!cur_frm.comments){cur_frm.comments=new Dialog(540,400,'Comments');cur_frm.comments.comment_body=$a(cur_frm.comments.body,'div','dialog_frm');$y(cur_frm.comments.body,{backgroundColor:'#EEE'});cur_frm.comments.list=new CommentList(cur_frm.comments.comment_body);}
|
||||
cur_frm.comments.list.dt=cur_frm.doctype;cur_frm.comments.list.dn=cur_frm.docname;cur_frm.comments.show();cur_frm.comments.list.run();}
|
||||
/*
|
||||
* lib/js/legacy/widgets/form/form_fields.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/widgets/form/form_fields.js
|
||||
*/
|
||||
_f.ColumnBreak=function(){this.set_input=function(){};}
|
||||
_f.ColumnBreak.prototype.make_body=function(){if((!this.perm[this.df.permlevel])||(!this.perm[this.df.permlevel][READ])||this.df.hidden){return;}
|
||||
this.cell=this.frm.layout.addcell(this.df.width);$y(this.cell.wrapper,{padding:'8px'});_f.cur_col_break_width=this.df.width;var fn=this.df.fieldname?this.df.fieldname:this.df.label;if(this.df&&this.df.label){this.label=$a(this.cell.wrapper,'h3','','',this.df.label);}}
|
||||
|
|
@ -269,9 +265,8 @@ _f.CodeField.prototype.init_editor=function(){var me=this;this.editor=tinymce.ge
|
|||
_f.CodeField.prototype.set_disp=function(val){$y(this.disp_area,{width:'90%'})
|
||||
if(this.df.fieldtype=='Text Editor'){this.disp_area.innerHTML=val;}else{this.disp_area.innerHTML='<textarea class="code_text" readonly=1>'+val+'</textarea>';}}
|
||||
/*
|
||||
* lib/js/legacy/widgets/form/grid.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/widgets/form/grid.js
|
||||
*/
|
||||
_f.cur_grid_cell=null;_f.Grid=function(parent){}
|
||||
_f.Grid.prototype.init=function(parent,row_height){this.col_idx_by_name={}
|
||||
this.alt_row_bg='#F2F2FF';this.row_height=row_height;if(!row_height)this.row_height='26px';this.make_ui(parent);this.insert_column('','','Int','Sr','50px','',[1,0,0]);if(this.oninit)this.oninit();keypress_observers.push(this);var me=this;$(cur_frm.wrapper).bind('render_complete',function(){me.set_ht();});}
|
||||
|
|
@ -328,9 +323,8 @@ _f.Grid.prototype.set_ht=function(){var max_ht=cint(0.37*screen.width);var ht=$(
|
|||
ht=100;if(ht>max_ht)ht=max_ht;ht+=4;$y(this.wrapper,{height:ht+'px'});}
|
||||
_f.Grid.prototype.refresh_row=function(ridx,docname){var row=this.tab.rows[ridx];row.docname=docname;row.is_newrow=false;for(var cidx=0;cidx<row.cells.length;cidx++){this.set_cell_value(row.cells[cidx]);}}
|
||||
/*
|
||||
* lib/js/legacy/widgets/form/form_grid.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/widgets/form/form_grid.js
|
||||
*/
|
||||
_f.FormGrid=function(field){this.field=field;this.doctype=field.df.options;if(!this.doctype){show_alert('No Options for table '+field.df.label);}
|
||||
this.col_break_width=cint(this.field.col_break_width);if(!this.col_break_width)this.col_break_width=100;$y(field.parent,{marginTop:'8px'});this.init(field.parent,field.df.width);this.setup();}
|
||||
_f.FormGrid.prototype=new _f.Grid();_f.FormGrid.prototype.setup=function(){this.make_columns();}
|
||||
|
|
@ -366,9 +360,8 @@ len=len-1;if(r.rowIndex<(len-1))
|
|||
var swap_row=this.tab.rows[r.rowIndex+1];}
|
||||
if(swap_row){var cidx=_f.cur_grid_cell.cellIndex;this.cell_deselect();var aidx=locals[this.doctype][r.docname].idx;locals[this.doctype][r.docname].idx=locals[this.doctype][swap_row.docname].idx;locals[this.doctype][swap_row.docname].idx=aidx;var adocname=swap_row.docname;this.refresh_row(swap_row.rowIndex,r.docname);this.refresh_row(r.rowIndex,adocname);this.cell_select(this.tab.rows[swap_row.rowIndex].cells[cidx]);this.set_unsaved();}}
|
||||
/*
|
||||
* lib/js/legacy/widgets/form/print_format.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/widgets/form/print_format.js
|
||||
*/
|
||||
$.extend(_p,{show_dialog:function(){if(!_p.dialog){_p.make_dialog();}
|
||||
_p.dialog.show();},make_dialog:function(){var d=new Dialog(360,140,'Print Formats',[['HTML','Select'],['Check','No Letterhead'],['HTML','Buttons']]);$btn(d.widgets.Buttons,'Print',function(){_p.build(sel_val(cur_frm.print_sel),_p.go,d.widgets['No Letterhead'].checked);},{cssFloat:'right',marginBottom:'16px',marginLeft:'7px'},'green');$btn(d.widgets.Buttons,'Preview',function(){_p.build(sel_val(cur_frm.print_sel),_p.preview,d.widgets['No Letterhead'].checked);},{cssFloat:'right',marginBottom:'16px'},'');d.onshow=function(){var c=_p.dialog.widgets['Select'];if(c.cur_sel&&c.cur_sel.parentNode==c){c.removeChild(c.cur_sel);}
|
||||
c.appendChild(cur_frm.print_sel);c.cur_sel=cur_frm.print_sel;}
|
||||
|
|
@ -450,9 +443,8 @@ for(var c=me.flist.indexOf('SR')+1;c<me.flist.length;c++){var cell=row.insertCel
|
|||
$s(cell,data[r][me.flist[c].fieldname],me.flist[c].fieldtype);if(in_list(['Currency','Float'],me.flist[c].fieldtype)){cell.style.textAlign='right';}}}}}});if(!this.data.length){return document.createElement('div');}
|
||||
this.prepare_col_heads(this.flist);var table=me.make_print_table(this.flist);this.table_list=[table.wrapper];this.populate_table(table,this.data);return(me.table_list.length>1)?me.table_list:me.table_list[0];}
|
||||
/*
|
||||
* lib/js/legacy/widgets/form/email.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/widgets/form/email.js
|
||||
*/
|
||||
_e.email_as_field='email_id';_e.email_as_dt='Contact';_e.email_as_in='email_id,contact_name';sendmail=function(emailto,emailfrom,cc,subject,message,fmt,with_attachments){var fn=function(html){$c('webnotes.utils.email_lib.send_form',{'sendto':emailto,'sendfrom':emailfrom?emailfrom:'','cc':cc?cc:'','subject':subject,'message':replace_newlines(message),'body':html,'full_domain':wn.urllib.get_base_url(),'with_attachments':with_attachments?1:0,'dt':cur_frm.doctype,'dn':cur_frm.docname},function(r,rtxt){});}
|
||||
_p.build(fmt,fn);}
|
||||
_e.make=function(){var d=new Dialog(440,440,"Send Email");var email_go=function(){var emailfrom=d.widgets['From'].value;var emailto=d.widgets['To'].value;if(!emailfrom)
|
||||
|
|
@ -469,9 +461,8 @@ as.createList(as.aSug);}
|
|||
$c('webnotes.utils.email_lib.get_contact_list',{'select':_e.email_as_field,'from':_e.email_as_dt,'where':_e.email_as_in,'txt':(last_txt?strip(last_txt):'%')},call_back);return;}
|
||||
var sel;_e.dialog=d;}
|
||||
/*
|
||||
* lib/js/legacy/widgets/form/clientscriptAPI.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/widgets/form/clientscriptAPI.js
|
||||
*/
|
||||
$c_get_values=function(args,doc,dt,dn,user_callback){var call_back=function(r,rt){if(!r.message)return;if(user_callback)user_callback(r.message);var fl=args.fields.split(',');for(var i in fl){locals[dt][dn][fl[i]]=r.message[fl[i]];if(args.table_field)
|
||||
refresh_field(fl[i],dn,args.table_field);else
|
||||
refresh_field(fl[i]);}}
|
||||
|
|
@ -495,9 +486,8 @@ unhide_field=function(n){function _hide_field(n,hidden){var df=get_field(cur_frm
|
|||
if(cur_frm){if(n.substr)_hide_field(n,0);else{for(var i in n)_hide_field(n[i],0)}}}
|
||||
get_field_obj=function(fn){return cur_frm.fields_dict[fn];}
|
||||
/*
|
||||
* lib/js/legacy/widgets/form/form_comments.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/widgets/form/form_comments.js
|
||||
*/
|
||||
wn.widgets.form.comments={n_comments:{},comment_list:{},sync:function(dt,dn,r){var f=wn.widgets.form.comments;f.n_comments[dn]=r.n_comments;f.comment_list[dn]=r.comment_list;},add:function(input,dt,dn,callback){$c('webnotes.widgets.form.comments.add_comment',wn.widgets.form.comments.get_args(input,dt,dn),function(r,rt){wn.widgets.form.comments.update_comment_list(input,dt,dn);input.value='';callback(input,dt,dn);});},remove:function(dt,dn,comment_id,callback){$c('webnotes.widgets.form.comments.remove_comment',{id:comment_id,dt:dt,dn:dn},callback);},get_args:function(input,dt,dn){return{comment:input.value,comment_by:user,comment_by_fullname:user_fullname,comment_doctype:dt,comment_docname:dn}},update_comment_list:function(input,dt,dn){var f=wn.widgets.form.comments;f.n_comments[dn]=cint(f.n_comments[dn])+1;f.comment_list[dn]=add_lists([f.get_args(input,dt,dn)],f.comment_list[dn]);}}
|
||||
CommentList=function(parent,dt,dn){this.wrapper=$a(parent,'div','',{margin:'16px'});this.input_area=$a(this.wrapper,'div','',{margin:'2px'});this.lst_area=$a(this.wrapper,'div','',{margin:'2px'});this.make_input();this.make_lst();this.dt;this.dn;}
|
||||
CommentList.prototype.run=function(){this.lst.run();}
|
||||
|
|
@ -516,16 +506,14 @@ else{time=hr+':'+min+' AM'}}
|
|||
this.cmt_dtl.innerHTML='On '+d[ri][10].substring(0,3)+' '+d[ri][9]+', '+d[ri][11]+' at '+time;this.cmt.innerHTML=replace_newlines(d[ri][1]);}
|
||||
CommentItem.prototype.cmt_delete=function(cell,ri,ci,d){var me=this;if(d[ri][2]==user||d[ri][3]==user){del=$a(cell,'div','wn-icon ic-trash',{cursor:'pointer'});del.cmt_id=d[ri][0];del.onclick=function(){wn.widgets.form.comments.remove(cur_frm.doctype,cur_frm.docname,this.cmt_id,function(){me.comment.lst.run();})}}}
|
||||
/*
|
||||
* lib/js/legacy/wn/widgets/form/sidebar.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/wn/widgets/form/sidebar.js
|
||||
*/
|
||||
wn.widgets.form.sidebar={Sidebar:function(form){var me=this;this.form=form;this.opts={sections:[{title:'Actions',items:[{type:'link',label:'New',icon:'ic-doc_new',display:function(){return in_list(profile.can_create,form.doctype)},onclick:function(){new_doc(me.form.doctype)}},{type:'link',label:'Refresh',icon:'ic-playback_reload',onclick:function(){me.form.reload_doc()}},{type:'link',label:'Print',display:function(){return!(me.form.doc.__islocal||me.form.meta.allow_print);},icon:'ic-print',onclick:function(){me.form.print_doc()}},{type:'link',label:'Email',display:function(){return!(me.form.doc.__islocal||me.form.meta.allow_email);},icon:'ic-mail',onclick:function(){me.form.email_doc()}},{type:'link',label:'Copy',display:function(){return in_list(profile.can_create,me.form.doctype)&&!me.form.meta.allow_copy},icon:'ic-clipboard_copy',onclick:function(){me.form.copy_doc()}},{type:'link',label:'Delete',display:function(){return me.form.meta.allow_trash&&cint(me.form.doc.docstatus)!=2&&(!me.form.doc.__islocal)&&me.form.perm[0][CANCEL]},icon:'ic-trash',onclick:function(){me.form.savetrash()}}]},{title:'Assign To',render:function(wrapper){me.form.assign_to=new wn.widgets.form.sidebar.AssignTo(wrapper,me,me.form.doctype,me.form.docname);},display:function(){if(!me.form.doc.__local)return true;else return false;}},{title:'Attachments',render:function(wrapper){me.form.attachments=new wn.widgets.form.sidebar.Attachments(wrapper,me,me.form.doctype,me.form.docname);},display:function(){return me.form.meta.allow_attach}},{title:'Comments',render:function(wrapper){new wn.widgets.form.sidebar.Comments(wrapper,me,me.form.doctype,me.form.docname);},display:function(){return!me.form.doc.__islocal}},{title:'Tags',render:function(wrapper){me.form.taglist=new TagList(wrapper,me.form.doc._user_tags?me.form.doc._user_tags.split(','):[],me.form.doctype,me.form.docname,0,function(){});},display:function(){return!me.form.doc.__islocal}}]}
|
||||
this.refresh=function(){var parent=this.form.page_layout.sidebar_area;if(!this.sidebar){$y(parent,{paddingTop:'37px'})
|
||||
this.sidebar=new wn.widgets.PageSidebar(parent,this.opts);}else{this.sidebar.refresh();}}}}
|
||||
/*
|
||||
* lib/js/legacy/wn/widgets/form/comments.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/wn/widgets/form/comments.js
|
||||
*/
|
||||
wn.widgets.form.sidebar.Comments=function(parent,sidebar,doctype,docname){var me=this;this.sidebar=sidebar;this.doctype=doctype;this.docname=docname;this.refresh=function(){$c('webnotes.widgets.form.comments.get_comments',{dt:me.doctype,dn:me.docname,limit:5},function(r,rt){wn.widgets.form.comments.sync(me.doctype,me.docname,r);me.make_body();});}
|
||||
this.make_body=function(){if(this.wrapper)this.wrapper.innerHTML='';else this.wrapper=$a(parent,'div','sidebar-comment-wrapper');this.input=$a_input(this.wrapper,'text');this.btn=$btn(this.wrapper,'Post',function(){me.add_comment()},{marginLeft:'8px'});this.render_comments()}
|
||||
this.render_comments=function(){var f=wn.widgets.form.comments;var cl=f.comment_list[me.docname]
|
||||
|
|
@ -535,9 +523,8 @@ this.render_one_comment=function(det){$a(this.wrapper,'div','social sidebar-comm
|
|||
this.add_comment=function(){if(!this.input.value)return;this.btn.set_working();wn.widgets.form.comments.add(this.input,me.doctype,me.docname,function(){me.btn.done_working();me.make_body();});}
|
||||
this.refresh();}
|
||||
/*
|
||||
* lib/js/legacy/wn/widgets/form/attachments.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/wn/widgets/form/attachments.js
|
||||
*/
|
||||
wn.widgets.form.sidebar.Attachments=function(parent,sidebar,doctype,docname){var me=this;this.frm=sidebar.form;this.make=function(){if(this.wrapper)this.wrapper.innerHTML='';else this.wrapper=$a(parent,'div','sidebar-comment-wrapper');this.attach_wrapper=$a(this.wrapper,'div');if(this.frm.doc.__islocal){this.attach_wrapper.innerHTML='Attachments can be uploaded after saving'
|
||||
return;}
|
||||
var n=this.frm.doc.file_list?this.frm.doc.file_list.split('\n').length:0;if(n<this.frm.meta.max_attachments||!this.frm.meta.max_attachments){this.btn=$btn($a(this.wrapper,'div','sidebar-comment-message'),'Add',function(){me.add_attachment()});}
|
||||
|
|
@ -561,9 +548,8 @@ doc.file_list=fl.join('\n');}
|
|||
else
|
||||
doc.file_list=filename+','+fileid;doc.modified=new_timestamp;var frm=frms[doctype];frm.attachments.dialog.hide();msgprint('File Uploaded Sucessfully.');frm.refresh();}
|
||||
/*
|
||||
* lib/js/legacy/wn/widgets/form/assign_to.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/wn/widgets/form/assign_to.js
|
||||
*/
|
||||
wn.widgets.form.sidebar.AssignTo=Class.extend({init:function(parent,sidebar,doctype,docname){var me=this;this.doctype=doctype;this.name=docname;this.wrapper=$a(parent,'div','sidebar-comment-wrapper');this.body=$a(this.wrapper,'div');this.add_btn=$btn($a(this.wrapper,'div','sidebar-comment-message'),'Assign',function(){me.add();})
|
||||
this.refresh();},refresh:function(){var me=this;$c('webnotes.widgets.form.assign_to.get',{doctype:me.doctype,name:me.name},function(r,rt){me.render(r.message)})},render:function(d){var me=this;$(this.body).empty();if(this.dialog){this.dialog.hide();}
|
||||
for(var i=0;i<d.length;i++){$(this.body).append(repl('<div>%(owner)s \
|
||||
|
|
|
|||
|
|
@ -1,8 +1,7 @@
|
|||
|
||||
/*
|
||||
* lib/js/legacy/widgets/report_builder/report_builder.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/widgets/report_builder/report_builder.js
|
||||
*/
|
||||
_r.ReportContainer=function(){if(user=='Guest'){msgprint("Not Allowed");return;}
|
||||
wn.require('lib/js/legacy/widgets/form/fields.js');this.wrapper=page_body.add_page("Report Builder",function(){});this.wrapper.className='layout_wrapper';var head_div=$a(this.wrapper,'div');this.rb_area=$a(this.wrapper,'div');$dh(this.wrapper);var me=this;this.rb_dict={};this.page_head=new PageHeader(head_div);$y(this.page_head.wrapper,{marginBottom:'0px'});var run_fn=function(){if(me.cur_rb){me.cur_rb.dt.start_rec=1;me.cur_rb.dt.run();}}
|
||||
var runbtn=this.page_head.add_button('Run',run_fn,1,'ui-icon-circle-triangle-e',1);if(has_common(['Administrator','System Manager'],user_roles)){var savebtn=this.page_head.add_button('Save',function(){if(me.cur_rb)me.cur_rb.save_criteria();},0,'ui-icon-disk');var fn=function(){if(me.cur_rb){if(!me.cur_rb.current_loaded){msgprint("error:You must save the report before you can set Advanced features");return;}
|
||||
|
|
@ -149,9 +148,8 @@ this.all_fields[i].selected=1;}}
|
|||
_r.ReportColumnPicker.prototype.add_field=function(f){if(!f.label)return;var by_default=(f.in_filter)?1:0;this.all_fields.push({selected:by_default,df:f,sel_idx:(by_default?this.sel_idx:0),selected_by_default:by_default});this.sel_idx+=by_default;}
|
||||
_r.ReportColumnPicker.prototype.set=function(dt,label,selected){for(var i=0;i<this.all_fields.length;i++){if(this.all_fields[i].df.parent==dt&&this.all_fields[i].df.label==label){this.all_fields[i].selected=selected;this.all_fields[i].sel_idx=this.sel_idx;this.sel_idx+=cint(selected);this.refresh();return;}}}
|
||||
/*
|
||||
* lib/js/legacy/widgets/report_builder/datatable.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/widgets/report_builder/datatable.js
|
||||
*/
|
||||
_r.scroll_head=function(ele){var h=ele.childNodes[0];h.style.top=cint(ele.scrollTop)+'px';}
|
||||
_r.DataTable=function(html_fieldname,dt,repname,hide_toolbar){var me=this;if(html_fieldname.substr){var html_field=cur_frm.fields_dict[html_fieldname];html_field.onrefresh=function(){if(me.docname!=cur_frm.docname){me.clear_all();me.docname=cur_frm.docname;}}
|
||||
var parent=html_field.wrapper;datatables[html_fieldname]=this;}else{var parent=html_fieldname;}
|
||||
|
|
@ -222,9 +220,8 @@ tab.style.borderCollapse='collapse';var hr=tab.insertRow(0);var c0=add_head_styl
|
|||
for(var ri=0;ri<this.tab.rows.length;ri++){var row=this.tab.rows[ri];var dt_row=tab.insertRow(tab.rows.length);for(var ci=0;ci<row.cells.length;ci++){var c=add_cell_style(dt_row.insertCell(ci));c.innerHTML=row.cells[ci].innerHTML;}}
|
||||
return w.innerHTML;}
|
||||
/*
|
||||
* lib/js/legacy/widgets/report_builder/calculator.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/widgets/report_builder/calculator.js
|
||||
*/
|
||||
_r.calc_dialog=null;_r.show_calc=function(tab,colnames,coltypes,add_idx){if(!add_idx)add_idx=0;if(!tab||!tab.rows.length){msgprint("No Data");return;}
|
||||
if(!_r.calc_dialog){var d=new Dialog(400,400,"Calculator")
|
||||
d.make_body([['Select','Column'],['Data','Sum'],['Data','Average'],['Data','Min'],['Data','Max']])
|
||||
|
|
|
|||
|
|
@ -1,15 +1,13 @@
|
|||
|
||||
/*
|
||||
* lib/js/legacy/globals.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/globals.js
|
||||
*/
|
||||
wn.provide('wn.widgets.form');wn.provide('wn.widgets.report');wn.provide('wn.utils');wn.provide('wn.model');wn.provide('wn.profile');wn.provide('wn.session');wn.provide('_f');wn.provide('_p');wn.provide('_r');wn.provide('_c');wn.provide('_e');wn.provide('_startup_data')
|
||||
wn.settings.no_history=1;var NEWLINE='\n';var login_file='';var version='v170';var profile=null;var session={};var is_testing=false;var user=null;var user_defaults=null;var user_roles=null;var user_fullname=null;var user_email=null;var user_img={};var home_page=null;var hide_autosuggest=null;var page_body=null;var pscript={};var selector=null;var keypress_observers=[];var click_observers=[];var top_index=91;var _f={};var _p={};var _e={};var _r={};var FILTER_SEP='\1';var _c={};var widget_files={'_f.FrmContainer':'form.compressed.js','_c.CalendarPopup':'widgets/form/date_picker.js','_r.ReportContainer':'report.compressed.js','_p.PrintQuery':'widgets/print_query.js','Calendar':'widgets/calendar.js','Recommendation':'widgets/recommend.js','RatingWidget':'widgets/rating.js'}
|
||||
var frms={};var cur_frm=null;var pscript={};var validated=true;var validation_message='';var tinymce_loaded=null;var cur_autosug=null;
|
||||
/*
|
||||
* lib/js/legacy/utils/datatype.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/utils/datatype.js
|
||||
*/
|
||||
var startup_list=[];wn.utils.full_name=function(fn,ln){return fn+(ln?' ':'')+(ln?ln:'')}
|
||||
function fmt_money(v){if(v==null||v=='')return'0.00';v=(v+'').replace(/,/g,'');v=parseFloat(v);if(isNaN(v)){return'';}else{var cp=wn.control_panel;var val=2;if(cp.currency_format=='Millions')val=3;v=v.toFixed(2);var delimiter=",";amount=v+'';var a=amount.split('.',2)
|
||||
var d=a[1];var i=parseInt(a[0]);if(isNaN(i)){return'';}
|
||||
|
|
@ -73,18 +71,16 @@ if(remainder){if(remainder>=100)comma=','
|
|||
else comma=''
|
||||
return bestguess+comma+' '+in_words(remainder);}else{return bestguess;}}
|
||||
/*
|
||||
* lib/js/legacy/utils/browser_detect.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/utils/browser_detect.js
|
||||
*/
|
||||
var appVer=navigator.appVersion.toLowerCase();var is_minor=parseFloat(appVer);var is_major=parseInt(is_minor);var iePos=appVer.indexOf('msie');if(iePos!=-1){is_minor=parseFloat(appVer.substring(iePos+5,appVer.indexOf(';',iePos)))
|
||||
is_major=parseInt(is_minor);}
|
||||
var isIE=(iePos!=-1);var isIE6=(isIE&&is_major<=6);var isIE7=(isIE&&is_major>=7);if(/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent)){var isFF=1;var ffversion=new Number(RegExp.$1)
|
||||
if(ffversion>=3)var isFF3=1;else if(ffversion>=2)var isFF2=1;else if(ffversion>=1)var isFF1=1;}
|
||||
var isSafari=navigator.userAgent.indexOf('Safari')!=-1?1:0;var isChrome=navigator.userAgent.indexOf('Chrome')!=-1?1:0;
|
||||
/*
|
||||
* lib/js/legacy/utils/datetime.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/utils/datetime.js
|
||||
*/
|
||||
function same_day(d1,d2){if(d1.getFullYear()==d2.getFullYear()&&d1.getMonth()==d2.getMonth()&&d1.getDate()==d2.getDate())return true;else return false;}
|
||||
var month_list=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];var month_last={1:31,2:28,3:31,4:30,5:31,6:30,7:31,8:31,9:30,10:31,11:30,12:31}
|
||||
var month_list_full=['January','February','March','April','May','June','July','August','September','October','November','December'];var week_list=['Sun','Mon','Tue','Wed','Thu','Fri','Sat'];var week_list_full=['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];function int_to_str(i,len){i=''+i;if(i.length<len)for(c=0;c<(len-i.length);c++)i='0'+i;return i}
|
||||
|
|
@ -125,9 +121,8 @@ jQuery.fn.prettyDate=function(){return this.each(function(){var date=prettyDate(
|
|||
jQuery(this).text(date);});};var comment_when=prettyDate;var date=dateutil=wn.datetime;var get_today=wn.datetime.get_today
|
||||
var time_to_ampm=wn.datetime.time_to_ampm;var time_to_hhmm=wn.datetime.time_to_hhmm;var only_date=wn.datetime.only_date;
|
||||
/*
|
||||
* lib/js/legacy/utils/dom.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/utils/dom.js
|
||||
*/
|
||||
wn.dom.set_unique_id=function(ele){var id='unique-'+wn.dom.id_count;ele.setAttribute('id',id);wn.dom.id_count++;return id;}
|
||||
wn.tinymce={add_simple:function(ele,height){if(ele.myid){tinyMCE.execCommand('mceAddControl',true,ele.myid);return;}
|
||||
ele.myid=wn.dom.set_unique_id(ele);$(ele).tinymce({script_url:'lib/js/legacy/tiny_mce_33/tiny_mce.js',height:height?height:'200px',theme:"advanced",theme_advanced_buttons1:"bold,italic,underline,separator,strikethrough,justifyleft,justifycenter,justifyright,justifyfull,bullist,numlist,outdent,indent,link,unlink,forecolor,backcolor,code,",theme_advanced_buttons2:"",theme_advanced_buttons3:"",theme_advanced_toolbar_location:"top",theme_advanced_toolbar_align:"left",theme_advanced_path:false,theme_advanced_resizing:false});},remove:function(ele){tinyMCE.execCommand('mceRemoveControl',true,ele.myid);},get_value:function(ele){return tinymce.get(ele.myid).getContent();}}
|
||||
|
|
@ -235,9 +230,8 @@ user_img_queue[username]=[];user_img_queue[username].push(img);return;}
|
|||
$c('webnotes.profile.get_user_img',{username:username},function(r,rt){delete user_img_loading[user_img_loading.indexOf(username)];user_img[username]=r.message;if(user_img_queue[username]){var q=user_img_queue[username];for(var i in q){set_it(q[i]);}}
|
||||
set_it(img);},null,1);user_img_loading.push(username);}}
|
||||
/*
|
||||
* lib/js/legacy/utils/handler.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/utils/handler.js
|
||||
*/
|
||||
var outUrl="index.cgi";var NULL_CHAR='^\5*';function checkResponse(r,on_timeout,no_spinner,freeze_msg){try{if(r.readyState==4&&r.status==200)return true;else return false;}catch(e){msgprint("error:Request timed out, try again");if(on_timeout)
|
||||
on_timeout();hide_loading();if(freeze_msg)
|
||||
unfreeze();return false;}}
|
||||
|
|
@ -271,9 +265,8 @@ function open_url_post(URL,PARAMS,new_window){var temp=document.createElement("f
|
|||
for(var x in PARAMS){var opt=document.createElement("textarea");opt.name=x;opt.value=PARAMS[x];temp.appendChild(opt);}
|
||||
document.body.appendChild(temp);temp.submit();return temp;}
|
||||
/*
|
||||
* lib/js/legacy/utils/msgprint.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/utils/msgprint.js
|
||||
*/
|
||||
var msg_dialog;function msgprint(msg,issmall,callback){if(!msg)return;if(typeof(msg)!='string')
|
||||
msg=JSON.stringify(msg);if(issmall){show_alert(msg);return;}
|
||||
if(msg.substr(0,8)=='__small:'){show_alert(msg.substr(8));return;}
|
||||
|
|
@ -287,9 +280,8 @@ msg_dialog.custom_onhide=callback;}
|
|||
var growl_area;function show_alert(txt){if(!growl_area){growl_area=$a(popup_cont,'div','',{position:'fixed',bottom:'8px',right:'8px',width:'320px',zIndex:10});}
|
||||
var wrapper=$a(growl_area,'div','',{position:'relative'});var body=$a(wrapper,'div','notice');var c=$a(body,'div','wn-icon ic-round_delete',{cssFloat:'right'});$(c).click(function(){$dh(this.wrapper)});c.wrapper=wrapper;var t=$a(body,'div','',{color:'#FFF'});$(t).html(txt);$(wrapper).hide().fadeIn(1000);}
|
||||
/*
|
||||
* lib/js/legacy/utils/shortcut.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/utils/shortcut.js
|
||||
*/
|
||||
(function(jQuery){jQuery.hotkeys={version:"0.8",specialKeys:{8:"backspace",9:"tab",13:"return",16:"shift",17:"ctrl",18:"alt",19:"pause",20:"capslock",27:"esc",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",45:"insert",46:"del",96:"0",97:"1",98:"2",99:"3",100:"4",101:"5",102:"6",103:"7",104:"8",105:"9",106:"*",107:"+",109:"-",110:".",111:"/",112:"f1",113:"f2",114:"f3",115:"f4",116:"f5",117:"f6",118:"f7",119:"f8",120:"f9",121:"f10",122:"f11",123:"f12",144:"numlock",145:"scroll",191:"/",224:"meta"},shiftNums:{"`":"~","1":"!","2":"@","3":"#","4":"$","5":"%","6":"^","7":"&","8":"*","9":"(","0":")","-":"_","=":"+",";":": ","'":"\"",",":"<",".":">","/":"?","\\":"|"}};function keyHandler(handleObj){if(typeof handleObj.data!=="string"){return;}
|
||||
var origHandler=handleObj.handler,keys=handleObj.data.toLowerCase().split(" ");handleObj.handler=function(event){if(this!==event.target&&(/textarea|select/i.test(event.target.nodeName)||event.target.type==="text")){return;}
|
||||
var special=event.type!=="keypress"&&jQuery.hotkeys.specialKeys[event.which],character=String.fromCharCode(event.which).toLowerCase(),key,modif="",possible={};if(event.altKey&&special!=="alt"){modif+="alt+";}
|
||||
|
|
@ -300,9 +292,8 @@ if(special){possible[modif+special]=true;}else{possible[modif+character]=true;po
|
|||
for(var i=0,l=keys.length;i<l;i++){if(possible[keys[i]]){return origHandler.apply(this,arguments);}}};}
|
||||
jQuery.each(["keydown","keyup","keypress"],function(){jQuery.event.special[this]={add:keyHandler};});})(jQuery);
|
||||
/*
|
||||
* lib/js/legacy/utils/printElement.js
|
||||
*/
|
||||
;(function(window,undefined){var document=window["document"];var $=window["jQuery"];$.fn["printElement"]=function(options){var mainOptions=$.extend({},$.fn["printElement"]["defaults"],options);if(mainOptions["printMode"]=='iframe'){if($.browser.opera||(/chrome/.test(navigator.userAgent.toLowerCase())))
|
||||
* lib/js/legacy/utils/printElement.js
|
||||
*/;(function(window,undefined){var document=window["document"];var $=window["jQuery"];$.fn["printElement"]=function(options){var mainOptions=$.extend({},$.fn["printElement"]["defaults"],options);if(mainOptions["printMode"]=='iframe'){if($.browser.opera||(/chrome/.test(navigator.userAgent.toLowerCase())))
|
||||
mainOptions["printMode"]='popup';}
|
||||
$("[id^='printElement_']").remove();return this.each(function(){var opts=$.meta?$.extend({},mainOptions,$(this).data()):mainOptions;_printElement($(this),opts);});};$.fn["printElement"]["defaults"]={"printMode":'iframe',"pageTitle":'',"overrideElementCSS":null,"printBodyOptions":{"styleToAdd":'padding:10px;margin:10px;',"classNameToAdd":''},"leaveOpen":false,"iframeElementOptions":{"styleToAdd":'border:none;position:absolute;width:0px;height:0px;bottom:0px;left:0px;',"classNameToAdd":''}};$.fn["printElement"]["cssElement"]={"href":'',"media":''};function _printElement(element,opts){var html=_getMarkup(element,opts);var popupOrIframe=null;var documentToWriteTo=null;if(opts["printMode"].toLowerCase()=='popup'){popupOrIframe=window.open('about:blank','printElementWindow','width=650,height=440,scrollbars=yes');documentToWriteTo=popupOrIframe.document;}
|
||||
else{var printElementID="printElement_"+(Math.round(Math.random()*99999)).toString();var iframe=document.createElement('IFRAME');$(iframe).attr({style:opts["iframeElementOptions"]["styleToAdd"],id:printElementID,className:opts["iframeElementOptions"]["classNameToAdd"],frameBorder:0,scrolling:'no',src:'about:blank'});document.body.appendChild(iframe);documentToWriteTo=(iframe.contentWindow||iframe.contentDocument);if(documentToWriteTo.document)
|
||||
|
|
@ -318,9 +309,8 @@ html.push('<link type="text/css" rel="stylesheet" href="'+current["href"]+'" med
|
|||
else{$("link",document).filter(function(){return $(this).attr("rel").toLowerCase()=="stylesheet";}).each(function(){html.push('<link type="text/css" rel="stylesheet" href="'+$(this).attr("href")+'" media="'+$(this).attr('media')+'" >');});}
|
||||
html.push('<base href="'+_getBaseHref()+'" />');html.push('</head><body style="'+opts["printBodyOptions"]["styleToAdd"]+'" class="'+opts["printBodyOptions"]["classNameToAdd"]+'">');html.push('<div class="'+$element.attr('class')+'">'+elementHtml+'</div>');html.push('<script type="text/javascript">function printPage(){focus();print();'+((!$.browser.opera&&!opts["leaveOpen"]&&opts["printMode"].toLowerCase()=='popup')?'close();':'')+'}</script>');html.push('</body></html>');return html.join('');};})(window);
|
||||
/*
|
||||
* lib/js/wn/ui/dialog.js
|
||||
*/
|
||||
|
||||
* lib/js/wn/ui/dialog.js
|
||||
*/
|
||||
wn.widgets.FieldGroup=function(){this.first_button=false;this.make_fields=function(body,fl){wn.require('lib/js/legacy/widgets/form/fields.js');$y(this.body,{padding:'11px'});this.fields_dict={};for(var i=0;i<fl.length;i++){var df=fl[i];var div=$a(body,'div','',{margin:'6px 0px'})
|
||||
f=make_field(df,null,div,null);f.not_in_form=1;this.fields_dict[df.fieldname]=f
|
||||
f.refresh();if(df.fieldtype=='Button'&&!this.first_button){$(f.input).addClass('primary');this.first_button=true;}}}
|
||||
|
|
@ -347,9 +337,8 @@ if(opts)this.make();}
|
|||
wn.widgets.Dialog.prototype=new wn.widgets.FieldGroup();keypress_observers.push(new function(){this.notify_keypress=function(e,kc){if(cur_dialog&&kc==27&&!cur_dialog.no_cancel_flag)
|
||||
cur_dialog.hide();}});
|
||||
/*
|
||||
* lib/js/legacy/widgets/dialog.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/widgets/dialog.js
|
||||
*/
|
||||
var cur_dialog;var top_index=91;function Dialog(w,h,title,content){wn.require('lib/js/legacy/widgets/form/fields.js');this.make({width:w,title:title});if(content)this.make_body(content);this.onshow='';this.oncancel='';this.no_cancel_flag=0;this.display=false;this.first_button=false;}
|
||||
Dialog.prototype=new wn.widgets.Dialog()
|
||||
Dialog.prototype.make_body=function(content){this.rows={};this.widgets={};for(var i in content)this.make_row(content[i]);}
|
||||
|
|
@ -369,9 +358,8 @@ else if(d[0]=='Button'){c2.style.height='32px';var b=$btn(c2,d[1],function(btn){
|
|||
if(d[2]){b._onclick=d[2];}
|
||||
this.widgets[d[1]]=b;}}
|
||||
/*
|
||||
* lib/js/legacy/widgets/listing.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/widgets/listing.js
|
||||
*/
|
||||
list_opts={cell_style:{padding:'3px 2px'},alt_cell_style:{},head_style:{height:'20px',overflow:'hidden',verticalAlign:'middle',fontWeight:'bold',padding:'1px',fontSize:'13px'},head_main_style:{padding:'0px'},hide_export:1,hide_print:1,hide_refresh:0,hide_rec_label:0,show_calc:1,show_empty_tab:0,no_border:1,append_records:1,table_width:null};function Listing(head_text,no_index,no_loading){wn.require('lib/js/legacy/widgets/form/fields.js');this.start=0;this.page_len=20;this.filters_per_line=7;this.cell_idx=0;this.head_text=head_text?head_text:'Result';this.keyword='records';this.no_index=no_index;this.underline=1;this.no_rec_message='No Result';this.show_cell=null;this.show_result=null;this.colnames=null;this.colwidths=null;this.coltypes=null;this.coloptions=null;this.filters={};this.sort_list={};this.sort_order_dict={};this.sort_heads={};this.is_std_query=false;this.server_call=null;this.no_loading=no_loading;this.opts=copy_dict(list_opts);}
|
||||
Listing.prototype.make=function(parent){var me=this;this.wrapper=parent;this.filter_wrapper=$a(parent,'div','srs_filter_wrapper');this.filter_area=$a(this.filter_wrapper,'div','srs_filter_area');$dh(this.filter_wrapper);this.btn_area=$a(parent,'div','',{margin:'8px 0px'});this.body_area=$a(parent,'div','srs_body_area');if(!this.opts.hide_rec_label)
|
||||
this.rec_label=$a(this.body_area,'div','',{margin:'4px 0px',color:'#888'});this.results=$a($a(this.body_area,'div','srs_results_area'),'div');this.fetching_area=$a(this.body_area,'div','',{height:'120px',background:'url("lib/images/ui/square_loading.gif") center no-repeat',display:'none'});this.show_no_records=$a(this.body_area,'div','',{margin:'200px 0px',textAlign:'center',fontSize:'14px',color:'#888',display:'none'});this.show_no_records.innerHTML='No Result';if(this.opts.show_empty_tab)
|
||||
|
|
@ -464,9 +452,8 @@ $di(this.more_btn);}}
|
|||
Listing.prototype.make_headings=function(t,nr,nc){for(var ci=0;ci<nc;ci++){var tmp=make_table($td(t,0,ci),1,2,'100%',['','0px'],this.opts.head_style);$y(tmp,{tableLayout:'fixed',borderCollapse:'collapse'});$y($td(t,0,ci),this.opts.head_main_style);$td(t,0,ci).sort_cell=$td(tmp,0,1);$td(t,0,ci).label_cell=$td(tmp,0,0);$td(tmp,0,1).style.padding='0px';$td(tmp,0,0).innerHTML=this.colnames[ci]?this.colnames[ci]:' ';if(this.sort_list[ci])this.set_sort($td(t,0,ci),ci,this.sort_list[ci]);var div=$a($td(t,0,ci),'div');$td(t,0,ci).style.borderBottom='1px solid #CCC';if(this.coltypes&&this.coltypes[ci]&&in_list(['Currency','Float','Int'],this.coltypes[ci]))$y($td(t,0,ci).label_cell,{textAlign:'right'})}}
|
||||
Listing.prototype.std_cell=function(cell,ri,ci,d){var has_headrow=this.colnames?1:0;cell.div=$a(cell,'div');$s(cell.div,d[ri][ci],this.coltypes?this.coltypes[ci+(this.no_index?0:1)]:null,this.coloptions?this.coloptions[ci+(this.no_index?0:1)]:null);}
|
||||
/*
|
||||
* lib/js/wn/ui/listing.js
|
||||
*/
|
||||
|
||||
* lib/js/wn/ui/listing.js
|
||||
*/
|
||||
wn.widgets.Listing=function(opts){this.opts=opts;this.page_length=20;this.btns={};this.start=0;var me=this;this.make=function(opts){this.wrapper=$a(this.opts.parent,'div');this.filters_area=$a(this.wrapper,'div','listing-filters');this.toolbar_area=$a(this.wrapper,'div','listing-toolbar');this.results_area=$a(this.wrapper,'div','listing-results');this.more_button_area=$a(this.wrapper,'div','listing-more');this.no_results_area=$a(this.wrapper,'div','help_box',{display:'none'},(this.opts.no_result_message?this.opts.no_result_message:'No results'));if(opts)this.opts=opts;this.page_length=this.opts.page_length?this.opts.page_length:this.page_length;this.make_toolbar();this.make_filters();this.make_more_button();}
|
||||
this.make_filters=function(){if(this.opts.filters){$ds(this.filters_area);this.filters=new wn.widgets.FieldGroup(this.filters_area,this.opts.fields);}}
|
||||
this.make_toolbar=function(){if(!this.opts.hide_refresh){this.ref_img=$a(this.toolbar_area,'span','link_type',{color:'#888'},'[refresh]');this.ref_img.onclick=function(){me.run();}
|
||||
|
|
@ -486,9 +473,8 @@ args.simple_query=this.query;args.as_dict=1;if(this.loading_img)$di(this.loading
|
|||
this.refresh=this.run;this.add_limits=function(){this.query+=' LIMIT '+this.start+','+(this.page_length+1);}
|
||||
if(opts)this.make();}
|
||||
/*
|
||||
* lib/js/legacy/widgets/layout.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/widgets/layout.js
|
||||
*/
|
||||
function Layout(parent,width){if(parent&&parent.substr){parent=$i(parent);}
|
||||
this.wrapper=$a(parent,'div','',{display:'none'});if(width){this.width=this.wrapper.style.width;}
|
||||
this.myrows=[];}
|
||||
|
|
@ -513,9 +499,8 @@ $y(row.cells[i],{width:cint(w/cells_with_no_width)+'%'})}}
|
|||
LayoutCell.prototype.show=function(){$ds(this.wrapper);}
|
||||
LayoutCell.prototype.hide=function(){$dh(this.wrapper);}
|
||||
/*
|
||||
* lib/js/legacy/widgets/tabbedpage.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/widgets/tabbedpage.js
|
||||
*/
|
||||
function TabbedPage(parent,only_labels){this.tabs={};this.items=this.tabs
|
||||
this.cur_tab=null;this.label_wrapper=$a(parent,'div','box_label_wrapper',{marginTop:'16px'});this.label_body=$a(this.label_wrapper,'div','box_label_body');this.label_area=$a(this.label_body,'ul','box_tabs');if(!only_labels)this.body_area=$a(parent,'div','',{backgroundColor:'#FFF'});else this.body_area=null;this.add_item=function(label,onclick,no_body,with_heading){this.add_tab(label,onclick,no_body,with_heading);return this.items[label];}}
|
||||
TabbedPage.prototype.add_tab=function(n,onshow,no_body,with_heading){var tab=$a(this.label_area,'li');tab.label=$a(tab,'a');tab.label.innerHTML=n;if(this.body_area&&!no_body){tab.tab_body=$a(this.body_area,'div');$dh(tab.tab_body);tab.body=tab.tab_body;}else{tab.tab_body=null;}
|
||||
|
|
@ -544,9 +529,8 @@ this.collapse=function(){if(me.wrapper)$dh(me.wrapper);$item_normal(me.ldiv);}
|
|||
this.hide=function(){me.collapse();$dh(me.ldiv);}
|
||||
this.show=function(){$ds(me.ldiv);}}
|
||||
/*
|
||||
* lib/js/legacy/webpage/page_header.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/webpage/page_header.js
|
||||
*/
|
||||
var def_ph_style={wrapper:{marginBottom:'16px',backgroundColor:'#EEE'},main_heading:{},sub_heading:{marginBottom:'8px',color:'#555',display:'none'},separator:{borderTop:'3px solid #444'},toolbar_area:{padding:'3px 0px',display:'none',borderBottom:'1px solid #AAA'}}
|
||||
function PageHeader(parent,main_text,sub_text){this.wrapper=$a(parent,'div','page_header');this.t1=make_table($a(this.wrapper,'div','',def_ph_style.wrapper.backgroundColor),1,2,'100%',[null,'100px'],{padding:'2px'});$y(this.t1,{borderCollapse:'collapse'})
|
||||
this.lhs=$td(this.t1,0,0);this.main_head=$a(this.lhs,'h1','',def_ph_style.main_heading);this.sub_head=$a(this.lhs,'h4','',def_ph_style.sub_heading);this.separator=$a(this.wrapper,'div','',def_ph_style.separator);this.toolbar_area=$a(this.wrapper,'div','',def_ph_style.toolbar_area);this.padding_area=$a(this.wrapper,'div','',{padding:'3px'});$y($td(this.t1,0,1),{textAlign:'right',padding:'3px'});this.close_btn=$a($td(this.t1,0,1),'span','close',{},'×');this.close_btn.onclick=function(){nav_obj.show_last_open();};if(main_text)this.main_head.innerHTML=main_text;if(sub_text)this.sub_head.innerHTML=sub_text;this.buttons={};this.buttons2={};}
|
||||
|
|
@ -554,16 +538,14 @@ PageHeader.prototype.add_button=function(label,fn,bold,icon,green){var tb=this.t
|
|||
PageHeader.prototype.clear_toolbar=function(){this.toolbar_area.innerHTML='';this.buttons={};}
|
||||
PageHeader.prototype.make_buttonset=function(){$(this.toolbar_area).buttonset();}
|
||||
/*
|
||||
* lib/js/legacy/widgets/select.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/widgets/select.js
|
||||
*/
|
||||
function SelectWidget(parent,options,width,editable,bg_color){var me=this;this.inp=$a(parent,'select');if(options)add_sel_options(this.inp,options);if(width)$y(this.inp,{width:width});this.set_width=function(w){$y(this.inp,{width:w})};this.set_options=function(o){add_sel_options(this.inp,o);}
|
||||
this.inp.onchange=function(){if(me.onchange)me.onchange(this);}
|
||||
return;}
|
||||
/*
|
||||
* lib/js/legacy/widgets/tags.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/widgets/tags.js
|
||||
*/
|
||||
_tags={dialog:null,color_map:{},all_tags:[],colors:{'Default':'#add8e6'}}
|
||||
TagList=function(parent,start_list,dt,dn,static,onclick){this.start_list=start_list?start_list:[];this.tag_list=[];this.dt=dt;this.onclick=onclick;this.dn=dn;this.static;this.parent=parent;this.make_body();}
|
||||
TagList.prototype.make=function(parent){for(var i=0;i<this.start_list.length;i++){if(this.start_list[i])
|
||||
|
|
@ -611,9 +593,8 @@ this.render=function(refresh){$c('webnotes.widgets.tags.get_top_tags',{doctype:d
|
|||
this.render();}
|
||||
wn.widgets.TagCloud.Tag=function(args,count_cell,det){$(count_cell).css('text-align','right').html(det[1]+' x');args.static=1;this.tag=new SingleTag(args)}
|
||||
/*
|
||||
* lib/js/legacy/widgets/export_query.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/widgets/export_query.js
|
||||
*/
|
||||
var export_dialog;function export_query(query,callback){if(!export_dialog){var d=new Dialog(400,300,"Export...");d.make_body([['Data','Max rows','Blank to export all rows'],['Button','Go'],]);d.widgets['Go'].onclick=function(){export_dialog.hide();n=export_dialog.widgets['Max rows'].value;if(cint(n))
|
||||
export_dialog.query+=' LIMIT 0,'+cint(n);callback(export_dialog.query);}
|
||||
d.onshow=function(){this.widgets['Max rows'].value='500';}
|
||||
|
|
@ -625,9 +606,8 @@ args.simple_query=q;else
|
|||
args.query=q;args.sc_id=sc_id?sc_id:'';args.filter_values=filter_values?filter_values:'';if(colnames)
|
||||
args.colnames=colnames.join(',');args.report_name=report_name?report_name:'';open_url_post(outUrl,args);}
|
||||
/*
|
||||
* lib/js/legacy/webpage/history.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/webpage/history.js
|
||||
*/
|
||||
var nav_obj={}
|
||||
nav_obj.observers=[];nav_obj.add_observer=function(o){nav_obj.observers.push(o);}
|
||||
nav_obj.ol=[];nav_obj.open_notify=function(t,dt,dn,no_history){if(nav_obj.ol.length){var tmp=nav_obj.ol[nav_obj.ol.length-1];if(tmp&&tmp[0]==t&&tmp[1]==dt&&tmp[2]==dn)return;}
|
||||
|
|
@ -652,9 +632,8 @@ t[i]=decodeURIComponent(t[i]);if(nav_obj.ol.length){var c=nav_obj.ol[nav_obj.ol.
|
|||
if(t[2])
|
||||
var docname=history_get_name(t);if(t[0]=='Form'){_history_current=newLocation;if(docname.substr(0,3)=='New'&&!(locals[t[1]]&&locals[t[1]][docname])){newdoc(t[1]);}else{loaddoc(t[1],docname);}}else if(t[0]=='Report'){_history_current=newLocation;loadreport(t[1],docname);}else if(t[0]=='Page'){_history_current=newLocation;loadpage(t[1]);}else if(t[0]=='Application'){_history_current=newLocation;loadapp(t[1]);}else if(t[0]=='DocBrowser'||t[0]=='List'){_history_current=newLocation;loaddocbrowser(t[1]);}};$(window).bind('hashchange',function(){historyChange(location.hash);});
|
||||
/*
|
||||
* lib/js/legacy/webpage/search.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/webpage/search.js
|
||||
*/
|
||||
search_fields={};function setlinkvalue(name){selector.input.set_input(name);selector.hide();}
|
||||
function makeselector(){var d=new Dialog(540,440,'Search');d.make_body([['Data','Beginning With','Tip: You can use wildcard "%"'],['Select','Search By'],['Button','Search'],['HTML','Help'],['HTML','Result']]);var inp=d.widgets['Beginning With'];var field_sel=d.widgets['Search By'];var btn=d.widgets['Search'];d.sel_type='';d.values_len=0;d.set=function(input,type,label){d.sel_type=type;d.input=input;if(d.style!='Link'){d.rows['Result'].innerHTML='';d.values_len=0;}
|
||||
d.style='Link';d.set_query_description()
|
||||
|
|
@ -686,23 +665,20 @@ var cl=[]
|
|||
for(var j=1;j<r.values[i].length;j++)cl.push(r.values[i][j]);var c=$a(div,'div','comment',{marginTop:'2px'});c.innerHTML=cl.join(', ');}}
|
||||
selector=d;}
|
||||
/*
|
||||
* lib/js/legacy/webpage/spinner.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/webpage/spinner.js
|
||||
*/
|
||||
function set_loading(){pending_req++;$('#spinner').css('visibility','visible');$('body').css('cursor','progress');}
|
||||
function hide_loading(){pending_req--;if(!pending_req){$('body').css('cursor','default');$('#spinner').css('visibility','hidden');}}
|
||||
/*
|
||||
* lib/js/legacy/webpage/freeze_page.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/webpage/freeze_page.js
|
||||
*/
|
||||
var fcount=0;var frozen=0;var dialog_message;var dialog_back;function freeze(msg,do_freeze){if(!dialog_back){dialog_back=$a($i('body_div'),'div','dialog_back');if(isIE)dialog_back.style['filter']='alpha(opacity=60)';}
|
||||
$ds(dialog_back);fcount++;frozen=1;}
|
||||
function unfreeze(){if(dialog_message)
|
||||
$dh(dialog_message);if(!fcount)return;fcount--;if(!fcount){$dh(dialog_back);frozen=0;}}
|
||||
/*
|
||||
* lib/js/legacy/webpage/error_console.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/webpage/error_console.js
|
||||
*/
|
||||
var err_console;var err_list=[];function errprint(t){err_list[err_list.length]=('<pre style="font-family: Courier, Fixed; font-size: 11px; border-bottom: 1px solid #AAA; overflow: auto; width: 90%;">'+t+'</pre>');}
|
||||
function setup_err_console(){err_console=new Dialog(640,480,'Error Console')
|
||||
err_console.make_body([['HTML','Error List'],['Button','Clear'],['HTML','Error Report']]);var span=$a(err_console.widgets['Error Report'],'span','link_type');span.innerHTML='Send Error Report';span.onclick=function(){msg=prompt('How / where did you get the error [optional]')
|
||||
|
|
@ -713,9 +689,8 @@ err_console.onshow=function(){err_console.rows['Error List'].innerHTML='<div sty
|
|||
+err_list.join('<div style="height: 10px; margin-bottom: 10px; border-bottom: 1px solid #AAA"></div>')+'</div>';}}
|
||||
startup_list.push(setup_err_console);
|
||||
/*
|
||||
* lib/js/legacy/webpage/loaders.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/webpage/loaders.js
|
||||
*/
|
||||
function loadreport(dt,rep_name,onload,menuitem,reset_report){wn.require('lib/js/legacy/report.compressed.js');dt=get_label_doctype(dt);var show_report_builder=function(){if(!_r.rb_con){_r.rb_con=new _r.ReportContainer();}
|
||||
_r.rb_con.set_dt(dt,function(rb){if(rep_name){var t=rb.current_loaded;rb.load_criteria(rep_name);if(onload)
|
||||
onload(rb);if((rb.dt)&&(!rb.dt.has_data()||rb.current_loaded!=t))
|
||||
|
|
@ -753,18 +728,16 @@ script.onreadystatechange=function(){if(this.readyState=='complete'||this.readyS
|
|||
var doc_browser_page;function loaddocbrowser(dt,label,fields){wn.require('lib/js/legacy/widgets/form/fields.js');wn.require('lib/js/legacy/webpage/docbrowser.js');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,'');}
|
||||
/*
|
||||
* lib/js/legacy/webpage/uploader.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/webpage/uploader.js
|
||||
*/
|
||||
var uploaders={};var upload_frame_count=0;Uploader=function(parent,args,callback){var id='frame'+upload_frame_count;upload_frame_count++;this.callback=callback;var div=$a(parent,'div');div.innerHTML='<iframe id="'+id+'" name="'+id+'" src="blank.html" \
|
||||
style="width:0px; height:0px; border:0px"></iframe>';var div=$a(parent,'div');div.innerHTML='<form method="POST" enctype="multipart/form-data" action="'+outUrl+'" target="'+id+'"></form>';var ul_form=div.childNodes[0];var f_list=[];var inp_fdata=$a_input($a(ul_form,'span'),'file',{name:'filedata'},{marginLeft:'7px'});if(!('cmd'in args)){var inp=$a_input($a(ul_form,'span'),'hidden',{name:'cmd'});inp.value='uploadfile';}
|
||||
var inp=$a_input($a(ul_form,'span'),'hidden',{name:'uploader_id'});inp.value=id;var inp=$a_input($a(ul_form,'span'),'submit',null,{marginLeft:'7px'});inp.value='Upload';$y(inp,{width:'80px'});for(var key in args){var inp=$a_input($a(ul_form,'span'),'hidden',{name:key});inp.value=args[key];}
|
||||
uploaders[id]=this;}
|
||||
function upload_callback(id,fid){uploaders[id].callback(fid);}
|
||||
/*
|
||||
* lib/js/legacy/webpage/page.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/webpage/page.js
|
||||
*/
|
||||
var pages=[];var stylesheets=[];function Page(page_name,content){var me=this;this.name=page_name;this.trigger=function(event){try{if(pscript[event+'_'+this.name])
|
||||
pscript[event+'_'+this.name](this.wrapper);}catch(e){console.log(e);}}
|
||||
this.onshow=function(){set_title(me.doc.title?me.doc.title:me.name);if(!me.onload_complete){me.trigger('onload');me.onload_complete=true;}
|
||||
|
|
@ -781,15 +754,13 @@ page_body.change_to(page_name);return p;}
|
|||
function refresh_page(page_name){var fn=function(r,rt){render_page(page_name)}
|
||||
$c('webnotes.widgets.page.getpage',{'name':page_name,stylesheets:JSON.stringify(stylesheets)},fn);}
|
||||
/*
|
||||
* lib/js/legacy/wn/page_layout.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/wn/page_layout.js
|
||||
*/
|
||||
wn.PageLayout=function(args){$.extend(this,args)
|
||||
this.wrapper=$a(this.parent,'div');this.wtab=make_table(this.wrapper,1,2,'100%',[this.main_width,this.sidebar_width]);this.main=$a($td(this.wtab,0,0),'div','layout_wrapper');this.sidebar_area=$a($td(this.wtab,0,1),'div');this.head=$a(this.main,'div');this.toolbar_area=$a(this.main,'div');this.body=$a(this.main,'div');this.footer=$a(this.main,'div');if(this.heading){this.page_head=new PageHeader(this.head,this.heading);}}
|
||||
/*
|
||||
* lib/js/legacy/wn/widgets/page_sidebar.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/wn/widgets/page_sidebar.js
|
||||
*/
|
||||
wn.widgets.PageSidebar=function(parent,opts){this.opts=opts
|
||||
this.sections={}
|
||||
this.wrapper=$a(parent,'div','psidebar-wrapper')
|
||||
|
|
@ -814,17 +785,15 @@ this.ln=$a(this.wrapper,'span','link_type psidebar-section-link',opts.style,opts
|
|||
wn.widgets.PageSidebarButton=function(section,opts,wrapper){this.wrapper=wrapper;this.section=section;this.opts=opts;var me=this;this.btn=$btn(this.wrapper,opts.label,opts.onclick,opts.style,opts.color);}
|
||||
wn.widgets.PageSidebarHTML=function(section,opts,wrapper){wrapper.innerHTML=opts.content}
|
||||
/*
|
||||
* lib/js/legacy/wn/widgets/footer.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/wn/widgets/footer.js
|
||||
*/
|
||||
wn.widgets.Footer=function(args){$.extend(this,args);this.make=function(){this.wrapper=$a(this.parent,'div','std-footer');this.table=make_table(this.wrapper,1,this.columns,[],{width:100/this.columns+'%'});this.render_items();}
|
||||
this.render_items=function(){for(var i=0;i<this.items.length;i++){var item=this.items[i];var div=$a($td(this.table,0,item.column),'div','std-footer-item');div.label=$a($a(div,'div'),'span','link_type','',item.label);div.label.onclick=item.onclick;if(item.description){div.description=$a(div,'div','field_description','',item.description);}}}
|
||||
if(this.items)
|
||||
this.make();}
|
||||
/*
|
||||
* lib/js/legacy/model/local_data.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/model/local_data.js
|
||||
*/
|
||||
var locals={'DocType':{}};var fields={};var fields_list={};var LocalDB={};var READ=0;var WRITE=1;var CREATE=2;var SUBMIT=3;var CANCEL=4;var AMEND=5;LocalDB.getchildren=function(child_dt,parent,parentfield,parenttype){var l=[];for(var key in locals[child_dt]){var d=locals[child_dt][key];if((d.parent==parent)&&(d.parentfield==parentfield)){if(parenttype){if(d.parenttype==parenttype)l.push(d);}else{l.push(d);}}}
|
||||
l.sort(function(a,b){return(cint(a.idx)-cint(b.idx))});return l;}
|
||||
LocalDB.add=function(dt,dn){if(!locals[dt])locals[dt]={};if(locals[dt][dn])delete locals[dt][dn];locals[dt][dn]={'name':dn,'doctype':dt,'docstatus':0};return locals[dt][dn];}
|
||||
|
|
@ -888,9 +857,8 @@ else
|
|||
return label}
|
||||
var getchildren=LocalDB.getchildren;var get_field=Meta.get_field;var createLocal=LocalDB.create;
|
||||
/*
|
||||
* lib/js/legacy/model/doclist.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/model/doclist.js
|
||||
*/
|
||||
function compress_doclist(list){var kl={};var vl=[];var flx={};for(var i=0;i<list.length;i++){var o=list[i];var fl=[];if(!kl[o.doctype]){var tfl=['doctype','name','docstatus','owner','parent','parentfield','parenttype','idx','creation','modified','modified_by','__islocal','__deleted','__newname','__modified','_user_tags'];var fl=['doctype','name','docstatus','owner','parent','parentfield','parenttype','idx','creation','modified','modified_by','__islocal','__deleted','__newname','__modified','_user_tags'];for(key in fields[o.doctype]){if(!in_list(fl,key)&&!in_list(no_value_fields,fields[o.doctype][key].fieldtype)&&!fields[o.doctype][key].no_column){fl[fl.length]=key;tfl[tfl.length]=key}}
|
||||
flx[o.doctype]=fl;kl[o.doctype]=tfl}
|
||||
var nl=[];var fl=flx[o.doctype];for(var j=0;j<fl.length;j++){var v=o[fl[j]];nl.push(v);}
|
||||
|
|
@ -912,9 +880,8 @@ if(all_clear)all_clear=false;}}
|
|||
if(errfld.length)msgprint('<b>Mandatory fields required in '+
|
||||
(doc.parenttype?(fields[doc.parenttype][doc.parentfield].label+' (Table)'):get_doctype_label(doc.doctype))+':</b>\n'+errfld.join('\n'));return all_clear;}
|
||||
/*
|
||||
* lib/js/legacy/webpage/body.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/webpage/body.js
|
||||
*/
|
||||
function Body(){this.left_sidebar=null;this.right_sidebar=null;this.status_area=null;var me=this;page_body=this;this.no_of_columns=function(){var n=2;if(cint(me&&me.cp&&me.cp.right_sidebar_width))
|
||||
n=n+1;return n;}
|
||||
this.ready=function(){$dh('startup_div');$ds('body_div');}
|
||||
|
|
@ -939,9 +906,8 @@ this.status_area.innerHTML=txt;}
|
|||
this.set_session_changed=function(){if(this.session_message_set)return;var div=$a($i('body_div').parentNode,'div','',{textAlign:'center',fontSize:'14px',margin:'150px auto'});$dh('body_div');div.innerHTML='This session has been changed. Please <span class="link_type" onclick="window.location.reload()">refresh</span> to continue';this.session_message_set=1;}
|
||||
this.setup();}
|
||||
/*
|
||||
* lib/js/legacy/app.js
|
||||
*/
|
||||
|
||||
* lib/js/legacy/app.js
|
||||
*/
|
||||
var popup_cont;var session={};var start_sid=null;if(!wn)var wn={};function startup(){start_sid=get_cookie('sid');popup_cont=$a(document.getElementsByTagName('body')[0],'div');var setup_globals=function(r){wn.boot=r;profile=r.profile;user=r.profile.name;user_fullname=profile.first_name+(r.profile.last_name?(' '+r.profile.last_name):'');user_defaults=profile.defaults;user_roles=profile.roles;user_email=profile.email;profile.start_items=r.start_items;home_page=r.home_page;_p.letter_heads=r.letter_heads;sys_defaults=r.sysdefaults;session.rt=profile.can_read;if(r.ipinfo)session.ipinfo=r.ipinfo;session.dt_labels=r.dt_labels;session.rev_dt_labels={}
|
||||
_tags.color_map=r.tag_color_map;if(r.dt_labels){for(key in r.dt_labels)session.rev_dt_labels[r.dt_labels[key]]=key;}
|
||||
wn.control_panel=r.control_panel;}
|
||||
|
|
@ -953,7 +919,10 @@ var callback=function(r,rt){if(r.exc)console.log(r.exc);setup_globals(r);setup_h
|
|||
if(get_url_arg('embed')){newdoc(get_url_arg('embed'));return;}
|
||||
var t=to_open();if(t){historyChange(t);}else if(home_page){loadpage(home_page);}
|
||||
page_body.ready();}
|
||||
if(_startup_data&&keys(_startup_data).length&&_startup_data.docs){LocalDB.sync(_startup_data.docs);callback(_startup_data,'');if(_startup_data.server_messages)msgprint(_startup_data.server_messages);}else{if($i('startup_div'))
|
||||
if(wn.boot){LocalDB.sync(wn.boot.docs);callback(wn.boot,'');if(wn.boot.error_messages)
|
||||
console.log(wn.boot.error_messages)
|
||||
if(wn.boot.server_messages)
|
||||
msgprint(wn.boot.server_messages);}else{if($i('startup_div'))
|
||||
$c('startup',{},callback,null,1);}}
|
||||
function to_open(){if(get_url_arg('page'))
|
||||
return get_url_arg('page');var h=location.hash;if(h){return h.substr(1);}}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
// provide a namespace
|
||||
wn = {}
|
||||
if(!window.wn)wn = {}
|
||||
wn.provide = function(namespace) {
|
||||
var nsl = namespace.split('.');
|
||||
var l = nsl.length;
|
||||
|
|
|
|||
35
js/wn/ui/toolbar.min.js
vendored
35
js/wn/ui/toolbar.min.js
vendored
|
|
@ -1,8 +1,7 @@
|
|||
|
||||
/*
|
||||
* lib/js/bootstrap/bootstrap-dropdown.js
|
||||
*/
|
||||
/* ============================================================
|
||||
* lib/js/bootstrap/bootstrap-dropdown.js
|
||||
*//* ============================================================
|
||||
* bootstrap-dropdown.js v1.4.0
|
||||
* http://twitter.github.com/bootstrap/javascript.html#dropdown
|
||||
* ============================================================
|
||||
|
|
@ -59,31 +58,26 @@
|
|||
}( window.jQuery || window.ender );
|
||||
|
||||
/*
|
||||
* lib/js/wn/ui/toolbar/selector_dialog.js
|
||||
*/
|
||||
|
||||
* lib/js/wn/ui/toolbar/selector_dialog.js
|
||||
*/
|
||||
wn.ui.toolbar.SelectorDialog=Class.extend({init:function(opts){this.opts=opts;try{this.make_dialog();}catch(e){console.log(e);}
|
||||
this.bind_events();},make_dialog:function(){this.dialog=new wn.widgets.Dialog({title:this.opts.title,width:300,fields:[{fieldtype:'Select',fieldname:'doctype',options:'Select...',label:'Select Type'},{fieldtype:'Button',label:'Go',fieldname:'go'}]});},bind_events:function(){var me=this;$(this.dialog.fields_dict.go.input).click(function(){me.dialog.hide();me.opts.execute(me.dialog.fields_dict.doctype.get_value());});$(this.dialog.fields_dict.doctype.input).change(function(){me.dialog.fields_dict.go.input.click();}).keypress(function(ev){if(ev.which==13){me.dialog.fields_dict.go.input.click();}});},show:function(){this.dialog.show();this.dialog.fields_dict.doctype.input.focus();return false;},set_values:function(lst){for(var i=0;i<lst.length;i++)
|
||||
lst[i]=get_doctype_label(lst[i]);var sel=this.dialog.fields_dict.doctype.input;$(sel).empty();add_sel_options(sel,lst.sort());}})
|
||||
/*
|
||||
* lib/js/wn/ui/toolbar/new.js
|
||||
*/
|
||||
|
||||
* lib/js/wn/ui/toolbar/new.js
|
||||
*/
|
||||
wn.ui.toolbar.NewDialog=wn.ui.toolbar.SelectorDialog.extend({init:function(){this._super({title:"New Record",execute:function(val){new_doc(val);},});this.set_values(profile.can_create.join(',').split(','));}});wn.ui.toolbar.new_dialog=new wn.ui.toolbar.NewDialog();
|
||||
/*
|
||||
* lib/js/wn/ui/toolbar/search.js
|
||||
*/
|
||||
|
||||
* lib/js/wn/ui/toolbar/search.js
|
||||
*/
|
||||
wn.ui.toolbar.Search=wn.ui.toolbar.SelectorDialog.extend({init:function(){this._super({title:"Search",execute:function(val){selector.set_search(val);selector.show();},});this.set_values(profile.can_read.join(',').split(','));makeselector();}});wn.ui.toolbar.search=new wn.ui.toolbar.Search();
|
||||
/*
|
||||
* lib/js/wn/ui/toolbar/report.js
|
||||
*/
|
||||
|
||||
* lib/js/wn/ui/toolbar/report.js
|
||||
*/
|
||||
wn.ui.toolbar.Report=wn.ui.toolbar.SelectorDialog.extend({init:function(){this._super({title:"Start Report For",execute:function(val){loadreport(val,null,null,null,1);},});this.set_values(profile.can_get_report.join(',').split(','));}});wn.ui.toolbar.report=new wn.ui.toolbar.Report();
|
||||
/*
|
||||
* lib/js/wn/ui/toolbar/recent.js
|
||||
*/
|
||||
|
||||
* lib/js/wn/ui/toolbar/recent.js
|
||||
*/
|
||||
wn.ui.toolbar.RecentDocs=Class.extend({init:function(){$('.topbar .nav:first').append('<li class="dropdown">\
|
||||
<a class="dropdown-toggle" href="#" onclick="return false;">Recent</a>\
|
||||
<ul class="dropdown-menu" id="toolbar-recent"></ul>\
|
||||
|
|
@ -95,9 +89,8 @@ catch(e){return;}
|
|||
var m=rlist.length;if(m>15)m=15;for(var i=0;i<m;i++){var rd=rlist[i]
|
||||
if(rd[1]){var dt=rd[0];var dn=rd[1];this.add(dt,dn,0);}}}});
|
||||
/*
|
||||
* lib/js/wn/ui/toolbar/toolbar.js
|
||||
*/
|
||||
|
||||
* lib/js/wn/ui/toolbar/toolbar.js
|
||||
*/
|
||||
wn.require('lib/css/bootstrap/bootstrap-topbar.css');wn.ui.toolbar.Toolbar=Class.extend({init:function(){this.make();this.make_home();this.make_new();this.make_search();this.make_report();wn.ui.toolbar.recent=new wn.ui.toolbar.RecentDocs();if(in_list(user_roles,'Administrator'))
|
||||
this.make_options();this.make_tools();this.make_logout();$('.topbar').dropdown();$(document).trigger('toolbar_setup');},make:function(){$('header').append('<div class="topbar">\
|
||||
<div class="topbar-inner">\
|
||||
|
|
|
|||
|
|
@ -7,6 +7,8 @@ wn.versions = {
|
|||
if(window._version_number==-1 || parseInt(localStorage._version_number)
|
||||
!= parseInt(window._version_number)) {
|
||||
localStorage.clear();
|
||||
console.log("Cache cleared - version: " + _version_number
|
||||
+ ' to ' + localStorage._version_number)
|
||||
}
|
||||
localStorage.setItem('_version_number', window._version_number);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ class Bundle:
|
|||
data = "\nwn.assets.handler.css('%s');\n" %\
|
||||
data.replace("'", "\\'").replace('\n', '\\\n')
|
||||
|
||||
outtxt += ('\n/*\n*\t%s\n*/\n' % f)
|
||||
outtxt += ('\n/*\n *\t%s\n */' % f)
|
||||
|
||||
# append
|
||||
if suffix=='concat' or out_type != 'js':
|
||||
|
|
|
|||
|
|
@ -1,80 +1,43 @@
|
|||
verbose = False
|
||||
import os
|
||||
import os
|
||||
|
||||
class Project:
|
||||
"""
|
||||
Build a project
|
||||
Make files::
|
||||
|
||||
index.html
|
||||
assets/template.html
|
||||
assets/js/core.min.js
|
||||
assets/timestamps.json
|
||||
"""
|
||||
def __init__(self):
|
||||
"""
|
||||
load libraries
|
||||
"""
|
||||
from py.build.bundle import Bundle
|
||||
self.bundle = Bundle()
|
||||
|
||||
def getversion(self):
|
||||
"""get from version.num file and increment it"""
|
||||
|
||||
if os.path.exists('version.num'):
|
||||
with open('version.num', 'r') as vfile:
|
||||
self.version = int(vfile.read()) + 1
|
||||
else:
|
||||
self.version = 1
|
||||
|
||||
with open('version.num', 'w') as vfile:
|
||||
vfile.write(str(self.version))
|
||||
|
||||
return self.version
|
||||
|
||||
def boot(self):
|
||||
"""
|
||||
returns bootstrap js
|
||||
"""
|
||||
import json
|
||||
|
||||
corejs = open('lib/js/core.min.js', 'r')
|
||||
boot = ('window._version_number="%s";' % str(self.getversion())) + \
|
||||
'\n' + corejs.read()
|
||||
|
||||
corejs.close()
|
||||
|
||||
return boot
|
||||
|
||||
def render_templates(self):
|
||||
"""
|
||||
Generate static files from templates
|
||||
"""
|
||||
# render templates
|
||||
boot = self.boot()
|
||||
for wt in os.walk('templates'):
|
||||
for fname in wt[2]:
|
||||
if fname.split('.')[-1]=='html' and not fname.startswith('template'):
|
||||
fpath = os.path.relpath(os.path.join(wt[0], fname), 'templates')
|
||||
|
||||
with open(os.path.join(wt[0], fname), 'r') as tempfile:
|
||||
temp = tempfile.read()
|
||||
|
||||
temp = temp % boot
|
||||
|
||||
with open(fpath, 'w') as outfile:
|
||||
outfile.write(temp)
|
||||
|
||||
print "Rendered %s | %.2fkb" % (fpath, os.path.getsize(fpath) / 1024.0)
|
||||
|
||||
|
||||
def build(self):
|
||||
"""
|
||||
build js files, index.html
|
||||
"""
|
||||
for wt in os.walk('lib'):
|
||||
for fname in wt[2]:
|
||||
if fname=='build.json':
|
||||
self.bundle.make(os.path.join(wt[0], fname))
|
||||
def build():
|
||||
"""concat / minify js files"""
|
||||
from py.build.bundle import Bundle
|
||||
bundle = Bundle()
|
||||
for wt in os.walk('lib'):
|
||||
for fname in wt[2]:
|
||||
if fname=='build.json':
|
||||
bundle.make(os.path.join(wt[0], fname))
|
||||
|
||||
self.render_templates()
|
||||
increment_version()
|
||||
|
||||
def get_version():
|
||||
"""get from version.num file and increment it"""
|
||||
if os.path.exists('version.num'):
|
||||
with open('version.num', 'r') as vfile:
|
||||
version = int(vfile.read()) + 1
|
||||
else:
|
||||
version = 1
|
||||
|
||||
return version
|
||||
|
||||
def increment_version():
|
||||
"""incremenet version by 1"""
|
||||
version = get_version()
|
||||
with open('version.num', 'w') as vfile:
|
||||
vfile.write(str(version))
|
||||
|
||||
return version
|
||||
|
||||
def get_corejs():
|
||||
"""return corejs with version number"""
|
||||
import json
|
||||
|
||||
corejs = open('lib/js/core.min.js', 'r')
|
||||
boot = ('window._version_number="%s";' % str(get_version())) + \
|
||||
'\n' + corejs.read()
|
||||
|
||||
corejs.close()
|
||||
|
||||
return boot
|
||||
|
|
@ -6,7 +6,7 @@ pscript['onload_Login Page'] = function(){
|
|||
pscript.login_btn = $btn('login_btn', 'Login', pscript.doLogin);
|
||||
$(pscript.login_btn).addClass('primary');
|
||||
|
||||
$('#login_wrapper').keyup(function(ev){
|
||||
$('#password').keypress(function(ev){
|
||||
if(ev.which==13 && $('#password').value)
|
||||
pscript.doLogin();
|
||||
})
|
||||
|
|
@ -20,7 +20,7 @@ pscript['onshow_Login Page'] = function() {
|
|||
pscript.onLoginReply = function(r, rtext) {
|
||||
pscript.login_btn.done_working();
|
||||
if(r.message=="Logged In"){
|
||||
window.location.href='index.html' + (get_url_arg('page') ? ('?page='+get_url_arg('page')) : '');
|
||||
window.location.href='index.cgi' + (get_url_arg('page') ? ('?page='+get_url_arg('page')) : '');
|
||||
} else {
|
||||
$i('login_message').innerHTML = '<span style="color: RED;">'+(r.message)+'</span>';
|
||||
//if(r.exc)alert(r.exc);
|
||||
|
|
|
|||
|
|
@ -1,18 +1,8 @@
|
|||
#
|
||||
# import modules path
|
||||
#
|
||||
import os, sys
|
||||
"""
|
||||
globals attached to webnotes module
|
||||
+ some utility functions that should probably be moved
|
||||
"""
|
||||
|
||||
try:
|
||||
import webnotes.defs
|
||||
m = getattr(webnotes.defs,'modules_path',None)
|
||||
m and sys.path.append(m)
|
||||
except Exception,e:
|
||||
raise e
|
||||
|
||||
#
|
||||
# map for identifying which field values come from files
|
||||
#
|
||||
code_fields_dict = {
|
||||
'Page':[('script', 'js'), ('content', 'html'), ('style', 'css'), ('static_content', 'html'), ('server_code', 'py')],
|
||||
'DocType':[('server_code_core', 'py'), ('client_script_core', 'js')],
|
||||
|
|
@ -23,81 +13,43 @@ code_fields_dict = {
|
|||
'Control Panel':[('startup_code', 'js'), ('startup_css', 'css')]
|
||||
}
|
||||
|
||||
#
|
||||
# globals
|
||||
#
|
||||
#: "v170"
|
||||
version = 'v170'
|
||||
form_dict = {}
|
||||
auth_obj = None
|
||||
|
||||
#: The database connection :class:`webnotes.db.Database` setup by :mod:`auth`
|
||||
conn = None
|
||||
|
||||
#: The cgi.FieldStorage() object (Dictionary representing the formdata from the URL)
|
||||
form = None
|
||||
|
||||
session = None
|
||||
"""
|
||||
Global session dictionary.
|
||||
|
||||
* session['user'] - Current user
|
||||
* session['data'] - Returns a dictionary of the session cache
|
||||
"""
|
||||
|
||||
user = None
|
||||
is_testing = None
|
||||
""" Flag to identify if system is in :term:`Testing Mode` """
|
||||
|
||||
incoming_cookies = {}
|
||||
add_cookies = {}
|
||||
""" Dictionary of additional cookies appended by custom code """
|
||||
|
||||
add_cookies = {} # append these to outgoing request
|
||||
cookies = {}
|
||||
auto_masters = {}
|
||||
tenant_id = None
|
||||
response = {'message':'', 'exc':''}
|
||||
debug_log = []
|
||||
message_log = []
|
||||
|
||||
from webnotes.utils import cstr
|
||||
|
||||
#
|
||||
# Custom Class (no traceback)
|
||||
#
|
||||
class ValidationError(Exception):
|
||||
pass
|
||||
|
||||
#
|
||||
# HTTP standard response
|
||||
#
|
||||
response = {'message':'', 'exc':''}
|
||||
"""
|
||||
The JSON response object. Default is::
|
||||
|
||||
{'message':'', 'exc':''}
|
||||
"""
|
||||
|
||||
#
|
||||
# the logs
|
||||
#
|
||||
debug_log = []
|
||||
""" List of exceptions to be shown in the :term:`Error Console` """
|
||||
|
||||
message_log = []
|
||||
""" List of messages to be shown to the user in a popup box at the end of the request """
|
||||
|
||||
def getTraceback():
|
||||
import webnotes.utils
|
||||
return webnotes.utils.getTraceback()
|
||||
import utils
|
||||
return utils.getTraceback()
|
||||
|
||||
def errprint(msg):
|
||||
"""
|
||||
Append to the :data:`debug log`
|
||||
"""
|
||||
from utils import cstr
|
||||
debug_log.append(cstr(msg or ''))
|
||||
|
||||
def msgprint(msg, small=0, raise_exception=0, as_table=False):
|
||||
"""
|
||||
Append to the :data:`message_log`
|
||||
"""
|
||||
from utils import cstr
|
||||
if as_table and type(msg) in (list, tuple):
|
||||
msg = '<table border="1px" style="border-collapse: collapse" cellpadding="2px">' + ''.join(['<tr>'+''.join(['<td>%s</td>' % c for c in r])+'</tr>' for r in msg]) + '</table>'
|
||||
|
||||
|
|
@ -118,9 +70,7 @@ def get_index_path():
|
|||
return os.sep.join(os.path.dirname(os.path.abspath(__file__)).split(os.sep)[:-2])
|
||||
|
||||
def get_files_path():
|
||||
global conn
|
||||
import defs, os
|
||||
|
||||
import defs
|
||||
if not conn:
|
||||
raise Exception, 'You must login first'
|
||||
|
||||
|
|
@ -143,7 +93,6 @@ def create_folder(path):
|
|||
else:
|
||||
raise e
|
||||
|
||||
|
||||
def connect(db_name=None):
|
||||
"""
|
||||
Connect to this db (or db), if called from command prompt
|
||||
|
|
@ -162,46 +111,16 @@ def connect(db_name=None):
|
|||
global user
|
||||
user = webnotes.profile.Profile('Administrator')
|
||||
|
||||
|
||||
# Environment Variables
|
||||
#-----------------------------------------------------------
|
||||
def get_env_vars(env_var):
|
||||
import os
|
||||
return os.environ.get(env_var,'None')
|
||||
|
||||
remote_ip = get_env_vars('REMOTE_ADDR') #Required for login from python shell
|
||||
|
||||
# Logging
|
||||
# -----------------------------------------------------------
|
||||
|
||||
logger = None
|
||||
|
||||
|
||||
def setup_logging():
|
||||
import logging
|
||||
import logging.handlers
|
||||
# Also please set umask for apache to 002.
|
||||
global logger
|
||||
|
||||
try:
|
||||
logger = logging.getLogger('WNLogger')
|
||||
logger.setLevel(eval(defs.log_level))
|
||||
|
||||
log_handler = logging.handlers.RotatingFileHandler(defs.log_file_name, maxBytes = defs.log_file_size, backupCount = defs.log_file_backup_count)
|
||||
formatter = logging.Formatter('%(name)s - %(asctime)s - %(levelname)s\n%(message)s\n-------------------')
|
||||
|
||||
log_handler.setFormatter(formatter)
|
||||
logger.addHandler(log_handler)
|
||||
|
||||
except IOError,e:
|
||||
if e.args == 13:
|
||||
open(defs.log_file_name).close()
|
||||
|
||||
|
||||
if getattr(defs, 'log_file_name', None):
|
||||
setup_logging()
|
||||
|
||||
def get_db_password(db_name):
|
||||
from webnotes import defs
|
||||
import defs
|
||||
|
||||
if hasattr(defs, 'get_db_password'):
|
||||
return defs.get_db_password(db_name)
|
||||
|
||||
|
|
|
|||
|
|
@ -39,7 +39,6 @@ class HTTPRequest:
|
|||
# start session
|
||||
webnotes.session_obj = Session()
|
||||
webnotes.session = webnotes.session_obj.data
|
||||
webnotes.tenant_id = webnotes.session.get('tenant_id', 0)
|
||||
|
||||
# write out cookies if sid is supplied (this is a pre-logged in redirect)
|
||||
if webnotes.form_dict.get('sid'):
|
||||
|
|
@ -316,15 +315,8 @@ class Session:
|
|||
def load(self):
|
||||
import webnotes
|
||||
|
||||
r=None
|
||||
try:
|
||||
r = webnotes.conn.sql("""select user, sessiondata, status from
|
||||
tabSessions where sid='%s'""" % self.sid)
|
||||
except Exception, e:
|
||||
if e.args[0]==1054:
|
||||
self.add_status_column()
|
||||
else:
|
||||
raise e
|
||||
r = webnotes.conn.sql("""select user, sessiondata, status from
|
||||
tabSessions where sid='%s'""" % self.sid)
|
||||
|
||||
if r:
|
||||
r=r[0]
|
||||
|
|
@ -419,13 +411,6 @@ class Session:
|
|||
# clear out old sessions
|
||||
webnotes.conn.sql("delete from tabSessions where TIMEDIFF(NOW(), lastupdate) > '72:00:00'")
|
||||
|
||||
# -----------------------------
|
||||
def add_status_column(self):
|
||||
webnotes.conn.commit()
|
||||
webnotes.conn.sql("alter table tabSessions add column `status` varchar(20)")
|
||||
webnotes.conn.begin()
|
||||
|
||||
|
||||
# Get IP Info from ipinfodb.com
|
||||
# -----------------------------
|
||||
def get_ipinfo(self):
|
||||
|
|
|
|||
|
|
@ -8,9 +8,8 @@ def get_bootinfo():
|
|||
import webnotes
|
||||
bootinfo = {}
|
||||
doclist = []
|
||||
|
||||
webnotes.conn.begin()
|
||||
|
||||
webnotes.conn.begin()
|
||||
# profile
|
||||
get_profile(bootinfo)
|
||||
|
||||
|
|
@ -59,10 +58,10 @@ def get_home_page(bootinfo, doclist):
|
|||
home_page = webnotes.user.get_home_page()
|
||||
if home_page:
|
||||
import webnotes.widgets.page
|
||||
page_doclist = webnotes.widgets.page.get(home_page)
|
||||
doclist += webnotes.widgets.page.get(home_page)
|
||||
bootinfo['home_page'] = home_page or ''
|
||||
|
||||
|
||||
bootinfo['home_page_html'] = page_doclist[0].content
|
||||
|
||||
def get_dt_labels():
|
||||
import webnotes
|
||||
|
|
|
|||
|
|
@ -39,13 +39,6 @@ def runserverobj(arg=None):
|
|||
def logout():
|
||||
webnotes.login_manager.logout()
|
||||
|
||||
# versions
|
||||
# --------
|
||||
|
||||
def get_diff():
|
||||
v = webnotes.form_dict.get('version_number')
|
||||
from build.version import VersionControl
|
||||
webnotes.response['message'] = VersionControl().repo.diff(v)
|
||||
|
||||
# DocType Mapper
|
||||
# ------------------------------------------------------------------------------------
|
||||
|
|
@ -166,27 +159,6 @@ def get_file():
|
|||
webnotes.response['filecontent'] = res[1]
|
||||
else:
|
||||
webnotes.msgprint('[get_file] Unknown file name')
|
||||
|
||||
# Get Graph
|
||||
# ------------------------------------------------------------------------------------
|
||||
def get_graph():
|
||||
form = webnotes.form
|
||||
|
||||
import StringIO
|
||||
f = StringIO.StringIO()
|
||||
|
||||
# call the object
|
||||
obj = server.get_obj(form_dict.get('dt'))
|
||||
plt = server.run_server_obj(obj, form_dict.get('method'), form_dict.get('arg'))
|
||||
plt.savefig(f)
|
||||
|
||||
# stream out
|
||||
webnotes.response['type'] = 'download'
|
||||
webnotes.response['filename'] = webnotes.user.get_random_password() + '.png'
|
||||
webnotes.response['filecontent'] = f.getvalue()
|
||||
|
||||
# Reset Password
|
||||
# ------------------------------------------------------------------------------------
|
||||
|
||||
def reset_password():
|
||||
form_dict = webnotes.form_dict
|
||||
|
|
@ -199,27 +171,59 @@ def reset_password():
|
|||
else:
|
||||
webnotes.msgprint("No such user (%s)", user)
|
||||
|
||||
# Resume session
|
||||
# ------------------------------------------------------------------------------------
|
||||
|
||||
def resume_session():
|
||||
webnotes.response['message'] = webnotes.session_obj.resume()
|
||||
def handle():
|
||||
"""handle request"""
|
||||
cmd = webnotes.form_dict['cmd']
|
||||
|
||||
# -------------
|
||||
# Create Backup
|
||||
# -------------
|
||||
if cmd!='login':
|
||||
# login executed in webnotes.auth
|
||||
try:
|
||||
execute_cmd(cmd)
|
||||
except webnotes.ValidationError:
|
||||
webnotes.conn.rollback()
|
||||
except:
|
||||
webnotes.errprint(webnotes.utils.getTraceback())
|
||||
webnotes.conn and webnotes.conn.rollback()
|
||||
|
||||
if webnotes.conn:
|
||||
webnotes.conn.close()
|
||||
|
||||
print_response()
|
||||
|
||||
def backupdb(form_dict, session):
|
||||
db_name = server.decrypt(form_dict.get('db_name'))
|
||||
def execute_cmd(cmd):
|
||||
"""execute a request as python module"""
|
||||
validate_cmd(cmd)
|
||||
method = get_method(cmd)
|
||||
|
||||
server.backup_db(db_name)
|
||||
if not webnotes.conn.in_transaction:
|
||||
webnotes.conn.begin()
|
||||
|
||||
webnotes.response['type'] = 'download'
|
||||
webnotes.response['filename'] = db_name+'.tar.gz'
|
||||
webnotes.response['filecontent'] = open('../backups/' + db_name+'.tar.gz','rb').read()
|
||||
if 'arg' in webnotes.form_dict:
|
||||
# direct method call
|
||||
ret = method(webnotes.form_dict.get('arg'))
|
||||
else:
|
||||
ret = method()
|
||||
|
||||
# ---------------------------------------------------------------------
|
||||
# returns with a message
|
||||
if ret:
|
||||
webnotes.response['message'] = ret
|
||||
|
||||
# update session
|
||||
webnotes.session_obj.update()
|
||||
|
||||
if webnotes.conn.in_transaction:
|
||||
webnotes.conn.commit()
|
||||
|
||||
def get_method(cmd):
|
||||
"""get method object from cmd"""
|
||||
if '.' in cmd:
|
||||
module = __import__('.'.join(cmd.split('.')[:-1]), fromlist=[''])
|
||||
method = getattr(module, cmd.split('.')[-1])
|
||||
else:
|
||||
method = globals()[cmd]
|
||||
return method
|
||||
|
||||
def validate_cmd(cmd):
|
||||
# check if there is no direct possibility of malicious script injection
|
||||
if cmd.startswith('webnotes.model.code'):
|
||||
|
|
@ -230,145 +234,27 @@ def validate_cmd(cmd):
|
|||
|
||||
if cmd.startswith('webnotes.conn'):
|
||||
raise Exception, 'Cannot call database connection method directly from the handler'
|
||||
|
||||
# Execution Starts Here
|
||||
# ---------------------------------------------------------------------
|
||||
|
||||
import webnotes.auth
|
||||
import webnotes.db
|
||||
|
||||
# reset password
|
||||
# ---------------------------------------------------------------------
|
||||
|
||||
if form_dict.has_key('cmd') and (form_dict.get('cmd')=='reset_password'):
|
||||
webnotes.conn = webnotes.db.Database(use_default = 1)
|
||||
sql = webnotes.conn.sql
|
||||
sql("START TRANSACTION")
|
||||
try:
|
||||
reset_password()
|
||||
sql("COMMIT")
|
||||
except Exception, e:
|
||||
webnotes.errprint(str(e))
|
||||
sql("ROLLBACK")
|
||||
|
||||
# pre-login access - for registration etc.
|
||||
# ---------------------------------------------------------------------
|
||||
|
||||
elif form_dict.has_key('cmd') and (form_dict.get('cmd')=='prelogin'):
|
||||
webnotes.conn = webnotes.db.Database(use_default = 1)
|
||||
sql = webnotes.conn.sql
|
||||
webnotes.session = {'user':'Administrator'}
|
||||
|
||||
import webnotes.model.code
|
||||
|
||||
sql("START TRANSACTION")
|
||||
try:
|
||||
webnotes.response['message'] = webnotes.model.code.get_obj('Profile Control').prelogin(form_dict) or ''
|
||||
sql("COMMIT")
|
||||
except:
|
||||
webnotes.errprint(webnotes.utils.getTraceback())
|
||||
sql("ROLLBACK")
|
||||
|
||||
# main stuff
|
||||
# ---------------------------------------------------------------------
|
||||
|
||||
else:
|
||||
|
||||
try:
|
||||
webnotes.request = webnotes.auth.HTTPRequest()
|
||||
|
||||
if form_dict.get('cmd') != 'login' and webnotes.conn:
|
||||
sql = webnotes.conn.sql
|
||||
|
||||
# NOTE:
|
||||
# guest should only be allowed:
|
||||
# getdoc (if Guest access)
|
||||
# runserverobj (if Guest access)
|
||||
def print_response():
|
||||
import string
|
||||
import os
|
||||
|
||||
if webnotes.response.get('type')=='csv':
|
||||
print_csv()
|
||||
elif webnotes.response.get('type')=='iframe':
|
||||
print_iframe()
|
||||
elif webnotes.response.get('type')=='download':
|
||||
print_raw()
|
||||
else:
|
||||
print_json()
|
||||
|
||||
# get command cmd
|
||||
cmd = form_dict.has_key('cmd') and form_dict.get('cmd') or ''
|
||||
read_only = form_dict.has_key('_read_only') and form_dict.get('_read_only') or None
|
||||
|
||||
validate_cmd(cmd)
|
||||
|
||||
module = ''
|
||||
if '.' in cmd:
|
||||
module = '.'.join(cmd.split('.')[:-1])
|
||||
cmd = cmd.split('.')[-1]
|
||||
|
||||
exec 'from %s import %s' % (module, cmd) in locals()
|
||||
|
||||
|
||||
# execute
|
||||
if locals().has_key(cmd):
|
||||
if (not webnotes.conn.in_transaction) and (not read_only):
|
||||
webnotes.conn.begin()
|
||||
|
||||
if webnotes.form_dict.get('arg'):
|
||||
# direct method call
|
||||
ret = locals()[cmd](webnotes.form_dict.get('arg'))
|
||||
else:
|
||||
ret = locals()[cmd]()
|
||||
|
||||
# returns with a message
|
||||
if ret:
|
||||
webnotes.response['message'] = ret
|
||||
|
||||
# update session
|
||||
webnotes.session_obj.update()
|
||||
|
||||
if webnotes.conn.in_transaction:
|
||||
webnotes.conn.commit()
|
||||
else:
|
||||
if cmd!='login':
|
||||
webnotes.msgprint('No Method: %s' % cmd)
|
||||
|
||||
except webnotes.ValidationError:
|
||||
webnotes.conn.rollback()
|
||||
except:
|
||||
webnotes.errprint(webnotes.utils.getTraceback())
|
||||
webnotes.conn and webnotes.conn.rollback()
|
||||
|
||||
|
||||
#### cleanup
|
||||
#-----------
|
||||
|
||||
if webnotes.conn:
|
||||
webnotes.conn.close()
|
||||
|
||||
#### go
|
||||
|
||||
import string
|
||||
import os
|
||||
|
||||
acceptsGzip, out_buf, str_out = 0, None, None
|
||||
try:
|
||||
if string.find(os.environ["HTTP_ACCEPT_ENCODING"], "gzip") != -1:
|
||||
acceptsGzip = 1 # problem in win ?
|
||||
except:
|
||||
pass
|
||||
|
||||
def compressBuf(buf):
|
||||
import gzip, cStringIO
|
||||
zbuf = cStringIO.StringIO()
|
||||
zfile = gzip.GzipFile(mode = 'wb', fileobj = zbuf, compresslevel = 5)
|
||||
zfile.write(buf)
|
||||
zfile.close()
|
||||
return zbuf.getvalue()
|
||||
|
||||
# CSV
|
||||
# -------------------------------------------------------------------
|
||||
|
||||
if webnotes.response.get('type')=='csv':
|
||||
def print_csv():
|
||||
print "Content-Type: text/csv"
|
||||
print "Content-Disposition: attachment; filename="+webnotes.response['doctype'].replace(' ', '_')+".csv"
|
||||
print
|
||||
print webnotes.response['result']
|
||||
|
||||
# IFRAME
|
||||
# -------------------------------------------------------------------
|
||||
|
||||
elif webnotes.response.get('type')=='iframe':
|
||||
def print_iframe():
|
||||
print "Content-Type: text/html"
|
||||
print
|
||||
if webnotes.response.get('result'):
|
||||
|
|
@ -376,69 +262,63 @@ elif webnotes.response.get('type')=='iframe':
|
|||
if webnotes.debug_log:
|
||||
print '''<script type='text/javascript'>alert("%s");</script>''' % ('-------'.join(webnotes.debug_log).replace('"', '').replace('\n',''))
|
||||
|
||||
# file
|
||||
# -------------------------------------------------------------------
|
||||
|
||||
elif webnotes.response.get('type')=='download':
|
||||
def print_raw():
|
||||
import mimetypes
|
||||
print "Content-Type: %s" % (mimetypes.guess_type(webnotes.response['filename'])[0] or 'application/unknown')
|
||||
print "Content-Disposition: filename="+webnotes.response['filename'].replace(' ', '_')
|
||||
print
|
||||
print webnotes.response['filecontent']
|
||||
|
||||
# JSON
|
||||
# -------------------------------------------------------------------
|
||||
|
||||
else:
|
||||
if webnotes.debug_log:
|
||||
save_log = 1
|
||||
if webnotes.debug_log[0].startswith('[Validation Error]'):
|
||||
save_log = 0
|
||||
|
||||
t = '\n----------------\n'.join(webnotes.debug_log)
|
||||
if errdoctype:
|
||||
t = t + '\nDocType: ' + errdoctype
|
||||
if errdoc:
|
||||
t = t + '\nName: ' + errdoc
|
||||
if errmethod:
|
||||
t = t + '\nMethod: ' + errmethod
|
||||
webnotes.response['exc'] = '<pre>'+t.replace('\n','<br>')+'</pre>'
|
||||
|
||||
if save_log: # don't save validation errors
|
||||
try: save_log(t, 'Server')
|
||||
except: pass
|
||||
|
||||
if webnotes.message_log:
|
||||
webnotes.response['server_messages'] = '\n----------------\n'.join(webnotes.message_log)
|
||||
|
||||
def print_json():
|
||||
make_logs()
|
||||
cleanup_docs()
|
||||
|
||||
# Convert to JSON
|
||||
# ---------------
|
||||
try:
|
||||
import json
|
||||
except: # python 2.4
|
||||
import simplejson as json
|
||||
|
||||
|
||||
import json
|
||||
str_out = json.dumps(webnotes.response)
|
||||
|
||||
if acceptsGzip and 1 and len(str_out)>512:
|
||||
if accept_gzip() and len(str_out)>512:
|
||||
out_buf = compressBuf(str_out)
|
||||
print "Content-Encoding: gzip"
|
||||
print "Content-Length: %d" % (len(out_buf))
|
||||
str_out = out_buf
|
||||
|
||||
print "Content-Type: text/html; charset: utf-8"
|
||||
|
||||
# if there ar additional cookies defined during the request, add them here
|
||||
print_cookies()
|
||||
|
||||
# Headers end
|
||||
print
|
||||
print str_out
|
||||
|
||||
def accept_gzip():
|
||||
"""return true if client accepts gzip"""
|
||||
try:
|
||||
if string.find(os.environ["HTTP_ACCEPT_ENCODING"], "gzip") != -1:
|
||||
return True
|
||||
except:
|
||||
return False
|
||||
|
||||
def make_logs():
|
||||
"""make strings for msgprint and errprint"""
|
||||
if webnotes.debug_log:
|
||||
t = '\n----------------\n'.join(webnotes.debug_log)
|
||||
webnotes.response['exc'] = t
|
||||
|
||||
if webnotes.message_log:
|
||||
t = '\n----------------\n'.join(webnotes.message_log)
|
||||
webnotes.response['server_messages'] = t
|
||||
|
||||
def print_cookies():
|
||||
"""if there ar additional cookies defined during the request, add them"""
|
||||
if webnotes.cookies or webnotes.add_cookies:
|
||||
for c in webnotes.add_cookies.keys():
|
||||
webnotes.cookies[c] = webnotes.add_cookies[c]
|
||||
|
||||
print webnotes.cookies
|
||||
|
||||
print # Headers end
|
||||
|
||||
if out_buf:
|
||||
sys.stdout.write(out_buf)
|
||||
elif str_out:
|
||||
print str_out
|
||||
print webnotes.cookies
|
||||
|
||||
def compressBuf(buf):
|
||||
import gzip, cStringIO
|
||||
zbuf = cStringIO.StringIO()
|
||||
zfile = gzip.GzipFile(mode = 'wb', fileobj = zbuf, compresslevel = 5)
|
||||
zfile.write(buf)
|
||||
zfile.close()
|
||||
return zbuf.getvalue()
|
||||
109
py/webnotes/index.py
Normal file
109
py/webnotes/index.py
Normal file
|
|
@ -0,0 +1,109 @@
|
|||
"""
|
||||
Generate index.cgi html
|
||||
|
||||
Loads index.html from the template with:
|
||||
|
||||
1. bootinfo
|
||||
2. static html of home / if _escaped_fragment_ is given
|
||||
3. top menus and bottom menus
|
||||
|
||||
"""
|
||||
|
||||
import webnotes
|
||||
|
||||
body_html = """
|
||||
<header></header>
|
||||
<div id="startup_div" style="padding: 8px;
|
||||
font-size: 12px; font-family: Arial !important; line-height: 1.6em;">
|
||||
Loading...
|
||||
</div>
|
||||
<!-- Main Starts -->
|
||||
<div id="body_div">
|
||||
</div>
|
||||
<div class="no_script" style="display: none;">
|
||||
%s
|
||||
</div>
|
||||
<footer></footer>
|
||||
<script>wn.require('js/app.js');</script>
|
||||
<div id="dialog_back"></div>
|
||||
"""
|
||||
|
||||
def get():
|
||||
"""get index html"""
|
||||
import webnotes
|
||||
from jinja2 import Template
|
||||
|
||||
with open('lib/conf/index.html', 'r') as f:
|
||||
template = Template(f.read())
|
||||
|
||||
# google crawler
|
||||
if '_escaped_fragment_' in webnotes.form:
|
||||
page = webnotes.form_dict['_escaped_fragment_']
|
||||
if not page:
|
||||
page = webnotes.user.get_home_page()
|
||||
|
||||
return template.render(bootinfo = '', \
|
||||
corejs = '', body_html=html_snapshot(page), ajax_meta_tag = '')
|
||||
|
||||
# home page
|
||||
else:
|
||||
import webnotes.session_cache
|
||||
from build.project import get_corejs
|
||||
import json
|
||||
|
||||
bootinfo = webnotes.session_cache.get()
|
||||
|
||||
# is this needed?
|
||||
home_content = bootinfo['home_page_html']
|
||||
del bootinfo['home_page_html']
|
||||
|
||||
bootinfo = """var wn = {}; wn.boot = %s;""" % json.dumps(bootinfo)
|
||||
|
||||
return template.render(bootinfo = bootinfo, \
|
||||
corejs = get_corejs(), body_html=body_html % '', \
|
||||
ajax_meta_tag = '<meta name="fragment" content="!">')
|
||||
|
||||
def html_snapshot(page):
|
||||
"""get html snapshot for search bot"""
|
||||
from webnotes.widgets.page import get_page_html
|
||||
from webnotes.model.doc import Document
|
||||
|
||||
doc = Document('Top Bar Settings', 'Top Bar Settings')
|
||||
doc.content = get_page_html(page)
|
||||
doc.header_menu = doc.footer_menu = ''
|
||||
doc.page_name = page
|
||||
|
||||
for m in webnotes.conn.sql("""select parentfield, label, std_page, custom_page
|
||||
from `tabTop Bar Item` where parent='Top Bar Settings' order by idx""", as_dict=1):
|
||||
|
||||
if m['custom_page']:
|
||||
m['std_page'] = m['custom_page']
|
||||
|
||||
if m['parentfield']=='top_bar_items':
|
||||
doc.header_menu += '<li><a href="index.cgi#!%(std_page)s">%(label)s</a></li>' % m
|
||||
else:
|
||||
doc.footer_menu += '<li><a href="index.cgi#!%(std_page)s">%(label)s</a></li>' % m
|
||||
|
||||
return """
|
||||
<header>
|
||||
<h3>%(brand_html)s</h3>
|
||||
<ul>
|
||||
%(header_menu)s
|
||||
</ul>
|
||||
</header>
|
||||
%(content)s
|
||||
<footer>
|
||||
<ul>
|
||||
%(footer_menu)s
|
||||
</ul>
|
||||
<div>Address: %(address)s</div>
|
||||
<div>© %(copyright)s</div>
|
||||
<div>Powered by <a href="https://erpnext.com">erpnext.com</a></div>
|
||||
<div style="background-color: #ffc; padding: 7px">
|
||||
This page is for search engines, for standard browsers click
|
||||
<a href="index.cgi#!%(page_name)s">here</a>
|
||||
</div>
|
||||
</footer>
|
||||
""" % doc.fields
|
||||
|
||||
|
||||
|
|
@ -49,11 +49,25 @@ class Installer:
|
|||
webnotes.conn.sq.("""create table `__SessionCache`
|
||||
(user VARCHAR(120), country VARCHAR(120), cache LONGTEXT)""")
|
||||
|
||||
create_sessions_table()
|
||||
|
||||
# set the basic passwords
|
||||
webnotes.conn.begin()
|
||||
webnotes.conn.sql("update tabProfile set password = password('admin') where name='Administrator'")
|
||||
webnotes.conn.commit()
|
||||
|
||||
def create_sessions_table(self):
|
||||
self.dbman.drop_table('tabSessions')
|
||||
webnotes.conn.sql("""CREATE TABLE `tabSessions` (
|
||||
`user` varchar(40) DEFAULT NULL,
|
||||
`sid` varchar(120) DEFAULT NULL,
|
||||
`sessiondata` longtext,
|
||||
`ipaddress` varchar(16) DEFAULT NULL,
|
||||
`lastupdate` datetime DEFAULT NULL,
|
||||
`status` varchar(20) DEFAULT NULL,
|
||||
KEY `sid` (`sid`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8""")
|
||||
|
||||
def import_core_module(self):
|
||||
"""
|
||||
Imports the "Core" module from .txt file and creates
|
||||
|
|
|
|||
|
|
@ -100,13 +100,14 @@ class Profile:
|
|||
"""
|
||||
Get the name of the user's home page from the `Control Panel`
|
||||
"""
|
||||
roles = self.get_roles()
|
||||
hpl = webnotes.conn.sql("select role, home_page from `tabDefault Home Page` where parent='Control Panel' order by idx asc")
|
||||
for h in hpl:
|
||||
if h[0] in roles:
|
||||
return h[1]
|
||||
|
||||
return webnotes.conn.get_value('Control Panel',None,'home_page') or 'Login Page'
|
||||
hpl = webnotes.conn.sql("""select home_page from `tabDefault Home Page`
|
||||
where parent='Control Panel'
|
||||
and role in ('%s') order by idx asc limit 1""" % "', '".join(self.get_roles()))
|
||||
|
||||
if hpl:
|
||||
return hpl[0][0]
|
||||
else:
|
||||
return webnotes.conn.get_value('Control Panel',None,'home_page') or 'Login Page'
|
||||
|
||||
def get_defaults(self):
|
||||
"""
|
||||
|
|
|
|||
|
|
@ -20,6 +20,8 @@ def clear_cache(user=''):
|
|||
webnotes.conn.sql("delete from __SessionCache")
|
||||
webnotes.conn.sql("update tabSessions set sessiondata=NULL")
|
||||
|
||||
# rebuild a cache for guest
|
||||
|
||||
if webnotes.session:
|
||||
webnotes.session['data'] = {}
|
||||
|
||||
|
|
|
|||
|
|
@ -116,4 +116,30 @@ def getpage():
|
|||
|
||||
# send
|
||||
webnotes.response['docs'] = doclist
|
||||
|
||||
def get_page_path(page_name, module):
|
||||
import os
|
||||
import webnotes.defs
|
||||
from webnotes.modules import scrub
|
||||
return os.path.join(webnotes.defs.modules_path, 'erpnext', scrub(module), \
|
||||
'page', scrub(page_name), scrub(page_name) + '.html')
|
||||
|
||||
def get_page_html(page_name):
|
||||
"""get html of page"""
|
||||
p = webnotes.conn.sql("""select module, content from tabPage where name=%s""", \
|
||||
page_name, as_dict=1)
|
||||
|
||||
if not p:
|
||||
return ''
|
||||
else:
|
||||
import os
|
||||
p=p[0]
|
||||
|
||||
path = get_page_path(page_name, p['module'])
|
||||
if os.path.exists(path):
|
||||
with open(path, 'r') as f:
|
||||
return f.read()
|
||||
else:
|
||||
return p['content']
|
||||
|
||||
|
||||
|
|
|
|||
8
wnf.py
8
wnf.py
|
|
@ -43,12 +43,12 @@ def run():
|
|||
cmd = sys.argv[1]
|
||||
|
||||
if cmd=='build':
|
||||
from build.project import Project
|
||||
Project().build()
|
||||
import build.project
|
||||
build.project.build()
|
||||
|
||||
elif cmd=='clear':
|
||||
from build.project import Project
|
||||
Project().render_templates()
|
||||
from build.project import increment_version
|
||||
print "Version:" + str(increment_version())
|
||||
|
||||
# replace code
|
||||
elif cmd=='replace':
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue