Показать сообщение отдельно
  #22 (permalink)  
Старый 06.07.2009, 22:19
Кандидат Javascript-наук
Отправить личное сообщение для `p r o x y Посмотреть профиль Найти все сообщения от `p r o x y
 
Регистрация: 04.05.2009
Сообщений: 105

Цитата:
а на чем не просто?
да все просто и понятно. НО, есть но, когда начинаю разбираться в коде с объектами, в сознании, теряется понимание структуры, какие методы наследуют у каких, что с чем связанно, т.е. ясного представления цепочки объектов/методов.

Пишу то на php и под win на скриптах - там большенство без объектов/классов (т.е. подобия ооп), вот и не привычно. На js первый раз начал разбираться с объектами.

Благодарю за терпение. Сейчас привел в готовый вид вариант на функциях, и скланяюсь к варианту, что это реализация лучше для данной задачи.

Хотя, все таки доделаю и на объектах - для сравнения и понимания.

А пока, рабочий вариант на функциях. Провернно: IE 6, Opera 9, FF 3, (Chrome, Safari 3 немного криво вставляются \r\n).

// When a generated page (in PHP, Perl or something else)
// need add to each post (DIV, TABLE, TR, TD): onmouseover="qqNick='user nick'"
// Exsample: <tr class="bugnote" id="c59" onmouseover="qqNick='TikTak'">

// QuickQuote Settings:
var qqLinkShowTime 	= 3000;
var qqLinkId  		= 'quickQuote';
var qqLinkStyle		= 'z-index:1000; cursor:pointer; position:absolute; visibility:hidden';
var qqLinkText		= '<b>Цитировать</b>';
var qqTextAreaId   	= 'bugnote_text'; // id or name
//_____________________

document.write(	'<div 	onmousedown="qqInsertText()" onmouseout="qqTimerStart()" onmouseover="qqTimerStop()" \
						class="button" id="'+qqLinkId+'" style="'+qqLinkStyle+'">'+qqLinkText+'</div>');

var qqText, qqNick, qqTimerId, qqLink = document.getElementById(qqLinkId);
document.onclick   = qqGetSelText;
document.onmouseup = qqLinkShow;

document.body.onload = function(){
	var oTextArea = document.getElementById(qqTextAreaId);
	if (oTextArea == null) oTextArea = document.getElementsByName(qqTextAreaId)[0];
	if (oTextArea == null) return;
	
	oTextArea.onselect = saveCaretPos;
	oTextArea.onclick  = saveCaretPos;
	oTextArea.onkeyup  = saveCaretPos;
}

function qqTimerStart(){ qqTimerStop(); qqTimerId = setTimeout(qqLinkHide, qqLinkShowTime); }
function qqTimerStop(){  clearTimeout(qqTimerId); }
function qqLinkHide(){ 	 qqLink.style.visibility = 'hidden'; }

function qqLinkShow(event){
	qqGetSelText();
	if (qqText == '') return;
	
	var mc = event || window.event;
	if (mc.pageX || mc.pageY){
		mc.X = mc.pageX;
		mc.Y = mc.pageY;
	}else if (mc.clientX || mc.clientY){
		mc.X = mc.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
		mc.Y = mc.clientY + document.body.scrollTop  + document.documentElement.scrollTop;
	}
	qqLink.style.left = (mc.X-35)+'px';
	qqLink.style.top  = (mc.Y+11)+'px';
	qqLink.style.visibility = 'visible';
	
	qqTimerStart();
}
function qqGetSelText(){
	qqText = getSelText();
	qqText.replace(/(\r?\n\s*){2,}/gi,'\r\n').replace(/^\s+|\s+$/gi,'').replace(/(\ |\t)+/gi,' ');
	if (qqText == '') qqLinkHide();
}
function qqInsertText(){
	qqLinkHide();
	var oTextArea = document.getElementById(qqTextAreaId);
	if (oTextArea == null) oTextArea = document.getElementsByName(qqTextAreaId)[0];
	if (oTextArea == null) return;
	insertText(oTextArea, '[q]'+qqNick+': ' + qqText + '[/q]\r\n');
}

function insertText(obj, text){
	if (window.getSelection && !window.opera) var caretPos = obj.selectionStart + text.length;
	
	if (obj && obj.caretPos) 
		   obj.caretPos.text = text; 
	else if (obj && obj.selectionStart+1 && obj.selectionEnd+1)
		   obj.value = obj.value.substring(0, obj.selectionStart) + text + obj.value.substring(obj.selectionEnd, obj.value.length);
	else if (obj)
		   obj.value += text;
	
	if (window.getSelection && !window.opera) obj.setSelectionRange(caretPos, caretPos);
}
function getSelText(){
	if (window.getSelection && !window.opera) 	var selText = window.getSelection(); // ff
	else if (document.getSelection) 			var selText = document.getSelection(); // opera
	else if (document.selection) 				var selText = document.selection.createRange().text; // ie
	if (!selText) selText = '';
	return selText.toString();
}
function saveCaretPos(event){
	event = event || window.event;
	var obj = event.target || event.srcElement;
	if (typeof(document.selection) != 'undefined' && typeof(document.selection.createRange) != 'undefined')
	obj.caretPos = document.selection.createRange().duplicate();
}

Последний раз редактировалось `p r o x y, 06.07.2009 в 22:23.
Ответить с цитированием