View file sys/themes/light_web/user.js

File size: 12.03Kb
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]http://', '[/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 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);
    }  
}

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 = '';
        });  
    }
}