]> git.mxchange.org Git - friendica.git/blobdiff - view/theme/frio/js/textedit.js
attachment preview: some small corrections
[friendica.git] / view / theme / frio / js / textedit.js
index 39957dbf06964014fdd27970dbb48613f42e848a..e0c06af581f134ce8a7e9750beab82d0c0488336 100644 (file)
-/* 
+/*
  * @brief The file contains functions for text editing and commenting
  */
 
+// Lifted from https://css-tricks.com/snippets/jquery/move-cursor-to-end-of-textarea-or-input/
+jQuery.fn.putCursorAtEnd = function() {
+       return this.each(function() {
+               // Cache references
+               var $el = $(this),
+                       el = this;
 
-function insertFormatting(comment,BBcode,id) {
+               // Only focus if input isn't already
+               if (!$el.is(":focus")) {
+                       $el.focus();
+               }
+
+               // If this function exists... (IE 9+)
+               if (el.setSelectionRange) {
+                       // Double the length because Opera is inconsistent about whether a carriage return is one character or two.
+                       var len = $el.val().length * 2;
 
-               var tmpStr = $("#comment-edit-text-" + id).val();
-               if(tmpStr == comment) {
-                       tmpStr = "";
-                       $("#comment-edit-text-" + id).addClass("comment-edit-text-full");
-                       $("#comment-edit-text-" + id).removeClass("comment-edit-text-empty");
-                       openMenu("comment-edit-submit-wrapper-" + id);
-                       $("#comment-edit-text-" + id).val(tmpStr);
+                       // Timeout seems to be required for Blink
+                       setTimeout(function() {
+                               el.setSelectionRange(len, len);
+                       }, 1);
+               } else {
+                       // As a fallback, replace the contents with itself
+                       // Doesn't work in Chrome, but Chrome supports setSelectionRange
+                       $el.val($el.val());
                }
 
-       textarea = document.getElementById("comment-edit-text-" +id);
+               // Scroll to the bottom, in case we're in a tall textarea
+               // (Necessary for Firefox and Chrome)
+               this.scrollTop = 999999;
+       });
+};
+
+function commentGetLink(id, prompttext) {
+       reply = prompt(prompttext);
+       if(reply && reply.length) {
+               reply = bin2hex(reply);
+               $.get('parse_url?noAttachment=1&binurl=' + reply, function(data) {
+                       addCommentText(data, id);
+               });
+       }
+}
+
+function addCommentText(data, id) {
+       // get the textfield
+       var textfield = document.getElementById("comment-edit-text-" + id);
+       // check if the textfield does have the default-value
+       commentOpenUI(textfield, id);
+       // save already existent content
+       var currentText = $("#comment-edit-text-" + id).val();
+       //insert the data as new value
+       textfield.value = currentText + data;
+       autosize.update($("#comment-edit-text-" + id));
+}
+
+function commentLinkDrop(event, id) {
+       var reply = event.dataTransfer.getData("text/uri-list");
+       event.target.textContent = reply;
+       event.preventDefault();
+       if (reply && reply.length) {
+               reply = bin2hex(reply);
+               $.get('parse_url?noAttachment=1&binurl=' + reply, function(data) {
+                       addCommentText(data, id);
+               });
+       }
+}
+
+function commentLinkDropper(event) {
+       var linkFound = event.dataTransfer.types.contains("text/uri-list");
+       if (linkFound) {
+               event.preventDefault();
+       }
+}
+
+
+function insertFormatting(BBcode, id) {
+       var tmpStr = $("#comment-edit-text-" + id).val();
+       if (tmpStr == '') {
+               $("#comment-edit-text-" + id).addClass("comment-edit-text-full");
+               $("#comment-edit-text-" + id).removeClass("comment-edit-text-empty");
+               openMenu("comment-edit-submit-wrapper-" + id);
+       }
+
+       textarea = document.getElementById("comment-edit-text-" + id);
        if (document.selection) {
                textarea.focus();
                selected = document.selection.createRange();
-               if (BBcode == "url"){
-                       selected.text = "["+BBcode+"]" + "http://" +  selected.text + "[/"+BBcode+"]";
-                       } else
-               selected.text = "["+BBcode+"]" + selected.text + "[/"+BBcode+"]";
+               selected.text = "[" + BBcode + "]" + selected.text + "[/" + BBcode + "]";
        } else if (textarea.selectionStart || textarea.selectionStart == "0") {
                var start = textarea.selectionStart;
                var end = textarea.selectionEnd;
-               if (BBcode == "url"){
-                       textarea.value = textarea.value.substring(0, start) + "["+BBcode+"]" + "http://" + textarea.value.substring(start, end) + "[/"+BBcode+"]" + textarea.value.substring(end, textarea.value.length);
-                       } else
-               textarea.value = textarea.value.substring(0, start) + "["+BBcode+"]" + textarea.value.substring(start, end) + "[/"+BBcode+"]" + textarea.value.substring(end, textarea.value.length);
+               textarea.value = textarea.value.substring(0, start) + "[" + BBcode + "]" + textarea.value.substring(start, end) + "[/" + BBcode + "]" + textarea.value.substring(end, textarea.value.length);
        }
+
+       $(textarea).trigger('change');
+
        return true;
 }
 
+function insertFormattingToPost(BBcode) {
+       textarea = document.getElementById("profile-jot-text");
+       if (document.selection) {
+               textarea.focus();
+               selected = document.selection.createRange();
+               selected.text = "[" + BBcode + "]" + selected.text + "[/" + BBcode + "]";
+       } else if (textarea.selectionStart || textarea.selectionStart == "0") {
+               var start = textarea.selectionStart;
+               var end = textarea.selectionEnd;
+               textarea.value = textarea.value.substring(0, start) + "[" + BBcode + "]" + textarea.value.substring(start, end) + "[/" + BBcode + "]" + textarea.value.substring(end, textarea.value.length);
+       }
+
+       $(textarea).trigger('change');
+
+       return true;
+}
 
 function showThread(id) {
        $("#collapsed-comments-" + id).show()
@@ -51,7 +135,7 @@ function cmtBbClose(id) {
 }
 
 function commentExpand(id) {
-       $("#comment-edit-text-" + id).value = '';
+       $("#comment-edit-text-" + id).putCursorAtEnd();
        $("#comment-edit-text-" + id).addClass("comment-edit-text-full");
        $("#comment-edit-text-" + id).removeClass("comment-edit-text-empty");
        $("#comment-edit-text-" + id).focus();
@@ -60,9 +144,8 @@ function commentExpand(id) {
        return true;
 }
 
-function commentClose(obj,id) {
-       if(obj.value == '') {
-               obj.value = aStr.comment;
+function commentClose(obj, id) {
+       if (obj.value == '') {
                $("#comment-edit-text-" + id).removeClass("comment-edit-text-full");
                $("#comment-edit-text-" + id).addClass("comment-edit-text-empty");
                $("#mod-cmnt-wrap-" + id).hide();
@@ -73,68 +156,53 @@ function commentClose(obj,id) {
 }
 
 function showHideCommentBox(id) {
-       if$('#comment-edit-form-' + id).is(':visible')) {
+       if ($('#comment-edit-form-' + id).is(':visible')) {
                $('#comment-edit-form-' + id).hide();
-       }
-       else {
+       } else {
                $('#comment-edit-form-' + id).show();
        }
 }
 
 function commentOpenUI(obj, id) {
-       $(document).unbind( "click.commentOpen", handler );
-
-       var handler = function() {
-               if(obj.value == aStr.comment) {
-                       obj.value = '';
-                       $("#comment-edit-text-" + id).addClass("comment-edit-text-full").removeClass("comment-edit-text-empty");
-                       // Choose an arbitrary tab index that's greater than what we're using in jot (3 of them)
-                       // The submit button gets tabindex + 1
-                       $("#comment-edit-text-" + id).attr('tabindex','9');
-                       $("#comment-edit-submit-" + id).attr('tabindex','10');
-                       $("#comment-edit-submit-wrapper-" + id).show();
-               }
-       };
-
-       $(document).bind( "click.commentOpen", handler );
+       $("#comment-edit-text-" + id).addClass("comment-edit-text-full").removeClass("comment-edit-text-empty");
+       // Choose an arbitrary tab index that's greater than what we're using in jot (3 of them)
+       // The submit button gets tabindex + 1
+       $("#comment-edit-text-" + id).attr('tabindex', '9');
+       $("#comment-edit-submit-" + id).attr('tabindex', '10');
+       $("#comment-edit-submit-wrapper-" + id).show();
+       // initialize autosize for this comment
+       autosize($("#comment-edit-text-" + id + ".text-autosize"));
 }
 
 function commentCloseUI(obj, id) {
-       $(document).unbind( "click.commentClose", handler );
-
-       var handler = function() {
-               if(obj.value === '') {
-               obj.value = aStr.comment;
-                       $("#comment-edit-text-" + id).removeClass("comment-edit-text-full").addClass("comment-edit-text-empty");
-                       $("#comment-edit-text-" + id).removeAttr('tabindex');
-                       $("#comment-edit-submit-" + id).removeAttr('tabindex');
-                       $("#comment-edit-submit-wrapper-" + id).hide();
-               }
-       };
-
-       $(document).bind( "click.commentClose", handler );
+       if (obj.value === '') {
+               $("#comment-edit-text-" + id).removeClass("comment-edit-text-full").addClass("comment-edit-text-empty");
+               $("#comment-edit-text-" + id).removeAttr('tabindex');
+               $("#comment-edit-submit-" + id).removeAttr('tabindex');
+               $("#comment-edit-submit-wrapper-" + id).hide();
+               // destroy the automatic textarea resizing
+               autosize.destroy($("#comment-edit-text-" + id + ".text-autosize"));
+       }
 }
 
-// test if there is default content in the jot text box and remove it
 function jotTextOpenUI(obj) {
-       if(obj.value == aStr.share) {
-               obj.value = '';
+       if (obj.value == '') {
                $(".modal-body #profile-jot-text").addClass("profile-jot-text-full").removeClass("profile-jot-text-empty");
+               // initiale autosize for the jot
+               autosize($(".modal-body #profile-jot-text"));
        }
 }
 
-// insert default content into the jot text box
-// if it's empty
 function jotTextCloseUI(obj) {
-       if(obj.value === '') {
-       obj.value = aStr.share;
+       if (obj.value === '') {
                $(".modal-body #profile-jot-text").removeClass("profile-jot-text-full").addClass("profile-jot-text-empty");
+               // destroy the automatic textarea resizing
+               autosize.destroy($(".modal-body #profile-jot-text"));
        }
 }
 
-function commentOpen(obj,id) {
-       if(obj.value == aStr.comment) {
-               obj.value = '';
+function commentOpen(obj, id) {
+       if (obj.value == '') {
                $("#comment-edit-text-" + id).addClass("comment-edit-text-full");
                $("#comment-edit-text-" + id).removeClass("comment-edit-text-empty");
                $("#mod-cmnt-wrap-" + id).show();
@@ -144,56 +212,64 @@ function commentOpen(obj,id) {
        return false;
 }
 
-function commentInsert(obj,id) {
+function commentInsert(obj, id) {
        var tmpStr = $("#comment-edit-text-" + id).val();
-       if(tmpStr == aStr.comment) {
-               tmpStr = '';
+       if (tmpStr == '') {
                $("#comment-edit-text-" + id).addClass("comment-edit-text-full");
                $("#comment-edit-text-" + id).removeClass("comment-edit-text-empty");
                openMenu("comment-edit-submit-wrapper-" + id);
        }
        var ins = $(obj).html();
-       ins = ins.replace('&lt;','<');
-       ins = ins.replace('&gt;','>');
-       ins = ins.replace('&amp;','&');
-       ins = ins.replace('&quot;','"');
+       ins = ins.replace('&lt;', '<');
+       ins = ins.replace('&gt;', '>');
+       ins = ins.replace('&amp;', '&');
+       ins = ins.replace('&quot;', '"');
        $("#comment-edit-text-" + id).val(tmpStr + ins);
 }
 
-function qCommentInsert(obj,id) {
+function qCommentInsert(obj, id) {
        var tmpStr = $("#comment-edit-text-" + id).val();
-       if(tmpStr == aStr.comment) {
-               tmpStr = '';
+       if (tmpStr == '') {
                $("#comment-edit-text-" + id).addClass("comment-edit-text-full");
                $("#comment-edit-text-" + id).removeClass("comment-edit-text-empty");
                openMenu("comment-edit-submit-wrapper-" + id);
        }
        var ins = $(obj).val();
-       ins = ins.replace('&lt;','<');
-       ins = ins.replace('&gt;','>');
-       ins = ins.replace('&amp;','&');
-       ins = ins.replace('&quot;','"');
+       ins = ins.replace('&lt;', '<');
+       ins = ins.replace('&gt;', '>');
+       ins = ins.replace('&amp;', '&');
+       ins = ins.replace('&quot;', '"');
        $("#comment-edit-text-" + id).val(tmpStr + ins);
        $(obj).val('');
 }
 
-function confirmDelete() { return confirm(aStr.delitem); }
+function confirmDelete() {
+       return confirm(aStr.delitem);
+}
 
-function dropItem(url, object) {
+/**
+ * Hide and removes an item element from the DOM after the deletion url is
+ * successful, restore it else.
+ *
+ * @param {string} url The item removal URL
+ * @param {string} elementId The DOM id of the item element
+ * @returns {undefined}
+ */
+function dropItem(url, elementId) {
        var confirm = confirmDelete();
 
-       //if the first character of the object is #, remove it because
-       // we use getElementById which don't need the #
-       // getElementByID selects elements even if there are special characters
-       // in the ID (like %) which won't work with jQuery
-       /// @todo ceck if we can solve this in the template
-       object = object.indexOf('#') == 0 ? object.substring(1) : object;
-
-       if(confirm) {
+       if (confirm) {
                $('body').css('cursor', 'wait');
-               $(document.getElementById(object)).fadeTo('fast', 0.33, function () {
-                       $.get(url).done(function() {
-                               $(document.getElementById(object)).remove();
+
+               var $el = $(document.getElementById(elementId));
+
+               $el.fadeTo('fast', 0.33, function () {
+                       $.get(url).then(function() {
+                               $el.remove();
+                       }).fail(function() {
+                               // @todo Show related error message
+                               $el.show();
+                       }).always(function() {
                                $('body').css('cursor', 'auto');
                        });
                });