Compare commits

..

2 commits

Author SHA1 Message Date
Ry0
15407ef1b3
Merge b8e7f0ce3e into 4b7d2b9b17 2025-05-24 03:31:55 +03:00
xRy0
b8e7f0ce3e
feat(ModalPosts): Fixed ui and some shinanigans 2025-05-24 03:31:50 +03:00
3 changed files with 120 additions and 28 deletions

View file

@ -1,5 +1,17 @@
{extends "../../@layout.xml"}
{block title}
{_post} - OpenVK
{/block}
{block header}
{_post}
{/block}
{block content}
{var $author = $post->getOwner()} {var $author = $post->getOwner()}
{var $comments = $post->getLastComments(3)}
{var $commentsCount = $post->getCommentsCount()} {var $commentsCount = $post->getCommentsCount()}
{var $platform = $post->getPlatform()} {var $platform = $post->getPlatform()}
{var $platformDetails = $post->getPlatformDetails()} {var $platformDetails = $post->getPlatformDetails()}
@ -17,17 +29,26 @@
{var $club = isset($club) ? $club} {var $club = isset($club) ? $club}
{var $commentTextAreaId = $post === NULL ? rand(1,300) : $post->getId()} {var $commentTextAreaId = $post === NULL ? rand(1,300) : $post->getId()}
<table border="0" style="font-size: 11px;" data-id="{$post->getPrettyId()}" n:class="post, !$compact ? post-divider, $post->isExplicit() ? post-nsfw"> <style>
<tbody> .sidebar, .page_header, .page_footer {
<tr> opacity: 0;
<td width="54" valign="top"> pointer-events: none;
}
.page_body {
margin-top: -45px;
}
</style>
<div style="font-size: 11px;" data-id="{$post->getPrettyId()}" n:class="post, !$compact ? post-divider, $post->isExplicit() ? post-nsfw">
<div>
<div width="54" valign="top" class="post-modal-header">
<a href="{$author->getURL()}"> <a href="{$author->getURL()}">
<img src="{$author->getAvatarURL('miniscule')}" width="{if $compact}25{else}50{/if}" class="post-avatar {if $compact}cCompactAvatars{/if}" /> <img src="{$author->getAvatarURL('miniscule')}" width="{if $compact}25{else}50{/if}" class="post-avatar {if $compact}cCompactAvatars{/if}" />
<span n:if="!$post->isPostedOnBehalfOfGroup() && !$compact && $author->isOnline()" class="post-online">{_online}</span> <span n:if="!$post->isPostedOnBehalfOfGroup() && !$compact && $author->isOnline()" class="post-online">{_online}</span>
</a> </a>
</td> <div class="post-author post-modal-author">
<td width="100%" valign="top">
<div class="post-author">
<a href="{$author->getURL()}"><b class="post-author-name">{$author->getCanonicalName()}</b></a> <a href="{$author->getURL()}"><b class="post-author-name">{$author->getCanonicalName()}</b></a>
<img n:if="$author->isVerified()" class="name-checkmark" src="/assets/packages/static/openvk/img/checkmark.png"> <img n:if="$author->isVerified()" class="name-checkmark" src="/assets/packages/static/openvk/img/checkmark.png">
{$post->isDeactivationMessage() ? ($author->isFemale() ? tr($deac . "_f") : ($author->isNeutral() ? tr($deac . "_g") : tr($deac . "_m")))} {$post->isDeactivationMessage() ? ($author->isFemale() ? tr($deac . "_f") : ($author->isNeutral() ? tr($deac . "_g") : tr($deac . "_m")))}
@ -54,7 +75,7 @@
</a> </a>
{/if} {/if}
<span n:if="$post->isPinned()" class="nobold">{_pinned}</span> <!--<span n:if="$post->isPinned()" class="nobold">{_pinned}</span>
<a n:if="$canBeDeleted && !($forceNoDeleteLink ?? false) && $compact == false" class="delete" href="/wall{$post->getPrettyId()}/delete"></a> <a n:if="$canBeDeleted && !($forceNoDeleteLink ?? false) && $compact == false" class="delete" href="/wall{$post->getPrettyId()}/delete"></a>
@ -68,8 +89,10 @@
{if $post->canBeEditedBy($thisUser) && !($forceNoEditLink ?? false) && $compact == false} {if $post->canBeEditedBy($thisUser) && !($forceNoEditLink ?? false) && $compact == false}
<a class="edit" id="editPost"></a> <a class="edit" id="editPost"></a>
{/if} {/if}-->
</div> </div>
</div>
<div width="100%" valign="top">
<div class="post-content" id="{$post->getPrettyId()}" data-localized-nsfw-text="{_nsfw_warning}"> <div class="post-content" id="{$post->getPrettyId()}" data-localized-nsfw-text="{_nsfw_warning}">
<div class="text" id="text{$post->getPrettyId()}"> <div class="text" id="text{$post->getPrettyId()}">
<span data-text="{$post->getText(false)}" class="really_text">{$post->getText()|noescape}</span> <span data-text="{$post->getText(false)}" class="really_text">{$post->getText()|noescape}</span>
@ -126,9 +149,6 @@
<img src="/assets/packages/static/openvk/img/app_icons_mini/{$post->getPlatform(this)}.svg"> <img src="/assets/packages/static/openvk/img/app_icons_mini/{$post->getPlatform(this)}.svg">
</a> </a>
{if isset($thisUser)} {if isset($thisUser)}
&nbsp;
<a n:if="!($forceNoCommentsLink ?? false) && $commentsCount == 0" href="javascript:expand_comment_textarea({$commentTextAreaId})">{_comment}</a>
<div class="like_wrap"> <div class="like_wrap">
<a n:if="!($forceNoShareLink ?? false)" id="reposts{$post->getPrettyId()}" class="post-share-button" href="javascript:repost('{$post->getPrettyId()}', 'post')"> <a n:if="!($forceNoShareLink ?? false)" id="reposts{$post->getPrettyId()}" class="post-share-button" href="javascript:repost('{$post->getPrettyId()}', 'post')">
@ -156,12 +176,21 @@
{var $club = is_null($club) ? ($post->getTargetWall() < 0 ? (new openvk\Web\Models\Repositories\Clubs)->get(abs($post->getTargetWall())) : NULL) : $club} {var $club = is_null($club) ? ($post->getTargetWall() < 0 ? (new openvk\Web\Models\Repositories\Clubs)->get(abs($post->getTargetWall())) : NULL) : $club}
{include "../textArea.xml", route => $commentsURL, postOpts => false, graffiti => (bool) ovkGetQuirk("comments.allow-graffiti"), post => $post, club => $club} {include "../textArea.xml", route => $commentsURL, postOpts => false, graffiti => (bool) ovkGetQuirk("comments.allow-graffiti"), post => $post, club => $club}
</div> </div>
</div>
<div style="float: left; min-height: 100px; width: 100%;">
{include "../comments.xml",
comments => $comments,
count => $cCount,
page => $cPage,
model => "posts",
parent => $post }
</div> </div>
<div n:if="$suggestion && $canBePinned" class="suggestionControls"> <div n:if="$suggestion && $canBePinned" class="suggestionControls">
<input type="button" class="button" id="publish_post" data-id="{$post->getId()}" value="{_publish_suggested}"> <input type="button" class="button" id="publish_post" data-id="{$post->getId()}" value="{_publish_suggested}">
<input type="button" class="button" id="decline_post" data-id="{$post->getId()}" value="{_decline_suggested}"> <input type="button" class="button" id="decline_post" data-id="{$post->getId()}" value="{_decline_suggested}">
</div> </div>
</td> </div>
</tr> </div>
</tbody> </div>
</table> </div>
{/block}

