ADD: Эскизы, шаблоны для выбора типа Поста

См. https://libarea.ru/post/1047/net-vozmozhnosti-vybora-eskiza-pri-sozdanii-temy
This commit is contained in:
Evg 2022-10-03 07:00:48 +03:00
parent a18f931c3f
commit 3fd8f9fb09
13 changed files with 155 additions and 90 deletions

View file

@ -46,10 +46,12 @@ class AddPostController extends Controller
// Добавим пост
public function create($type)
{
$content = $_POST['content']; // для Markdown
$post_url = Request::getPost('post_url');
$blog_id = Request::getPostInt('blog_id');
$fields = Request::getPost() ?? [];
$content = $_POST['content'] == '' ? $_POST['content_qa'] : $_POST['content'];
$content = $content == '' ? $_POST['content_url'] : $content;
if ($type == 'page') {
$count = FacetModel::countFacetsUser($this->user['id'], 'blog');
@ -85,7 +87,6 @@ class AddPostController extends Controller
$post_related = $this->relatedPost();
$post_feature = $fields['post_feature'] ?? false;
$translation = $fields['translation'] ?? false;
$post_draft = $fields['post_draft'] ?? false;
$closed = $fields['closed'] ?? false;
@ -99,7 +100,7 @@ class AddPostController extends Controller
'post_thumb_img' => $site['og_img'] ?? '',
'post_related' => $post_related ?? '',
'post_slug' => $slug,
'post_feature' => $post_feature == 'on' ? 1 : 0,
'post_feature' => Request::getPostInt('post_feature'),
'post_type' => $type,
'post_translation' => $translation == 'on' ? 1 : 0,
'post_draft' => $post_draft == 'on' ? 1 : 0,

File diff suppressed because one or more lines are too long

View file

@ -1,4 +1,5 @@
const focusId=document.querySelectorAll('.focus-id'),saveFolder=document.querySelectorAll(".save-folder"),delFolderContent=document.querySelectorAll(".del-folder-content"),delFolder=document.querySelectorAll(".del-folder"),addProfile=document.querySelectorAll(".add-profile"),postRecommend=document.querySelectorAll(".post-recommend"),typeAction=document.querySelectorAll(".type-action"),reply=document.querySelectorAll(".actreply");focusId.forEach(el=>el.addEventListener("click",function(e){makeRequest("/focus",options={body:"content_id="+el.dataset.id+"&type="+el.dataset.type+"&_token="+token})}));saveFolder.forEach(el=>el.addEventListener("click",function(e){makeRequest("/folder/content/save",options={body:"id="+el.dataset.id+"&type="+el.dataset.type+"&tid="+el.dataset.tid})}));addProfile.forEach(el=>el.addEventListener("click",function(e){makeRequest("/post/profile",options={body:"post_id="+el.dataset.post+"&_token="+token})}));delFolderContent.forEach(el=>el.addEventListener("click",function(e){makeRequest("/folder/content/del",options={body:"id="+el.dataset.id+"&type="+el.dataset.type+"&tid="+el.dataset.tid+"&_token="+token})}));delFolder.forEach(el=>el.addEventListener("click",function(e){makeRequest("/folder/del",options={body:"id="+el.dataset.id+"&type="+el.dataset.type+"&_token="+token})}));postRecommend.forEach(el=>el.addEventListener("click",function(e){makeRequest("/post/recommend",options={body:"post_id="+el.dataset.id+"&_token="+token})}));typeAction.forEach(el=>el.addEventListener("click",function(e){makeRequest("/status/action",options={body:"content_id="+el.dataset.id+"&type="+el.dataset.type+"&_token="+token})}));isIdEmpty('colorPicker').onclick=function(){let box=document.getElementById("box");let color=document.getElementById("color");box.style.borderColor=colorPicker.value;colorPicker.addEventListener("input",function(event){box.style.borderColor=event.target.value},!1);colorPicker.addEventListener("change",function(event){color.value=colorPicker.value},!1)}
reply.forEach(el=>el.addEventListener("click",function(e){let reply=document.querySelector('#reply_addentry'+el.dataset.id);fetch("/reply/"+el.dataset.type,{method:"POST",body:"id="+el.dataset.id+"&item_id="+el.dataset.item_id+"&_token="+token,headers:{'Content-Type':'application/x-www-form-urlencoded'}}).then(response=>response.text()).then(text=>{reply.classList.add("block");reply.innerHTML=text;document.querySelectorAll("#cancel_comment").forEach(el=>el.addEventListener("click",function(e){reply.classList.remove("block")}))})}));document.querySelectorAll(".up-id").forEach(el=>el.addEventListener("click",function(e){fetch("/votes",{method:"POST",body:"content_id="+el.dataset.id+"&type="+el.dataset.type+"&_token="+token,headers:{'Content-Type':'application/x-www-form-urlencoded'}}).then((response)=>{return}).then((text)=>{let new_cont=(parseInt(el.dataset.count)+parseInt(1));let upVot=document.querySelector('#up'+el.dataset.id);let upScr=upVot.querySelector('.score');upVot.classList.add('active');upScr.replaceWith(new_cont)})}));document.querySelectorAll(".add-favorite").forEach(el=>el.addEventListener("click",function(e){fetch("/favorite",{method:"POST",headers:{'Content-Type':'application/x-www-form-urlencoded'},body:"content_id="+el.dataset.id+"&type="+el.dataset.type+"&_token="+token,}).then(response=>response.text()).then(text=>{if(el.dataset.front=='personal'){location.reload()}else{let dom=document.querySelector("#favorite_"+el.dataset.id);dom.classList.toggle("active")}})}));document.querySelectorAll("#graburl").forEach(el=>el.addEventListener("click",function(e){let uri=document.getElementById('link').value;if(uri===''){return}
fetch("/post/grabtitle",{method:"POST",body:"uri="+uri,headers:{'Content-Type':'application/x-www-form-urlencoded'}}).then(function(response){if(!response.ok){return Promise.reject(new Error('Response failed: '+response.status+' ('+response.statusText+')'))}
return response.json()}).then(function(data){document.querySelector('input[name=post_title]').value=data.title}).catch(function(error){})}));document.querySelectorAll(".editcomm").forEach(el=>el.addEventListener("click",function(e){let comment_id=el.dataset.comment_id;let comment=document.querySelector('#insert_id_'+el.dataset.comment_id);fetch("/comment/editform",{method:"POST",body:"comment_id="+comment_id,headers:{'Content-Type':'application/x-www-form-urlencoded'}}).then(response=>{return response.text()}).then(text=>{document.getElementById("comment_"+comment_id).classList.add("edit");comment.classList.add("block");comment.innerHTML=text;document.querySelectorAll("#cancel_comment").forEach(el=>el.addEventListener("click",function(e){comment.classList.remove("block")}))})}))
return response.json()}).then(function(data){document.querySelector('input[name=post_title]').value=data.title;console.log(data);document.querySelector('textarea.url').insertAdjacentHTML('afterBegin',data.description)}).catch(function(error){})}));document.querySelectorAll(".editcomm").forEach(el=>el.addEventListener("click",function(e){let comment_id=el.dataset.comment_id;let comment=document.querySelector('#insert_id_'+el.dataset.comment_id);fetch("/comment/editform",{method:"POST",body:"comment_id="+comment_id,headers:{'Content-Type':'application/x-www-form-urlencoded'}}).then(response=>{return response.text()}).then(text=>{document.getElementById("comment_"+comment_id).classList.add("edit");comment.classList.add("block");comment.innerHTML=text;document.querySelectorAll("#cancel_comment").forEach(el=>el.addEventListener("click",function(e){comment.classList.remove("block")}))})}));const tabs_post=document.querySelector(".tabs-post");if(tabs_post){const tabButton=document.querySelectorAll(".tab-button");const contents=document.querySelectorAll(".content-tabs");tabs_post.onclick=e=>{const id=e.target.dataset.id;if(id){tabButton.forEach(btn=>{btn.classList.remove("active")});e.target.classList.add("active");contents.forEach(content=>{content.classList.remove("active")});document.getElementById('inputQa').value=0;if(id=='qa'){document.getElementById('inputQa').value=1}
const element=document.getElementById(id);element.classList.add("active")}}}

