if (typeof XBB == "undefined") { var XBB = {}; }
XBB.path = '/fns/lib/bbcode';XBB.textarea_id = '';XBB.area_width = '700px';XBB.state = 'plain';XBB.lang = '';XBB.iframe_id = 'xbb_editor';XBB.init = function() {
// Проверяем, возможна ли подсветка синтаксиса
if (! document.execCommand) {
XBB.state = 'plain';
}
// Textarea, с которой будем работать.
var textarea = document.getElementById(XBB.textarea_id);
if (! textarea) { return null; }
// Если iframe уже создан, ничего не делаем, завершаем инициализацию.
if (document.getElementById(XBB.iframe_id)) { return null; }
var parent_textarea = textarea.parentNode;
// Create a invisible div is accessible from iframe for a transport text
var div = document.createElement('div');
div.setAttribute('id', 'xbb_transport_div');
parent_textarea.appendChild(div);
if (document.body.textContent) {
div.textContent = textarea.value;
} else {
div.innerText = textarea.value;
}
div.style.display = 'none';
// Создаем iframe.
var iframe = document.createElement('iframe');
iframe.id = XBB.iframe_id;
iframe.frameBorder = 0;
var src = XBB.path + '/xbb.php?state=' + XBB.state;
if (XBB.lang) { src += '&lang=' + XBB.lang; }
iframe.src = src;
parent_textarea.insertBefore(iframe, textarea);
iframe.style.width = XBB.area_width;
iframe.style.height = XBB.area_height;
iframe.style.border = '0px solid #a9b8c2';
// Скрываем textarea
textarea.style.display = 'none';
// Назначаем функцию, срабатывающую при сабмите
textarea.form.onsubmit = function(ev) { XBB.form_submit(); }
return true;
}
XBB.form_submit = function() {
var iframe = document.getElementById(XBB.iframe_id).contentWindow;
var state = iframe.document.forms.xbb.xbb_state.value;
var textarea = document.getElementById(XBB.textarea_id);
if ('highlight' == state) {
var xbb_iframe = iframe.document.getElementById('xbb_iframe').contentWindow;
try {
textarea.value = XBB.innerText(xbb_iframe.document.body);
} catch(e) {
setTimeout("XBB.form_submit()", 0)
}
} else {
textarea.value = iframe.document.forms.xbb.xbb_textarea.value;
}
}
/*
Текстовое содержимое узла с заменой
на разрыв строки и окрыжением
разрывами строк.
*/
XBB.innerText = function(node) {
if (node.innerText) {
return node.innerText;
}
if (node.textContent) {
for (var t = [], l = (c = node.childNodes).length, p, i = 0; i < l; i++) {
t[t.length] =
'p' == (p = c[i].nodeName.toLowerCase())
? '\n' + c[i].textContent + '\n'
: 'br' == p ? '\n' : c[i].textContent;
}
return t.join('');
}
return '';
}