diff --git a/frappe/public/js/frappe/ui/toolbar/search.js b/frappe/public/js/frappe/ui/toolbar/search.js index 1ec69c57c7..721700f66e 100644 --- a/frappe/public/js/frappe/ui/toolbar/search.js +++ b/frappe/public/js/frappe/ui/toolbar/search.js @@ -381,18 +381,47 @@ frappe.search.GlobalSearch = Class.extend({ get_finds: function(searchables, keywords) { var me = this; parts = searchables.split("|||"); + content_length = 300; content = []; - parts.forEach(function(part) { + current_length = 0; + var field_text = ""; + for(var i = 0; i < parts.length; i++) { + part = parts[i]; if(part.toLowerCase().indexOf(keywords) !== -1) { - var colon_index = part.indexOf(':'); - part = '' + - me.bold_keywords(part.slice(0, colon_index + 1), keywords) + '' + - me.bold_keywords(part.slice(colon_index + 1), keywords); - if(content.indexOf(part) === -1) { - content.push(part); + if(part.indexOf('&&&') !== -1) { + var colon_index = part.indexOf('&&&'); + var field_value = part.slice(colon_index + 3); + } else { + var colon_index = part.indexOf(':'); + var field_value = part.slice(colon_index + 1); + } + var field_name = part.slice(0, colon_index); + + var remaining_length = content_length - current_length; + current_length += field_name.length + field_value.length + 2; + if(current_length < content_length) { + field_text = '' + + me.bold_keywords(field_name, keywords) + ':' + '' + + me.bold_keywords(field_value, keywords); + if(content.indexOf(field_text) === -1) { + content.push(field_text); + } + } else { + if(field_name.length < remaining_length){ + remaining_length -= field_name.length; + field_text = '' + + me.bold_keywords(field_name, keywords) + ':' + ''; + field_value = field_value.slice(0, remaining_length); + field_value = field_value.slice(0, field_value.lastIndexOf(' ')) + ' ...'; + field_text += me.bold_keywords(field_value, keywords); + content.push(field_text); + } else { + content.push('...'); + } + break; } } - }); + } return content.join(', '); }, diff --git a/frappe/utils/global_search.py b/frappe/utils/global_search.py index 528edd6cc4..b8fc9c31d1 100644 --- a/frappe/utils/global_search.py +++ b/frappe/utils/global_search.py @@ -4,7 +4,7 @@ from __future__ import unicode_literals import frappe -from frappe.utils import cint +from frappe.utils import cint, strip_html_tags def setup_global_search_table(): '''Creates __global_seach table''' @@ -52,9 +52,9 @@ def update_global_search(doc): if d.parent == doc.name: for field in d.meta.get_global_search_fields(): if d.get(field.fieldname): - content.append(field.label + ": " + unicode(d.get(field.fieldname))) + content.append(field.label + "&&& " + strip_html_tags(unicode(d.get(field.fieldname)))) else: - content.append(field.label + ": " + unicode(doc.get(field.fieldname))) + content.append(field.label + "&&& " + strip_html_tags(unicode(doc.get(field.fieldname)))) if content: published = 0