X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=view%2Ftheme%2Ffrio%2Fjs%2Ftextedit.js;h=e0c06af581f134ce8a7e9750beab82d0c0488336;hb=ba03ec857ae1b83e82819eb883f4c99aa6a739ca;hp=a3ffdc4a34c4bd11865ae0d36eac1ef5b95b64d7;hpb=7886de5c393591eaf4e05f2a496a4f40060cb262;p=friendica.git diff --git a/view/theme/frio/js/textedit.js b/view/theme/frio/js/textedit.js index a3ffdc4a34..e0c06af581 100644 --- a/view/theme/frio/js/textedit.js +++ b/view/theme/frio/js/textedit.js @@ -1,38 +1,122 @@ -/* +/* * @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,76 +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(); - // initiale autosize for this comment - autosize($("#comment-edit-text-" + id + ".text-autosize")); - } - }; - - $(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(); - // destroy the automatic textarea resizing - autosize.destroy($("#comment-edit-text-" + id + ".text-autosize")); - } - }; - - $(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(); @@ -152,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('<','<'); - ins = ins.replace('>','>'); - ins = ins.replace('&','&'); - ins = ins.replace('"','"'); + ins = ins.replace('<', '<'); + ins = ins.replace('>', '>'); + ins = ins.replace('&', '&'); + ins = ins.replace('"', '"'); $("#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('<','<'); - ins = ins.replace('>','>'); - ins = ins.replace('&','&'); - ins = ins.replace('"','"'); + ins = ins.replace('<', '<'); + ins = ins.replace('>', '>'); + ins = ins.replace('&', '&'); + ins = ins.replace('"', '"'); $("#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'); }); });