diff --git a/frappe/__init__.py b/frappe/__init__.py
index bd86d4af80..ead15ab78d 100644
--- a/frappe/__init__.py
+++ b/frappe/__init__.py
@@ -286,6 +286,9 @@ def clear_cache(user=None, doctype=None):
translate.clear_cache()
reset_metadata_version()
+ for fn in frappe.get_hooks("clear_cache"):
+ get_attr(fn)()
+
frappe.local.role_permissions = {}
def get_roles(username=None):
diff --git a/frappe/public/js/frappe/misc/pretty_date.js b/frappe/public/js/frappe/misc/pretty_date.js
index 6873b6512f..3ee7157aff 100644
--- a/frappe/public/js/frappe/misc/pretty_date.js
+++ b/frappe/public/js/frappe/misc/pretty_date.js
@@ -1,9 +1,11 @@
function prettyDate(time){
if(moment) {
- var user_timezone = frappe.boot.user.time_zone;
- var system_timezone = sys_defaults.time_zone;
- var zones = (frappe.boot.timezone_info || {}).zones || {};
- if (user_timezone && (user_timezone != system_timezone)
+ if(frappe.boot) {
+ var user_timezone = frappe.boot.user.time_zone;
+ var system_timezone = sys_defaults.time_zone;
+ var zones = (frappe.boot.timezone_info || {}).zones || {};
+ }
+ if (frappe.boot && user_timezone && (user_timezone != system_timezone)
&& zones[user_timezone] && zones[system_timezone]) {
return moment.tz(time, sys_defaults.time_zone).tz(frappe.boot.user.time_zone).fromNow();
} else {
@@ -37,8 +39,10 @@ function prettyDate(time){
var comment_when = function(datetime) {
+ var timestamp = frappe.datetime.str_to_user ?
+ frappe.datetime.str_to_user(datetime) : datetime;
return ''
+ +'" title="'+timestamp+'">'
+ prettyDate(datetime) + '';
};
diff --git a/frappe/templates/generators/web_page.html b/frappe/templates/generators/web_page.html
index 988b5b6173..2311ca6872 100644
--- a/frappe/templates/generators/web_page.html
+++ b/frappe/templates/generators/web_page.html
@@ -1,7 +1,7 @@
{% block title %}{{ title }}{% endblock %}
{% block header %}
-{% if "<" in header %}{{ header }}{% else %}
{{ header }}
{% endif %}
+{{ header }}
{% endblock %}
{% block content %}
diff --git a/frappe/utils/fixtures.py b/frappe/utils/fixtures.py
index 3ed54099a8..6062c9ec38 100644
--- a/frappe/utils/fixtures.py
+++ b/frappe/utils/fixtures.py
@@ -23,6 +23,8 @@ def export_fixtures():
for app in frappe.get_installed_apps():
for fixture in frappe.get_hooks("fixtures", app_name=app):
print "Exporting " + fixture
+ if not os.path.exists(frappe.get_app_path(app, "fixtures")):
+ os.mkdir(frappe.get_app_path(app, "fixtures"))
if frappe.db.get_value("DocType", fixture, "issingle"):
export_fixture(fixture, fixture, app)
else:
diff --git a/frappe/website/doctype/web_page/web_page.py b/frappe/website/doctype/web_page/web_page.py
index 8e56604678..c05909388e 100644
--- a/frappe/website/doctype/web_page/web_page.py
+++ b/frappe/website/doctype/web_page/web_page.py
@@ -9,6 +9,7 @@ from frappe.website.router import resolve_route
from frappe.website.doctype.website_slideshow.website_slideshow import get_slideshow
from frappe.website.utils import find_first_image, get_comment_list
from markdown2 import markdown
+from frappe.utils.jinja import render_template
class WebPage(WebsiteGenerator):
save_versions = True
@@ -32,14 +33,13 @@ class WebPage(WebsiteGenerator):
if self.template_path:
# load content from template
- context.update(get_static_content(self, self.template_path))
+ context.update(get_static_content(self, context))
else:
context.update({
"style": self.css or "",
"script": self.javascript or ""
})
- self.render_dynamic(context)
self.set_metatags(context)
if not context.header:
@@ -53,7 +53,7 @@ class WebPage(WebsiteGenerator):
def render_dynamic(self, context):
# dynamic
if context.main_section and "" in context.main_section:
- context["main_section"] = frappe.render_template(context.main_section,
+ context["main_section"] = render_template(context.main_section,
{"doc": self, "frappe": frappe})
context["no_cache"] = 1
@@ -68,12 +68,12 @@ class WebPage(WebsiteGenerator):
context.metatags["image"] = image
-def get_static_content(doc, template_path):
+def get_static_content(doc, context):
d = frappe._dict({})
- with open(template_path, "r") as contentfile:
+ with open(doc.template_path, "r") as contentfile:
content = unicode(contentfile.read(), 'utf-8')
- if template_path.endswith(".md"):
+ if doc.template_path.endswith(".md"):
if content:
lines = content.splitlines()
first_line = lines[0].strip()
@@ -88,8 +88,10 @@ def get_static_content(doc, template_path):
if not d.title:
d.title = doc.name.replace("-", " ").replace("_", " ").title()
+ doc.render_dynamic(d)
+
for extn in ("js", "css"):
- fpath = template_path.rsplit(".", 1)[0] + "." + extn
+ fpath = doc.template_path.rsplit(".", 1)[0] + "." + extn
if os.path.exists(fpath):
with open(fpath, "r") as f:
d["css" if extn=="css" else "javascript"] = f.read()
diff --git a/frappe/website/doctype/website_settings/website_settings.py b/frappe/website/doctype/website_settings/website_settings.py
index 7c70010553..c7c80040a1 100644
--- a/frappe/website/doctype/website_settings/website_settings.py
+++ b/frappe/website/doctype/website_settings/website_settings.py
@@ -107,6 +107,7 @@ def get_website_settings():
frappe.get_attr(update_website_context)(context)
context.web_include_js = hooks.web_include_js or []
+
context.web_include_css = hooks.web_include_css or []
return context
diff --git a/frappe/website/js/website.js b/frappe/website/js/website.js
index eaf76758b0..df747714f0 100644
--- a/frappe/website/js/website.js
+++ b/frappe/website/js/website.js
@@ -107,9 +107,14 @@ $.extend(frappe, {
} catch(e) {
console.log(data.exc);
}
- if (opts.error_msg && data._server_messages) {
+
+ if (data._server_messages) {
var server_messages = (JSON.parse(data._server_messages || '[]')).join("
");
- $(opts.error_msg).html(server_messages).toggle(true);
+ if(opts.error_msg) {
+ $(opts.error_msg).html(server_messages).toggle(true);
+ } else {
+ frappe.msgprint(server_messages);
+ }
}
} else{
if(opts.btn) {
@@ -265,7 +270,12 @@ $.extend(frappe, {
history.pushState(null, null, href);
var _render = function(data) {
- history.replaceState(data, data.title, href);
+ try {
+ history.replaceState(data, data.title, href);
+ } catch(e) {
+ // data too big (?)
+ history.replaceState(null, data.title, href);
+ }
scroll(0,0);
frappe.render_json(data);
};
@@ -291,6 +301,7 @@ $.extend(frappe, {
var $section = $(section);
var stype = $section.attr("data-html-block");
+
// handle meta separately
if (stype==="meta_block") return;