diff --git a/frappe/__init__.py b/frappe/__init__.py
index 14d238dc48..421595dff1 100644
--- a/frappe/__init__.py
+++ b/frappe/__init__.py
@@ -1230,3 +1230,6 @@ def logger(module=None, with_more_info=True):
def get_desk_link(doctype, name):
return '{2} {1}'.format(doctype, name, _(doctype))
+
+def bold(text):
+ return '{0}'.format(text)
\ No newline at end of file
diff --git a/frappe/public/css/docs.css b/frappe/public/css/docs.css
index d2adcb7bd6..b354818a3e 100644
--- a/frappe/public/css/docs.css
+++ b/frappe/public/css/docs.css
@@ -168,6 +168,19 @@ body {
.dropdown-navbar-new-comments .dropdown-menu {
margin-top: 0;
}
+@media (max-width: 767px) {
+ .dropdown-navbar-new-comments.open .dropdown-menu {
+ position: absolute;
+ border-top: 1px solid rgba(0, 0, 0, 0.14902);
+ box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
+ background-color: #fff;
+ right: 0;
+ left: auto;
+ }
+ .dropdown-navbar-new-comments.open .dropdown-menu > li > a {
+ padding: 12px;
+ }
+}
.navbar-new-comments {
display: inline-block;
min-width: 24px;
diff --git a/frappe/public/js/frappe/form/dashboard.js b/frappe/public/js/frappe/form/dashboard.js
index 8a5f7d07cd..bb611342b9 100644
--- a/frappe/public/js/frappe/form/dashboard.js
+++ b/frappe/public/js/frappe/form/dashboard.js
@@ -25,6 +25,7 @@ frappe.ui.form.Dashboard = Class.extend({
// clear links
this.links_area.addClass('hidden');
+ this.links_area.find('.count, .open-notification').addClass('hidden');
// clear stats
this.stats_area.empty().addClass('hidden');
@@ -254,6 +255,7 @@ frappe.ui.form.Dashboard = Class.extend({
if(count) {
$link.find('.count')
+ .removeClass('hidden')
.html((count > 9) ? '9+' : count);
}
diff --git a/frappe/public/js/frappe/ui/filters/filters.js b/frappe/public/js/frappe/ui/filters/filters.js
index 47246148dc..f0ee546070 100644
--- a/frappe/public/js/frappe/ui/filters/filters.js
+++ b/frappe/public/js/frappe/ui/filters/filters.js
@@ -30,6 +30,17 @@ frappe.ui.FilterList = Class.extend({
},
add_filter: function(doctype, fieldname, condition, value, hidden) {
+ if(!frappe.meta.has_field(doctype, fieldname)
+ && !in_list(frappe.model.std_fields_list, fieldname)) {
+ frappe.msgprint({
+ message: __('Filter {0} missing', [fieldname.bold()]),
+ title: 'Invalid Filter',
+ indicator: 'red'
+ });
+ return;
+ }
+
+
this.$w.find('.show_filters').toggle(true);
var is_new_filter = arguments.length===0;
@@ -149,6 +160,7 @@ frappe.ui.Filter = Class.extend({
// add help for "in" codition
me.$w.find('.condition').change(function() {
+ if(!me.field) return;
var condition = $(this).val();
if(in_list(["in", "like", "not in", "not like"], condition)) {
me.set_field(me.field.df.parent, me.field.df.fieldname, 'Data', condition);
diff --git a/frappe/website/js/website.js b/frappe/website/js/website.js
index 2556ea42e6..e1f37aac86 100644
--- a/frappe/website/js/website.js
+++ b/frappe/website/js/website.js
@@ -187,7 +187,7 @@ $.extend(frappe, {
send_message: function(opts, btn) {
return frappe.call({
type: "POST",
- method: "frappe.templates.pages.contact.send_message",
+ method: "frappe.templates.www.contact.send_message",
btn: btn,
args: opts,
callback: opts.callback