Add default texts for input fields with AJAX.
[Sone.git] / src / main / resources / static / javascript / sone.js
1 /* Sone JavaScript functions. */
2
3 function registerInputTextareaSwap(inputSelector, defaultText, inputFieldName, optional) {
4         $(inputSelector).each(function() {
5                 textarea = $("<textarea name=\"" + inputFieldName + "\"></textarea>").blur(function() {
6                         if ($(this).val() == "") {
7                                 $(this).hide();
8                                 $(this).data("inputField").show().removeAttr("disabled");
9                         }
10                 }).hide().data("inputField", $(this));
11                 $(this).after(textarea);
12                 (function(inputField, textarea) {
13                         $(inputField).focus(function() {
14                                 $(this).hide().attr("disabled", "disabled");
15                                 textarea.show().focus();
16                         }).addClass("default");
17                         (function(inputField) {
18                                 $.getJSON("ajax/getTranslation.ajax", {"key": defaultText}, function(data, textStatus) {
19                                         $(inputField).val(data.value);
20                                 });
21                         })(inputField);
22                         $(inputField.form).submit(function() {
23                                 if (!optional && (textarea.val() == "")) {
24                                         return false;
25                                 }
26                         });
27                 })(this, textarea);
28         });
29 }
30
31 /* hide all the “create reply” forms until a link is clicked. */
32 function addCommentLinks() {
33         $("#sone .post").each(function() {
34                 postId = $(this).attr("id");
35                 commentElement = (function(postId) {
36                         var commentElement = $("<div><span>Comment</span></div>").addClass("show-reply-form").click(function() {
37                                 replyElement = $("#sone .post#" + postId + " .create-reply");
38                                 replyElement.removeClass("hidden");
39                                 replyElement.removeClass("light");
40                                 (function(replyElement) {
41                                         replyElement.find("input.reply-input").blur(function() {
42                                                 if ($(this).hasClass("default")) {
43                                                         replyElement.addClass("light");
44                                                 }
45                                         }).focus(function() {
46                                                 replyElement.removeClass("light");
47                                         });
48                                 })(replyElement);
49                                 replyElement.find("input.reply-input").focus();
50                         });
51                         return commentElement;
52                 })(postId);
53                 $(this).find(".create-reply").addClass("hidden");
54                 $(this).find(".status-line .time").each(function() {
55                         $(this).after(commentElement.clone(true));
56                 });
57         });
58 }