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())