Показать сообщение отдельно
  #18 (permalink)  
Старый 06.08.2010, 01:45
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от Cuprum
Ловко вы перешли на MooTools
на самом деле не все так грустно. Просто jQuery в лучшем случае оставляет проблемы организации кода на плечах разработчиков. В худшем провоцирует то, что мы видим в исходниках плагинов. Была тут тема недавно. Кроме того, у mootools есть builder, который позволяет взять только нужную функциональность. Кроме того есть готовые решения того, как можно добавить ООП в jQuery. Ну и помимо всего прочего для данного случая просто и свой велосипед написать
function Class( methods ){
    var r = function(){
        if( this.initialize )
            this.initialize();
    };
    $.extend( r.prototype, methods );
    return r;
}

String.prototype.parseInt = function(){
    return parseInt(this);
};

Function.prototype.of = function( o ){
    var self = this;
    return function(){
        return self.apply(o, arguments);
    }
};

var QuotePanel = new Class({ 
    initialize: function( textarea ){ 
        this._el = $(textarea); 
        this._panel = $('<div><a href="#">Вставить цитату в поле</a></div>'); 
        document.body.mouseup( this._onMouseUp_body.of(this) );
        document.body.click( this._onClick_body.of(this) );
        this._panel.click( this._onClick_panel.of(this) );
        this._panel.appendTo( $('body') );
    }, 
      
    _onMouseUp_body: function( e ){ 
        if( ! Selection.get() ) 
            return; 
        var panelWidth = this._panel.css('width').parseInt(); 
        this._panel 
            .css({ 
                'top': e.pageY - 40, 
                'left': e.pageX - panelWidth/3, 
                'display': 'block', 
                'opacity': 0 
            }) 
            .animate({ 
                'opacity': 1, 
                'top': '-='+10+'px' 
            });
    },
      
    _onClick_body: function( e ){ 
        if( ! Selection.get() ) 
            this._panel.css('display', ''); 
    }, 
      
    _onClick_panel: function( e ){ 
        this._el.value += this._el.value+'<blockquote>'+Selection.get()+'</blockquote>\r\n'; 
        this._el.focus(); 
        this._panel.css('display', ''); 
        e.preventDefault(); 
    } 
});

да, я, кстати, подразумевал, что лишний css, который не изменяется я бы поместил в отдельный файл. Это несколько усложняет использование, но упрощает код

Сообщение от Cuprum
И еще один - долго ломал над ним голову и так и не придумал ничего путного
так совсем же просто
var QuotePanel = new Class({ 
    _onMouseUp_body: function( e ){ 
        ...
        this._panel 
            ...
            .animate(
                { ... },
                {
                    'complete': function(){
                        setTimeout( function(){
                            this._hidePanel();
                        }.of(this), 3000 );
                    }.of(this)
                });
    },
      
    _onClick_body: function( e ){ 
        ...
        this._hidePanel();
    }, 

    _hidePanel: function(){
        this._panel.css('display', '');
    }
});

вот только зачем ее автоматически убирать? Пользователь ее и так убрать сможет, кликнув на пустом месте. Главное, чтобы она не перекрывала выделение. А вы еще говорите, что все должно быть максимально просто

Последний раз редактировалось x-yuri, 06.08.2010 в 01:47.
Ответить с цитированием