Цитата:
|
а на чем не просто?
|
да все просто и понятно. НО, есть но, когда начинаю разбираться в коде с объектами, в сознании, теряется понимание структуры, какие методы наследуют у каких, что с чем связанно, т.е. ясного представления цепочки объектов/методов.
Пишу то на 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();
}