Сообщение от 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', '');
}
});
вот только зачем ее автоматически убирать? Пользователь ее и так убрать сможет, кликнув на пустом месте. Главное, чтобы она не перекрывала выделение. А вы еще говорите, что все должно быть максимально просто