// Copyright (c) 2012 Web Notes Technologies Pvt Ltd (http://erpnext.com) // // MIT License (MIT) // // Permission is hereby granted, free of charge, to any person obtaining a // copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the // Software is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, // INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A // PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF // CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE // OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // wn.dom.set_unique_id = function(ele) { var id = 'unique-' + wn.dom.id_count; ele.setAttribute('id', id); wn.dom.id_count++; return id; } // short hand functions for setting up // rich text editor tinymce wn.tinymce = { add_simple: function(ele, height) { if(ele.myid) { tinyMCE.execCommand( 'mceAddControl', true, ele.myid); return; } // no create ele.myid = wn.dom.set_unique_id(ele); $(ele).tinymce({ // Location of TinyMCE script script_url : 'lib/js/legacy/tiny_mce_33/tiny_mce.js', height: height ? height : '200px', // General options 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(); } } wn.ele = { link: function(args) { var span = $a(args.parent, 'span', 'link_type', args.style); span.loading_img = $a(args.parent,'img','',{margin:'0px 4px -2px 4px', display:'none'}); span.loading_img.src= 'lib/images/ui/button-load.gif'; span.innerHTML = args.label; span.user_onclick = args.onclick; span.onclick = function() { if(!this.disabled) this.user_onclick(this); } // working span.set_working = function() { this.disabled = 1; $di(this.loading_img); } span.done_working = function() { this.disabled = 0; $dh(this.loading_img); } return span; } } function $ln(parent, label, onclick, style) { return wn.ele.link({parent:parent, label:label, onclick:onclick, style:style}) } function $btn(parent, label, onclick, style, css_class, is_ajax) { wn.require('lib/js/wn/ui/button.js'); if(css_class==='green') css_class='btn-info'; return new wn.ui.Button( {parent:parent, label:label, onclick:onclick, style:style, is_ajax: is_ajax, css_class: css_class} ).btn; } // item (for tabs and triggers) // ==================================== $item_normal = function(ele) { $y(ele, {padding:'6px 8px',cursor:'pointer',marginRight:'8px', whiteSpace:'nowrap',overflow:'hidden',borderBottom:'1px solid #DDD'}); $bg(ele,'#FFF'); $fg(ele,'#000'); } $item_active = function(ele) { $bg(ele,'#FE8'); $fg(ele,'#000'); } $item_selected = function(ele) { $bg(ele,'#777'); $fg(ele,'#FFF'); } $item_pressed = function(ele) { $bg(ele,'#F90'); $fg(ele,'#FFF'); }; (function($) { $.fn.set_working = function() { var ele = this.get(0); if(ele.loading_img) { $di(ele.loading_img) } else { ele.disabled = 1; ele.loading_img = $a(ele.parentNode,'img','', {marginLeft:'4px',marginBottom:'-2px',display:'inline'}); ele.loading_img.src = 'lib/images/ui/button-load.gif'; } } $.fn.done_working = function() { var ele = this.get(0); ele.disabled = 0; if(ele.loading_img) { $dh(ele.loading_img) }; } })(jQuery); // set out of 100 function set_opacity(ele, ieop) { var op = ieop / 100; if (ele.filters) { // internet explorer try { ele.filters.item("DXImageTransform.Microsoft.Alpha").opacity = ieop; } catch (e) { ele.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(opacity='+ieop+')'; } } else { // other browsers ele.style.opacity = op; } } // border radius // ==================================== $br = function(ele, r, corners) { if(corners) { var cl = ['top-left', 'top-right', 'bottom-right' , 'bottom-left']; for(var i=0; i<4; i++) { if(corners[i]) { $(ele).css('-moz-border-radius-'+cl[i].replace('-',''),r).css('-webkit-'+cl[i]+'-border-radius',r); } } } else { $(ele).css('-moz-border-radius',r).css('-webkit-border-radius',r).css('border-radius',r); } } $bs = function(ele, r) { $(ele).css('-moz-box-shadow',r).css('-webkit-box-shadow',r).css('box-shadow',r); } // Select // ==================================== function SelectWidget(parent, options, width, editable, bg_color) { var me = this; // native select 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; } function empty_select(s) { if(s.custom_select) { s.empty(); return; } if(s.inp)s = s.inp; if(s) { var tmplen = s.length; for(var i=0;i').find('input:last'); for(key in attributes) $input.attr(key, attributes[key]); var input = $input.get(0); if(cs) $y(input,cs); return input; } function $dh(d) { if(d && d.substr)d=$i(d); if(d && d.style.display.toLowerCase() != 'none') d.style.display = 'none'; } function $ds(d) { if(d && d.substr)d=$i(d); var t = 'block'; if(d && in_list(['span','img','button'], d.tagName.toLowerCase())) t = 'inline' if(d && d.style.display.toLowerCase() != t) d.style.display = t; } function $di(d) { if(d && d.substr)d=$i(d); if(d)d.style.display = 'inline'; } function $i(id) { if(!id) return null; if(id && id.appendChild)return id; // already an element return document.getElementById(id); } function $w(e,w) { if(e && e.style && w)e.style.width = w; } function $h(e,h) { if(e && e.style && h)e.style.height = h; } function $bg(e,w) { if(e && e.style && w)e.style.backgroundColor = w; } function $y(ele, s) { if(ele && s) { for(var i in s) ele.style[i]=s[i]; }; return ele; } function $yt(tab, r, c, s) { /// set style on tables with wildcards var rmin = r; var rmax = r; if(r=='*') { rmin = 0; rmax = tab.rows.length-1; } if(r.search && r.search('-')!= -1) { r = r.split('-'); rmin = cint(r[0]); rmax = cint(r[1]); } var cmin = c; var cmax = c; if(c=='*') { cmin = 0; cmax = tab.rows[0].cells.length-1; } if(c.search && c.search('-')!= -1) { c = c.split('-'); rmin = cint(c[0]); rmax = cint(c[1]); } for(var ri = rmin; ri<=rmax; ri++) { for(var ci = cmin; ci<=cmax; ci++) $y($td(tab,ri,ci),s); } } // add css classes etc function set_style(txt) { 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); } // Make table function make_table(parent, nr, nc, table_width, widths, cell_style, table_style) { var t = $a(parent, 'table'); t.style.borderCollapse = 'collapse'; if(table_width) t.style.width = table_width; if(cell_style) t.cell_style=cell_style; for(var ri=0;ri1) { for(var i=0;i