Вы не зашли.
Главная » Общение » Переезд сервера
#41. TLENS Off (14)
Moderator
2011.05.15 10:10
Оо я  воще то плагин писал  с надеждой что мы его доработаем и поставим на этот форум, а то такое мини грабчег для тестов
я же не имеюдоступа.
Кстати прикольная штука ты только написал я сразу узнал о твоем посте. Просто сразу не ответил заннят был.

у меня на 15 сек обновления стоит
ты типо кнопочки не увидел в низу?
Отредактировано TLENS (2011.05.15 10:10)
#42. Gemorroj Off (107)
Administrator
2011.05.15 11:11
нет, не заметил. опиши подробнее что за кнопочка
#43. TLENS Off (14)
Moderator
2011.05.15 11:11
Минут через 30 освобожусь
Добавлено спустя   2 минуты  57 секунд:
Вот запусти в новом окне нажми обновить и напиши обычно на форуме. Только не через граб.
А да в настройках поставь автообновление.
Добавлено спустя   5 минут  6 секунд:
Корочь доработать надо уже на этом форуме ато я через php мост его толком не сделаю.
Сейчас прийду домой отпишу подробнее
#44. TLENS Off (14)
Moderator
2011.05.15 12:12
Плагин состоит из HTML JS И css/
html
Код:
<div id="window-topic">
<div id="punmessage_list" class="pun">
<div class="block">
<div class="blockform" style="width: 55px;">
<h2 style="height: 20px;"><span onclick="windowTopToggle();" style="cursor: pointer;">Меню</span></h2>
<div id="window-topic-main">
<div class="window-reload window-reload-off" onclick="windowTopReload();" title="Обновить"></div>
<a href="javascript: windowTopSet();">Настройки</a>
</div>
<div class="box" id="window-topic-set">
&nbsp;<select name="reload" onchange="setReloadTimeout(this);">
<option value="0"> Выкл</option>
<option value="15">15 сек</option>
<option value="30">30 сек</option>
<option value="60">1 мин</option>
<option value="180">3 мин</option>
<option value="300">5 мин</option>
<option value="600">10 мин</option>
<option value="900">15 мин</option>
</select>
Интервал обновления<br />
&nbsp;<select name="hide" onchange="setHide(this);">
<option value="500">0.5 сек</option>
<option value="1000">1 сек</option>
<option value="2000">2 сек</option>
<option value="3000">3 сек</option>
<option value="4000">4 сек</option>
<option value="5000">5 сек</option>
<option value="7000">7 сек</option>
<option value="10000">10 сек</option>
</select> Прятать окно если не используется<br />
&nbsp;<input name="windowSetPlay" type="checkbox" onchange="setReloadPlay(this);" /> Включить звук<br />
</div>
<div id="forum" class="box">
<table cellspacing="0">
<thead><tr><th class="tcl" scope="col">Форум</th><th class="tcr" scope="col">Последнее сообщение</th></tr></thead>
<tbody>
<tr><td class="tcl"><div class="intd"><div class="icon"><div class="nosize"></div></div><div class="tclcon"><h3><a href="viewforum.php?id=3">PHP/MySQL </a></h3></div></div></td><td class="tcr"><a href="viewtopic.php?pid=16406#p16406">Debian: установка FFmpeg</a> <span class="byuser">Сегодня 15:04 - xits</span></td></tr>
<tr><td class="tcl"><div class="intd"><div class="icon"><div class="nosize"></div></div><div class="tclcon"><h3><a href="viewforum.php?id=4">xHTML/CSS/JavaScript</a></h3></div></div></td><td class="tcr"><a href="viewtopic.php?pid=16385#p16385">Не хватает ActionScript</a> <span class="byuser">Вчера 21:52 - Gemorroj</span></td></tr>
<tr><td class="tcl"><div class="intd"><div class="icon"><div class="nosize"></div></div><div class="tclcon"><h3><a href="viewforum.php?id=5">Компьютеры/Софт </a></h3></div></div></td><td class="tcr"><a href="viewtopic.php?pid=16402#p16402">Пищит компьютер</a> <span class="byuser">Сегодня 13:35 - Di-grees</span></td></tr>
<tr><td class="tcl"><div class="intd"><div class="icon"><div class="nosize"></div></div><div class="tclcon"><h3><a href="viewforum.php?id=6">Юмор </a></h3></div></div></td><td class="tcr"><a href="viewtopic.php?pid=16162#p16162">Белорусские компьютеры</a> <span class="byuser">2011.05.04 17:00 - TLENS</span></td></tr>
<tr><td class="tcl"><div class="intd"><div class="icon"><div class="nosize"></div></div><div class="tclcon"><h3><a href="viewforum.php?id=7">Общение </a></h3></div></div></td><td class="tcr"><a href="viewtopic.php?pid=16407#p16407">Переезд сервера</a> <span class="byuser">Сегодня 15:20 - TLENS</span></td></tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div id="play">
</div>
</div>
Имена топиков и форумов я вставил для теста в php тебе надо вставить те данные которые ты вставляешь на форуме.
CSS Это понятно обяснять нечего
Код:
div#window-topic{
position: fixed;
left: 5px;
bottom: 0;
}
div.window-reload{
display: inline;
background-repeat: no-repeat;
width: 20px;
height: 20px;
cursor: pointer;
position: absolute;
right: -25px;
top: 0;
}
div.window-reload#e{
}
div.window-reload-on{
background-image: url(../ajax-loader.gif);
}
div.window-reload-off{
background-image: url(../ajax-loader.png);
}
div#window-topic div#window-topic-main{
display: none;
position: absolute;
right: 25px;
top: 5px;
width: 300px;
text-align: right;
}
div#window-topic div#forum{
text-align:left;
display: none;
}
div#window-topic-set{
text-align:left;
display: none;
}
Ну и скрипт о нем подробнее
#45. TLENS Off (14)
Moderator
2011.05.15 13:01
Описал ввесь скрипт его еще надо много усовершенствовать например приват встроить.
Пример работы смотри на
Мда первый раз когда загружается на моем сайте там будут все мигать так как я не обновляю HTML блок вообще только через JS. Все равно зачем тратить время.
Код:
// чтение 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
}
Добавлено спустя   1 минуту  33 секунды:
Хоть не зря промучился ночь?
#46. Gemorroj Off (107)
Administrator
2011.05.15 13:01
расскажи, зачем там работа с куками в JS?
#47. TLENS Off (14)
Moderator
2011.05.15 13:01
Настройки сохранять
Добавлено спустя   2 минуты  10 секунд:
Вот
Добавлено спустя   3 минуты  26 секунд:
Да и CSS надо подправить я в нем запутался
Вложения
Безымянный.JPG 141kb {1366x768} [загрузок: 821]
#48. TLENS Off (14)
Moderator
2011.05.15 13:01
Подогнал пот валидатор вроде все норм.
Ну дак как доделывать будем?
#49. Gemorroj Off (107)
Administrator
2011.05.15 14:02
смысл плагина? на других сайтах чтобы была возможность всегда иметь в трее окошко форума?
не лучше ли тогда такое реализовать как раширение для браузера?
#50. TLENS Off (14)
Moderator
2011.05.15 14:02
Я для этого сайта делал. А то не удобно както здесь
Добавлено спустя   1 минуту  1 секунду:
Вот видишь ты только написал в тему я ответил
Добавлено спустя   5 минут  58 секунд:
Остальное это за тобой зделать файл который будет отправлять правельный json/
И всунуть это в форум.
Добавлено спустя   7 минут  16 секунд:
Но закончить надо его в начале.
Дак как или удаляем это все нах и пусть здесь будет все как было?
Страниц: 13 4 5 6 714 Все
Главная
WEB
PunBB Mod v0.6.2
0.014 s