view docs/ref/jquery.plugin.docscomments.js @ 3158:29d7349c8a31 nullege-examples

Update example search to use Nullege. Google Code Search is no more.
author Thomas Kluyver <takowl@gmail.com>
date Thu, 03 Jan 2013 12:34:02 +0000
parents b3e367b1eca6
children
line wrap: on
line source

$(document).ready(function () {


	/*
	- fix comment addition for module level comment.
	- format dates in a more human readable way.
	X - show user title for each post.
	X - order comments by newest first.
	X - prevent comments from being added multiple times.
	X - add comment button to reference full url.
	X - Add 'add comment' button in, even if there are comments.
	*/

	var _comments = {};

	$.getJSON("docscomments.json", function (data) {
		//console.log(data);

		// newest comment first.
		var sortComments = function (a,b) {
		    var x = a.datetimeon;
		    var y = b.datetimeon;
		    return ((x < y) ? 1 : ((x > y) ? -1 : 0));
		}

		for(var i=0; i < data.length; i+=1) {
			var link = data[i]['link']
			if(typeof _comments[link] === "undefined") {
				_comments[link] = [];
			}
			_comments[link].push(data[i]);
			_comments[link].sort(sortComments);
		}


		var getComments = function (link) {
			return _comments[link];
		};

		var searchButtonHtml = [
			'<form action="http://nullege.com/codes/search" class="addcomment"><input type="hidden" value="', 
			'" name="cq"><input type="submit" value="Search examples for ',
			'"></form>'
		];

		var addCommentHtml = [
			'<form action="http://www.pygame.org/docs/ref/comment_new.php" class="addcomment"><input type="hidden" value="',
			'" name="link"><input type="submit" value="Add a Comment"></form>'
		];
		var showCommentHtml = [
			'<a href="#comment_',
			'" title="show comments" class="commentButton">Comments ',
			'</a><article id="comment_',
			'" class="hidden commentsArticle"></article>'
		];
		var commentPartHtml = [
			'<section class="commentPart"><header class="commentHeading">', 
			'</header>',
			'<pre class="commentContent">', 
			'</pre></section>'
		]

		$('dt.title').each(function (idx, el) {
			var link = $(el).attr('id');
			if (typeof link === "undefined") {
				return;
			}

			// Add "search internet for source code" buttons.
			var searchButton = $(searchButtonHtml[0] + link + searchButtonHtml[1] + link + searchButtonHtml[2]);
			$(el).next().append(searchButton);

			// Add show comments buttons.
			var comments = getComments(link);

			var addCommentButton = $(addCommentHtml[0] + link + addCommentHtml[1]);
			$(el).next().append(addCommentButton);

			if(typeof comments === "undefined") {
			} else {
				// show comment button.
				//console.log(link)
				var $showCommentButton = $([showCommentHtml[0], 
							  link.replace(/\./g, "_"), 
							showCommentHtml[1],
							comments.length,
							showCommentHtml[2],
							  link.replace(/\./g, "_"), 
							showCommentHtml[3]
							  ].join(""));
				$(el).next().append($showCommentButton);

				$showCommentButton.click(function () {
					//console.log('asdf')
					var $commentSection = $("#comment_" + link.replace(/\./g, "_"));
					if (!$commentSection.hasClass('hidden')) {
						// we have already loaded the comments for this part.
						return;
					}
					$commentSection.removeClass("hidden");
					$.each(comments, function(idx) {
						console.log(comments[idx])
						// date + user
						var userName = comments[idx]['user_title'];
						if (userName == null) {
							userName = 'Anonymous';
						}
						var commentHeading = comments[idx]['datetimeon'] + " - " + userName;
						var commentContent= comments[idx]['content'];

						var $commentPart = $([commentPartHtml[0], 
							  commentHeading, 
							commentPartHtml[1],
							commentPartHtml[2],
							commentContent,
							commentPartHtml[3]].join("\n"));
						$commentSection.append($commentPart);
					});
					
				})
			}
		});



	});




});