View file

@ -1,83 +1,113 @@
<fieldset>
<label for="post_title"><?= __('app.heading'); ?> <sup class="red">*</sup></label>
<input minlength="6" maxlength="250" id="title" type="text" required="" name="post_title">
<div class="help">6 - 250 <?= __('app.characters'); ?></div>
</fieldset>
<div class="mt5 tabs-post">
<div class="mb15">
<ul class="nav small">
<li class="tab-button active" data-id="post"><?= __('app.post'); ?></li>
<?= insert('/_block/form/select/topic', ['data' => $data['facets'], 'action' => 'add']); ?>
<?php if (UserData::getUserTl() >= config('trust-levels.tl_add_comm_qa')) : ?>
<li class="tab-button" data-id="qa"><?= __('app.qa'); ?></li>
<?php endif; ?>
<?php if (!empty($data['blog'])) : ?>
<?= insert('/_block/form/select/blog', [
'data' => $data,
'action' => 'add',
'title' => __('app.blogs'),
]); ?>
<?php endif; ?>
<?php if (UserData::getRegType(config('trust-levels.tl_add_url'))) : ?>
<fieldset>
<div class="left w-70">
<input id="link" placeholder="<?= __('app.url_parsing'); ?>" class="post_url" type="text" name="post_url" />
<?php if (UserData::getUserTl() >= config('trust-levels.tl_add_url')) : ?>
<li class="tab-button" data-id="url">URL</li>
<?php else : ?>
<li class="gray-600">URL</li>
<?php endif; ?>
</ul>
</div>
<div class="left w-30 pl5">
<input id="graburl" readonly="readonly" class="btn btn-outline-primary" name="submit_url" value="<?= __('app.to_extract'); ?>" />
</div>
</fieldset>
<?php endif; ?>
<div class="file-upload" id="file-drag">
<div class="flex">
<img id="file-image" src="/assets/images/1px.jpg" alt="" class="mr20 w94 h94 br-gray">
<div id="start">
<input id="file-upload" type="file" name="images" accept="image/*" />
<div class="text-sm gray-600 mt5">
<?= __('app.format_cover_post'); ?>.
<fieldset>
<label for="post_title"><?= __('app.heading'); ?> <sup class="red">*</sup></label>
<input minlength="6" maxlength="250" id="title" type="text" required="" name="post_title">
<div class="help">6 - 250 <?= __('app.characters'); ?></div>
</fieldset>
<?= insert('/_block/form/select/topic', ['data' => $data['facets'], 'action' => 'add']); ?>
<?php if (!empty($data['blog'])) : ?>
<?= insert('/_block/form/select/blog', [
'data' => $data,
'action' => 'add',
'title' => __('app.blogs'),
]); ?>
<?php endif; ?>
<div class="last-content content-tabs active" id="post">
<div class="file-upload" id="file-drag">
<div class="flex">
<img id="file-image" src="/assets/images/1px.jpg" alt="" class="mr20 w94 h94 br-gray">
<div id="start">
<input id="file-upload" type="file" name="images" accept="image/*" />
<div class="text-sm gray-600 mt5">
<?= __('app.format_cover_post'); ?>.
</div>
<i class="fa fa-download" aria-hidden="true"></i>
<div id="notimage" class="none"><?= __('app.select_image'); ?></div>
</div>
</div>
<div id="response" class="hidden">
<div id="messages"></div>
</div>
</div>
<i class="fa fa-download" aria-hidden="true"></i>
<div id="notimage" class="none"><?= __('app.select_image'); ?></div>
<?= insert('/_block/form/editor', [
'autosave' => 'addPostId',
'title' => __('app.post'),
'height' => '250px',
'type' => 'post-telo',
'id' => 0,
'cut' => true
]); ?>
<?php if (UserData::getRegType(UserData::USER_FIRST_LEVEL)) : ?>
<fieldset>
<input type="checkbox" name="post_draft"> <?= __('app.draft_post'); ?>?
</fieldset>
<?= insert('/_block/form/content-tl', ['data' => null]); ?>
<fieldset>
<input type="checkbox" name="closed"> <?= __('app.post_closed'); ?>?
</fieldset>
<?php endif; ?>
<fieldset>
<input type="checkbox" name="translation"> <?= __('app.post_translation'); ?>?
</fieldset>
<?php if (UserData::checkAdmin()) : ?>
<fieldset>
<input type="checkbox" name="top"> <?= __('app.pin'); ?>?
</fieldset>
<?php endif; ?>
</div>
</div>
<div id="response" class="hidden">
<div id="messages"></div>
</div>
</div>
<?= insert('/_block/form/editor', [
'autosave' => 'addPostId',
'title' => __('app.post'),
'height' => '250px',
'type' => 'post-telo',
'id' => 0,
'cut' => true
]); ?>
<div class="last-content content-tabs" id="qa">
<div class="mb5"><?= __('app.text'); ?> Q&A <sup class="red">*</sup></div>
<textarea name="content_qa"></textarea>
<div class="help"><?= __('app.necessarily'); ?></div>
</div>
<?php if (UserData::getRegType(UserData::USER_FIRST_LEVEL)) : ?>
<fieldset>
<input type="checkbox" name="post_draft"> <?= __('app.draft_post'); ?>?
</fieldset>
<div class="last-content content-tabs" id="url">
<?php if (UserData::getRegType(config('trust-levels.tl_add_url'))) : ?>
<fieldset>
<div class="left w-70">
<input id="link" placeholder="<?= __('app.url_parsing'); ?>" class="post_url" type="text" name="post_url" />
</div>
<div class="left w-30 pl5">
<input id="graburl" readonly="readonly" class="btn btn-outline-primary" name="submit_url" value="<?= __('app.to_extract'); ?>" />
</div>
</fieldset>
<?php endif; ?>
<?= insert('/_block/form/content-tl', ['data' => null]); ?>
<label><?= __('app.content'); ?> URL<sup class="red">*</sup></label>
<textarea class="url" name="content_url"></textarea>
<div class="help"><?= __('app.necessarily'); ?></div>
</div>
<fieldset>
<input type="checkbox" name="post_feature"> <?= __('app.format_Q&A'); ?>?
</fieldset>
<?= insert('/_block/form/select/related-posts'); ?>
<fieldset>
<input type="checkbox" name="closed"> <?= __('app.post_closed'); ?>?
</fieldset>
<input id="inputQa" type="hidden" value="0" name="post_feature">
<?php endif; ?>
<fieldset>
<input type="checkbox" name="translation"> <?= __('app.post_translation'); ?>?
</fieldset>
<?php if (UserData::checkAdmin()) : ?>
<fieldset>
<input type="checkbox" name="top"> <?= __('app.pin'); ?>?
</fieldset>
<?php endif; ?>
<?= insert('/_block/form/select/related-posts'); ?>
<p><?= Html::sumbit(__('app.create')); ?></p>
<p><?= Html::sumbit(__('app.create')); ?></p>
</div>

