@@ -5,6 +5,14 @@ | |||||
div.fetching { color: #888; text-align:right; } | div.fetching { color: #888; text-align:right; } | ||||
.msgprint { | |||||
min-height: 60px; | |||||
max-height: 500px; | |||||
padding: 9px; | |||||
color: #333; | |||||
overflow: auto; | |||||
} | |||||
div.notice { | div.notice { | ||||
postion: absolute; | postion: absolute; | ||||
background-color: #000; | background-color: #000; | ||||
@@ -0,0 +1,105 @@ | |||||
/* ribbons */ | |||||
.ribbon-holder { | |||||
position: relative; | |||||
top: 0; | |||||
overflow: hidden; | |||||
height: 10em; | |||||
float: right; | |||||
} | |||||
.ribbon, | |||||
.ribbon:hover { | |||||
text-decoration: none; | |||||
} | |||||
.ribbon { | |||||
font-family: Arial, sans-serif; | |||||
letter-spacing: -.1px; | |||||
opacity: 0.95; | |||||
padding: 0.25em 0; | |||||
position: relative; | |||||
top: 2.5em; | |||||
/* Defaults friendly for white pages. */ | |||||
-moz-box-shadow: 0 0 13px #888; | |||||
-webkit-box-shadow: 0 0 13px #888; | |||||
color: #FFF; | |||||
display: block; | |||||
line-height: 1.35em; | |||||
} | |||||
.ribbon .text { | |||||
padding: 0.1em 3em; | |||||
} | |||||
.ribbon-right .ribbon { | |||||
-moz-transform: rotate(45deg); | |||||
-webkit-transform: rotate(45deg); | |||||
right: -2.6em; | |||||
} | |||||
.ribbon-left .ribbon { | |||||
-moz-transform: rotate(-45deg); | |||||
-webkit-transform: rotate(-45deg); | |||||
left: -2.6em; | |||||
} | |||||
.white.ribbon { | |||||
color: #111; | |||||
background-color: #F5F5F5; | |||||
background: -webkit-gradient(linear, left bottom, left top, from(#f3f3f3), to(#fff)); | |||||
-moz-box-shadow: 0 0 13px #999; | |||||
-webkit-box-shadow: 0 0 13px #999; | |||||
text-shadow: 0 0 .05em; | |||||
} | |||||
.white.ribbon .text { | |||||
border: 1px solid #cecece; | |||||
} | |||||
.red.ribbon { | |||||
background-color: #9a0000; | |||||
background: -webkit-gradient(linear, left bottom, left top, from(#9a0000), to(#a90000)); | |||||
} | |||||
.red.ribbon .text { | |||||
border: 1px solid #bf6060; | |||||
} | |||||
.green.ribbon { | |||||
background-color: #006e00; | |||||
background: -webkit-gradient(linear, left bottom, left top, from(#006e00), to(#007200)); | |||||
} | |||||
.green.ribbon .text { | |||||
border: 1px solid #6bac6b; | |||||
} | |||||
.darkblue.ribbon { | |||||
background-color: #121621; | |||||
color: #ecedee; | |||||
} | |||||
.darkblue.ribbon .text { | |||||
border: 1px solid #53565e; | |||||
} | |||||
.orange.ribbon { | |||||
background-color: #E57504; | |||||
background: -webkit-gradient(linear, left bottom, left top, from(#dc7202), to(#ee7906)); | |||||
} | |||||
.orange.ribbon .text { | |||||
border: 1px solid #ebaa65; | |||||
} | |||||
.gray.ribbon { | |||||
background-color: #6d6d6d; | |||||
background: -webkit-gradient(linear, left bottom, left top, from(#6a6a6a) to(#6d6d6d)); | |||||
} | |||||
.gray.ribbon .text { | |||||
border: 1px solid #a4a4a4; | |||||
} |
@@ -33,4 +33,5 @@ div.appframe-toolbar { | |||||
background: #eeeeee; | background: #eeeeee; | ||||
border-top: 1px solid #f8f8f8; | border-top: 1px solid #f8f8f8; | ||||
border-bottom: 1px solid #ccc; | border-bottom: 1px solid #ccc; | ||||
} | |||||
} | |||||
@@ -21,6 +21,39 @@ | |||||
// | // | ||||
var msg_dialog; | var msg_dialog; | ||||
function msgprint(msg, title) { | |||||
if(!msg) return; | |||||
if(typeof(msg)!='string') | |||||
msg = JSON.stringify(msg); | |||||
// small message | |||||
if(msg.substr(0,8)=='__small:') { | |||||
show_alert(msg.substr(8)); return; | |||||
} | |||||
if(!msg_dialog) { | |||||
msg_dialog = new wn.ui.Dialog({ | |||||
title:"Message", | |||||
onhide: function() { | |||||
msg_dialog.msg_area.empty(); | |||||
} | |||||
}); | |||||
msg_dialog.msg_area = $('<div class="msgprint">') | |||||
.appendTo(msg_dialog.body); | |||||
} | |||||
if(msg.search(/<br>|<p>/)==-1) | |||||
msg = replace_newlines(msg); | |||||
msg_dialog.set_title(title || 'Message') | |||||
msg_dialog.msg_area.append(msg); | |||||
msg_dialog.show(); | |||||
} | |||||
/* | |||||
function msgprint(msg, issmall, callback) { | function msgprint(msg, issmall, callback) { | ||||
if(!msg) return; | if(!msg) return; | ||||
@@ -67,8 +100,8 @@ function msgprint(msg, issmall, callback) { | |||||
msg_dialog.msg_icon.src = 'images/lib/icons/accept.gif'; $di(msg_dialog.msg_icon); msg = msg.substr(3); | msg_dialog.msg_icon.src = 'images/lib/icons/accept.gif'; $di(msg_dialog.msg_icon); msg = msg.substr(3); | ||||
} | } | ||||
m.innerHTML = replace_newlines(msg); | |||||
if(msg.search(/<br>|<p>/)==-1) | |||||
m.innerHTML = replace_newlines(msg); | |||||
if(m.offsetHeight > 200) { | if(m.offsetHeight > 200) { | ||||
$y(m, {height:'200px', width:'400px', overflow:'auto'}) | $y(m, {height:'200px', width:'400px', overflow:'auto'}) | ||||
@@ -76,7 +109,7 @@ function msgprint(msg, issmall, callback) { | |||||
msg_dialog.custom_onhide = callback; | msg_dialog.custom_onhide = callback; | ||||
} | |||||
}*/ | |||||
// Floating Message | // Floating Message | ||||
@@ -318,7 +318,8 @@ _f.Frm.prototype.set_intro = function(txt) { | |||||
.insertBefore(this.page_layout.body.firstChild); | .insertBefore(this.page_layout.body.firstChild); | ||||
} | } | ||||
if(txt) { | if(txt) { | ||||
this.intro_area.html(txt); | |||||
if(txt.search(/<p>/)==-1) txt = '<p>' + txt + '</p>'; | |||||
this.intro_area.html(txt); | |||||
} else { | } else { | ||||
this.intro_area.remove(); | this.intro_area.remove(); | ||||
this.intro_area = null; | this.intro_area = null; | ||||
@@ -1096,6 +1097,8 @@ _f.set_value = function(dt, dn, fn, v) { | |||||
if(changed && (d[fn]==null || v==null) && (cstr(d[fn])==cstr(v))) changed = 0; | if(changed && (d[fn]==null || v==null) && (cstr(d[fn])==cstr(v))) changed = 0; | ||||
if(changed) { | if(changed) { | ||||
//console.log('value changed for ' + dt + ', ' + dn + ', ' + fn) | |||||
var prev_unsaved = d.__unsaved | var prev_unsaved = d.__unsaved | ||||
d[fn] = v; | d[fn] = v; | ||||
d.__unsaved = 1; | d.__unsaved = 1; | ||||
@@ -152,14 +152,7 @@ _f.SectionBreak.prototype.refresh = function(from_form) { | |||||
if(hidden) { | if(hidden) { | ||||
if(this.row)this.row.hide(); | if(this.row)this.row.hide(); | ||||
} else { | } else { | ||||
if(this.collapsible) { | |||||
//this.section_expand(from_form); | |||||
//if(this.df.reqd || this.has_data()) { | |||||
// this.section_expand(from_form); | |||||
//} else { | |||||
// this.section_collapse(); | |||||
//} | |||||
} | |||||
if(this.row)this.row.show(); | |||||
} | } | ||||
} | } | ||||
@@ -241,7 +234,8 @@ _f.TableField.prototype.make_body = function() { | |||||
// description | // description | ||||
if(this.df.description) { | if(this.df.description) { | ||||
this.desc_area = $a(this.parent, 'div', 'help small', '', this.df.description) | |||||
this.desc_area = $a(this.parent, 'div', 'help small', | |||||
{marginBottom:'9px', marginTop:'0px'}, this.df.description) | |||||
} | } | ||||
} | } | ||||
} | } | ||||
@@ -31,14 +31,17 @@ | |||||
_f.FrmHeader = Class.extend({ | _f.FrmHeader = Class.extend({ | ||||
init: function(parent, frm) { | init: function(parent, frm) { | ||||
this.appframe = new wn.ui.AppFrame(parent) | this.appframe = new wn.ui.AppFrame(parent) | ||||
this.appframe.$titlebar.append('</span>\ | |||||
<span class="breadcrumb-area"></span>'); | |||||
this.$w = this.appframe.$w; | this.$w = this.appframe.$w; | ||||
}, | }, | ||||
refresh: function() { | refresh: function() { | ||||
// refresh breadcrumbs | // refresh breadcrumbs | ||||
wn.views.breadcrumbs($(this.$w.find('.breadcrumb-area')), | |||||
cur_frm.meta.module, cur_frm.meta.name, cur_frm.docname); | |||||
if(cur_frm.cscript.set_breadcrumbs) { | |||||
this.appframe.clear_breadcrumbs(); | |||||
cur_frm.cscript.set_breadcrumbs(); | |||||
} else { | |||||
wn.views.breadcrumbs(this.appframe, | |||||
cur_frm.meta.module, cur_frm.meta.name, cur_frm.docname); | |||||
} | |||||
this.refresh_labels(); | this.refresh_labels(); | ||||
this.refresh_toolbar(); | this.refresh_toolbar(); | ||||
@@ -116,6 +119,12 @@ _f.FrmHeader = Class.extend({ | |||||
// Amend | // Amend | ||||
if(docstatus==2 && p[AMEND]) | if(docstatus==2 && p[AMEND]) | ||||
this.appframe.add_button('Amend', function() { cur_frm.amend_doc() }, 'icon-pencil'); | this.appframe.add_button('Amend', function() { cur_frm.amend_doc() }, 'icon-pencil'); | ||||
// Help | |||||
if(cur_frm.meta.description) { | |||||
this.appframe.add_help_button(wn.markdown('## ' + cur_frm.doctype + '\n<br>\n' | |||||
+ cur_frm.meta.description)); | |||||
} | |||||
}, | }, | ||||
show: function() { | show: function() { | ||||
@@ -160,15 +160,6 @@ wn.widgets.form.sidebar = { Sidebar: function(form) { | |||||
})); | })); | ||||
}, | }, | ||||
display: function() { return !me.form.doc.__islocal } | display: function() { return !me.form.doc.__islocal } | ||||
}, | |||||
{ | |||||
title: 'Help', | |||||
render: function(wrapper) { | |||||
$(wrapper).html('<div class="help small">' | |||||
+ wn.markdown(me.form.meta.description) + '</div>') | |||||
}, | |||||
display: function() { return me.form.meta.description } | |||||
} | } | ||||
] | ] | ||||
} | } | ||||
@@ -18,10 +18,12 @@ wn.ui.AppFrame = Class.extend({ | |||||
title: function(txt) { | title: function(txt) { | ||||
this.$titlebar.find('.appframe-title').html(txt); | this.$titlebar.find('.appframe-title').html(txt); | ||||
}, | }, | ||||
add_button: function(label, click, icon) { | |||||
make_toolbar: function() { | |||||
if(!this.$w.find('.appframe-toolbar').length) | if(!this.$w.find('.appframe-toolbar').length) | ||||
this.$w.append('<div class="appframe-toolbar"></div>'); | |||||
this.$w.append('<div class="appframe-toolbar"></div>'); | |||||
}, | |||||
add_button: function(label, click, icon) { | |||||
this.make_toolbar(); | |||||
args = { label: label, icon:'' }; | args = { label: label, icon:'' }; | ||||
if(icon) { | if(icon) { | ||||
args.icon = '<i class="icon '+icon+'"></i>'; | args.icon = '<i class="icon '+icon+'"></i>'; | ||||
@@ -32,8 +34,32 @@ wn.ui.AppFrame = Class.extend({ | |||||
.appendTo(this.$w.find('.appframe-toolbar')); | .appendTo(this.$w.find('.appframe-toolbar')); | ||||
return this.buttons[label]; | return this.buttons[label]; | ||||
}, | }, | ||||
add_help_button: function(txt) { | |||||
this.make_toolbar(); | |||||
$('<button class="btn btn-small" style="float:right;" button-type="help">\ | |||||
<b>?</b></button>') | |||||
.data('help-text', txt) | |||||
.click(function() { msgprint($(this).data('help-text'), 'Help'); }) | |||||
.appendTo(this.$w.find('.appframe-toolbar')); | |||||
}, | |||||
clear_buttons: function() { | clear_buttons: function() { | ||||
this.$w.find('.appframe-toolbar').empty(); | this.$w.find('.appframe-toolbar').empty(); | ||||
}, | |||||
add_breadcrumb: function(html) { | |||||
if(!this.$breadcrumbs) | |||||
this.$breadcrumbs = $('</span>\ | |||||
<span class="breadcrumb-area"></span>').appendTo(this.$titlebar); | |||||
var crumb = $('<span>').html(html); | |||||
// first breadcrumb is a title | |||||
if(!this.$breadcrumbs.find('span').length) { | |||||
crumb.addClass('appframe-title'); | |||||
} | |||||
crumb.appendTo(this.$breadcrumbs); | |||||
}, | |||||
clear_breadcrumbs: function() { | |||||
this.$breadcrumbs && this.$breadcrumbs.empty(); | |||||
} | } | ||||
}); | }); | ||||
@@ -99,12 +99,13 @@ wn.widgets.FieldGroup = function() { | |||||
wn.widgets.Dialog = function(opts) { | wn.widgets.Dialog = function(opts) { | ||||
this.opts = opts; | |||||
this.display = false; | this.display = false; | ||||
this.make = function(opts) { | this.make = function(opts) { | ||||
if(opts) | |||||
if(opts) { | |||||
this.opts = opts; | this.opts = opts; | ||||
$.extend(this, opts); | |||||
} | |||||
if(!this.opts.width) this.opts.width = 480; | if(!this.opts.width) this.opts.width = 480; | ||||
if(!$('#dialog-container').length) { | if(!$('#dialog-container').length) { | ||||
@@ -183,7 +184,7 @@ wn.widgets.Dialog = function(opts) { | |||||
this.appframe.$titlebar.find('.close').toggle(false); | this.appframe.$titlebar.find('.close').toggle(false); | ||||
} | } | ||||
if(opts) this.make(); | |||||
if(opts) this.make(opts); | |||||
} | } | ||||
@@ -1,24 +1,22 @@ | |||||
wn.provide('wn.views'); | wn.provide('wn.views'); | ||||
wn.views.breadcrumbs = function(parent, module, doctype, name) { | |||||
$(parent).empty(); | |||||
var $bspan = $(parent); | |||||
wn.views.breadcrumbs = function(appframe, module, doctype, name) { | |||||
appframe.clear_breadcrumbs(); | |||||
if(name) { | if(name) { | ||||
$bspan.append('<span class="appframe-title">' + name + '</span>'); | |||||
appframe.add_breadcrumb(name); | |||||
} else if(doctype) { | } else if(doctype) { | ||||
$bspan.append('<span class="appframe-title">' + doctype + ' List </span>'); | |||||
appframe.add_breadcrumb(doctype + ' List'); | |||||
} else if(module) { | } else if(module) { | ||||
$bspan.append('<span class="appframe-title">' + module + '</span>'); | |||||
appframe.add_breadcrumb(module); | |||||
} | } | ||||
if(name && doctype && (!locals['DocType'][doctype].issingle)) { | if(name && doctype && (!locals['DocType'][doctype].issingle)) { | ||||
$bspan.append(repl('<span> in <a href="#!List/%(doctype)s">%(doctype)s List</a></span>', | |||||
appframe.add_breadcrumb(repl(' in <a href="#!List/%(doctype)s">%(doctype)s List</a>', | |||||
{doctype: doctype})) | {doctype: doctype})) | ||||
}; | }; | ||||
if(doctype && module && wn.modules && wn.modules[module]) { | if(doctype && module && wn.modules && wn.modules[module]) { | ||||
$bspan.append(repl('<span> in <a href="#!%(module_page)s">%(module)s</a></span>', | |||||
appframe.add_breadcrumb(repl(' in <a href="#!%(module_page)s">%(module)s</a>', | |||||
{module: module, module_page: wn.modules[module] })) | {module: module, module_page: wn.modules[module] })) | ||||
} | } | ||||
//$bspan.appendTo(parent); | |||||
} | } |
@@ -74,8 +74,7 @@ wn.views.DocListView = wn.ui.Listing.extend({ | |||||
</div>'); | </div>'); | ||||
this.appframe = new wn.ui.AppFrame(this.$page.find('.appframe-area')); | this.appframe = new wn.ui.AppFrame(this.$page.find('.appframe-area')); | ||||
wn.views.breadcrumbs($('<span class="breadcrumb-area">').appendTo(this.appframe.$titlebar), | |||||
locals.DocType[this.doctype].module, this.doctype); | |||||
wn.views.breadcrumbs(this.appframe, locals.DocType[this.doctype].module, this.doctype); | |||||
}, | }, | ||||
setup: function() { | setup: function() { | ||||