battles/js/forum.js
Igor Barkov [iwork] 31d559aae5 Forum tweaks
2018-10-31 19:57:54 +02:00

368 lines
13 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

var SmileParser;
$(document).ready(
function () {
SmileParser.init(initBBEditors);
});
function initBBEditors() {
var options = {
buttons:"testlink,bold,italic,underline,removeFormat,|,justifyleft,justifycenter,|,img,link,smilebox,|,quote",
smileList:SmileParser.smileList,
allButtons:{
img:{
title:"Вставка картинки с параметрами",
buttonText:"myimg",
modal:{
title:"Заголовок окна",
width:"600px",
tabs:[
{
input:[ {
param:"SRC",
title:"Введите адрес изображения",
validation:'^http(s)?://.*?\.(jpg|png|gif|jpeg)$'
}, {
param:"WIDTH",
title:"Ширина"
}, {
param:"HEIGHT",
title:"Высота"
}
]
}
],
onLoad:function () {
},
onSubmit:function (param1, param2, param3) {
var src = $("div.wbbm-inp-row input[name=SRC]").val();
var width = $("div.wbbm-inp-row input[name=WIDTH]").val();
var height = $("div.wbbm-inp-row input[name=HEIGHT]").val();
if (width.length == 0 || height.length == 0) {
if (width.length == 0) {
$("div.wbbm-inp-row input[name=WIDTH]").val(ImageSizeDetector.width);
}
if (height.length == 0) {
$("div.wbbm-inp-row input[name=HEIGHT]").val(ImageSizeDetector.height);
}
}
}
},
transform:{
'<img src="{SRC}" width="{WIDTH}" height="{HEIGHT}"/>':'[img width={WIDTH} height={HEIGHT}]{SRC}[/img]'
}
},
link:{
title:"Вставка ссылки",
buttonText:"testlink",
modal:{ //Описание модального окна
title:"Заголовок окна",
width:"600px",
tabs:[
{
input:[
//Список полей формы
{
param:"SELTEXT",
title:"Текст"
} ,
{
param:"SRC",
title:"Введите адрес",
validation:'^http(s)?://.*?$'
},
{
param:"TARGET"
}
]
}
],
onLoad:function () {
//Callback функция, которая будет вызываться после отображения модального окна
$("div.tab-cont").append("<input type='checkbox' name='TARGETFLAG'>Открывать в новом окне</input>");
$("div.wbbm-inp-row input[name=TARGET]").hide();
},
onSubmit:function (param1, param2, param3) {
var target = $("div.wbbm-cont input[name=TARGETFLAG]").prop("checked");
if (target) {
$("div.wbbm-inp-row input[name=TARGET]").val("_blank");
} else {
$("div.wbbm-inp-row input[name=TARGET]").val("_self");
}
}
},
transform:{
'<a href="{SRC}" target="{TARGET}">{SELTEXT}</a>':'[url src={SRC} target={TARGET}]{SELTEXT}[/url]'
}
}
}
};
jQuery("#message").wysibb(options);
jQuery("#answer").wysibb(options);
$("div.wbbm-inp-row input[name=WIDTH]").live("change", function () {
var h = $("div.wbbm-inp-row input[name=HEIGHT]").val();
if (h != "" && h > 0) {
return;
}
var width = $("div.wbbm-inp-row input[name=WIDTH]").val();
if (!ImageSizeDetector.isEmpty()) {
var height = width * ImageSizeDetector.height / ImageSizeDetector.width;
height = height.toFixed(0);
$("div.wbbm-inp-row input[name=HEIGHT]").val(height);
}
});
$("div.wbbm-inp-row input[name=HEIGHT]").live("change", function () {
var w = $("div.wbbm-inp-row input[name=WIDTH]").val();
if (w != "" && w > 0) {
return;
}
var height = $("div.wbbm-inp-row input[name=HEIGHT]").val();
if (!ImageSizeDetector.isEmpty()) {
var width = height * ImageSizeDetector.width / ImageSizeDetector.height;
width = width.toFixed(0);
$("div.wbbm-inp-row input[name=WIDTH]").val(width);
}
});
$("div.wbbm-inp-row input[name=SRC]").live("change", function () {
var src = $("div.wbbm-inp-row input[name=SRC]").val();
ImageSizeDetector.init(src);
});
}
ImageSizeDetector = new Object();
ImageSizeDetector.src = null;
ImageSizeDetector.img = null;
ImageSizeDetector.height = null;
ImageSizeDetector.width = null;
ImageSizeDetector.init = function (src, callback) {
var img = $("<img src='" + src + "' />");
ImageSizeDetector.img = img;
ImageSizeDetector.src = src;
ImageSizeDetector.width = img.get(0).width;
ImageSizeDetector.height = img.get(0).height;
if (callback) {
callback();
}
}
ImageSizeDetector.isNotEmpty = function () {
return ImageSizeDetector.width != null && ImageSizeDetector.width > 0 &&
ImageSizeDetector.height != null && ImageSizeDetector.height > 0;
}
ImageSizeDetector.isEmpty = function () {
return !ImageSizeDetector.isNotEmpty();
}
SmileParser = new Object();
SmileParser.map = null;
SmileParser.init = function (callback) {
var url = "/js/forum_smiles.json";
jQuery.ajax({
url:url,
dataType:'json',
success:function (json) {
// $("#list_routines").html("");
SmileParser.map = json;
SmileParser.prepareSmileList();
SmileParser.proceed();
if (callback) {
callback();
}
},
error:function (jqXHR, textStatus, errorThrown) {
}
});
}
SmileParser.replace = function (str) {
var result = str;
for (smileCode in SmileParser.map) {
smileURL = SmileParser.map[smileCode];
result = result.replace(smileCode, "<img src='" + smileURL + "'/>");
}
for (smileCode in SmileParser.oldMap) {
smileURL = SmileParser.oldMap[smileCode];
result = result.replace(smileCode, "<img src='" + smileURL + "'/>");
}
return result;
}
SmileParser.proceed = function () {
jQuery("p.pleft").each(function (index, value) {
var html = jQuery(value).html();
jQuery(value).html(SmileParser.replace(html));
});
}
SmileParser.smileList = [];
SmileParser.prepareSmileList = function () {
SmileParser.smileList = [];
for (smileCode in SmileParser.map) {
smileURL = SmileParser.map[smileCode];
var smileListItem = {
title:smileCode,
img:'<img src="' + smileURL + '"/>',
bbcode:smileCode
};
SmileParser.smileList.push(smileListItem);
}
return SmileParser.smileList;
}
SmileParser.oldMap = {
":)":"/i/forum/icon7.gif",
":(":"/i/smile/grust.gif",
":D":"/i/smile/laugh.gif",
";)":"/i/smile/wink.gif"
}
function storeCaret(text) {
if (text.createTextRange) {
text.caretPos = document.selection.createRange().duplicate();
}
}
function cs(s1, s2, formname) {
if (!formname) {
formname = 'F1';
}
if (document.getSelection) {
alert("Под NN не работает!");
}
if (document.selection) {
var str = document.selection.createRange();
var s = document[formname].text.value;
if (s1 == '//') {
if ((str.text != "") && (s.indexOf(str.text) < 0)) {
var str2 = '> ';
var j = 0;
for (var i = 0; i < str.text.length; i++) {
str2 += str.text.charAt(i);
j++;
if (str.text.charAt(i) == "\n") {
str2 += "> ";
j = 0;
}
if ((j > 55) && (str.text.charAt(i) == ' ')) {
str2 += "\n> ";
j = 0;
}
}
document[formname].text.value = s + "<I>\n" + str2 + "\n</I>\n";
} else {
alert("Не выделен текст!\nДля вставки цитаты, сначала выделите на странице нужный текст, а затем нажмите эту кнопку.");
}
} else {
if ((str.text != "") && (s.indexOf(str.text) >= 0)) {
if (str.text.indexOf(s1) == 0)
return ''
str.text = s1 + str.text + s2;
} else {
if (document[formname].text.createTextRange
&& document[formname].text.caretPos) {
var caretPos = document[formname].text.caretPos;
caretPos.text = s1 + s2;
} else {
document[formname].text.value = s + s1 + s2;
}
}
}
}
document[formname].text.focus();
return false;
}
var map_en = new Array('s`h', 'S`h', 'S`H', 's`Х', 'sh`', 'Sh`', 'SH`', "'o",
'yo', "'O", 'Yo', 'YO', 'zh', 'w', 'Zh', 'ZH', 'W', 'ch', 'Ch', 'CH',
'sh', 'Sh', 'SH', 'e`', 'E`', "'u", 'yu', "'U", 'Yu', "YU", "'a", 'ya',
"'A", 'Ya', 'YA', 'a', 'A', 'b', 'B', 'v', 'V', 'g', 'G', 'd', 'D',
'e', 'E', 'z', 'Z', 'i', 'I', 'j', 'J', 'k', 'K', 'l', 'L', 'm', 'M',
'n', 'N', 'o', 'O', 'p', 'P', 'r', 'R', 's', 'S', 't', 'T', 'u', 'U',
'f', 'F', 'h', 'H', 'c', 'C', '`', 'y', 'Y', "'");
var map_ru = new Array('сх', 'Сх', 'СХ', 'сХ', 'щ', 'Щ', 'Щ', 'ё', 'ё', 'Ё',
'Ё', 'Ё', 'ж', 'ж', 'Ж', 'Ж', 'Ж', 'ч', 'Ч', 'Ч', 'ш', 'Ш', 'Ш', 'э',
'Э', 'ю', 'ю', 'Ю', 'Ю', 'Ю', 'я', 'я', 'Я', 'Я', 'Я', 'а', 'А', 'б',
'Б', 'в', 'В', 'г', 'Г', 'д', 'Д', 'е', 'Е', 'з', 'З', 'и', 'И', 'й',
'Й', 'к', 'К', 'л', 'Л', 'м', 'М', 'н', 'Н', 'о', 'О', 'п', 'П', 'р',
'Р', 'с', 'С', 'т', 'Т', 'у', 'У', 'ф', 'Ф', 'х', 'Х', 'ц', 'Ц', 'ъ',
'ы', 'Ы', 'ь');
function convert(st) {
for (var i = 0; i < map_en.length; ++i)
while (st.indexOf(map_en[i]) >= 0)
st = st.replace(map_en[i], map_ru[i]);
return st;
}
function translate2(str) {
var strarr = new Array();
strarr = str.split(' ');
for (var k = 0; k < strarr.length; k++) {
if (strarr[k].indexOf("http://") < 0 && strarr[k].indexOf('@') < 0
&& strarr[k].indexOf("www.") < 0)
strarr[k] = convert(strarr[k]);
}
return strarr.join(' ');
}
function translate(str2) {
var s = new Array();
s = str2.split('\n');
for (var i = 0; i < s.length; i++)
s[i] = translate2(s[i])
return s.join('\n');
}
function subm() {
document.F1.text.value = translate(document.F1.text.value);
document.F1.title.value = translate(document.F1.title.value);
}
function subm2() {
document.F1.text.value = translate(document.F1.text.value);
}
var oneclick = false;
function getalign(al) {
al += "";
if (al == "3")
return ("Темное братство");
if (al == "2")
return ("Хаос");
if (al.substring(0, 1) == "1")
return ("Белое братство");
if (al == "0.5")
return ("Нейтрал");
return ("");
}
function drwfl(name, level) {
var s = "";
s += '&nbsp;<b>' + name + '</b>';
if(level > 0 && level != '') s += "&nbsp;[" + level + "]";
document.write(s);
}
var $addFavoriteSet = function () {
$('a.addFavorite').each(function (count, elm) {
var $elem = $(elm);
var id = $elem.attr('id');
$(elm).click(function () {
// ajax
$.ajax({
url:'/forum.pl?act=add_favorite',
// type: 'GET',
data:{
id:id
},
dataType:'json',
error:function (XTR, message) {
alert(XXX[3]);
},
success:function (data) {
alert(XXX[data.code]);
}
});
});
});
}