View file

@ -23,4 +23,4 @@
<fieldset>
<input type="checkbox" name="published"> <?= __('web.posted'); ?>
</fieldset>
<?php endif; ?>
<?php endif; ?>

View file

@ -2,9 +2,11 @@
<input name="email" type="email" placeholder="<?= __('app.email'); ?>" required="">
</fieldset>
<fieldset class="max-w300" >
<fieldset class="max-w300">
<input id="password" name="password" type="password" placeholder="<?= __('app.password'); ?>" required="">
<span class="showPassword"><svg class="icons"><use xlink:href="/assets/svg/icons.svg#eye"></use></svg></span>
<span class="showPassword"><svg class="icons">
<use xlink:href="/assets/svg/icons.svg#eye"></use>
</svg></span>
</fieldset>
<fieldset class="rememberme ">

View file

@ -13,7 +13,9 @@
<fieldset>
<label for="password"><?= __('app.password'); ?></label>
<input id="password" name="password" type="password" required>
<span class="showPassword"><svg class="icons"><use xlink:href="/assets/svg/icons.svg#eye"></use></svg></span>
<span class="showPassword"><svg class="icons">
<use xlink:href="/assets/svg/icons.svg#eye"></use>
</svg></span>
<div class="help">>= 8 <?= __('app.characters'); ?>...</div>
</fieldset>

