// чтение cookie |
function getCookie(cookieName) { |
if (!cookieName) |
return false; |
var cookies = document.cookie.split('; '); |
for (var i = 0; i < cookies.length; i++) { |
var singleCookie = cookies[i].split('='); |
if (singleCookie[0] == cookieName) |
return singleCookie[1]; |
} |
return false; |
} |
// установка cookie |
function setCookie(cookieName, cookieValue, cookieExpire) { |
if (!cookieName || !cookieValue) |
return false; |
var date = (cookieExpire ? new Date(cookieExpire) : new Date()); |
document.cookie = cookieName + '=' + cookieValue + |
'; expires=' + date.toGMTString() + |
'; path=/'; |
return true; |
} |
// удаление cookie |
function deleteCookie(cookieName) { |
if (!cookieName) |
return false; |
var date = new Date('01/01/1970'); |
document.cookie = cookieName + '=""' + |
'; expires=' + date.toGMTString() + |
'; path=/'; |
return true; |
} |
var windowTop, // обект блока |
windowOnToggle, // это защита от повторного toggle 0-1 выполняется или нет |
windowOnReload, // тоже только на аякс |
windowTopHide, // задается id setTimeout для clearTimeout автоматическое закрытие блока если мыш уходит |
windowSetReload = (getCookie('windowSetReload') ? getCookie('windowSetReload') : 0), // это настройка на период обновления для аякса |
windowSetPlay = (getCookie('windowSetPlay') ? true : false), // Настройка проигровать мелодию если есть новые сообщения на форуме |
windowSetHide = (getCookie('windowSetHide') !== false ? getCookie('windowSetHide') : 3000); // настройка через сколько прятать блок если уйдет мышь |
|
$(document).ready(function() { |
windowTop = $('div#window-topic'); // вписываю главный блок для дальнейшей работы чтобы каждый раз не искать в доме |
selectReload = windowTop |
.find("div#window-topic-set select[name='reload'] option[value='"+ windowSetReload +"']"); |
windowTop.find("div#window-topic-set input[name='windowSetPlay']") |
.attr('checked',windowSetPlay); // В блоке настройки делает checked для выбранной настройки это можно сделать и посредством php |
selectHide = windowTop |
.find("div#window-topic-set select[name='hide'] option[value='"+ windowSetHide +"']"); // тоже самое |
if (selectHide.text()) { |
selectHide.attr('selected',1); // устанавливаем чекеды |
} |
if (selectReload.text()) { |
selectReload.attr('selected',1); // устанавливаем чекеды |
} |
|
if (Math.floor(windowSetReload) >= 15) { |
windowOnReload = setTimeout(windowTopReload, (windowSetReload * 1000)); // Если в настройках включено автообновления запускаем его |
} |
}); |
|
|
function windowTopToggle() { // функция открывает закрывает блок превращая в кнопочку |
if (windowOnToggle) { // если уже выполняется т.е. дважды тыцнул будет глючить |
return false; |
} else { |
windowOnToggle = 1; // выполняется тоггле |
} |
if (windowTop.width() > 60) { // Если ширина блока больше значит надо все сворачивать else открывать блок |
windowTopSet(1); // закрываем блок с настройками |
windowTop.find('div#forum:first').slideUp(500, function () { // закрытие блока с форумами |
windowTop.find('div#window-topic-main') |
.css('display', 'none'); // скрываем ссылку на настройки и крутилку чтобы не путались |
windowTop.find('div.blockform') |
.animate({width: '55px'}, 500, function (){ //И всорачиваем <h2> |
windowOnToggle =0; // закончили |
}); |
}); |
windowTop.unbind("mouseleave"); // Снимаем авто тоггле которое должнобыло автоматически свернуть |
} else { // Розворачиваем блок |
windowTop.find('div.blockform') |
.animate({width: '400px'}, 500, function (){ |
windowTop.find('div#window-topic-main') |
.css({display: 'inline'}); |
windowTop.find('div#forum').slideDown(500, function (){ |
windowOnToggle = 0; |
}); |
}); |
windowTop.bind("mouseleave", function () { |
windowTopHide = setTimeout(windowTopToggle, windowSetHide); // Устанавливаю автозакрытие если уйдет мышь с блока |
}).bind('mouseenter', function () { |
clearTimeout(windowTopHide); // если мыш зашла обратно снимаем задачу на закрытие |
}); |
} |
return false; |
} |
|
function windowTopSet(a) { // Блок с настройками показать спрятать работает как тогле или принуденно закрыть первым параметром |
var setObject = windowTop.find('div#window-topic-set'); |
if (setObject.css('display') !== 'none' || a) { |
setObject.slideUp(500); // закрыть |
} else { |
setObject.slideDown(500); // открыть |
} |
} |
function windowNewIcon(a, b) { // делает мигание иконкой возле форума. a = номер форума которым надо замигать 0-4 и = мигать или отключить мигалку |
windowTop.find('tbody tr').each(function (c) { |
if (a == c) { |
if (!b) { |
$(this).removeClass('inew') |
.find('div.icon') |
.removeClass('inew') |
.unbind('click') |
.attr('title','') |
.css('cursor', 'default'); |
return true; |
} else { |
$(this).addClass('inew') |
.find('div.icon') |
.addClass('inew') |
.css('cursor', 'pointer') // Делаем возможность снять мигалку кликом тип интерестного ничего нет |
.attr('title','Пометить все темы как прочитаные') |
.click(function () { // Ну и вешаем на клик эту же функцию только на отключения |
windowNewIcon(a); |
// Здесь нужно отпрвить запрос на отметку всех тем как прочитаные в текужем форуме |
}); |
return true; |
} |
} |
}); |
// Функцию надо переписать чет промучился я над ним так уже сделал цыкл надо выбросить да и ремове подправить |
} |
|
function windowReloadToggle(a) { // Крутилка |
if (a) { |
windowTop.find('div.window-reload:first') |
.removeClass('window-reload-off') |
.addClass('window-reload-on'); |
} else { |
windowTop.find('div.window-reload:first') |
.removeClass('window-reload-on') |
.addClass('window-reload-off'); |
} |
} |
|
function setReloadTimeout(a) { // Сохраняем настройки |
console.log(a.value); |
if (a.value) { |
setCookie('windowSetReload', a.value, new Date('01/01/2012')); |
windowSetReload = a.value; |
if (Math.floor(windowSetReload) >= 15) { |
clearTimeout(windowOnReload); |
windowOnReload = setTimeout(windowTopReload, (windowSetReload * 1000)); |
} |
} else { |
deleteCookie('windowSetReload'); |
windowSetReload = 0; |
} |
} |
function setHide(a) { // Сохраняем настройки |
setCookie('windowSetHide', a.value, new Date('01/01/2012')); |
windowSetHide = a.value; |
} |
function setReloadPlay(a) { // Сохраняем настройки |
if (a.checked) { |
setCookie('windowSetPlay', true, new Date('01/01/2012')); |
windowSetPlay = true; |
} else { |
deleteCookie('windowSetPlay'); |
windowSetPlay = false; |
} |
} |
function windowTopReload() { // Функция обновления |
clearTimeout(windowOnReload); // Разрушаем предыдущую задачу если еще не началась |
var idTimeout; |
var arrDateMess = new Array(); |
// Формируем массив последних сообщений т.е. Отправляет типо такого Вчера 12:47 - DarkRiDDeR на сервер там проверяем если оно не совпадает значет было обновления в какойто теме и выдаст новые данные которые запишем в блок |
windowTop.find('tr td span.byuser').each(function (){ // Обработаем цыклом. Теперь содержим 5 ников и дат можно их отправлять на сервер |
arrDateMess.push($(this).text()); // Добавляем в масив текущие данные |
}); |
windowReloadToggle(1); // Включаем крутилку |
// отправляем постом масив сообщений для проверки |
$.post('test.php', // адрес |
{'dateMess': arrDateMess}, // Отправляемый массив |
function(data) { // Получаем ответ JSON если все ок |
windowReloadToggle(); // Отключаем крутилку |
if (typeof data.dateMess == 'object') { // если есть обновления |
windowTop.find('tbody tr td.tcr').each(function (i){ // Ищем где именно |
|
if (typeof data.dateMess[i] == 'object') { // Проверяем наявность данных обект или болеан если новых сообщений нет |
$(this).find('a') // Меняем Ссылку |
.attr('href', 'viewtopic.php?pid='+ |
data.dateMess[i][0]) |
.html(data.dateMess[i][1]); |
$(this).find('span.byuser').html(data.dateMess[i][2]); // иТекст кто ответил и когда |
windowNewIcon(i, 1); // Мигаем иконкой |
} |
}); // Заканчиваем замену |
if (windowSetPlay) { // Издаем звук |
play(); // Можно еще в <title> оповестить |
} |
} |
}, 'json') // Тип данных JSON |
.error(function (){ // Если ошибка |
windowReloadToggle(); // отключаем крутилку |
return false; |
}); |
if (windowSetReload >= 15) { // Задаем следующее обновления из настроек |
windowOnReload = setTimeout(windowTopReload, (windowSetReload * 1000)); |
} |
} |
function play(a) { // Играем |
textHtml5 = '<audio preload="metadata" autoplay="autoplay">\n'; |
textHtml5 += '<source src="../sound.ogg" type="audio/ogg; codecs=vorbis">\n'; |
textHtml5 += '<source src="../sound.mp3" type="audio/mpeg">\n'; |
textHtml5 += '</audio>\n'; |
if (!a) { |
windowTop.find('div#play').html(textHtml5); |
} else { |
windowTop.find('div#play').text(''); |
} |
setTimeout('play(1)',6000); //Играем не долго на всякий случай я еще не полностью роздуплил HTML5 |
} |