]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Move people tag autocomplete JS to plugin
authorChimo <chimo@chromic.org>
Mon, 16 Feb 2015 00:10:05 +0000 (19:10 -0500)
committerChimo <chimo@chromic.org>
Mon, 16 Feb 2015 00:10:05 +0000 (19:10 -0500)
As discussed in https://gitorious.org/social/mainline/merge_requests/47

js/util.js
plugins/Autocomplete/js/autocomplete.go.js

index 6a1eb82b2e04139b6aed977a773be0cdb1cf4f2b..2611d8515ac73e6b8b1812d68696b2075cf874a0 100644 (file)
@@ -1562,60 +1562,6 @@ var SN = { // StatusNet
             });
         },
 
-        /**
-         * 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.on( "keydown", function ( event ) {
-                if ( event.keyCode === $.ui.keyCode.TAB &&
-                        $(this).data( "ui-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('ui-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
          *
@@ -1644,7 +1590,6 @@ var SN = { // StatusNet
                         }
 
                         SN.C.PtagACData = data;
-                        SN.Init.PeopletagAutocomplete(form.find('#tags'));
                     }
                 });
 
index 4e7058dd9dd17ef556528c585e12ed1df16e2af5..829581ae3ecc3a4e79cecf0a55b7d3f5e822d8dd 100644 (file)
@@ -13,7 +13,7 @@ SN.Init.NoticeFormSetup = function(form) {
 
     // Only attach to traditional-style forms
     var textarea = form.find('.notice_data-text:first');
-    if (textarea.length == 0) {
+    if (textarea.length === 0) {
         return;
     }
 
@@ -69,3 +69,70 @@ SN.Init.NoticeFormSetup = function(form) {
                 .appendTo(ul);
         };
 };
+
+/**
+ * Called when a people tag edit box is shown in the interface
+ *
+ * - loads the jQuery UI autocomplete plugin
+ * - sets event handlers for tag completion
+ *
+ */
+SN.Init.PeopletagAutocomplete = function(txtBox) {
+    var split,
+        extractLast;
+
+    split = function(val) {
+        return val.split( /\s+/ );
+    };
+
+     extractLast = function(term) {
+        return split(term).pop();
+    };
+
+    // don't navigate away from the field on tab when selecting an item
+    txtBox
+        .on('keydown', function(event) {
+            if (event.keyCode === $.ui.keyCode.TAB &&
+                    $(this).data('ui-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('ui-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);
+        };
+};
+
+$(document).on('click', '.peopletags_edit_button', function () {
+    SN.Init.PeopletagAutocomplete($(this).closest('dd').find('[name="tags"]'));
+});
+