View file

@ -5,7 +5,6 @@
<fieldset>
<label><?= __('app.related_posts'); ?></label>
<input name="post_select" id="post_id">
<div class="help"><?= __('app.necessarily'); ?></div>
</fieldset>
<script nonce="<?= $_SERVER['nonce']; ?>">

View file

@ -1,7 +1,9 @@
<fieldset>
<label for="email"><?= __('app.old'); ?></label>
<input id="password" name="password" type="password" required="">
<span class="showPassword"><svg class="icons"><use xlink:href="/assets/svg/icons.svg#eye"></use></svg></span>
<span class="showPassword"><svg class="icons">
<use xlink:href="/assets/svg/icons.svg#eye"></use>
</svg></span>
</fieldset>
<fieldset>

View file

@ -1,6 +1,6 @@
<?= insert('/_block/add-js-css'); ?>
<main>
<h2 class="m0"><?= __('app.add_post'); ?></h2>
<h2 class="title"><?= __('app.add_post'); ?></h2>
<form class="max-w780" action="<?= url('content.create', ['type' => 'post']); ?>" method="post" enctype="multipart/form-data">
<?= csrf_field() ?>

View file

@ -143,7 +143,6 @@ img {
.bg-red-200 { background-color: var(--red-200); }
.bg-beige { background-color: #fff4e8; }
.active { color: var(--red); }
.black-hover:hover { color: var(--black); }
/*

View file

@ -118,5 +118,5 @@ ul.nav > li a:hover { color: var(--red); }
ul.nav > li.active a:hover { color: #432f2f; }
/* If it's tabs */
ul.content-tabs { display: none; }
ul.content-tabs.active { display: block; }
.content-tabs { display: none; }
.content-tabs.active { display: block; }

View file

@ -137,9 +137,9 @@ document.querySelectorAll("#graburl")
));
}
return response.json();
}).then(function (data) {
document.querySelector('input[name=post_title]').value = data.title;
// document.querySelector('.EasyMDEContainer textarea').insertAdjacentHTML('afterBegin', data.description);
}).then(function (data) { //https://habr.com/ru/post/691088/
document.querySelector('input[name=post_title]').value = data.title; console.log(data);
document.querySelector('textarea.url').insertAdjacentHTML('afterBegin', data.description);
}).catch(function (error) {
// error
})
@ -172,4 +172,33 @@ document.querySelectorAll(".editcomm")
}));
}
);
}));
}));
// Add post tab
const tabs_post = document.querySelector(".tabs-post");
if (tabs_post) {
const tabButton = document.querySelectorAll(".tab-button");
const contents = document.querySelectorAll(".content-tabs");
tabs_post.onclick = e => {
const id = e.target.dataset.id;
if (id) {
tabButton.forEach(btn => {
btn.classList.remove("active");
});
e.target.classList.add("active");
contents.forEach(content => {
content.classList.remove("active");
});
document.getElementById('inputQa').value = 0;
if (id == 'qa') {
document.getElementById('inputQa').value = 1;
}
const element = document.getElementById(id);
element.classList.add("active");
}
}
}