]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - js/util.js
no notice form on invites
[quix0rs-gnu-social.git] / js / util.js
index 98fb6c985026114808d615d5f244be2ed14fdbee..55f2920cd5f4a9e25a13bb9c92ce2304b3e25266 100644 (file)
@@ -518,8 +518,8 @@ var SN = { // StatusNet
                 url: form.attr('action'),
                 data: form.serialize() + '&ajax=1',
                 beforeSend: function(xhr) {
-                    form.addClass(SN.C.S.Processing)
-                        .find('.submit')
+                    form.find('.submit')
+                            .addClass(SN.C.S.Processing)
                             .addClass(SN.C.S.Disabled)
                             .attr(SN.C.S.Disabled, SN.C.S.Disabled);
                 },
@@ -609,8 +609,7 @@ var SN = { // StatusNet
             $('#content .notice_reply').live('click', function(e) {
                 e.preventDefault();
                 var notice = $(this).closest('li.notice');
-                var nickname = ($('.author .nickname', notice).length > 0) ? $($('.author .nickname', notice)[0]) : $('.author .nickname.uid');
-                SN.U.NoticeInlineReplyTrigger(notice, '@' + nickname.text());
+                SN.U.NoticeInlineReplyTrigger(notice);
                 return false;
             });
         },
@@ -644,8 +643,8 @@ var SN = { // StatusNet
                 // and we'll add on the end of it. Will add if needed.
                 list = $('ul.threaded-replies', notice);
                 if (list.length == 0) {
-                    list = $('<ul class="notices threaded-replies xoxo"></ul>');
-                    notice.append(list);
+                    SN.U.NoticeInlineReplyPlaceholder(notice);
+                    list = $('ul.threaded-replies', notice);
                 }
             }
 
@@ -655,6 +654,10 @@ var SN = { // StatusNet
             var nextStep = function() {
                 // Override...?
                 replyForm.find('input[name=inreplyto]').val(id);
+                replyForm.find('#notice_to').attr('disabled', 'disabled').hide();
+                replyForm.find('#notice_private').attr('disabled', 'disabled').hide();
+                replyForm.find('label[for=notice_to]').hide();
+                replyForm.find('label[for=notice_private]').hide();
 
                 // Set focus...
                 var text = replyForm.find('textarea');
@@ -714,6 +717,11 @@ var SN = { // StatusNet
 
         NoticeInlineReplyPlaceholder: function(notice) {
             var list = notice.find('ul.threaded-replies');
+            if (list.length == 0) {
+                list = $('<ul class="notices threaded-replies xoxo"></ul>');
+                notice.append(list);
+                list = notice.find('ul.threaded-replies');
+            }
             var placeholder = $('<li class="notice-reply-placeholder">' +
                                     '<input class="placeholder">' +
                                 '</li>');
@@ -1385,6 +1393,14 @@ var SN = { // StatusNet
                 $('#input_form_nav_'+tag).addClass('current');
             }
 
+            // Don't remove 'current' if we also have the "nonav" class.
+            // An example would be the message input form. removing
+            // 'current' will cause the form to vanish from the page.
+            var nonav = $('.input_form.current.nonav');
+            if (nonav.length > 0) {
+                return;
+            }
+
            $('.input_form.current').removeClass('current');
            $('#input_form_'+tag)
                 .addClass('current')
@@ -1543,39 +1559,94 @@ var SN = { // StatusNet
             });
         },
 
-        PeopletagAutocomplete: function() {
-            $('.form_tag_user #tags').tagInput({
-                tags: SN.C.PtagACData,
-                tagSeparator: " ",
-                animate: false,
-                formatLine: function (i, e, search, matches) {
-                  var tag = "<b>" + e.tag.substring(0, search.length) + "</b>" + e.tag.substring(search.length);
-
-                  var line = $("<div/>").addClass('mode-' + e.mode);
-                    line.append($("<div class='tagInputLineTag'>" + tag
-                        + " <em class='privacy_mode'>" + e.mode + "</em></div>"));
-                  if (e.freq)
-                    line.append("<div class='tagInputLineFreq'>" + e.freq + "</div>");
-                  return line;
+        /**
+         * Called when a people tag edit box is shown in the interface
+         *
+         * - loads the jQuery UI autocomplete plugin
+         * - sets event handlers for tag completion
+         *
+         */
+        PeopletagAutocomplete: function(txtBox) {
+            var split = function(val) {
+                return val.split( /\s+/ );
+            }
+            var extractLast = function(term) {
+                return split(term).pop();
+            }
+
+            // don't navigate away from the field on tab when selecting an item
+            txtBox.live( "keydown", function( event ) {
+                if ( event.keyCode === $.ui.keyCode.TAB &&
+                        $(this).data( "autocomplete" ).menu.active ) {
+                    event.preventDefault();
                 }
-            });
+            }).autocomplete({
+                minLength: 0,
+                source: function(request, response) {
+                           // delegate back to autocomplete, but extract the last term
+                           response($.ui.autocomplete.filter(
+                                   SN.C.PtagACData, extractLast(request.term)));
+                   },
+                   focus: function() {
+                       return false;
+                },
+                   select: function(event, ui) {
+                           var terms = split(this.value);
+                           terms.pop();
+                           terms.push(ui.item.value);
+                           terms.push("");
+                           this.value = terms.join(" ");
+                           return false;
+                   }
+            }).data('autocomplete')._renderItem = function(ul, item) {
+                    // FIXME: with jQuery UI you cannot have it highlight the match
+                    var _l = '<a class="ptag-ac-line-tag">' + item.tag
+                          + ' <em class="privacy_mode">' + item.mode + '</em>'
+                          + '<span class="freq">' + item.freq + '</span></a>'
+
+                           return $("<li/>")
+                               .addClass('mode-' + item.mode)
+                            .addClass('ptag-ac-line')
+                            .data("item.autocomplete", item)
+                            .append(_l)
+                            .appendTo(ul);
+                   }
         },
 
+        /**
+         * Run setup for the ajax people tags editor
+         *
+         * - show edit button
+         * - set event handle for click on edit button
+         *   - loads people tag autocompletion data if not already present
+         *     or if it is stale.
+         *
+         */
         PeopleTags: function() {
             $('.user_profile_tags .editable').append($('<button class="peopletags_edit_button"/>'));
 
             $('.peopletags_edit_button').live('click', function() {
                 var form = $(this).parents('dd').eq(0).find('form');
                 // We can buy time from the above animation
-                if (typeof SN.C.PtagACData === 'undefined') {
-                    $.getJSON(_peopletagAC + '?token=' + $('#token').val(), function(data) {
+
+                $.ajax({
+                    url: _peopletagAC,
+                    dataType: 'json',
+                    data: {token: $('#token').val()},
+                    ifModified: true,
+                    success: function(data) {
+                        // item.label is used to match
+                        for (i=0; i < data.length; i++) {
+                            data[i].label = data[i].tag;
+                        }
+
                         SN.C.PtagACData = data;
-                        _loadTagInput(SN.Init.PeopletagAutocomplete);
-                    });
-                } else { _loadTagInput(SN.Init.PeopletagAutocomplete); }
+                        SN.Init.PeopletagAutocomplete(form.find('#tags'));
+                    }
+                });
 
                 $(this).parents('ul').eq(0).fadeOut(200, function() {form.fadeIn(200).find('input#tags')});
-            })
+            });
 
             $('.user_profile_tags form .submit').live('click', function() {
                 SN.U.FormPeopletagsXHR($(this).parents('form')); return false;
@@ -1590,6 +1661,18 @@ var SN = { // StatusNet
                 SN.U.FormXHR($(this));
                 return false;
             });
+            $('form.ajax input[type=submit]').live('click', function() {
+                // Some forms rely on knowing which submit button was clicked.
+                // Save a hidden input field which'll be picked up during AJAX
+                // submit...
+                var button = $(this);
+                var form = button.closest('form');
+                form.find('.hidden-submit-button').remove();
+                $('<input class="hidden-submit-button" type="hidden" />')
+                    .attr('name', button.attr('name'))
+                    .val(button.val())
+                    .appendTo(form);
+            });
         },
 
         /**
@@ -1616,7 +1699,26 @@ var SN = { // StatusNet
                     }
                 }
             });
-        }
+        },
+
+       CheckBoxes: function() {
+           $("span[class='checkbox-wrapper']").addClass("unchecked");
+           $(".checkbox-wrapper").click(function(){
+               if($(this).children("input").attr("checked")){
+                   // uncheck
+                   $(this).children("input").attr({checked: ""});
+                   $(this).removeClass("checked");
+                   $(this).addClass("unchecked");
+                   $(this).children("label").text("Private?");
+               }else{
+                   // check
+                   $(this).children("input").attr({checked: "checked"});
+                   $(this).removeClass("unchecked");
+                   $(this).addClass("checked");
+                   $(this).children("label").text("Private");
+               }
+           });
+       }
     }
 };
 
@@ -1630,6 +1732,7 @@ var SN = { // StatusNet
 $(document).ready(function(){
     SN.Init.AjaxForms();
     SN.Init.UploadForms();
+    SN.Init.CheckBoxes();
     if ($('.'+SN.C.S.FormNotice).length > 0) {
         SN.Init.NoticeForm();
     }
@@ -1649,3 +1752,4 @@ $(document).ready(function(){
         SN.Init.PeopleTags();
     }
 });
+