From fd6ad19fa09e62ffcffba6b805e51de94b405cbc Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 17 Dec 2012 12:52:43 +0530 Subject: [PATCH] refactored blog client-side code --- home/page/latest_updates/latest_updates.js | 3 + public/js/website_utils.js | 10 +- website/helpers/blog.py | 43 +---- website/templates/css/blog_page.css | 4 + website/templates/html/blog_page.html | 24 ++- website/templates/js/blog.js | 67 ++++--- website/templates/js/blog_page.js | 203 +++++---------------- website/templates/pages/blog.html | 6 +- 8 files changed, 139 insertions(+), 221 deletions(-) diff --git a/home/page/latest_updates/latest_updates.js b/home/page/latest_updates/latest_updates.js index f41c5479622..d1e46efe08c 100644 --- a/home/page/latest_updates/latest_updates.js +++ b/home/page/latest_updates/latest_updates.js @@ -1,4 +1,7 @@ erpnext.updates = [ + ["14th December 2012", [ + "Website Module: Major Refactor - removed framework code from website." + ]], ["12th December 2012", [ "Attachments: Attachments can be set as URLs or File Uploads. This will help if people want to share documents from Google Docs, Dropbox and other such services (esp for the Product listings on websites).", "Global Defaults: Session Expiry can now be set in Global Defaults.", diff --git a/public/js/website_utils.js b/public/js/website_utils.js index eb6363fdaac..f35ad4cc784 100644 --- a/public/js/website_utils.js +++ b/public/js/website_utils.js @@ -42,4 +42,12 @@ function get_url_arg(name) { return ""; else return decodeURIComponent(results[1]); -} \ No newline at end of file +} + +function repl(s, dict) { + if(s==null)return ''; + for(key in dict) { + s = s.split("%("+key+")s").join(dict[key]); + } + return s; +} diff --git a/website/helpers/blog.py b/website/helpers/blog.py index 02230dcd348..2bff6e57088 100644 --- a/website/helpers/blog.py +++ b/website/helpers/blog.py @@ -9,8 +9,7 @@ import website.utils def get_blog_list(args=None): """ args = { - 'limit_start': 0, - 'limit_page_length': 10, + 'start': 0, } """ import webnotes @@ -24,11 +23,9 @@ def get_blog_list(args=None): comment_doctype='Blog' and comment_docname=`tabBlog`.name) as comments from `tabBlog` where ifnull(published,0)=1 - order by creation desc, name asc""" - - from webnotes.widgets.query_builder import add_limit_to_query - query, args = add_limit_to_query(query, args) - + order by creation desc, name asc + limit %s, 5""" % args.start + result = webnotes.conn.sql(query, args, as_dict=1) # strip html tags from content @@ -41,38 +38,6 @@ def get_blog_list(args=None): if not res['content']: res['content'] = website.utils.get_html(res['page_name']) res['content'] = split_blog_content(res['content']) - res['content'] = res['content'][:1000] - - return result - -@webnotes.whitelist(allow_guest=True) -def get_recent_blog_list(args=None): - """ - args = { - 'limit_start': 0, - 'limit_page_length': 5, - 'name': '', - } - """ - import webnotes - - if not args: args = webnotes.form_dict - - query = """\ - select name, page_name, title, left(content, 100) as content - from tabBlog - where ifnull(published,0)=1 and - name!=%(name)s order by creation desc""" - - from webnotes.widgets.query_builder import add_limit_to_query - query, args = add_limit_to_query(query, args) - - result = webnotes.conn.sql(query, args, as_dict=1) - - # strip html tags from content - import webnotes.utils - for res in result: - res['content'] = webnotes.utils.strip_html(res['content']) return result diff --git a/website/templates/css/blog_page.css b/website/templates/css/blog_page.css index 928b8acb373..8f56cd2fec1 100644 --- a/website/templates/css/blog_page.css +++ b/website/templates/css/blog_page.css @@ -6,4 +6,8 @@ .comment-content { margin-left: 20px; } + + input { + width: 240px; + } \ No newline at end of file diff --git a/website/templates/html/blog_page.html b/website/templates/html/blog_page.html index 5421f00615c..87dcfef19ae 100644 --- a/website/templates/html/blog_page.html +++ b/website/templates/html/blog_page.html @@ -2,7 +2,6 @@ {% block javascript %} {% include "js/blog_page.js" %} - {% include "js/blog_subscribe.js" %} {% endblock %} {% block css %} @@ -28,15 +27,32 @@
{% if not comment_list %} -
+

Be the first one to comment

-
{% endif %} {% include 'html/comment.html' %}
- +
+
diff --git a/website/templates/js/blog.js b/website/templates/js/blog.js index 24cdf15ae48..43b2d70a962 100644 --- a/website/templates/js/blog.js +++ b/website/templates/js/blog.js @@ -15,29 +15,54 @@ // along with this program. If not, see . // js inside blog page -wn.pages['{{ name }}'].onload = function(wrapper) { - erpnext.blog_list = new wn.ui.Listing({ - parent: $(wrapper).find('#blog-list').get(0), - method: 'website.helpers.blog.get_blog_list', - hide_refresh: true, - no_toolbar: true, - render_row: function(parent, data) { - if(!data.comments) { - data.comment_text = 'No comments yet.' - } else if (data.comments===1) { - data.comment_text = '1 comment.' + +$(document).ready(function() { + // make list of blogs + blog.get_list(); + + $("#next-page").click(function() { + blog.get_list(); + }) +}); + +var blog = { + start: 0, + get_list: function() { + $.ajax({ + method: "GET", + url: "server.py", + data: { + cmd: "website.helpers.blog.get_blog_list", + start: blog.start + }, + dataType: "json", + success: function(data) { + blog.render(data.message); + } + }); + }, + render: function(data) { + var $wrap = $("#blog-list"); + $.each(data, function(i, b) { + // comments + if(!b.comments) { + b.comment_text = 'No comments yet.' + } else if (b.comments===1) { + b.comment_text = '1 comment.' } else { - data.comment_text = data.comments + ' comments.' + b.comment_text = b.comments + ' comments.' } - if(data.content && data.content.length==1000) { - data.content += repl('... (read on)', data); - } - parent.innerHTML = repl('

%(title)s

\ + $(repl('

%(title)s

\
%(comment_text)s
\ - %(content)s

', data); - }, - page_length: 10 - }); - erpnext.blog_list.run(); + %(content)s
\ +

Read with comments...

\ +

', b)).appendTo($wrap); + }); + blog.start += data.length; + if(!data.length) { + $("#next-page").toggle(false) + .parent().append("
Nothing more to show.
"); + } + } } \ No newline at end of file diff --git a/website/templates/js/blog_page.js b/website/templates/js/blog_page.js index 12dcac139f2..2e8de7e90c3 100644 --- a/website/templates/js/blog_page.js +++ b/website/templates/js/blog_page.js @@ -16,166 +16,61 @@ // js inside blog page -wn.provide('erpnext.blog'); -wn.pages['{{ name }}'].onload = function(wrapper) { - erpnext.blog.wrapper = wrapper; +$(document).ready(function() { + var n_comments = $(".comment-row").length; - // sidebar - //erpnext.blog.render_recent_list(wrapper); - - // unhide no-result if no comments found - erpnext.blog.toggle_no_result(wrapper); - - // bind add comment button to comment dialog - erpnext.blog.make_comment_dialog(wrapper); - - // hide add comment button after 50 comments - erpnext.blog.toggle_add_comment_btn(wrapper); -} - -erpnext.blog.adjust_page_height = function(wrapper) { - if (!wrapper) { wrapper = erpnext.blog.wrapper; } - if (!wrapper) { return; } - - // adjust page height based on sidebar height - var $main_page = $(wrapper).find('.layout-main-section'); - var $sidebar = $(wrapper).find('.layout-side-section'); - if ($sidebar.height() > $main_page.height()) { - $main_page.height($sidebar.height()); + if(n_comments) { + $(".no_comment").toggle(false); } -} - -erpnext.blog.render_recent_list = function(wrapper) { - if (!wrapper) { wrapper = erpnext.blog.wrapper; } - if (!wrapper) { return; } - - wrapper.recent_list = new wn.ui.Listing({ - parent: $(wrapper).find('.recent-posts'), - no_toolbar: true, - method: 'website.helpers.blog.get_recent_blog_list', - get_args: function() { - return { name: '{{ name }}' } - }, - hide_refresh: true, - render_row: function(parent, data) { - if(data.content && data.content.length>=100) data.content += '...'; - parent.innerHTML = repl('
\ - %(title)s\ -
%(content)s

', data); - - // adjust page height depending on sidebar height - erpnext.blog.adjust_page_height(wrapper); - }, - page_length: 5, - }); - wrapper.recent_list.run(); -} - -erpnext.blog.toggle_no_result = function(wrapper) { - if (!wrapper) { wrapper = erpnext.blog.wrapper; } - if (!wrapper) { return; } - - var $blog_comments = $(wrapper).find('.blog-comments'); - var $comment_rows = $blog_comments.find('.comment-row'); - var $no_result = $blog_comments.find('.no-result'); - - if ($comment_rows.length == 0) { - $no_result.removeClass('hide'); - } else { - $no_result.addClass('hide'); + if(n_comments > 50) { + $(".add-comment").toggle(false) + .parent().append("
Comments are closed.
") } -} - -erpnext.blog.make_comment_dialog = function(wrapper) { - if (!wrapper) { wrapper = erpnext.blog.wrapper; } - if (!wrapper) { return; } - - var $comment_btn = $(wrapper).find('button.add-comment'); - - $comment_btn.click(function() { - if(!erpnext.blog.comment_dialog) { - var d = new wn.ui.Dialog({ - title: 'Add Comment', - fields: [ - { - fieldname: 'comment_by_fullname', label: 'Your Name', - reqd: 1, fieldtype: 'Data' - }, - { - fieldname: 'comment_by', label: 'Email Id', - reqd: 1, fieldtype: 'Data' - }, - { - fieldname: 'comment', label: 'Comment', - reqd: 1, fieldtype: 'Text' - }, - { - fieldname: 'post_comment', label: 'Post Comment', - fieldtype: 'Button' - }, - ], - }); - - erpnext.blog.comment_dialog = d; + $(".add-comment").click(function() { + $("#comment-form").toggle(); + $("#comment-form input, #comment-form, textarea").val(""); + }) + $("#submit-comment").click(function() { + var args = { + comment_by_fullname: $("[name='comment_by_fullname']").val(), + comment_by: $("[name='comment_by']").val(), + comment: $("[name='comment']").val(), + cmd: "website.helpers.blog.add_comment", + comment_doctype: "Blog", + comment_docname: "{{ name }}", + page_name: "{{ page_name }}" } - erpnext.blog.comment_dialog.fields_dict.post_comment - .input.onclick = function() { - erpnext.blog.add_comment(wrapper); + $("#comment-form .alert").toggle(false); + + if(!args.comment_by_fullname || !args.comment_by || !args.comment) { + $("#comment-form .alert") + .html("All fields are necessary to submit the comment.") + .toggle(true); + return false; } - erpnext.blog.comment_dialog.show(); - }); - -} - -erpnext.blog.add_comment = function(wrapper) { - var args = erpnext.blog.comment_dialog.get_values(); - - if(!args) return; - - args.comment_doctype = 'Blog'; - args.comment_docname = '{{ name }}'; - args.page_name = '{{ page_name }}'; - - wn.call({ - method: 'website.helpers.blog.add_comment', - args: args, - btn: this, - callback: function(r) { - if(!r.exc) { - erpnext.blog.add_comment_to_page(wrapper, r.message); - erpnext.blog.comment_dialog.hide(); + + $.ajax({ + method: "POST", + url: "server.py", + data: args, + dataType: "json", + success: function(data) { + if(data.exc) { + $("#comment-form .alert") + .html(data.exc) + .toggle(true) + } else { + $(data.message).appendTo(".blog-comments"); + $(".no_comment").toggle(false); + $(".add-comment").toggle(false); + $("#comment-form") + .replaceWith("
Thank you for your comment!
") + } } - } - }); -} - -erpnext.blog.add_comment_to_page = function(wrapper, comment) { - $blog_comments = $(wrapper).find('.blog-comments'); - $comment_rows = $blog_comments.find('.comment-row'); - - if ($comment_rows.length) { - $blog_comments.append(comment); - } else { - $blog_comments.append(comment); - } - - erpnext.blog.toggle_no_result(wrapper); - erpnext.blog.toggle_add_comment_btn(wrapper); -} - -erpnext.blog.toggle_add_comment_btn = function(wrapper) { - var $wrapper = $(wrapper); - if ($wrapper.find('.blog-comments .comment-row').length > 50) { - var $comment_btn = $wrapper.find('button.add-comment'); - $comment_btn.addClass('hide'); + }) - // show comments are close - $wrapper.find('.blog-comments').append("\ -
\ -

Comments Closed

\ -
\ -
"); - } -} \ No newline at end of file + return false; + }) +}) \ No newline at end of file diff --git a/website/templates/pages/blog.html b/website/templates/pages/blog.html index c4a5dad3d93..75681d5045f 100644 --- a/website/templates/pages/blog.html +++ b/website/templates/pages/blog.html @@ -2,7 +2,6 @@ {% block javascript %} {% include "js/blog.js" %} - {% include "js/blog_subscribe.js" %} {% endblock %} {% block css %} @@ -18,9 +17,12 @@

Blog


-
+
+
+ +