View file

@ -4286,3 +4286,41 @@ hr {
.deleted_mark_average { .deleted_mark_average {
padding: 5px 61px; padding: 5px 61px;
} }
.post-modal-view {
position: relative;
z-index: 999;
background: #fff;
min-width: 600px;
width: fit-content;
padding: 25px;
padding-top: 15px;
padding-bottom: 10px;
box-shadow: 0px 0px 3px 1px #222;
margin: 20px auto 0 auto;
}
.post-modal-title {
font-weight: bold;
padding-bottom: 16px;
}
.post-modal-title div {
float: right;
font-weight: normal;
}
.post-modal-wrapper {
position: relative;
display: flex;
flex-direction: column;
}
.post-modal-header {
display: flex;
}
.post-modal-author {
margin: 5px;
}

View file

@ -2953,20 +2953,45 @@ u(document).on("submit", "#additional_fields_form", (e) => {
}) })
async function getEmbeddedPost(postId) { async function getEmbeddedPost(postId) {
let res = await fetch("/wall"+postId+"_e")
res.text().then(function (text) {
CMessageBox.toggleLoader() CMessageBox.toggleLoader()
let msb = new CMessageBox({ let request = await fetch("/wall"+postId+"_e")
const body_html = await request.text()
const parser = new DOMParser
const body = parser.parseFromString(body_html, "text/html")
const preview = body.querySelector('.post')
if (request.status != 200) {
MessageBox("Error", "Post not found", ["Ок"], [Function.noop])
} else {
const photo_viewer = new CMessageBox({
title: '', title: '',
custom_template: u(` custom_template: u(`
<div class="ovk-photo-view-dimmer"> <div class="ovk-photo-view-dimmer">
${text} <div class="post-modal-view">
<div class="post-modal-title">
<text>
${tr("post")}
</text>
<div>
<a id="ovk-photo-close">${tr("close")}</a>
</div> </div>
`) </div>
<div class='post-modal-wrapper'>
${preview.innerHTML}
</div>
</div>
</div>`)
}) })
CMessageBox.toggleLoader() photo_viewer.getNode().find("#ovk-photo-close").on("click", function(e) {
photo_viewer.close()
}); });
history.replaceState(null, null, `?w=wall-${postId}`) }
CMessageBox.toggleLoader()
history.replaceState(null, null, `?w=wall${postId}`)
} }
u(document).on("click", "#al-post", (e) => { u(document).on("click", "#al-post", (e) => {
@ -2978,6 +3003,6 @@ u(document).on("click", "#al-post", (e) => {
const params = new URLSearchParams(window.location.search); const params = new URLSearchParams(window.location.search);
if (params.has("w")) { if (params.has("w")) {
let post_id = params.get("w").replace("wall-", ""); let post_id = params.get("w").replace("wall", "");
getEmbeddedPost(post_id) getEmbeddedPost(post_id)
} }