View file sys/themes/light_web/user.js

File size: 17.86Kb
function user_update_mail_notice() {
    /**
     * тут можно сделать дополнительное (звуковое) уведомление пользователя
     */
}

function user_update_mail(count) {
    count = +count;
    var dom_mail = document.querySelector('#user_mail');


    if (USER.mail_new_count != count)
        user_update_mail_notice();
    USER.mail_new_count = count;

    if (USER.mail_new_count) {
        dom_mail.querySelector('span').innerHTML = USER.mail_new_count;
        DCMS.Dom.classRemove(dom_mail, 'hide');
    } else {
        DCMS.Dom.classAdd(dom_mail, 'hide');
    }

}

function user_update_friends(count) {
    count = +count;

    var dom_friend = document.querySelector('#user_friend');
    USER.friend_new_count = count;

    if (USER.friend_new_count) {
        dom_friend.querySelector('span').innerHTML = USER.friend_new_count;
        DCMS.Dom.classRemove(dom_friend, 'hide');
    } else {
        DCMS.Dom.classAdd(dom_friend, 'hide');
    }
}

function user_update(data) {
    if (data.id != USER.id) {
        //console.log(USER, data);
        DCMS.UserUpdate.stop();
        //window.location.reload();
        return;
    }

    user_update_mail(data.mail_new_count);
    user_update_friends(data.friend_new_count);
}

// подписываемся на событие поступления новых данных пользователя
DCMS.Event.on('user_update', user_update);

/**
 * Сворачиваем поле ввода до дефолтных размеров
 */
function onTextareaBlur() {
//DCMS.Animation.style(textarea, 'height', '' , 300);
}

function onTextareaChange() {
    var textarea = this;
    var hasInnerText = (document.getElementsByTagName("body")[0].innerText != undefined) ? true : false;

    var attributes_copy = ['width', 'font', 'padding'];
    var testdiv = DCMS.Dom.createFromHtml('<div style="position: absolute; left: -9999px;word-break: break-all;white-space: pre-wrap" />', false, textarea.parentNode);

    var testvalue = textarea.value + "\n\n";


    if (hasInnerText)
        testdiv.innerText = testvalue;
    else
        testdiv.textContent = testvalue;

    for (var i = 0; i < attributes_copy.length; i++) {
        DCMS.Dom.setStyle(testdiv, attributes_copy[i], DCMS.Dom.getComputedValue(textarea, attributes_copy[i]));
    }

    DCMS.Animation.style(textarea, 'height', DCMS.Dom.getComputedValue(testdiv, 'height'), 300);
    testdiv.parentNode.removeChild(testdiv);
}

function onTextareaBBcodeClickB(event) {
    var textarea = this.parentNode.parentNode.lastChild;
    DCMS.Dom.inputInsert(textarea, '[b]', '[/b]');
}
function onTextareaBBcodeClickU(event) {
    var textarea = this.parentNode.parentNode.lastChild;
    DCMS.Dom.inputInsert(textarea, '[u]', '[/u]');
}
function onTextareaBBcodeClickI(event) {
    var textarea = this.parentNode.parentNode.lastChild;
    DCMS.Dom.inputInsert(textarea, '[i]', '[/i]');
}
function onTextareaBBcodeClickBIG(event) {
    var textarea = this.parentNode.parentNode.lastChild;
    DCMS.Dom.inputInsert(textarea, '[big]', '[/big]');
}
function onTextareaBBcodeClickSMALL(event) {
    var textarea = this.parentNode.parentNode.lastChild;
    DCMS.Dom.inputInsert(textarea, '[small]', '[/small]');
}


function onTextareaBBcodeClickIMG(event) {
    var textarea = this.parentNode.parentNode.lastChild;
    DCMS.Dom.inputInsert(textarea, '[img]', '[/img]');
}

function onTextareaBBcodeClickPHP(event) {
    var textarea = this.parentNode.parentNode.lastChild;
    DCMS.Dom.inputInsert(textarea, '[php]', '[/php]');
}

