How would I create a post mechanism on my website like stackoverflow with bold text and italic text and other customization like that? Right now my php database has this table for posts :
CREATE TABLE `community_posts` (
community_contents_id int AUTO_INCREMENT PRIMARY KEY,
user_id int,
community_id int,
unique_id int,
date_time DATETIME,
numberoflikes int,
numberofdislikes int,
title varchar(50),
post varchar(3000),
pic_or_vid varchar(1000),
filetype varchar(40),
FOREIGN KEY (community_id)
REFERENCES communities(community_id)
ON DELETE cascade
)
I have stuff for files and text, but I don’t know how I would store the bold/normal text.
And how would I take in those inputs? For the moment I have this code to collect the information from the frontend and then put it in the database :
html code :
<div class="post-community-title">
<h1 class="post-form-title">Post in this community:</h1>
<div class="white-form-div">
<div class="post-form">
<input class="post-title" id="title" type="text" name="post-title" placeholder="Title">
<div class="post-content-display">
<textarea class="post-content" id="post" type="text" name="post-content" placeholder="Create a post"></textarea>
<label class="label" for="file" class="file_upload_btn"><i class="fa fa-paperclip" aria-hidden="true"></i></label>
</div>
<input class="post-file" id="file" type="file" onclick="check()" name="post-file">
<input class="post-button" type="button" name="Post" onclick="postIncoming()" value="Post">
</div>
</div>
</div>
my javascript code :
function postIncoming() {
title = document.getElementById('title').value;
post = document.getElementById('post').value;
filePath = document.getElementById("file").value;
console.log(title);
console.log(post);
console.log(filePath);
community_id = document.getElementById('community_id').innerHTML;
if (title == "") {
alert("You must add a title to your post!");
}
var allowedExtensions =
/(.jpg|.jpeg|.png|.mp4|.mov|.JPG|.JPEG|.PNG|.MP4|.MOV)$/i;
if (post.length > 4000) {
alert("Sorry, this is too long. Your post has to be less than 4000 characters long!");
} else if (title.length > 50) {
alert("Sorry, this is too long. Your title has to be less than 50 characters long!");
} else {
if (title != "" && post != "" && filePath == "") {
community_id = document.getElementById('community_id').innerHTML;
var fd = new FormData();
fd.append("sending", true);
fd.append("title", title);
fd.append("post", post);
fd.append("community_id", community_id);
fd.append("textPost", true);
var xhr = new XMLHttpRequest();
community_id = document.getElementById('community_id').innerHTML;
var fullurl = '../backend/communitybackend.php';
xhr.open('POST', fullurl, true);
xhr.onload = function() {
if (this.status == 200) {
console.log(this.responseText);
findposts();
document.getElementById('title').value = "";
document.getElementById('post').value = "";
document.getElementById('file').value = "";
if (this.responseText == "") {
alert("Sorry, you must wait 15 mins before posting again!");
} else if (this.responseText == "Sorry, you must wait 15 mins before posting again!") {
alert(this.responseText);
} else if (this.responseText == "You must join the community if want to post in it!") {
alert(this.responseText);
}
};
};
xhr.send(fd);
} else if (title != "" && post != "" && filePath != "") {
community_id = document.getElementById('community_id').innerHTML;
x = document.getElementById('file');
file = x.files[0];
fsize = file.size;
filePath = document.getElementById("file").value;
var filesize = Math.round((fsize/1000));
if (filesize > 20000) {
alert("This file is too big, it must be 20MB or less to be posted");
} else if (!allowedExtensions.exec(filePath)) {
alert("This file is of the wrong exetension, please send a .jpg, .jpeg, .png, .mp4, .mov");
} else {
var fd = new FormData();
fd.append("sending", true);
fd.append("title", title);
fd.append("post", post);
fd.append("file", file);
fd.append("community_id", community_id);
fd.append("textFilePost", true);
var xhr = new XMLHttpRequest();
community_id = document.getElementById('community_id').innerHTML;
var fullurl = '../backend/communitybackend.php';
xhr.open('POST', fullurl, true);
xhr.onload = function() {
if (this.status == 200) {
console.log(this.responseText);
findposts();
document.getElementById('title').value = "";
document.getElementById('post').value = "";
document.getElementById('file').value = "";
if (this.responseText == "") {
alert("Sorry, you must wait 15 mins before posting again!");
} else if (this.responseText == "Sorry, you must wait 15 mins before posting again!") {
alert(this.responseText);
} else if (this.responseText == "You must join the community if want to post in it!") {
alert(this.responseText);
}
};
};
xhr.send(fd);
}
} else if (title != "" && post == "" && filePath != "") {
community_id = document.getElementById('community_id').innerHTML;
x = document.getElementById('file');
file = x.files[0];
fsize = file.size;
filePath = document.getElementById("file").value;
var filesize = Math.round((fsize/1000));
if (filesize > 20000) {
alert("This file is too big, it must be 20MB or less to be posted");
} else if (!allowedExtensions.exec(filePath)) {
alert("This file is of the wrong exetension, please send a .jpg, .jpeg, .png, .mp4, .mov");
} else {
var fd = new FormData();
fd.append("sending", true);
fd.append("title", title);
fd.append("post", post);
fd.append("file", file);
fd.append("community_id", community_id);
fd.append("filePost", true);
var xhr = new XMLHttpRequest();
community_id = document.getElementById('community_id').innerHTML;
var fullurl = '../backend/communitybackend.php';
xhr.open('POST', fullurl, true);
xhr.onload = function() {
if (this.status == 200) {
console.log(this.responseText);
findposts();
document.getElementById('title').value = "";
document.getElementById('post').value = "";
document.getElementById('file').value = "";
if (this.responseText == "") {
alert("Sorry, you must wait 15 mins before posting again!");
} else if (this.responseText == "Sorry, you must wait 15 mins before posting again!") {
alert(this.responseText);
} else if (this.responseText == "You must join the community if want to post in it!") {
alert(this.responseText);
}
};
};
xhr.send(fd);
}
}
}
}
Then I just have some basic php sql query to insert everything. I don’t know how to do this, and I also don’t know how to do the post images like stackoverflow does it. Do they create another row with a list of all the image descriptions? Thanks for answering! I know this is a long question!
Advertisement
Answer
The markup language used to set the formatting here on SO is called Markdown.
There is a variety of different JS libraries that can convert markdown text into HTML, which then can be inserted into your desired elements.
Here is an example using markedjs.
let markdownText = "# This is a markdown Textn## It isn- easy to formatn- even with JSnn__This example uses [markedjs](https://github.com/markedjs/marked)__"
let htmlText = marked(markdownText); // Here goes the lib to work
document.getElementById('Markdown').innerHTML = htmlText;
<head>
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
</head>
<body>
<div id="Markdown">
</div>
</body>