Feature update
-- added feature to update meta data of articles
This commit is contained in:
parent
b77354ec47
commit
976e3f0c00
@ -2187,7 +2187,6 @@ smSelect.innerHTML = `
|
|||||||
--accent-color: #4d2588;
|
--accent-color: #4d2588;
|
||||||
--text-color: 17, 17, 17;
|
--text-color: 17, 17, 17;
|
||||||
--background-color: 255, 255, 255;
|
--background-color: 255, 255, 255;
|
||||||
--max-height: auto;
|
|
||||||
--min-width: 100%;
|
--min-width: 100%;
|
||||||
}
|
}
|
||||||
:host([disabled]) .select{
|
:host([disabled]) .select{
|
||||||
@ -2261,7 +2260,7 @@ smSelect.innerHTML = `
|
|||||||
-ms-flex-direction: column;
|
-ms-flex-direction: column;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
min-width: var(--min-width);
|
min-width: var(--min-width);
|
||||||
max-height: var(--max-height);
|
max-height: var(--max-height, auto);
|
||||||
background: rgba(var(--background-color), 1);
|
background: rgba(var(--background-color), 1);
|
||||||
border: solid 1px rgba(var(--text-color), 0.2);
|
border: solid 1px rgba(var(--text-color), 0.2);
|
||||||
border-radius: var(--border-radius, 0.5rem);
|
border-radius: var(--border-radius, 0.5rem);
|
||||||
@ -3640,11 +3639,11 @@ customElements.define('tags-input', class extends HTMLElement {
|
|||||||
return ['placeholder', 'limit']
|
return ['placeholder', 'limit']
|
||||||
}
|
}
|
||||||
get value() {
|
get value() {
|
||||||
return [...this.tags].join()
|
return [...this.tags].filter(v => v !== undefined)
|
||||||
}
|
}
|
||||||
set value(arr) {
|
set value(arr) {
|
||||||
this.reset();
|
this.reset();
|
||||||
[...new Set(arr)].forEach(tag => this.addTag(tag))
|
[...new Set(arr.filter(v => v !== undefined))].forEach(tag => this.addTag(tag))
|
||||||
}
|
}
|
||||||
get isValid() {
|
get isValid() {
|
||||||
return this.tags.size
|
return this.tags.size
|
||||||
|
|||||||
@ -449,6 +449,10 @@ strip-option {
|
|||||||
font-size: 0.9rem;
|
font-size: 0.9rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sm-select {
|
||||||
|
--max-height: 12rem;
|
||||||
|
}
|
||||||
|
|
||||||
strip-select {
|
strip-select {
|
||||||
--gap: 0;
|
--gap: 0;
|
||||||
}
|
}
|
||||||
|
|||||||
2
css/main.min.css
vendored
2
css/main.min.css
vendored
File diff suppressed because one or more lines are too long
@ -437,6 +437,9 @@ sm-option,
|
|||||||
strip-option {
|
strip-option {
|
||||||
font-size: 0.9rem;
|
font-size: 0.9rem;
|
||||||
}
|
}
|
||||||
|
sm-select {
|
||||||
|
--max-height: 12rem;
|
||||||
|
}
|
||||||
strip-select {
|
strip-select {
|
||||||
--gap: 0;
|
--gap: 0;
|
||||||
}
|
}
|
||||||
|
|||||||
60
index.html
60
index.html
@ -319,14 +319,14 @@
|
|||||||
</svg>
|
</svg>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<h4>
|
<h4 id="edit_popup__title">
|
||||||
Edit
|
Edit
|
||||||
</h4>
|
</h4>
|
||||||
</header>
|
</header>
|
||||||
<section class="grid gap-1-5">
|
<section class="grid gap-1-5">
|
||||||
<div class="grid gap-0-5">
|
<div class="grid gap-0-5">
|
||||||
<h5>Title</h5>
|
<h5>Title</h5>
|
||||||
<sm-input id="edit_title"></sm-input>
|
<sm-input id="edit_title" required></sm-input>
|
||||||
</div>
|
</div>
|
||||||
<div class="grid gap-0-5">
|
<div class="grid gap-0-5">
|
||||||
<h5>Summary</h5>
|
<h5>Summary</h5>
|
||||||
@ -352,7 +352,7 @@
|
|||||||
<h5>Publishing date</h5>
|
<h5>Publishing date</h5>
|
||||||
<input type="datetime-local" id="edit_published">
|
<input type="datetime-local" id="edit_published">
|
||||||
</label>
|
</label>
|
||||||
<sm-button id="set_article_meta" variant="primary">Save</sm-button>
|
<sm-button id="set_article_meta" onclick="defineArticle()" variant="primary">Save</sm-button>
|
||||||
</section>
|
</section>
|
||||||
</sm-popup>
|
</sm-popup>
|
||||||
<sm-popup id="user_popup">
|
<sm-popup id="user_popup">
|
||||||
@ -856,12 +856,7 @@
|
|||||||
},
|
},
|
||||||
requestCard(details) {
|
requestCard(details) {
|
||||||
const { message: { articleID, category, title }, time, vectorClock } = details
|
const { message: { articleID, category, title }, time, vectorClock } = details
|
||||||
if (floGlobals.appObjects.publishedVc[vectorClock]) {
|
if (!floGlobals.appObjects.publishedVc.hasOwnProperty(vectorClock)) {
|
||||||
// const requestTime = parseInt(vectorClock.split('_')[0])
|
|
||||||
// if ((Date.now() - requestTime) / 1000 > 604800) {
|
|
||||||
// delete floGlobals.appObjects.publishedVc[vectorClock]
|
|
||||||
// }
|
|
||||||
} else {
|
|
||||||
const clone = getRef('request_template').content.cloneNode(true).firstElementChild
|
const clone = getRef('request_template').content.cloneNode(true).firstElementChild
|
||||||
clone.dataset.vc = vectorClock
|
clone.dataset.vc = vectorClock
|
||||||
clone.querySelector('.request-card__title').textContent = title
|
clone.querySelector('.request-card__title').textContent = title
|
||||||
@ -1075,7 +1070,7 @@
|
|||||||
if (searchResult.length > 5) {
|
if (searchResult.length > 5) {
|
||||||
getRef('search_suggestions').append(createElement('a', {
|
getRef('search_suggestions').append(createElement('a', {
|
||||||
textContent: 'See all results',
|
textContent: 'See all results',
|
||||||
attributes: { href: `#/explore?type=search&query=${searchKey}}` },
|
attributes: { href: `#/explore?type=search&query=${searchKey}` },
|
||||||
className: 'search-suggestion interact'
|
className: 'search-suggestion interact'
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
@ -1205,7 +1200,7 @@
|
|||||||
const isPublished = floGlobals.appObjects['articles'].hasOwnProperty(articleID)
|
const isPublished = floGlobals.appObjects['articles'].hasOwnProperty(articleID)
|
||||||
getConfirmation(`${isPublished ? 'Update' : 'Publish'} article?`).then(res => {
|
getConfirmation(`${isPublished ? 'Update' : 'Publish'} article?`).then(res => {
|
||||||
if (res) {
|
if (res) {
|
||||||
const { title, category, summary, published, tags } = getArticleMeta()
|
const { title, category, summary, published, tags } = getArticleMetaData()
|
||||||
floGlobals.appObjects['publishedVc'][vectorClock] = true
|
floGlobals.appObjects['publishedVc'][vectorClock] = true
|
||||||
floGlobals.appObjects.articlesContent[articleID] = content
|
floGlobals.appObjects.articlesContent[articleID] = content
|
||||||
if (isPublished) {
|
if (isPublished) {
|
||||||
@ -1231,7 +1226,8 @@
|
|||||||
floCloudAPI.updateObjectData('articleVotes'),
|
floCloudAPI.updateObjectData('articleVotes'),
|
||||||
]).then(() => {
|
]).then(() => {
|
||||||
notify(`${isPublished ? 'Updated' : 'Published'} article`, 'success')
|
notify(`${isPublished ? 'Updated' : 'Published'} article`, 'success')
|
||||||
button.closest('.request-card').remove()
|
document.querySelector(`.request-card[data-vc="${vc}"]`).remove()
|
||||||
|
hidePopup()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -1243,7 +1239,17 @@
|
|||||||
const vc = button.closest('.request-card').dataset.vc;
|
const vc = button.closest('.request-card').dataset.vc;
|
||||||
const { message: { articleID, title } } = floGlobals.generalData[`publishing_requests|${floGlobals.adminID}|${floGlobals.application}`][vc]
|
const { message: { articleID, title } } = floGlobals.generalData[`publishing_requests|${floGlobals.adminID}|${floGlobals.application}`][vc]
|
||||||
const isPublished = floGlobals.appObjects['articles'].hasOwnProperty(articleID)
|
const isPublished = floGlobals.appObjects['articles'].hasOwnProperty(articleID)
|
||||||
setArticleMeta({ title })
|
if (isPublished)
|
||||||
|
setArticleMetaData(floGlobals.appObjects.articles[articleID])
|
||||||
|
else
|
||||||
|
setArticleMetaData({ title })
|
||||||
|
floGlobals.subAdminData = {
|
||||||
|
actionType: 'request',
|
||||||
|
articleID,
|
||||||
|
vc
|
||||||
|
}
|
||||||
|
getRef('set_article_meta').textContent = isPublished ? 'UPDATE' : 'PUBLISH'
|
||||||
|
getRef('edit_popup__title').textContent = isPublished ? 'Update' : 'Publish'
|
||||||
showPopup('edit_popup')
|
showPopup('edit_popup')
|
||||||
} else if (e.target.closest('.preview-button')) {
|
} else if (e.target.closest('.preview-button')) {
|
||||||
const button = e.target.closest('.preview-button');
|
const button = e.target.closest('.preview-button');
|
||||||
@ -1258,7 +1264,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function setArticleMeta(details) {
|
function setArticleMetaData(details) {
|
||||||
const { category, title, tags, summary, published } = details
|
const { category, title, tags, summary, published } = details
|
||||||
getRef('edit_title').value = title;
|
getRef('edit_title').value = title;
|
||||||
getRef('edit_summary').value = summary || '';
|
getRef('edit_summary').value = summary || '';
|
||||||
@ -1267,12 +1273,12 @@
|
|||||||
const now = Date.now()
|
const now = Date.now()
|
||||||
getRef('edit_published').value = new Date(published || now).toISOString().substr(0, new Date(published || now).toISOString().indexOf("."))
|
getRef('edit_published').value = new Date(published || now).toISOString().substr(0, new Date(published || now).toISOString().indexOf("."))
|
||||||
}
|
}
|
||||||
function getArticleMeta() {
|
function getArticleMetaData() {
|
||||||
return {
|
return {
|
||||||
title: getRef('edit_title').value.trim(),
|
title: getRef('edit_title').value.trim(),
|
||||||
category: getRef('edit_category').value,
|
category: getRef('edit_category').value,
|
||||||
summary: getRef('edit_summary').value.trim(),
|
summary: getRef('edit_summary').value.trim(),
|
||||||
published: getRef('edit_published').value,
|
published: new Date(getRef('edit_published').value).getTime(),
|
||||||
tags: getRef('edit_tags').value,
|
tags: getRef('edit_tags').value,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1280,15 +1286,21 @@
|
|||||||
if (e.target.closest('.edit-article')) {
|
if (e.target.closest('.edit-article')) {
|
||||||
const button = e.target.closest('.edit-article');
|
const button = e.target.closest('.edit-article');
|
||||||
const articleID = button.dataset.articleId;
|
const articleID = button.dataset.articleId;
|
||||||
setArticleMeta(floGlobals.appObjects.articles[articleID])
|
setArticleMetaData(floGlobals.appObjects.articles[articleID])
|
||||||
|
floGlobals.subAdminData = {
|
||||||
|
actionType: 'analytics',
|
||||||
|
articleID,
|
||||||
|
}
|
||||||
|
getRef('set_article_meta').textContent = "UPDATE"
|
||||||
|
getRef('edit_popup__title').textContent = "Update"
|
||||||
showPopup('edit_popup')
|
showPopup('edit_popup')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateArticle() {
|
function updateArticleMetaData(articleID) {
|
||||||
getConfirmation('Update article meta data?').then(res => {
|
getConfirmation('Update article meta data?').then(res => {
|
||||||
if (res) {
|
if (res) {
|
||||||
const { title, category, summary, published, tags } = getArticleMeta()
|
const { title, category, summary, published, tags } = getArticleMetaData()
|
||||||
floGlobals.appObjects['articles'][articleID].category = category
|
floGlobals.appObjects['articles'][articleID].category = category
|
||||||
floGlobals.appObjects['articles'][articleID].title = title
|
floGlobals.appObjects['articles'][articleID].title = title
|
||||||
floGlobals.appObjects['articles'][articleID].tags = tags
|
floGlobals.appObjects['articles'][articleID].tags = tags
|
||||||
@ -1298,11 +1310,20 @@
|
|||||||
floCloudAPI.updateObjectData('publishedVc'),
|
floCloudAPI.updateObjectData('publishedVc'),
|
||||||
]).then(() => {
|
]).then(() => {
|
||||||
notify(`Updated article meta data`, 'success')
|
notify(`Updated article meta data`, 'success')
|
||||||
|
hidePopup()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function defineArticle() {
|
||||||
|
if (floGlobals.subAdminData.actionType === 'analytics') {
|
||||||
|
updateArticleMetaData(floGlobals.subAdminData.articleID)
|
||||||
|
} else {
|
||||||
|
publishArticle(floGlobals.subAdminData.vc)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async function calculateVotes() {
|
async function calculateVotes() {
|
||||||
await floCloudAPI.requestObjectData('articleVotes')
|
await floCloudAPI.requestObjectData('articleVotes')
|
||||||
const articlesVotesProm = []
|
const articlesVotesProm = []
|
||||||
@ -1396,6 +1417,7 @@
|
|||||||
getRef('user_flo_id').value = myFloID
|
getRef('user_flo_id').value = myFloID
|
||||||
floGlobals.isSubAdmin = floGlobals.subAdmins.includes(myFloID)
|
floGlobals.isSubAdmin = floGlobals.subAdmins.includes(myFloID)
|
||||||
if (floGlobals.isSubAdmin) {
|
if (floGlobals.isSubAdmin) {
|
||||||
|
floGlobals.subAdminData = {}
|
||||||
getRef('publishing_requests').addEventListener('click', handleRequestClick);
|
getRef('publishing_requests').addEventListener('click', handleRequestClick);
|
||||||
getRef('article_analytics').addEventListener('click', handleAnalyticsClick);
|
getRef('article_analytics').addEventListener('click', handleAnalyticsClick);
|
||||||
document.querySelectorAll('.admin-option').forEach(elem => elem.classList.remove('hide-completely'));
|
document.querySelectorAll('.admin-option').forEach(elem => elem.classList.remove('hide-completely'));
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user