function onTextareaBBcodeClickGRADIENT(event) {
    var textarea = this.parentNode.parentNode.lastChild;
    DCMS.Dom.inputInsert(textarea, '[gradient from="#bc009a" to="#008e21"]', '[/gradient]');
}

function onTextareaBBcodeClickHIDE(event) {
    var textarea = this.parentNode.parentNode.lastChild;
    DCMS.Dom.inputInsert(textarea, '[hide balls="0" group="0"]', '[/hide]');
}

function onTextareaBBcodeClickSPOILER(event) {
    var textarea = this.parentNode.parentNode.lastChild;
    DCMS.Dom.inputInsert(textarea, '[spoiler title="' + LANG.bbcode_spoiler + '"]', '[/spoiler]');
}

function onTextareaBBcodeClickSmiles(event){
    var domSmiles = this.parentNode.parentNode.querySelector(".bbcode_smiles");
    DCMS.Dom.setStyle(domSmiles, 'display', DCMS.Dom.getComputedValue(domSmiles, 'display') == 'none' ? 'block' : 'none');
}

function onTextareaBBcodeClickок(event) {
    var textarea = this.parentNode.parentNode.parentNode.lastChild;
    DCMS.Dom.inputInsert(textarea, '*ок*', '');
}

function onTextareaBBcodeClicknono(event) {
    var textarea = this.parentNode.parentNode.parentNode.lastChild;
    DCMS.Dom.inputInsert(textarea, '*нет*', '');
}

function onTextareaBBcodeClickbeee(event) {
    var textarea = this.parentNode.parentNode.parentNode.lastChild;
    DCMS.Dom.inputInsert(textarea, '*обида*', '');
}

function onTextareaBBcodeClickmosking(event) {
    var textarea = this.parentNode.parentNode.parentNode.lastChild;
    DCMS.Dom.inputInsert(textarea, '*mosking*', ' ');
}

function onTextareaBBcodeClickrtfm(event) {
    var textarea = this.parentNode.parentNode.parentNode.lastChild;
    DCMS.Dom.inputInsert(textarea, '*rtfm*', ' ');
}

function onTextareaBBcodeClickbye(event) {
    var textarea = this.parentNode.parentNode.parentNode.lastChild;
    DCMS.Dom.inputInsert(textarea, '*улыбка*', ' ');
}

function onTextareaBBcodeClickcrazy(event) {
    var textarea = this.parentNode.parentNode.parentNode.lastChild;
    DCMS.Dom.inputInsert(textarea, '*скучно*', ' ');
}

function onTextareaBBcodeClickdirol(event) {
    var textarea = this.parentNode.parentNode.parentNode.lastChild;
    DCMS.Dom.inputInsert(textarea, '*coffee*', ' ');
}

function onTextareaBBcodeClickfacepalm(event) {
    var textarea = this.parentNode.parentNode.parentNode.lastChild;
    DCMS.Dom.inputInsert(textarea, '*facepalm*', ' ');
}

function onTextareaBBcodeClicklol(event) {
    var textarea = this.parentNode.parentNode.parentNode.lastChild;
    DCMS.Dom.inputInsert(textarea, '*подзатыльник*', ' ');
}

function onTextareaBBcodeClickdrinks(event) {
    var textarea = this.parentNode.parentNode.parentNode.lastChild;
    DCMS.Dom.inputInsert(textarea, '*пиво*', ' ');
}

function onTextareaBBcodeClickdntknw(event) {
    var textarea = this.parentNode.parentNode.parentNode.lastChild;
    DCMS.Dom.inputInsert(textarea, '*незнаю*', ' ');
}

function onTextareaBBcodeClickhelp(event) {
    var textarea = this.parentNode.parentNode.parentNode.lastChild;
    DCMS.Dom.inputInsert(textarea, '*help*', ' ');
}

