]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/Autocomplete/Autocomplete.js
Update Autocomplete plugin for reusable notice forms in 1.0.x. It's fun!
[quix0rs-gnu-social.git] / plugins / Autocomplete / Autocomplete.js
index 3eff685a8dff5c002e5a161f48de506764992760..2b031cc3132aa0d4878a123e718437099dac367a 100644 (file)
@@ -1,37 +1,53 @@
-$(document).ready(function(){
-            $('#notice_data-text').autocomplete($('address .url')[0].href+'/plugins/Autocomplete/autocomplete.json', {
-                multiple: true,
-                multipleSeparator: " ",
-                minChars: 1,
-                formatItem: function(row, i, max){
-                    row = eval("(" + row + ")");
-                    switch(row.type)
-                    {
-                        case 'user':
-                            return row.nickname + ' (' + row.fullname + ')';
-                        case 'group':
-                            return row.nickname + ' (' + row.fullname + ')';
-                    }
-                },
-                formatMatch: function(row, i, max){
-                    row = eval("(" + row + ")");
-                    switch(row.type)
-                    {
-                        case 'user':
-                            return row.nickname;
-                        case 'group':
-                            return row.nickname;
-                    }
-                },
-                formatResult: function(row){
-                    row = eval("(" + row + ")");
-                    switch(row.type)
-                    {
-                        case 'user':
-                            return '@' + row.nickname;
-                        case 'group':
-                            return '!' + row.nickname;
-                    }
-                }
-            });
-});
+(function(SN, $) {
+
+var origInit = SN.Init.NoticeFormSetup;
+SN.Init.NoticeFormSetup = function(form) {
+    origInit(form);
+
+    // Only attach to traditional-style forms
+    var textarea = form.find('.notice_data-text:first');
+    if (textarea.length == 0) {
+        return;
+    }
+
+    function fullName(row) {
+        if (typeof row.fullname == "string" && row.fullname != '') {
+            return row.nickname + ' (' + row.fullname + ')';
+        } else {
+            return row.nickname;
+        }
+    }
+
+    var apiUrl = $('#autocomplete-api').attr('data-url');
+    textarea.autocomplete(apiUrl, {
+        multiple: true,
+        multipleSeparator: " ",
+        minChars: 1,
+        formatItem: function(row, i, max){
+            row = eval("(" + row + ")");
+            // the display:inline is because our INSANE stylesheets
+            // override the standard display of all img tags for no
+            // good reason.
+            var div = $('<div><img style="display:inline; vertical-align: middle"> <span></span></div>')
+                .find('img').attr('src', row.avatar).end()
+                .find('span').text(fullName(row)).end()
+            return div.html();
+        },
+        formatMatch: function(row, i, max){
+            row = eval("(" + row + ")");
+            return row.nickname;
+        },
+        formatResult: function(row){
+            row = eval("(" + row + ")");
+            switch(row.type)
+            {
+                case 'user':
+                    return '@' + row.nickname;
+                case 'group':
+                    return '!' + row.nickname;
+            }
+        }
+    });
+};
+
+})(SN, jQuery);