Дата: Понедельник, 20.10.2025, 13:46 | Сообщение # 1 |
|
Написал: Начинающий
Автор темы
Мурчанн
не в сети
Сообщений: 101
Внесены изменения в CSS: добавлена подсветка, широкая линия над меню и эффекты при наведении на кнопки. Полностью вставляйте шаблон на свой сайт — всё будет работать. Нет необходимости перезагружать изображения: пока этот сайт активен, будут корректно работать и ваши личные сообщения.Код
<!DOCTYPE html> <html> <head> <title>$TITLE$</title> <meta name="viewport" content="width=device-width; initial-scale=0.85; maximum-scale=0.85; user-scalable=0;" /> <script type="text/javascript" src="//s43.ucoz.net/src/jquery-1.6.1.js"></script> <link href="https://fonts.googleapis.com/css?family=Material+Icons|Roboto:400,700" rel="stylesheet"> <style type="text/css" media="all"> @import url(https://jordan.moy.su/css/pmnew.css);</style> <header> <div class="container"> <div class="tp-over"> <div class="tp-1"> <a class="h-logo" href="/">$USERNAME$ </a></div> <div class="comment_avatar"> <?if($USERS_ON$)?> <?if($USER_LOGGED_IN$)?> <?if($USER_AVATAR_URL$)?><img src="$USER_AVATAR_URL$" alt="Твоё фото " width="50px" height="50px"> <?else?><span class="no_avatar material-icons">person</span> <?endif?> <?endif?> <?endif?> <div style="text-align: center;"> <div class="statusOnline"> Онлайн </div> </div> </div> <div style="display:none; text-align:center; color:green;" class="stati"><?if(strpos($PROFILE_URL$,'target')>0)?><?substr($PROFILE_URL$,0,-16)?><?else?>$PROFILE_URL$<?endif?></div> <div class="tp-2"> <nav class="h-menu"> <div id="uNMenuDiv1" class="uMenuV"><ul class="uMenuRoot"> <li><a class=" uMenuItemA" href="https://jordan.moy.su"> <span>Главная</span> </a></li> <li><a href="/forum/"><span>Форум</span></a></li> <li><a href="/index/11"><span>настройки</span></a></li> <li><a href="/index/0-3"><span>Обратная связь</span></a></li> <li class="uWithSubmenu"><a href=""><span>Еще</span></a><ul> <li><a href="/"><span>Новости </span> </a></li> <li><a href="/"><span>Блог</span></a></li> </nav> <div class="h-menu-button" onclick="$('.h-menu').slideToggle()"><div><span class="hm1"></span><span class="hm2"></span><span class="hm3"></span></div></div> </div> <div class="headpoisk"> <div class="searchForm"> <div class="headpoisk"> <div class="poiskico"> <img src="https://img.icons8.com/ios-filled/50/search.png" alt="поиск"> </div> <form onsubmit="this.sfSbm.disabled=true" method="get" style="margin:0" action="/search/"> <input type="text" size="150" maxlength="100" name="q" class="queryField2" value="Поиск по сайту..." onfocus="if(this.value == 'Поиск по сайту...'){this.value = ''}" onblur="if(this.value == ''){this.value = 'Поиск по сайту...'}"> <input type="submit" value=" " name="sfSbm" class="queryField2 "> </form> </div> </div> </div> </header> </head> <body> <div align="center"> <div class="block"> <div class="pmb"> </h1> </div> <div class="text message-infos"><div style="text-align: justify;"></div> $_AVATAR$ $BODY$ </div> </div> </div> </div> <script type="text/javascript"> $('body').each(function () { $(this).html($(this).html().replace(/\[|\||\]/g, '')); }); </script> <script type="text/javascript">$("#ugr1, #ugr2, #ugr3, #ugr251").attr("checked","checked")</script> <script type="text/javascript" src="https://jordan.moy.su/newpm/script.js"></script> <script> (function(){ 'use strict'; const DEFAULT_AVATAR = "https://jordan.moy.su/ava/avapm.png"; const CHECK_DELAY = 100; let avatarMap = {}; // key = href или name function applyAvatar(container, key){ if(!container) return; let overlay = container.querySelector('.avatarOverlay'); if(!overlay){ overlay = document.createElement('div'); overlay.className = 'avatarOverlay'; overlay.style.position = 'absolute'; overlay.style.top = '0'; overlay.style.left = '-2px'; // сдвигаем на 10px влево overlay.style.width = '60px'; // ширина контейнера overlay.style.height = '72px'; // высота контейнера overlay.style.display = 'flex'; overlay.style.justifyContent = 'center'; overlay.style.alignItems = 'center'; overlay.style.paddingTop = '-5px'; // визуальное опускание overlay.style.paddingBottom = '10px'; overlay.style.overflow = 'hidden'; overlay.style.zIndex = '10'; if(getComputedStyle(container).position==='static') container.style.position='relative'; container.appendChild(overlay); } let img = overlay.querySelector('img'); if(!img){ img = document.createElement('img'); img.style.maxWidth = '100%'; img.style.maxHeight = '100%'; img.style.objectFit = 'cover'; img.style.objectPosition = 'center'; img.style.margin = 'auto'; img.style.display = 'block'; img.style.borderRadius = '5px'; // можно 50% сделать круглый аватар overlay.appendChild(img); } // Жёсткая логика: если аватар найден в карте — используем, иначе дефолт img.src = avatarMap[key] || DEFAULT_AVATAR; img.alt = ''; } // Определяем отправителя function findSender(row){ if(!row) return null; const fromCell = row.querySelector('td:nth-child(2), td:nth-child(3), .nick, .username'); if(fromCell){ const a = fromCell.querySelector('a[href*="/index/8-0-"], a[href*="/users/"], a.profile-link'); if(a) return {href:a.href, name:a.textContent.trim()}; return {name: fromCell.textContent.trim()}; } return null; } // Асинхронно ищем реальную аву async function fetchAvatar(identifier){ if(!identifier) return null; const key = identifier.href || identifier.name; if(avatarMap[key] && avatarMap[key] !== DEFAULT_AVATAR) return avatarMap[key]; const urls = identifier.href ? [identifier.href] : [ location.origin + '/index/8-0-' + encodeURIComponent(identifier.name.replace(/\s+/g,'-')), location.origin + '/index/8-0-' + encodeURIComponent(identifier.name) ]; for(const url of urls){ try { const res = await fetch(url, {cache:'no-cache'}); if(!res.ok) continue; const html = await res.text(); const doc = new DOMParser().parseFromString(html, "text/html"); const img = doc.querySelector('img[src*="/avatar/"], img[src*="/ava/"], .user_avatar img, .avatar img, .profile-picture img'); if(img && img.src && !/noavatar|default|empty/i.test(img.src)){ avatarMap[key] = new URL(img.src, url).href; return avatarMap[key]; } } catch(e){} await new Promise(r=>setTimeout(r, CHECK_DELAY)); } return null; // если авы нет — дефолт остаётся } // Обработка строк сообщений async function processRows(){ const rows = Array.from(document.querySelectorAll('.userpm-messages-table tr[id^="ent"], .pm-list tr, tr.pm-row')); for(const row of rows){ if(row.dataset._avatarInjected==='1') continue; const identifier = findSender(row); const cell = row.querySelector('.r_round, .avatar, .pm_avatar, td:first-child, td.avatar-cell'); if(identifier && cell){ const key = identifier.href || identifier.name; // Сначала дефолтная аватарка applyAvatar(cell, key); // Асинхронно подставляем реальную аву fetchAvatar(identifier).then(realSrc=>{ if(realSrc) applyAvatar(cell, key); // если realSrc null — дефолт останется }); } row.dataset._avatarInjected='1'; } } // Открытые PM async function processOpenPMs(){ const openPMs = Array.from(document.querySelectorAll('.userpm-message-table')); for(const pm of openPMs){ if(pm.dataset._avatarInjected==='1') continue; const header = pm.querySelector('.userpm-message-subject, .pm-header, .pm-author'); const link = pm.querySelector('a[href*="/index/8-0-"], a[href*="/users/"]'); const identifier = link ? {href:link.href, name:link.textContent.trim()} : header ? {name:header.textContent.trim()} : null; const target = pm.querySelector('.r_round, .avatar, .pm_avatar, .userpm-message-subject') || pm; if(identifier && target){ const key = identifier.href || identifier.name; // Дефолт для отправителя applyAvatar(target, key); // Асинхронно реальная fetchAvatar(identifier).then(realSrc=>{ if(realSrc) applyAvatar(target, key); }); } pm.dataset._avatarInjected='1'; } } // Инициализация function init(){ processRows(); processOpenPMs(); const obs = new MutationObserver(()=>{ processRows(); processOpenPMs(); }); obs.observe(document.body, {childList:true, subtree:true}); } // Стили (function addStyles(){ const st = document.createElement('style'); st.textContent = ` .avatarOverlay img{ transform-origin: center center; } .avatarOverlay img:hover{ transform: scale(1.04); transition: transform .18s ease; }`; document.head.appendChild(st); })(); if(document.readyState==='loading') document.addEventListener('DOMContentLoaded', init); else init(); })(); </script> <script> document.addEventListener('DOMContentLoaded', () => { document.querySelectorAll('.userpm-messages-table tr[id^="ent"]').forEach(row => { const msgLink = row.querySelector('td a[href*="/index/14-"]'); if (msgLink) { row.style.cursor = 'pointer'; row.style.transition = 'all 0.2s ease'; // при наведении — "вдавливается" row.addEventListener('mouseenter', () => { row.style.transform = 'scale(1.03) translateY(1px)'; // чуть меньше, чуть вниз row.style.boxShadow = 'inset 0 2px 6px rgba(0,0,0,0.2)'; // внутренняя тень row.style.backgroundColor = ''; }); // возвращается обратно row.addEventListener('mouseleave', () => { row.style.transform = 'scale(1) translateY(0)'; row.style.boxShadow = 'none'; row.style.backgroundColor = ''; }); // кликабельность row.addEventListener('click', (e) => { if (!e.target.closest('a') && !e.target.closest('input')) { window.location.href = msgLink.href; } }); } }); }); </script> <div class="cursor"></div> <div class="cursor-follower"></div> <script> document.addEventListener("DOMContentLoaded", () => { const cursor = document.querySelector(".cursor"); const follower = document.querySelector(".cursor-follower"); let posX = 0, posY = 0; let mouseX = 0, mouseY = 0; // Плавное движение function animate() { posX += (mouseX - posX) / 6; posY += (mouseY - posY) / 6; follower.style.transform = `translate(${posX}px, ${posY}px)`; cursor.style.transform = `translate(${mouseX}px, ${mouseY}px)`; requestAnimationFrame(animate); } animate(); // Отслеживаем курсор document.addEventListener("mousemove", e => { mouseX = e.clientX; mouseY = e.clientY; }); }); </script> <script> (function() { // Функция для скрытия элементов с текстом "Массовая рассылка" const hideMassMail = (node) => { node.querySelectorAll('a, button, span, div').forEach(el => { if (el.textContent && el.textContent.trim().toLowerCase() === 'массовая рассылка') { el.style.display = 'none'; } }); }; // Сначала скрываем уже существующие кнопки hideMassMail(document); // Создаем наблюдателя за новыми элементами (AJAX, динамика) const observer = new MutationObserver(mutations => { mutations.forEach(mutation => { mutation.addedNodes.forEach(node => hideMassMail(node)); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); </script> </body> </html>
Признаюсь, не знаю почему, но глядя на звезды мне всегда хочется мечтать.
Дата: Понедельник, 20.10.2025, 19:09 | Сообщение # 2 |
|
Написал: Новичок
Messi
не в сети
Сообщений: 25
Это предел возможностей системы UCoz , на пределе возможностей , была создана страница личных сообщений.
Сообщение отредактировал Messi - Понедельник, 20.10.2025, 19:09
Ме́сси аргентинский футболист, нападающий футбольного клуба «Барселона», с 2011 года капитан национальной сборной Аргентины. Лучший бомбардир в истории «Барселоны» и сборной Аргентины. Считается одним из лучших футболистов современности и одним из лучшиx игроков всеx времён.
Дата: Вторник, 21.10.2025, 15:41 | Сообщение # 3 |
|
Написал: Новичок
Нужен вариант светлых тонов
Если стоит выбор между «да» или «нет», то «да»! Сделайте это. Поцелуйте, обнимите, догоните, встретьтесь, скажите. И пусть выйдет ерунда, зато хоть попытались.
Дата: Вторник, 21.10.2025, 20:48 | Сообщение # 4 |
|
Написал: Новичок
Marco
не в сети
Сообщений: 5
Справа сделать колонку список юзеров, которым можно написать, как записная книжка.
Мы упорно отгораживались от всех до тех пор, пока не остались вдвоем. Впрочем, ты наверняка не задумывался над этим — ведь ты никогда не был в таком положении, в каком оказалась я. Ты никогда не был один. У тебя всегда была я. У меня всегда был ты. А сейчас у тебя есть Бетани, а у меня нет никого