diff --git a/css/bootstrap/icons.css b/css/bootstrap/icons.css
index 66979f3ef4..3b0e34ef64 100644
--- a/css/bootstrap/icons.css
+++ b/css/bootstrap/icons.css
@@ -1,18 +1,19 @@
-[class^="icon-"] {
+[class^="icon-"], [class*=" icon-"] {
display: inline-block;
width: 14px;
height: 14px;
+ line-height: 14px;
vertical-align: text-top;
- background-image: url(../img/glyphicons-halflings.png);
+ background-image: url("../lib/images/icons/glyphicons-halflings.png");
background-position: 14px 14px;
background-repeat: no-repeat;
*margin-right: .3em;
}
-[class^="icon-"]:last-child {
+[class^="icon-"]:last-child, [class*=" icon-"]:last-child {
*margin-left: 0;
}
.icon-white {
- background-image: url(../img/glyphicons-halflings-white.png);
+ background-image: url("../lib/images/icons/glyphicons-halflings-white.png");
}
.icon-glass {
background-position: 0 0;
diff --git a/css/bootstrap/label.css b/css/bootstrap/label.css
new file mode 100644
index 0000000000..ac4e144f85
--- /dev/null
+++ b/css/bootstrap/label.css
@@ -0,0 +1,39 @@
+.label {
+ padding: 2px 4px 3px;
+ font-size: 11.049999999999999px;
+ font-weight: bold;
+ color: #ffffff;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ background-color: #999999;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+.label:hover {
+ color: #ffffff;
+ text-decoration: none;
+}
+.label-important {
+ background-color: #b94a48;
+}
+.label-important:hover {
+ background-color: #953b39;
+}
+.label-warning {
+ background-color: #f89406;
+}
+.label-warning:hover {
+ background-color: #c67605;
+}
+.label-success {
+ background-color: #468847;
+}
+.label-success:hover {
+ background-color: #356635;
+}
+.label-info {
+ background-color: #3a87ad;
+}
+.label-info:hover {
+ background-color: #2d6987;
+}
\ No newline at end of file
diff --git a/js/legacy/app.js b/js/legacy/app.js
index 8ae36d6994..5975375875 100644
--- a/js/legacy/app.js
+++ b/js/legacy/app.js
@@ -23,7 +23,6 @@ function startup() {
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;
diff --git a/js/legacy/utils/handler.js b/js/legacy/utils/handler.js
index b2228bbeba..3100a6443c 100644
--- a/js/legacy/utils/handler.js
+++ b/js/legacy/utils/handler.js
@@ -147,6 +147,7 @@ function $c_page(module, page, method, arg, call_back, no_spinner, freeze_msg, b
// generic server call (call page, object)
wn.call = function(args) {
+ if(!args.args) args.args = {};
if(args.module && args.page) {
$c_page(args.module, args.page, args.method, args.args, args.callback,
args.no_spinner, false, args.btn);
diff --git a/js/wn/ui/toolbar.min.js b/js/wn/ui/toolbar.min.js
index 8ebe0a5108..3d9e55aeaa 100644
--- a/js/wn/ui/toolbar.min.js
+++ b/js/wn/ui/toolbar.min.js
@@ -1,3 +1,4 @@
+
/*
* lib/js/wn/ui/toolbar/selector_dialog.js
*/
@@ -33,8 +34,7 @@ if(rd[1]){var dt=rd[0];var dn=rd[1];this.add(dt,dn,0);}}}});
/*
* lib/js/wn/ui/toolbar/toolbar.js
*/
-wn.ui.toolbar.Toolbar=Class.extend({init:function(){this.make();this.make_home();this.make_document();wn.ui.toolbar.recent=new wn.ui.toolbar.RecentDocs();if(in_list(user_roles,'Administrator'))
-this.make_options();this.make_tools();this.set_user_name();this.make_logout();$('.dropdown-toggle').dropdown();$(document).trigger('toolbar_setup');},make:function(){$('header').append('
\
+wn.ui.toolbar.Toolbar=Class.extend({init:function(){this.make();this.make_home();this.make_document();this.make_apps();wn.ui.toolbar.recent=new wn.ui.toolbar.RecentDocs();this.make_tools();this.set_user_name();this.make_logout();$('.dropdown-toggle').dropdown();$(document).trigger('toolbar_setup');},make:function(){$('header').append('
\
\
\
\
@@ -51,13 +51,17 @@ this.make_options();this.make_tools();this.set_user_name();this.make_logout();$(
\
\
\
-
');},make_home:function(){$('.navbar .nav:first').append('
Home')},make_document:function(){wn.ui.toolbar.new_dialog=new wn.ui.toolbar.NewDialog();wn.ui.toolbar.search=new wn.ui.toolbar.Search();wn.ui.toolbar.report=new wn.ui.toolbar.Report();$('.navbar .nav:first').append('
\
+ ');},make_home:function(){$('.navbar .nav:first').append('\
+ Home');$('.navbar .brand').attr('href',"#!"+home_page);},make_document:function(){wn.ui.toolbar.new_dialog=new wn.ui.toolbar.NewDialog();wn.ui.toolbar.search=new wn.ui.toolbar.Search();wn.ui.toolbar.report=new wn.ui.toolbar.Report();$('.navbar .nav:first').append('\
Document\
\
');},make_tools:function(){$('.navbar .nav:first').append('\
\
');if(has_common(user_roles,['Administrator','System Manager'])){$('#toolbar-tools').append('\
- Download Backup');}},make_options:function(){$('.navbar .nav:first').append('\
+ Download Backup');}},make_apps:function(){$('.navbar .nav:first').append('\
Options\
- ');profile.start_items.sort(function(a,b){return(a[4]-b[4])});for(var i=0;i\
- %(dn)s',{type:(ispage?'':'Form/'),dt:(ispage?'':(d[0]+'/')),dn:d[5]||d[1]}));}},set_user_name:function(){var fn=user_fullname;if(fn.length>15)fn=fn.substr(0,12)+'...';$('#toolbar-user-link').html(fn+'');},make_logout:function(){$('#toolbar-user').append('Logout');}});wn.ui.toolbar.clear_cache=function(){localStorage&&localStorage.clear();$c('webnotes.session_cache.clear',{},function(r,rt){show_alert(r.message);});return false;}
+ ');},set_user_name:function(){var fn=user_fullname;if(fn.length>15)fn=fn.substr(0,12)+'...';$('#toolbar-user-link').html(fn+'');},make_logout:function(){$('#toolbar-user').append('Logout');}});wn.ui.toolbar.clear_cache=function(){localStorage&&localStorage.clear();$c('webnotes.session_cache.clear',{},function(r,rt){show_alert(r.message);});return false;}
wn.ui.toolbar.download_backup=function(){$c('webnotes.utils.backups.get_backup',{},function(r,rt){});return false;}
wn.ui.toolbar.show_about=function(){try{wn.require('lib/js/wn/misc/about.js');wn.ui.misc.about();}catch(e){console.log(e);}
return false;}
\ No newline at end of file
diff --git a/js/wn/ui/toolbar/toolbar.js b/js/wn/ui/toolbar/toolbar.js
index 6cdf1b9b82..aa3c163915 100644
--- a/js/wn/ui/toolbar/toolbar.js
+++ b/js/wn/ui/toolbar/toolbar.js
@@ -26,9 +26,8 @@ wn.ui.toolbar.Toolbar = Class.extend({
this.make();
this.make_home();
this.make_document();
+ this.make_apps();
wn.ui.toolbar.recent = new wn.ui.toolbar.RecentDocs();
- if(in_list(user_roles, 'Administrator'))
- this.make_options();
this.make_tools();
this.set_user_name();
this.make_logout();
@@ -57,7 +56,9 @@ wn.ui.toolbar.Toolbar = Class.extend({
');
},
make_home: function() {
- $('.navbar .nav:first').append('Home')
+ $('.navbar .nav:first').append('\
+ Home');
+ $('.navbar .brand').attr('href', "#!" + home_page);
},
make_document: function() {
@@ -68,9 +69,12 @@ wn.ui.toolbar.Toolbar = Class.extend({
Document\
\
');
},
@@ -92,26 +96,17 @@ wn.ui.toolbar.Toolbar = Class.extend({
Download Backup');
}
},
- make_options: function() {
+ make_apps: function() {
$('.navbar .nav:first').append('\
Options\
- ');
-
- profile.start_items.sort(function(a,b){return (a[4]-b[4])});
-
- for(var i=0;i< profile.start_items.length;i++) {
- var d = profile.start_items[i];
- var ispage = d[0]=='Page';
- $('#toolbar-options').append(repl('\
- %(dn)s', {
- type : (ispage ? '' : 'Form/'),
- dt : (ispage ? '' : (d[0] + '/')),
- dn : d[5] || d[1]
- }));
- }
},
set_user_name: function() {
diff --git a/py/webnotes/boot.py b/py/webnotes/boot.py
index 1691e209ce..5cb3ccc699 100644
--- a/py/webnotes/boot.py
+++ b/py/webnotes/boot.py
@@ -50,7 +50,6 @@ def get_bootinfo():
if webnotes.session['user'] != 'Guest':
import webnotes.widgets.menus
- bootinfo['start_items'] = webnotes.widgets.menus.get_menu_items()
bootinfo['dt_labels'] = get_dt_labels()
# home page
diff --git a/py/webnotes/widgets/menus.py b/py/webnotes/widgets/menus.py
index 46700892ec..8e61eb1190 100644
--- a/py/webnotes/widgets/menus.py
+++ b/py/webnotes/widgets/menus.py
@@ -31,64 +31,24 @@ from webnotes.utils import cint, cstr
sql = webnotes.conn.sql
-@webnotes.whitelist()
-def get_menu_items():
- """
- Returns a list of items to show in `Options` of the Web Notes Toolbar
- List contains Pages and Single DocTypes
- """
- import webnotes.utils
-
- rl = webnotes.user.get_roles() + [webnotes.session['user']]
- role_options = ["role = '"+r+"'" for r in rl]
-
- sql = webnotes.conn.sql
- menuitems = []
-
- # pages
- pages = sql("select distinct parent from `tabPage Role` where docstatus!=2 and (%s)" % (' OR '.join(role_options)))
-
- for p in pages:
- tmp = sql("select icon, parent_node, menu_index, show_in_menu from tabPage where name = '%s'" % p[0])
- if tmp and tmp[0][3]:
- menuitems.append(['Page', p[0] or '', tmp[0][1] or '', tmp[0][0] or '', webnotes.utils.cint(tmp[0][2])])
-
- # singles
- tmp = sql("select smallicon, parent_node, menu_index, name from tabDocType where (show_in_menu = 1 and show_in_menu is not null)")
- singles = {}
- for t in tmp: singles[t[3]] = t
-
- for p in webnotes.user.can_read:
- tmp = singles.get(p, None)
- if tmp: menuitems.append([p, p, tmp[1] or '', tmp[0] or '', int(tmp[2] or 0)])
-
- return menuitems
-
@webnotes.whitelist()
def has_result():
"""return Yes if the given dt has any records"""
return sql("select name from `tab%s` limit 1" % \
webnotes.form_dict.get('dt')) and 'Yes' or 'No'
-# --------------------------------------------------------------
-
def is_submittable(dt):
return sql("select name from tabDocPerm where parent=%s and ifnull(submit,0)=1 and docstatus<1 limit 1", dt)
-# --------------------------------------------------------------
-
def can_cancel(dt):
return sql('select name from tabDocPerm where parent="%s" and ifnull(cancel,0)=1 and docstatus<1 and role in ("%s") limit 1' % (dt, '", "'.join(webnotes.user.get_roles())))
-# --------------------------------------------------------------
def get_dt_trend(dt):
ret = {}
for r in sql("select datediff(now(),modified), count(*) from `tab%s` where datediff(now(),modified) between 0 and 30 group by date(modified)" % dt):
ret[cint(r[0])] = cint(r[1])
return ret
-# --------------------------------------------------------------
-
def get_columns(out, sf, fl, dt, tag_fields):
if not fl:
fl = sf