1599013260
The traditional comment box at the end of a blog post is not a sufficient way to facilitate reader and writer communication. It falls short in a number of ways:
The barrier to leave a thoughtful comment is very high. This greatly reduces the number of reactions per reader. So only the most popular stories get meaningful feedback.
Readers are forced to comment on the story as a whole rather than individual parts of the story. This generalizes feedback into blurbs like “nice story” or “great insights”.
Only readers that “finish” reading the story are able to react. The large number of readers that bounce midway through, don’t have an opportunity to react.
At Hacker Noon, we’re working to make content more interactive and interactions more meaningful. We’re starting by introducing inline emoji reactions. Readers can now respond to individual sections of content with an emoji reaction. We built this functionality in collaboration with Mozilla’s Fix the Internet program.
By default, we aren’t showing inline reactions in order to create a less distracting reading experience. You’ll notice light grey bars next to each section. If you hover over the bar, you’ll see emojis along with reaction counts from other readers. If a section is popular with a high number of reactions, we’ll add more bars and turn them yellow, green, or red as the activity heats up.
To test it out, try hovering over the margin here >>>
What do the emojis mean? Approximately:
Why inline emoji reactions?
Readers now have a low-friction tool to give writers specific feedback on their words. This creates a feedback loop that writers can learn from and improve their content over time.
The current version of our emoji reactions is a work in progress. We’re going to continue iterating to make the functionality more usable and useful.
#design #emojis #pixelated #reactions #hackernoon-top-story #retro #ui #ux
1599013260
The traditional comment box at the end of a blog post is not a sufficient way to facilitate reader and writer communication. It falls short in a number of ways:
The barrier to leave a thoughtful comment is very high. This greatly reduces the number of reactions per reader. So only the most popular stories get meaningful feedback.
Readers are forced to comment on the story as a whole rather than individual parts of the story. This generalizes feedback into blurbs like “nice story” or “great insights”.
Only readers that “finish” reading the story are able to react. The large number of readers that bounce midway through, don’t have an opportunity to react.
At Hacker Noon, we’re working to make content more interactive and interactions more meaningful. We’re starting by introducing inline emoji reactions. Readers can now respond to individual sections of content with an emoji reaction. We built this functionality in collaboration with Mozilla’s Fix the Internet program.
By default, we aren’t showing inline reactions in order to create a less distracting reading experience. You’ll notice light grey bars next to each section. If you hover over the bar, you’ll see emojis along with reaction counts from other readers. If a section is popular with a high number of reactions, we’ll add more bars and turn them yellow, green, or red as the activity heats up.
To test it out, try hovering over the margin here >>>
What do the emojis mean? Approximately:
Why inline emoji reactions?
Readers now have a low-friction tool to give writers specific feedback on their words. This creates a feedback loop that writers can learn from and improve their content over time.
The current version of our emoji reactions is a work in progress. We’re going to continue iterating to make the functionality more usable and useful.
#design #emojis #pixelated #reactions #hackernoon-top-story #retro #ui #ux
1599006273
The traditional comment box at the end of a blog post is not a sufficient way to facilitate reader and writer communication. It falls short in a number of ways:
The barrier to leave a thoughtful comment is very high. This greatly reduces the number of reactions per reader. So only the most popular stories get meaningful feedback.
Readers are forced to comment on the story as a whole rather than individual parts of the story. This generalizes feedback into blurbs like “nice story” or “great insights”.
Only readers that “finish” reading the story are able to react. The large number of readers that bounce midway through, don’t have an opportunity to react.
At Hacker Noon, we’re working to make content more interactive and interactions more meaningful. We’re starting by introducing inline emoji reactions. Readers can now respond to individual sections of content with an emoji reaction. We built this functionality in collaboration with Mozilla’s Fix the Internet program.
By default, we aren’t showing inline reactions in order to create a less distracting reading experience. You’ll notice light grey bars next to each section. If you hover over the bar, you’ll see emojis along with reaction counts from other readers. If a section is popular with a high number of reactions, we’ll add more bars and turn them yellow, green, or red as the activity heats up.
To test it out, try hovering over the margin here >>>
What do the emojis mean? Approximately:
Why inline emoji reactions?
Readers now have a low-friction tool to give writers specific feedback on their words. This creates a feedback loop that writers can learn from and improve their content over time.
The current version of our emoji reactions is a work in progress. We’re going to continue iterating to make the functionality more usable and useful.
#design #emojis #pixelated #reactions #hackernoon-top-story #retro #ui #ux
1663559281
Learn how to create a to-do list app with local storage using HTML, CSS and JavaScript. Build a Todo list application with HTML, CSS and JavaScript. Learn the basics to JavaScript along with some more advanced features such as LocalStorage for saving data to the browser.
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>To Do List With Local Storage</title>
<!-- Font Awesome Icons -->
<link
rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.2.0/css/all.min.css"
/>
<!-- Google Fonts -->
<link
href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;500&display=swap"
rel="stylesheet"
/>
<!-- Stylesheet -->
<link rel="stylesheet" href="style.css" />
</head>
<body>
<div class="container">
<div id="new-task">
<input type="text" placeholder="Enter The Task Here..." />
<button id="push">Add</button>
</div>
<div id="tasks"></div>
</div>
<!-- Script -->
<script src="script.js"></script>
</body>
</html>
* {
padding: 0;
margin: 0;
box-sizing: border-box;
}
body {
background-color: #0b87ff;
}
.container {
width: 90%;
max-width: 34em;
position: absolute;
transform: translate(-50%, -50%);
top: 50%;
left: 50%;
}
#new-task {
position: relative;
background-color: #ffffff;
padding: 1.8em 1.25em;
border-radius: 0.3em;
box-shadow: 0 1.25em 1.8em rgba(1, 24, 48, 0.15);
display: grid;
grid-template-columns: 9fr 3fr;
gap: 1em;
}
#new-task input {
font-family: "Poppins", sans-serif;
font-size: 1em;
border: none;
border-bottom: 2px solid #d1d3d4;
padding: 0.8em 0.5em;
color: #111111;
font-weight: 500;
}
#new-task input:focus {
outline: none;
border-color: #0b87ff;
}
#new-task button {
font-family: "Poppins", sans-serif;
font-weight: 500;
font-size: 1em;
background-color: #0b87ff;
color: #ffffff;
outline: none;
border: none;
border-radius: 0.3em;
cursor: pointer;
}
#tasks {
background-color: #ffffff;
position: relative;
padding: 1.8em 1.25em;
margin-top: 3.8em;
width: 100%;
box-shadow: 0 1.25em 1.8em rgba(1, 24, 48, 0.15);
border-radius: 0.6em;
}
.task {
background-color: #ffffff;
padding: 0.3em 0.6em;
margin-top: 0.6em;
display: flex;
align-items: center;
border-bottom: 2px solid #d1d3d4;
cursor: pointer;
}
.task span {
font-family: "Poppins", sans-serif;
font-size: 0.9em;
font-weight: 400;
}
.task button {
color: #ffffff;
padding: 0.8em 0;
width: 2.8em;
border-radius: 0.3em;
border: none;
outline: none;
cursor: pointer;
}
.delete {
background-color: #fb3b3b;
}
.edit {
background-color: #0b87ff;
margin-left: auto;
margin-right: 3em;
}
.completed {
text-decoration: line-through;
}
//Initial References
const newTaskInput = document.querySelector("#new-task input");
const tasksDiv = document.querySelector("#tasks");
let deleteTasks, editTasks, tasks;
let updateNote = "";
let count;
//Function on window load
window.onload = () => {
updateNote = "";
count = Object.keys(localStorage).length;
displayTasks();
};
//Function to Display The Tasks
const displayTasks = () => {
if (Object.keys(localStorage).length > 0) {
tasksDiv.style.display = "inline-block";
} else {
tasksDiv.style.display = "none";
}
//Clear the tasks
tasksDiv.innerHTML = "";
//Fetch All The Keys in local storage
let tasks = Object.keys(localStorage);
tasks = tasks.sort();
for (let key of tasks) {
let classValue = "";
//Get all values
let value = localStorage.getItem(key);
let taskInnerDiv = document.createElement("div");
taskInnerDiv.classList.add("task");
taskInnerDiv.setAttribute("id", key);
taskInnerDiv.innerHTML = `<span id="taskname">${key.split("_")[1]}</span>`;
//localstorage would store boolean as string so we parse it to boolean back
let editButton = document.createElement("button");
editButton.classList.add("edit");
editButton.innerHTML = `<i class="fa-solid fa-pen-to-square"></i>`;
if (!JSON.parse(value)) {
editButton.style.visibility = "visible";
} else {
editButton.style.visibility = "hidden";
taskInnerDiv.classList.add("completed");
}
taskInnerDiv.appendChild(editButton);
taskInnerDiv.innerHTML += `<button class="delete"><i class="fa-solid fa-trash"></i></button>`;
tasksDiv.appendChild(taskInnerDiv);
}
//tasks completed
tasks = document.querySelectorAll(".task");
tasks.forEach((element, index) => {
element.onclick = () => {
//local storage update
if (element.classList.contains("completed")) {
updateStorage(element.id.split("_")[0], element.innerText, false);
} else {
updateStorage(element.id.split("_")[0], element.innerText, true);
}
};
});
//Edit Tasks
editTasks = document.getElementsByClassName("edit");
Array.from(editTasks).forEach((element, index) => {
element.addEventListener("click", (e) => {
//Stop propogation to outer elements (if removed when we click delete eventually rhw click will move to parent)
e.stopPropagation();
//disable other edit buttons when one task is being edited
disableButtons(true);
//update input value and remove div
let parent = element.parentElement;
newTaskInput.value = parent.querySelector("#taskname").innerText;
//set updateNote to the task that is being edited
updateNote = parent.id;
//remove task
parent.remove();
});
});
//Delete Tasks
deleteTasks = document.getElementsByClassName("delete");
Array.from(deleteTasks).forEach((element, index) => {
element.addEventListener("click", (e) => {
e.stopPropagation();
//Delete from local storage and remove div
let parent = element.parentElement;
removeTask(parent.id);
parent.remove();
count -= 1;
});
});
};
//Disable Edit Button
const disableButtons = (bool) => {
let editButtons = document.getElementsByClassName("edit");
Array.from(editButtons).forEach((element) => {
element.disabled = bool;
});
};
//Remove Task from local storage
const removeTask = (taskValue) => {
localStorage.removeItem(taskValue);
displayTasks();
};
//Add tasks to local storage
const updateStorage = (index, taskValue, completed) => {
localStorage.setItem(`${index}_${taskValue}`, completed);
displayTasks();
};
//Function To Add New Task
document.querySelector("#push").addEventListener("click", () => {
//Enable the edit button
disableButtons(false);
if (newTaskInput.value.length == 0) {
alert("Please Enter A Task");
} else {
//Store locally and display from local storage
if (updateNote == "") {
//new task
updateStorage(count, newTaskInput.value, false);
} else {
//update task
let existingCount = updateNote.split("_")[0];
removeTask(updateNote);
updateStorage(existingCount, newTaskInput.value, false);
updateNote = "";
}
count += 1;
newTaskInput.value = "";
}
});
#html #css #javascript
1606290330
App Store Optimization is all about improving the visibility of a particular Android /iOS Mobile App on the App Store. Mobile App to optimize? Then go for Best SEO Company in New Zealand
How does ASO Really Work?
ASO is the process of improving the visibility of a mobile app in an app store. Just like search engine optimization (SEO) is for websites, App Store Optimization (ASO) is for mobile apps. Specifically, app store optimization includes the process of ranking highly in an app store’s search results and top charts rankings. Lia Infraservices the Top SEO Company in New Zealand and ASO marketers agrees that ranking higher in search results and top charts rankings will drive more downloads for an app.
ASO Focus on 2 Areas:
A. Search Optimization
B. Behavioral Approach
/The more often the app appears in search results = the more installs /
Note: The app name is the strongest key phrase.
5 point method to Choose Keywords:
1.Create a list of general keywords based on the app description.
2.Find the Top 5 apps that target the already selected keywords.
3.Find keywords that work best for each of the 5 apps.
4.Now you should have created quite a large list of keywords. Get rid of those which don’t fit your app.
5.Create 100 characters, a comma separated string that contains the best keywords you chose.
a.Application name
b.Rating
c.Screenshots / video preview
d.App description
Is your Mobile App Optimized?
When it comes to app downloads and revenue, approach the SEO Company in New Zealand, your app will do much better almost immediately after optimization. If you are interested in learning what the other factors that influence building an organic increase of app popularity are, you should get your mobile app developed by the expert SEO agency in New Zealand. Build your Android & iOS app at Lia Infraservices at cost and time effective.
#seo company in new zealand #seo services in new zealand #seo agency in new zealand #top seo company in new zealand #best seo company in new zealand #top digital marketing company in new zealand
1596017429
Are you looking for a top mobile app development company in New York? Please find a list of the Best App Development Companies in New York that help to build high-quality, Robust, high-performance mobile app with advanced technology and features at an affordable price.
#best app development companies in new york #top app development companies in new york #custom app development companies in new york #leading app development companies in new york #app development companies in new york