X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=js%2Futil.js;h=87a95c53138b93d6574da12b0b49dbf96a283c52;hb=25198a8d4cee5b2182f1ecb99192a4108a01afa4;hp=ee5cbefd8819796985cf58ddd8a0e8612f829922;hpb=ced00cf0bdd4f119e2126e2eba18a3df7ee45c11;p=quix0rs-gnu-social.git diff --git a/js/util.js b/js/util.js index ee5cbefd88..87a95c5313 100644 --- a/js/util.js +++ b/js/util.js @@ -236,10 +236,11 @@ var SN = { // StatusNet * @fixme can't submit file uploads * * @param {jQuery} form: jQuery object whose first element is a form + * @param function onSuccess: something extra to do on success * * @access public */ - FormXHR: function(form) { + FormXHR: function(form, onSuccess) { $.ajax({ type: 'POST', dataType: 'xml', @@ -261,7 +262,7 @@ var SN = { // StatusNet errorReported = $('#error', xhr.responseXML).text(); } alert(errorReported || errorThrown || textStatus); - + // Restore the form to original state. // Hopefully. :D form @@ -274,9 +275,15 @@ var SN = { // StatusNet if (typeof($('form', data)[0]) != 'undefined') { form_new = document._importNode($('form', data)[0], true); form.replaceWith(form_new); + if (onSuccess) { + onSuccess(); + } } else if (typeof($('p', data)[0]) != 'undefined') { form.replaceWith(document._importNode($('p', data)[0], true)); + if (onSuccess) { + onSuccess(); + } } else { alert('Unknown error.'); @@ -499,7 +506,7 @@ var SN = { // StatusNet results_placeholder.replaceWith(list); } else { - var _error = $('
  • ').append(document._importNode($('p', data)[0], true)); + var _error = $('
  • ').append(document._importNode($('p', data)[0], true)); results_placeholder.html(_error); } form @@ -518,8 +525,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 +616,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 +650,13 @@ 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 = $(''); - notice.append(list); + SN.U.NoticeInlineReplyPlaceholder(notice); + list = $('ul.threaded-replies', notice); + } else { + var placeholder = $('li.notice-reply-placeholder', notice); + if (placeholder.length == 0) { + SN.U.NoticeInlineReplyPlaceholder(notice); + } } } @@ -655,6 +666,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,8 +729,13 @@ var SN = { // StatusNet NoticeInlineReplyPlaceholder: function(notice) { var list = notice.find('ul.threaded-replies'); + if (list.length == 0) { + list = $(''); + notice.append(list); + list = notice.find('ul.threaded-replies'); + } var placeholder = $('
  • ' + - '' + + '' + '
  • '); placeholder.find('input') .val(SN.msg('reply_placeholder')); @@ -756,6 +776,7 @@ var SN = { // StatusNet * popout before submitting. * * Uses 'live' rather than 'bind', so applies to future as well as present items. + * */ NoticeRepeat: function() { $('.form_repeat').live('click', function(e) { @@ -1385,6 +1406,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') @@ -1392,8 +1421,16 @@ var SN = { // StatusNet var form = $(this); SN.Init.NoticeFormSetup(form); }) - .find('textarea:first').focus(); - } + .find('.notice_data-text').focus(); + }, + + showMoreMenuItems: function(menuid) { + $('#'+menuid+' .more_link').remove(); + var selector = '#'+menuid+' .extended_menu'; + var extended = $(selector); + extended.removeClass('extended_menu'); + return void(0); + } }, Init: { @@ -1451,6 +1488,10 @@ var SN = { // StatusNet }); } }); + + // Infield labels for notice form inputs. + $('.input_forms fieldset fieldset label').inFieldLabels({ fadeOpacity:0 }); + } }, @@ -1543,39 +1584,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 = "" + e.tag.substring(0, search.length) + "" + e.tag.substring(search.length); - - var line = $("
    ").addClass('mode-' + e.mode); - line.append($("
    " + tag - + " " + e.mode + "
    ")); - if (e.freq) - line.append("
    " + e.freq + "
    "); - 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 = '' + item.tag + + ' ' + item.mode + '' + + '' + item.freq + '' + + return $("
  • ") + .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($('