]> git.mxchange.org Git - friendica.git/blobdiff - view/js/main.js
Merge pull request #8005 from MrPetovan/bug/7992-empty-in-clause
[friendica.git] / view / js / main.js
index 8b1303e7d3f534e3937f6cc459d441b0385018d7..37975dd3385b57db1d3692cefe56a5e7738d6a81 100644 (file)
@@ -86,6 +86,8 @@ var last_popup_menu = null;
 var last_popup_button = null;
 var lockLoadContent = false;
 
+const urlRegex = /^(?:https?:\/\/|\s)[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})(?:\/+[a-z0-9_.:;-]*)*(?:\?[&%|+a-z0-9_=,.:;-]*)?(?:[&%|+&a-z0-9_=,:;.-]*)(?:[!#\/&%|+a-z0-9_=,:;.-]*)}*$/i;
+
 $(function() {
        $.ajaxSetup({cache: false});
 
@@ -404,6 +406,61 @@ $(function() {
        }
 });
 
+/**
+ * Inserts a BBCode tag in the comment textarea identified by id
+ *
+ * @param {string} BBCode
+ * @param {int} id
+ * @returns {boolean}
+ */
+function insertFormatting(BBCode, id) {
+       let textarea = document.getElementById('comment-edit-text-' + id);
+
+       if (textarea.value === '') {
+               $(textarea)
+                       .addClass("comment-edit-text-full")
+                       .removeClass("comment-edit-text-empty");
+               closeMenu("comment-fake-form-" + id);
+               openMenu("item-comments-" + id);
+       }
+
+       insertBBCodeInTextarea(BBCode, textarea);
+
+       return true;
+}
+
+/**
+ * Inserts a BBCode tag in the provided textarea element, wrapping the currently selected text.
+ * For URL BBCode, it discriminates between link text and non-link text to determine where to insert the selected text.
+ *
+ * @param {string} BBCode
+ * @param {HTMLTextAreaElement} textarea
+ */
+function insertBBCodeInTextarea(BBCode, textarea) {
+       let selectionStart = textarea.selectionStart;
+       let selectionEnd = textarea.selectionEnd;
+       let selectedText = textarea.value.substring(selectionStart, selectionEnd);
+       let openingTag = '[' + BBCode + ']';
+       let closingTag = '[/' + BBCode + ']';
+       let cursorPosition = selectionStart + openingTag.length + selectedText.length;
+
+       if (BBCode === 'url') {
+               if (urlRegex.test(selectedText)) {
+                       openingTag = '[' + BBCode + '=' + selectedText + ']';
+                       selectedText = '';
+                       cursorPosition = selectionStart + openingTag.length;
+               } else {
+                       openingTag = '[' + BBCode + '=]';
+                       cursorPosition = selectionStart + openingTag.length - 1;
+               }
+       }
+
+       textarea.value = textarea.value.substring(0, selectionStart) + openingTag + selectedText + closingTag + textarea.value.substring(selectionEnd, textarea.value.length);
+       textarea.setSelectionRange(cursorPosition, cursorPosition);
+       textarea.dispatchEvent(new Event('change'));
+       textarea.focus();
+}
+
 function NavUpdate() {
        if (!stopped) {
                var pingCmd = 'ping?format=json' + ((localUser != 0) ? '&f=&uid=' + localUser : '');
@@ -466,7 +523,7 @@ function updateConvItems(data) {
                $('body').css('cursor', 'auto');
        }
        /* autocomplete @nicknames */
-       $(".comment-edit-form  textarea").editor_autocomplete(baseurl+"/acl");
+       $(".comment-edit-form  textarea").editor_autocomplete(baseurl + '/search/acl');
        /* autocomplete bbcode */
        $(".comment-edit-form  textarea").bbco_autocomplete('bbcode');
 }
@@ -569,18 +626,39 @@ function dostar(ident) {
        });
 }
 
-function doignore(ident) {
+function dopin(ident) {
        ident = ident.toString();
        $('#like-rotator-' + ident).show();
-       $.get('ignored/' + ident, function(data) {
+       $.get('pinned/' + ident, function(data) {
                if (data.match(/1/)) {
-                       $('#ignored-' + ident).addClass('ignored');
-                       $('#ignored-' + ident).removeClass('unignored');
+                       $('#pinned-' + ident).addClass('pinned');
+                       $('#pinned-' + ident).removeClass('unpinned');
+                       $('#pin-' + ident).addClass('hidden');
+                       $('#unpin-' + ident).removeClass('hidden');
+               } else {
+                       $('#pinned-' + ident).addClass('unpinned');
+                       $('#pinned-' + ident).removeClass('pinned');
+                       $('#pin-' + ident).removeClass('hidden');
+                       $('#unpin-' + ident).addClass('hidden');
+               }
+               $('#like-rotator-' + ident).hide();
+       });
+}
+
+function doignore(ident) {
+       ident = ident.toString();
+       $('#like-rotator-' + ident).show();
+       $.get('item/ignore/' + ident, function(data) {
+               if (data === 1) {
+                       $('#ignored-' + ident)
+                               .addClass('ignored')
+                               .removeClass('unignored');
                        $('#ignore-' + ident).addClass('hidden');
                        $('#unignore-' + ident).removeClass('hidden');
                } else {
-                       $('#ignored-' + ident).addClass('unignored');
-                       $('#ignored-' + ident).removeClass('ignored');
+                       $('#ignored-' + ident)
+                               .addClass('unignored')
+                               .removeClass('ignored');
                        $('#ignore-' + ident).removeClass('hidden');
                        $('#unignore-' + ident).addClass('hidden');
                }
@@ -688,11 +766,10 @@ function showHideComments(id) {
 }
 
 function preview_post() {
-       $("#jot-preview").val("1");
        $("#jot-preview-content").show();
        $.post(
                "item",
-               $("#profile-jot-form").serialize(),
+               $("#profile-jot-form").serialize() + '&preview=1',
                function(data) {
                        if (data.preview) {
                                $("#jot-preview-content").html(data.preview);
@@ -702,7 +779,6 @@ function preview_post() {
                },
                "json"
        );
-       $("#jot-preview").val("0");
        return true;
 }