diff --git a/frappe/hooks.py b/frappe/hooks.py index ef4d4b2530..a92e9ca073 100644 --- a/frappe/hooks.py +++ b/frappe/hooks.py @@ -6,6 +6,7 @@ app_description = "Full Stack Web Application Framework in Python" app_icon = "octicon octicon-circuit-board" app_version = "5.0.0-beta" app_color = "orange" + app_email = "support@frappe.io" before_install = "frappe.utils.install.before_install" diff --git a/frappe/public/js/frappe/misc/number_format.js b/frappe/public/js/frappe/misc/number_format.js index 35d093c46b..3d114aab80 100644 --- a/frappe/public/js/frappe/misc/number_format.js +++ b/frappe/public/js/frappe/misc/number_format.js @@ -174,12 +174,15 @@ function get_number_format_info(format) { } function _round(num, precision) { + var is_negative = num < 0 ? true : false; var d = cint(precision); var m = Math.pow(10, d); - var n = +(d ? num * m : num).toFixed(8); // Avoid rounding errors + var n = +(d ? Math.abs(num) * m : Math.abs(num)).toFixed(8); // Avoid rounding errors var i = Math.floor(n), f = n - i; - var r = (!precision && f == 0.5) ? ((i % 2 == 0) ? i : i + 1) : Math.round(n); - return d ? r / m : r; + var r = ((!precision && f == 0.5) ? ((i % 2 == 0) ? i : i + 1) : Math.round(n)); + r = d ? r / m : r; + return is_negative ? -r : r; + } function roundNumber(num, precision) { diff --git a/frappe/website/utils.py b/frappe/website/utils.py index 100edc33c9..e9325174c5 100644 --- a/frappe/website/utils.py +++ b/frappe/website/utils.py @@ -15,7 +15,7 @@ def delete_page_cache(path): def scrub_relative_urls(html): """prepend a slash before a relative url""" html = re.sub("""(src|href)[^\w'"]*['"](?!http|ftp|mailto|/|#|%|{)([^'" >]+)['"]""", '\g<1> = "/\g<2>"', html) - html = re.sub("""url\((?!http|ftp|/|#|%|{)([^\(\)]+)\)""", 'url(/\g<1>)', html) + html = re.sub("""url\((?!(['"]?)(http|ftp|/|#|%|{))(['"]?)([^\(\)]+)\)""", 'url(\g<3>/\g<4>)', html) return html def find_first_image(html): diff --git a/frappe/website/website_generator.py b/frappe/website/website_generator.py index a3ad8f0458..18dec248d3 100644 --- a/frappe/website/website_generator.py +++ b/frappe/website/website_generator.py @@ -104,16 +104,15 @@ class WebsiteGenerator(Document): if old_route and old_route != self.get_route(): # clear cache of old routes - old_routes = frappe.get_all(self.doctype, fields=["parent_website_route", "page_name"], - filters={"parent_website_route": ("like", old_route + "%")}) + old_routes = frappe.get_all(self.doctype, filters={"parent_website_route": ("like", old_route + "%")}) if old_routes: - for old_route in old_routes: - clear_cache(make_route(old_route)) + for like_old_route in old_routes: + clear_cache(frappe.get_doc(self.doctype, like_old_route.name).get_route()) frappe.db.sql("""update `tab{0}` set parent_website_route = replace(parent_website_route, %s, %s), - modified = %s + modified = %s, modified_by = %s where parent_website_route like %s""".format(self.doctype), (old_route, self.get_route(), now(), frappe.session.user, old_route + "%"))