исправлено Оптимизация js

Sprinx

Пользователь
#1
В page_header.tpl
Код:
var bb_url      = '{SITE_URL}';
var bbl = { "code": "{L_CODE}", "wrote": "{L_WROTE}", "quote": "{L_QUOTE}", "quoted_post": "{L_GOTO_QUOTED_POST}", "loading": "{L_LOADING}", "spoiler_head": "{L_SPOILER_HEAD}", "spoiler_close": "{L_SPOILER_CLOSE}", "links_are": "{L_LINKS_ARE_FORBIDDEN}", "scr_rules": "{L_SCREENSHOTS_RULES}", "play_on": "{L_PLAY_ON_CURPAGE}" }
 
var postImg_MaxWidth = screen.width - {POST_IMG_WIDTH_DECR_JS};
var postImgAligned_MaxWidth = Math.round(screen.width/3);
var attachImg_MaxWidth = screen.width - {ATTACH_IMG_WIDTH_DECR_JS};
var ExternalLinks_InNewWindow = '{EXT_LINK_NEW_WIN}';
var hidePostImg = false;
В bbcode.js

Код:
function initPostBBCode(context)
{
    $('span.post-hr', context).html('<hr align="left" />');
    initCodes(context);
    initQuotes(context);
    initExternalLinks(context);
    initPostImages(context);
    initSpoilers(context);
    initMedia(context);
}
function initCodes(context)
     {
        $('div.c-body', context).each(function(){
            var $c = $(this);
            $c.before('<div class="c-head"><b>'+bbl['code']+':</b></div>');
     });
}
function initQuotes(context)
{
    $('div.q', context).each(function(){
        var $q = $(this);
        var name = $(this).attr('head');
        var q_title = (name ? '<b>'+name+'</b> '+bbl['wrote']+':' : '<b>'+bbl['quote']+'</b>');
        if ( quoted_pid = $q.children('u.q-post:first').text() ) {
            var on_this_page = $('#post_'+quoted_pid).length;
            var href = (on_this_page) ? '#'+ quoted_pid : './viewtopic.php?p='+ quoted_pid +'#'+ quoted_pid;
            q_title += ' <a href="'+ href +'" title="'+bbl['quoted_post']+'"><img src="'+bb_url+'templates/default/images/icon_latest_reply.gif" class="icon2" alt="" /></a>';
        }
        $q.before('<div class="q-head">'+ q_title +'</div>');
    });
}
function initPostImages(context)
{
    if (hidePostImg) return;
    var $in_spoilers = $('div.sp-body var.postImg', context);
    $('var.postImg', context).not($in_spoilers).each(function(){
        var $v = $(this);
        var src = $v.attr('title');
        var $img = $('<img src="'+ src +'" class="'+ $v.attr('class') +'" alt="pic" />');
        $img = fixPostImage($img);
        var maxW = ($v.hasClass('postImgAligned')) ? postImgAligned_MaxWidth : postImg_MaxWidth;
        $img.bind('click', function(){ return imgFit(this, maxW); });
        if (user.opt_js.i_aft_l) {
            $('#preload').append($img);
            var loading_icon = '<a href="'+ src +'" target="_blank"><img src="'+bb_url+'images/pic_loading.gif" alt="" /></a>';
            $v.html(loading_icon);
            if ($.browser.msie) {
                $v.after('<wbr>');
            }
            $img.one('load', function(){
                imgFit(this, maxW);
                $v.empty().append(this);
            });
        }
        else {
            $img.one('load', function(){ imgFit(this, maxW) });
            $v.empty().append($img);
            if ($.browser.msie) {
                $v.after('<wbr>');
            }
        }
    });
    $('var.posterImg', context).each(function(){
        var $v = $(this);
        var src = $v.attr('title');
        var $img = $('<img src="'+ src +'" class="'+ $v.attr('class') +'" width="260px;" alt="'+bbl['loading']+'" border="0" />');
        $img = fixPostImage($img);
        $v.empty().append($img);
        if ($.browser.msie) {
            $v.after('<wbr>');
        }
    });
}
function initSpoilers(context)
{
    $('div.sp-body', context).each(function(){
        var $sp_body = $(this);
        var name = $.trim(this.title) || ''+bbl['spoiler_head']+'';
        this.title = '';
        var $sp_head = $('<div class="sp-head folded clickable">'+ name +'</div>');
        $sp_head.insertBefore($sp_body).click(function(e){
            if (!$sp_body.hasClass('inited')) {
                initPostImages($sp_body);
                var $sp_fold_btn = $('<div class="sp-fold clickable">['+bbl['spoiler_close']+']</div>').click(function(){
                    $.scrollTo($sp_head, { duration:200, axis:'y', offset:-200 });
                    $sp_head.click().animate({opacity: 0.1}, 500).animate({opacity: 1}, 700);
                });
                $sp_body.prepend('<div class="clear"></div>').append('<div class="clear"></div>').append($sp_fold_btn).addClass('inited');
            }
            if (e.shiftKey) {
                e.stopPropagation();
                e.shiftKey = false;
                var fold = $(this).hasClass('unfolded');
                $('div.sp-head', $($sp_body.parents('td')[0])).filter( function(){ return $(this).hasClass('unfolded') ? fold : !fold } ).click();
            }
            else {
                $(this).toggleClass('unfolded');
                $sp_body.slideToggle('fast');
            }
        });
    });
}
function initExternalLinks(context)
{
      var context = context || 'body';
      if (ExternalLinks_InNewWindow) {
          $("a.postLink:not([href*='"+ window.location.hostname +"/'])", context).attr({ target: '_blank' });
      }
}
function fixPostImage ($img)
{
    var banned_image_hosts = /imagebanana|hidebehind/i;
    var src = $img[0].src;
    if (src.match(banned_image_hosts)) {
        $img.wrap('<a href="'+ this.src +'" target="_blank"></a>').attr({ src: ""+bb_url+"images/tr_oops.gif", title: ""+bbl['scr_rules']+"" });
    }
    return $img;
}
function initMedia(context)
{
    var apostLink = $('a.postLink', context);
    for (var i = 0; i < apostLink.length; i++) {
        var link = apostLink[i];
        if (typeof link.href != 'string') {
            continue;
        }
        if (/^http(?:s|):\/\/www.youtube.com\/watch\?(.*)?(&?v=([a-z0-9\-_]+))(.*)?|http:\/\/youtu.be\/.+/i.test(link.href)) {
            var a = document.createElement('span');
            a.className = 'YTLink';
            a.innerHTML = '<span title="'+bbl['play_on']+'" class="YTLinkButton">&#9658;</span>';
            window.addEvent(a, 'click', function (e) {
                var vhref = e.target.nextSibling.href.replace(/^http(?:s|):\/\/www.youtube.com\/watch\?(.*)?(&?v=([a-z0-9\-_]+))(.*)?|http:\/\/youtu.be\//ig, "http://www.youtube.com/embed/$3");
                var text  = e.target.nextSibling.innerText != "" ? e.target.nextSibling.innerText : e.target.nextSibling.href;
                $('#Panel_youtube').remove();
                ypanel('youtube', {
                    title: '<b>' + text + '</b>',
                    resizing: 0,
                    width: 862,
                    height: 550,
                    content: '<iframe width="853" height="493" frameborder="0" allowfullscreen="" src="' + vhref + '?wmode=opaque"></iframe>'
                });
            });
            link.parentNode.insertBefore(a, link);
            a.appendChild(link);
        }
    }
}
$(document).ready(function(){
      $('div.post_wrap, div.signature').each(function(){ initPostBBCode( $(this) ) });
});
 

Wertos

Заблокирован
#2
$.browser deprecated если что, или jQuery не обновляется на двиге ?
И кстати плагин metadata уже не нужен(могу ошибаться...)
PS. смотрел смотрел и ничё не понял... хоть бы носом ткнул в оптимизацию :(
 

Wertos

Заблокирован
#4
ааааа.... не заметил потому что давно у себя так сделал... а вот deprecated функции типа toggle, $.browser пора сносить из двига.
 

Exile

Администратор
#7
Исправлено в новой ревизии:

Please Login or Register to view hidden text.


Спасибо за багрепорты.

Скачать r586 можно в центре загрузки:

Please Login or Register to view hidden text.

 

Exile

Администратор
#8
По поводу устаревшего - после 600 версии текущий редактор текста пойдет под нож.
 
Сверху