function textareaModify() {
    var texareas = document.querySelectorAll('textarea');
    for (var i = 0; i < texareas.length; i++) {
        var textarea = texareas[i];
        Event.add(textarea, 'blur', onTextareaBlur);
        Event.add(textarea, ['keyup', 'paste', 'cut', 'change', 'focus', 'input'], onTextareaChange);

        var node_txt_wrapper = DCMS.Dom.create('div', 'textarea_wrapper', textarea.parentNode, textarea);
        node_txt_wrapper.appendChild(textarea);
        var node_bbcode = DCMS.Dom.create('div', 'textarea_bbcode', node_txt_wrapper, textarea);
        var node_bb_b = DCMS.Dom.createFromHtml('<span title="' + LANG.bbcode_b + '">B</span>', '', node_bbcode);
        Event.add(node_bb_b, 'click', onTextareaBBcodeClickB);
        var node_bb_i = DCMS.Dom.createFromHtml('<span title="' + LANG.bbcode_i + '">I</span>', '', node_bbcode);
        Event.add(node_bb_i, 'click', onTextareaBBcodeClickI);
        var node_bb_u = DCMS.Dom.createFromHtml('<span title="' + LANG.bbcode_u + '">U</span>', '', node_bbcode);
        Event.add(node_bb_u, 'click', onTextareaBBcodeClickU);
        var node_bb_big = DCMS.Dom.createFromHtml('<span title="' + LANG.bbcode_big + '">BIG</span>', '', node_bbcode);
        Event.add(node_bb_big, 'click', onTextareaBBcodeClickBIG);
        var node_bb_small = DCMS.Dom.createFromHtml('<span title="' + LANG.bbcode_small + '">small</span>', '', node_bbcode);
        Event.add(node_bb_small, 'click', onTextareaBBcodeClickSMALL);


        var node_bb_img = DCMS.Dom.createFromHtml('<span title="' + LANG.bbcode_img + '">IMG</span>', '', node_bbcode);
        Event.add(node_bb_img, 'click', onTextareaBBcodeClickIMG);

        var node_bb_php = DCMS.Dom.createFromHtml('<span title="' + LANG.bbcode_php + '">PHP</span>', '', node_bbcode);
        Event.add(node_bb_php, 'click', onTextareaBBcodeClickPHP);

        //var node_bb_gradient = DCMS.Dom.createFromHtml('<span title="'+LANG.bbcode_gradient+'"><font color="#BC009A">G</font><font color="#A4118A">R</font><font color="#8D237B">A</font><font color="#75356C">D</font><font color="#5E475D">I</font><font color="#46584E">E</font><font color="#2F6A3F">N</font><font color="#177C30">T</font></span>', '', node_bbcode);
        //Event.add(node_bb_gradient, 'click', onTextareaBBcodeClickGRADIENT);


        var node_bb_spoiler = DCMS.Dom.createFromHtml('<span title="' + LANG.bbcode_spoiler + '">SPOILER</span>', '', node_bbcode);
        Event.add(node_bb_spoiler, 'click', onTextareaBBcodeClickSPOILER);

        var node_bb_hide = DCMS.Dom.createFromHtml('<span title="' + LANG.bbcode_hide + '">HIDE</span>', '', node_bbcode);
        Event.add(node_bb_hide, 'click', onTextareaBBcodeClickHIDE);

        var node_bb_smiles = DCMS.Dom.createFromHtml('<span title="' + LANG.smiles + '">' + LANG.smiles + '</span>', '', node_bbcode);
        Event.add(node_bb_smiles, 'click', onTextareaBBcodeClickSmiles);

        var smiles_node = DCMS.Dom.create('div', 'bbcode_smiles', node_bbcode);

        var node_bb_ок = DCMS.Dom.createFromHtml('<img class="bbcode_smile" src="/sys/images/smiles/ok.gif" alt="" title="" />', '', smiles_node);
        Event.add(node_bb_ок, 'click', onTextareaBBcodeClickок);

        var node_bb_nono = DCMS.Dom.createFromHtml('<img class="bbcode_smile" src="/sys/images/smiles/nono.gif" alt="" title="" />', '', smiles_node);
        Event.add(node_bb_nono, 'click', onTextareaBBcodeClicknono);

        var node_bb_beee = DCMS.Dom.createFromHtml('<img class="bbcode_smile" src="/sys/images/smiles/beee.gif" alt="" title="" />', '', smiles_node);
        Event.add(node_bb_beee, 'click', onTextareaBBcodeClickbeee);

        var node_bb_mosking = DCMS.Dom.createFromHtml('<img class="bbcode_smile" src="/sys/images/smiles/mosking.gif" alt="" title="" />', '', smiles_node);
        Event.add(node_bb_mosking, 'click', onTextareaBBcodeClickmosking);

        var node_bb_rtfm = DCMS.Dom.createFromHtml('<img class="bbcode_smile" src="/sys/images/smiles/rtfm.gif" alt="" title="" />', '', smiles_node);
        Event.add(node_bb_rtfm, 'click', onTextareaBBcodeClickrtfm);


        var node_bb_bye = DCMS.Dom.createFromHtml('<img class="bbcode_smile" src="/sys/images/smiles/smile.gif" alt="" title="" />', '', smiles_node);
        Event.add(node_bb_bye, 'click', onTextareaBBcodeClickbye);

        var node_bb_crazy = DCMS.Dom.createFromHtml('<img class="bbcode_smile" src="/sys/images/smiles/boredom.gif" alt="" title="" />', '', smiles_node);
        Event.add(node_bb_crazy, 'click', onTextareaBBcodeClickcrazy);

        var node_bb_dirol = DCMS.Dom.createFromHtml('<img class="bbcode_smile" src="/sys/images/smiles/coffee.gif" alt="" title="" />', '', smiles_node);
        Event.add(node_bb_dirol, 'click', onTextareaBBcodeClickdirol);

        var node_bb_facepalm = DCMS.Dom.createFromHtml('<img class="bbcode_smile" src="/sys/images/smiles/facepalm.gif" alt="" title="" />', '', smiles_node);
        Event.add(node_bb_facepalm, 'click', onTextareaBBcodeClickfacepalm);

        var node_bb_lol = DCMS.Dom.createFromHtml('<img class="bbcode_smile" src="/sys/images/smiles/punish.gif" alt="" title="" />', '', smiles_node);
        Event.add(node_bb_lol, 'click', onTextareaBBcodeClicklol);

        var node_bb_drinks = DCMS.Dom.createFromHtml('<img class="bbcode_smile" src="/sys/images/smiles/drinks.gif" alt="" title="" />', '', smiles_node);
        Event.add(node_bb_drinks, 'click', onTextareaBBcodeClickdrinks);

        var node_bb_dntknw = DCMS.Dom.createFromHtml('<img class="bbcode_smile" src="/sys/images/smiles/dntknw.gif" alt="" title="" />', '', smiles_node);
        Event.add(node_bb_dntknw, 'click', onTextareaBBcodeClickdntknw);

        var node_bb_help = DCMS.Dom.createFromHtml('<img class="bbcode_smile" src="/sys/images/smiles/help.gif" alt="" title="" />', '', smiles_node);
        Event.add(node_bb_help, 'click', onTextareaBBcodeClickhelp);
    }
}

