diff --git a/MANIFEST.in b/MANIFEST.in
index 0f85939e09..30ca6761a2 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -25,4 +25,5 @@ recursive-include frappe *.csv
recursive-include frappe *.ico
recursive-include frappe *.less
recursive-include frappe *.txt
+recursive-include frappe/public *
recursive-exclude * *.pyc
diff --git a/frappe/__init__.py b/frappe/__init__.py
index 178b4540f4..7c62ae1808 100644
--- a/frappe/__init__.py
+++ b/frappe/__init__.py
@@ -630,7 +630,7 @@ def set_filters(jenv):
jenv.filters["json"] = dumps
jenv.filters["get_hex_shade"] = get_hex_shade
- # load jenv_filters from hooks.txt
+ # load jenv_filters from hooks.py
for app in get_all_apps(True):
for jenv_filter in (get_hooks(app_name=app).jenv_filter or []):
filter_name, filter_function = jenv_filter.split(":")
diff --git a/frappe/website/doctype/blog_post/blog_post.js b/frappe/website/doctype/blog_post/blog_post.js
index ed555352d7..62d392e056 100644
--- a/frappe/website/doctype/blog_post/blog_post.js
+++ b/frappe/website/doctype/blog_post/blog_post.js
@@ -10,9 +10,9 @@ cur_frm.cscript.refresh = function(doc) {
});
});
}
-
+
cur_frm.appframe.add_button("View In Website", function() {
- window.open(doc.page_name);
+ window.open(doc.__onload.website_route);
}, "icon-globe");
}
-}
\ No newline at end of file
+}
diff --git a/frappe/website/doctype/blog_post/blog_post.py b/frappe/website/doctype/blog_post/blog_post.py
index aaaa551b83..9e19934ae1 100644
--- a/frappe/website/doctype/blog_post/blog_post.py
+++ b/frappe/website/doctype/blog_post/blog_post.py
@@ -12,18 +12,18 @@ from frappe.utils import today
class BlogPost(WebsiteGenerator):
save_versions = True
-
+
def get_page_title(self):
return self.title
-
+
def validate(self):
if not self.blog_intro:
self.blog_intro = self.content[:140]
re.sub("\<[^>]*\>", "", self.blog_intro)
-
+
if self.blog_intro:
self.blog_intro = self.blog_intro[:140]
-
+
if self.published and not self.published_on:
self.published_on = today()
@@ -31,18 +31,18 @@ class BlogPost(WebsiteGenerator):
{"ref_doctype": "Blog Category", "docname": self.blog_category})
# update posts
- frappe.db.sql("""update tabBlogger set posts=(select count(*) from `tabBlog Post`
+ frappe.db.sql("""update tabBlogger set posts=(select count(*) from `tabBlog Post`
where ifnull(blogger,'')=tabBlogger.name)
where name=%s""", (self.blogger,))
-
+
def on_update(self):
WebsiteGenerator.on_update(self)
clear_cache("writers")
def clear_blog_cache():
- for blog in frappe.db.sql_list("""select page_name from
+ for blog in frappe.db.sql_list("""select page_name from
`tabBlog Post` where ifnull(published,0)=1"""):
clear_cache(blog)
-
+
clear_cache("writers")
diff --git a/frappe/website/doctype/web_page/web_page.js b/frappe/website/doctype/web_page/web_page.js
index 657e5ce879..a94c157544 100644
--- a/frappe/website/doctype/web_page/web_page.js
+++ b/frappe/website/doctype/web_page/web_page.js
@@ -11,7 +11,7 @@ $.extend(cur_frm.cscript, {
}
if(doc.insert_style) {
if(!doc.css) {
- cur_frm.set_value("css", '#page-'+doc.name+' { }');
+ cur_frm.set_value("css", '#page-'+doc.name+' { }');
}
}
}
@@ -20,14 +20,14 @@ $.extend(cur_frm.cscript, {
cur_frm.cscript.layout(doc);
if(!doc.__islocal && doc.published) {
cur_frm.appframe.add_button("View In Website", function() {
- window.open(doc.page_name);
+ window.open(doc.__onload.website_route);
}, "icon-globe");
}
},
insert_style: function(doc) {
- cur_frm.cscript.layout(doc);
+ cur_frm.cscript.layout(doc);
},
insert_code: function(doc) {
- cur_frm.cscript.layout(doc);
+ cur_frm.cscript.layout(doc);
}
-});
\ No newline at end of file
+});
diff --git a/frappe/website/js/website.js b/frappe/website/js/website.js
index ac8530fd1a..137a5d0b48 100644
--- a/frappe/website/js/website.js
+++ b/frappe/website/js/website.js
@@ -194,16 +194,15 @@ $.extend(frappe, {
$(window).on("popstate", function(event) {
// hack for chrome's onload popstate call
if(window.initial_href==location.href && window.previous_href==undefined) {
- frappe.set_force_reload(true);
+ window.location.reload();
return;
}
window.previous_href = location.href;
var state = event.originalEvent.state;
if(!state) {
- console.log("state not found!");
- frappe.set_force_reload(true);
- state = window.history.state;
+ window.location.reload();
+ return;
}
frappe.render_json(state);
});
@@ -273,44 +272,35 @@ $.extend(frappe, {
});
},
render_json: function(data) {
- if(data.reload) {
- window.location = location.href;
- } else {
- $('[data-html-block]').each(function(i, section) {
- var $section = $(section);
- var stype = $section.attr("data-html-block");
- var block_data = data[stype] || "";
-
- // NOTE: use frappe.ready instead of $.ready for reliable execution
- if(stype==="script") {
- $section.remove();
- $("")
- .html(block_data)
- .appendTo("body");
- } else if(stype==="script_lib") {
- // render once
- if(!$("[data-block-html='script_lib'][data-path='"+data.path+"']").length) {
- $("")
- .html(data.script_lib)
- .appendTo("body");
- }
- } else {
- $section.html(block_data);
+ $('[data-html-block]').each(function(i, section) {
+ var $section = $(section);
+ var stype = $section.attr("data-html-block");
+ var block_data = data[stype] || "";
+
+ // NOTE: use frappe.ready instead of $.ready for reliable execution
+ if(stype==="script") {
+ $section.remove();
+ $("")
+ .html(block_data)
+ .appendTo("body");
+ } else if(stype==="script_lib") {
+ // render once
+ if(!$("[data-block-html='script_lib'][data-path='"+data.path+"']").length) {
+ $("")
+ .html(data.script_lib)
+ .appendTo("body");
}
- });
- if(data.title) $("title").html(data.title);
+ } else {
+ $section.html(block_data);
+ }
+ });
+ if(data.title) $("title").html(data.title);
- // change id of current page
- $(".page-container").attr("id", "page-" + data.path);
+ // change id of current page
+ $(".page-container").attr("id", "page-" + data.path);
- window.ga && ga('send', 'pageview', location.pathname);
- $(document).trigger("page-change");
- }
- },
- set_force_reload: function(reload) {
- // learned this from twitter's implementation
- window.history.replaceState({"reload": reload},
- window.document.title, location.href);
+ window.ga && ga('send', 'pageview', location.pathname);
+ $(document).trigger("page-change");
},
supports_pjax: function() {
return (window.history && window.history.pushState && window.history.replaceState &&
diff --git a/frappe/website/website_generator.py b/frappe/website/website_generator.py
index 285be473f5..b0e4b24f3e 100644
--- a/frappe/website/website_generator.py
+++ b/frappe/website/website_generator.py
@@ -18,6 +18,9 @@ class WebsiteGenerator(Document):
self.name = self.get_page_name()
append_number_if_name_exists(self)
+ def onload(self):
+ self.get("__onload").website_route = frappe.db.get_value("Website Route", {"ref_doctype": self.doctype, "docname": self.name})
+
def set_page_name(self):
"""set page name based on parent page_name and title"""
page_name = cleanup_page_name(self.get_page_title())