плагин genContent


Это плагин для вставки контента, который предназначен для резервного контент CSS для ИЕ

Пожалуйста, ознакомьтесь и предложить советы по оптимизации и улучшении кода. Увидеть todo в коде и дать совет.

//jQuery plugin for generating content
(function( $ ){
$.fn.genContent = function($$options) {
  //;;;_debug(this);
  var $settings = $.extend({}, $.fn.genContent.defaults, $$options);
    return this.each(function() {           
        $this = $(this);
        //If metadata plugin present, use it http://plugins.jquery.com/project/metadata
        var o = $.meta ? $.extend({}, $settings, $this.data()) : $settings;
        //update element styles
        $this.css({
            margin  :   o.elStyles.margin,
            padding :   o.elStyles.padding  
            });
        //TODO: Build in support for custom conditions
        if ( this.previousSibling != null ) {
            switch(o.placement){
            case 'prepend':
                    var $markup = $.fn.genContent.format(o);
                    $($markup)
                    .prependTo($this);
                break;
            case 'append':
                    var $markup = $.fn.genContent.format(o);
                    $($markup)
                    .appendTo($this);
                break;
            case 'before':
                    var $markup = $.fn.genContent.format(o);
                    $($markup)
                    .insertBefore($this);
                break;
            case 'after':
                    var $markup = $.fn.genContent.format(o);
                    $($markup)
                    .insertAfter($this);
                break;
            default:
                    var $markup = $.fn.genContent.format(o);
                    $($markup)
                    .prependTo($this);          
            }
        }

    });
};
//
// private function for debugging
//
function _debug($obj) {
  alert( 'elements affected count: ' + $obj.size() );
};
//
//Expose the format function
//We expose this function to customization for other uses.
//May re-factor for use with jQuery Template Plugin.
//NOTE: We could use a css class to style this element
//      however I like the flexibility of controlling style
//      with the plugin options and this exposed function.
//
$.fn.genContent.format = function(o) {
    return '<' + o.wrap + 
    ' style="' + o.wrapStyles.margin + 
    '' + o.wrapStyles.padding + 
    '">' + o.content + '</' + o.wrap + '>';
};  
//
//Plugin Defaults
//
$.fn.genContent.defaults = {
        'placement' : 'prepend', //{before,after,prepend,append}
        'elStyles'  : {
            'margin'    :   '0',
            'padding'   :   '0'
        },
        'wrap'  : 'span',
        'wrapStyles' : {
            'margin'    : ' margin: .8em;',
            'padding'   : ' padding: 0;'
        },
        'content'   : '&#149'
    };
})( jQuery );


150
2
задан 9 сентября 2011 в 04:09 Источник Поделиться
Комментарии
1 ответ

//jQuery plugin for generating content
(function( $ ){
var $_func = $.fn.genContent = function($$options) {
//;;;_debug(this);
var $settings = $.extend({}, $_func.defaults, $$options);
return this.each(function() {
///If metadata plugin present, use it http://plugins.jquery.com/project/metadata/update element styles
var $this = $(this),
o = $.meta ? $.extend({}, $settings, $this.data()) : $settings,
o_elStyles,
$markup;

$this.css({
margin : o_elStyles.margin,
padding : o_elStyles.padding
});
//TODO: Build in support for custom conditions
if ( this.previousSibling != null ) {
$markup = $.fn.genContent.format(o);
switch(o.placement){
case 'append':
$($markup)
.appendTo($this);
break;
case 'before':
$($markup)
.insertBefore($this);
break;
case 'after':
$($markup)
.insertAfter($this);
break;
case 'prepend':
default:
$($markup)
.prependTo($this);
}
}

});
};
//
// private function for debugging
//
function _debug($obj) {
alert( 'elements affected count: ' + $obj.size() );
};
//
//Expose the format function
//We expose this function to customization for other uses.
//May re-factor for use with jQuery Template Plugin.
//NOTE: We could use a css class to style this element
// however I like the flexibility of controlling style
// with the plugin options and this exposed function.
//
$_func.format = function(o) {
var o_wrap = o.wrap,
o_wrapStyles = o.wrapStyles;
return '<' + o_wrap +
' style="' + o_wrapStyles.margin +
'' + o_wrapStyles.padding +
'">' + o.content + '</' + o_wrap + '>';
};
//
//Plugin Defaults
//
$_func.defaults = {
'placement' : 'prepend', //{before,after,prepend,append}
'elStyles' : {
'margin' : '0',
'padding' : '0'
},
'wrap' : 'span',
'wrapStyles' : {
'margin' : ' margin: .8em;',
'padding' : ' padding: 0;'
},
'content' : '&#149'
};
})( jQuery );

Что я сделал, собрал свои переменные в верхней части рамки, создаются новые переменные, чтобы уменьшить подстановки имущество и сократили несколько строк кода из-за повторения. Кроме того, я обнаружил, проходящей через Гугл закрытие компилятор с --compilation_level SIMPLE_OPTIMIZATIONS не больно ;)

На ваших задач, пользовательских условиях могут храниться в виде замыканий, которые могут быть включены в объект или массив - массив может быть лучше. Затем цикл по массиву - да, такие лучше - звонить затворы, чтобы увидеть, если условия успеха, а потом делай что хочешь с ним.

1
ответ дан 11 сентября 2011 в 01:09 Источник Поделиться