ready(textareaModify);

function onSpoilerClick() {

    if (DCMS.Dom.classHas(this.parentNode, 'expanded')) {
        DCMS.Dom.classRemove(this.parentNode, 'expanded');
        DCMS.Dom.classAdd(this.parentNode, 'collapsed');
        DCMS.Animation.style(this.nextSibling, 'height', '0');
    } else {
        DCMS.Dom.classRemove(this.parentNode, 'collapsed');
        DCMS.Dom.classAdd(this.parentNode, 'expanded');
        DCMS.Animation.style(this.nextSibling, 'height', '');
    }
    return false;
}

function spoilersModify() {
    var spoilers = document.querySelectorAll('.DCMS_spoiler_title');
    for (var i = 0; i < spoilers.length; i++) {
        var spoiler = spoilers[i];
        DCMS.Dom.classAdd(spoiler.parentNode, 'collapsed');
        DCMS.Dom.setStyle(spoiler.nextSibling, 'height', '0');
        Event.add(spoiler, 'click', onSpoilerClick);
    }
}
ready(spoilersModify);

function listing_auto_update(listing_node, url, no_recurce) {
    var ids = [];
    for (var i = 0; i < listing_node.children.length; i++) {
        ids.push(listing_node.children[i].id);
    }
    DCMS.listing_update(url, ids,
        function (data) {
            // success
            listing_update(listing_node, data);
            if (!no_recurce) {
                setTimeout(function () {
                    // повтор
                    listing_auto_update(listing_node, url);
                }, 7000);
            }
        },
        function () {
            // error
            if (!no_recurce) {
                setTimeout(function () {
                    // повтор
                    listing_auto_update(listing_node, url);
                }, 30000);
            }
        });
}

