Message Board Quick Reply with Quoting

From KickApps Documentation

Jump to: navigation, search

Description

The following code snippet will easily add both a Quick Reply feature and a Quote button to your message board disussions. This code snippet uses the Javascript Event API.

Code

Ka.events.listen('mb-view-discussion-page-load', function() {
	if (Ka.Info.USERID != '') {
		
		// create function for handing quote button
		quoteFunction = function(el) {
			var quote = $j(el).parents('.ka_genForumItemWrap').find('.ka_replyContents').html().replace("<!-- text-->", "", "ig"),
				author = $j(el).parents(".ka_genForumItemWrap").find(".ka_userName a").html(),
				quoteContents = "<div class='quoteContainer'><div class='quoteAuthor'>Posted By: " + author + "</div>" + quote + "</div>";

			$j("#quoteContents").html(quoteContents)
			$j("#quickReplyQuote").val(quoteContents);
			$j("#quickReply").ScrollTo();
		}
		
		// construct the URL for the displayNewDiscussion page
		var url = "/service/displayNewDiscussionThread.kickAction?as=" + Ka.Info.AFFILIATESITEID  
			+ "&w=" + Ka.Util.getLocationParam('w')
			+ "&d=" + Ka.Util.getLocationParam('d')
			+ "&dt=new"
			+ "&pg=dtpage"
			+ " #ka_msgb_newForm";

		// create the div that will hold our new form
		$j('<div id="quickReply"><fieldset><legend>Quick Reply</legend><div id="quoteContents"></div><div class="inner"></div></fieldset></div>')
			.insertAfter('#ka_repliesContainer');

		// load the content from the displayNewDiscussion page and store it in the new div
		$j("#quickReply .inner").load(url, function() { 
			$j("#ka_msgb_newForm")
				.find('#optionalMedia, label[for=ka_discussionSubject], #ka_discussionSubject').remove().end()
				.find('#ka_DiscussionName').hide().end()
				.find('.ka_formControl input').click(function() {
					var content = ($j('#quickReplyContent').val());
					if (content.length == 0) {
						return false;
					}
					var quote = $j("#quickReplyQuote").val();
					$j('#ka_DiscussionName').val(quote + content.replace('\n', '<br />', 'ig'));
					return true;
				}).val("Post Quick Reply").end()
			$j("<input type='hidden' id='quickReplyQuote' value='' /><textarea id='quickReplyContent'></textarea>").insertAfter("#ka_msgb_newForm #ka_DiscussionName")
		});
		
		$j('#ka_RepliesList ul.ka_sprite_mBoard li.ka_FBS_flag')
			.after('<li class="mbQuote"><a onclick="quoteFunction(this)" href="#quickReplyContent">Quote</a></li>');

	}
});


And some CSS to make it look nice:


body#ka_replies #ka_mainContainer #quickReply textarea { width:98% !important;}
body#ka_replies #ka_mainContainer #quickReply label { text-align:left; color:#444444;}

body#ka_replies #ka_mainContainer #quickReply fieldset { border:1px solid #ccc; padding:10px !important; }
body#ka_replies #ka_mainContainer #quickReply legend { color:#444444;}

.quoteContainer { border:1px solid #444; margin:0 0 10px 10px; padding:5px; }
.quoteAuthor { border-bottom:1px solid #444; font-weight:bold; margin-bottom:3px; padding-bottom:3px; }

body.ka_messageBoards #ka_contentContainer ul.ka_forumBodyStatsList li.mbQuote { background:transparent url(http://css.kickstatic.com/kickapps/images/sprites/sprite_media.gif) no-repeat scroll 0 -1122px; }