function listing_update(listing_node, data) {
    var json = JSON.parse(data);
    if (!json)
        return;
    // console.log(json);

    for (var i = 0; i < json.add.length; i++) {
        var dom_before = false, dom_after = false;
        var add = json.add[i];
        if (add.after_id) {
            dom_after = listing_node.querySelector('#' + add.after_id);
            dom_before = dom_after ? dom_after.nextSibling : false;
        }
        else if (!dom_before) {
            dom_before = listing_node.children[0];
            //console.log(dom_before);
        }

        var dom = DCMS.Dom.createFromHtml(add.html, false, listing_node, dom_before);

        DCMS.Animation.style(dom, 'opacity', ['0', '1'], 1000);
        DCMS.Animation.style(dom, 'height', ['0px', ''], 500);
    }

    for (i = 0; i < json.remove.length; i++) {
        var remove = json.remove[i];
        if (remove) {
            var dom_remove = listing_node.querySelector('#' + remove);
            if (DCMS.isDom(dom_remove)) {
                DCMS.Animation.style(dom_remove, 'opacity', '0', 500, function () {
                    this.parentNode.removeChild(this);
                });
            }
        }
    }
}


function form_ajax_submit(node_form, url) {
    Event.add(node_form, ['submit'], function () {
        return onFormSubmit(node_form, url);
    });
}

function onFormSubmit(node_form, url) {
    var data = {};
    for (var i = 0; i < node_form.elements.length; i++) {
        data[node_form.elements[i].name ] = node_form.elements[i].value;
    }
    form_lock(node_form);
    DCMS.Ajax({
        url: url,
        post: data,
        callback: function (cdata) {
            if (cdata) {
                var json = JSON.parse(cdata);
                if (json.err)
                    form_err(node_form, json.err);
                else if (json.msg) {
                    form_msg(node_form, json.msg);
                    //node_form.reset();

                    if (json.form)
                        form_set_values(node_form, json.form);

                    DCMS.Event.trigger('form_submited', node_form);
                }
            }
            form_unlock(node_form);

        },
        error: function () {
            form_err(node_form, LANG.form_submit_error)
            form_unlock(node_form);
        }
    });

    return false;
}

function form_lock(node_form) {
    node_form.disabled = 'disabled';
    DCMS.Dom.classAdd(node_form, 'submiting');
}

function form_unlock(node_form) {
    node_form.disabled = '';
    DCMS.Dom.classRemove(node_form, 'submiting');
}

function form_set_values(node_form, values) {
    for (var i = 0; i < node_form.elements.length; i++) {
        var name = node_form.elements[i].name;
        if (typeof (values[name]) !== 'undefined')
            node_form.elements[i].value = values[name];
    }
}

function form_msg(node_form, msg) {
    var msg_node = node_form.querySelector('.msg');
    if (msg_node) {
        msg_node.innerHTML = msg;
        DCMS.Animation.style(msg_node, 'opacity', '0', 5000, function () {
            DCMS.Dom.setStyle(this, 'opacity', '');
            this.innerHTML = '';
        });
    }

}

function form_err(node_form, msg) {
    var msg_node = node_form.querySelector('.err');
    if (msg_node) {
        msg_node.innerHTML = msg;
        DCMS.Animation.style(msg_node, 'opacity', '0', 5000, function () {
            DCMS.Dom.setStyle(this, 'opacity', '');
            this.innerHTML = '';
        });
    }
}