Skip to content

Instantly share code, notes, and snippets.

@assertchris
Created December 15, 2017 17:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save assertchris/3208cfe5f5f3864cfa5b5cfb024c6505 to your computer and use it in GitHub Desktop.
Save assertchris/3208cfe5f5f3864cfa5b5cfb024c6505 to your computer and use it in GitHub Desktop.
XVmWBV
<div id="tweet-box-home-timeline" contenteditable="true">
What's happening?
</div>
const insertAfter = (newNode, referenceNode) => {
referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling)
}
const replaceRange = (transformer) => {
const selected = window.getSelection()
if (selected.rangeCount) {
const range = selected.getRangeAt(0)
const transformed = transformer(selected.toString())
const span = document.createElement("span")
span.innerHTML = transformed
range.deleteContents()
range.insertNode(span)
}
}
const replaceArray = (text, find, replace) => {
let replaced = text
for (let i = 0; i < find.length; i++) {
replaced = replaced.replace(find[i], replace[i])
}
return replaced
}
// http://qaz.wtf/u/convert.cgi?text=abcdefghijklmnopqrstuvwxyz
const alpha = "abcdefghijklmnopqrstuvwxyz".split("")
const italic = runes("๐˜ข๐˜ฃ๐˜ค๐˜ฅ๐˜ฆ๐˜ง๐˜จ๐˜ฉ๐˜ช๐˜ซ๐˜ฌ๐˜ญ๐˜ฎ๐˜ฏ๐˜ฐ๐˜ฑ๐˜ฒ๐˜ณ๐˜ด๐˜ต๐˜ถ๐˜ท๐˜ธ๐˜น๐˜บ๐˜ป")
const bold = runes("๐—ฎ๐—ฏ๐—ฐ๐—ฑ๐—ฒ๐—ณ๐—ด๐—ต๐—ถ๐—ท๐—ธ๐—น๐—บ๐—ป๐—ผ๐—ฝ๐—พ๐—ฟ๐˜€๐˜๐˜‚๐˜ƒ๐˜„๐˜…๐˜†๐˜‡")
const withItalic = (text) => {
return replaceArray(text, alpha, italic)
}
const withBold = (text) => {
return replaceArray(text, alpha, bold)
}
const editor = document.querySelector("#tweet-box-home-timeline")
if (editor) {
editor.addEventListener("focus", () => {
if (editor.innerText === "What's happening?") {
editor.innerText = ""
}
})
editor.addEventListener("blur", () => {
if (editor.innerText === "") {
editor.innerText = "What's happening?"
}
})
const italicButton = document.createElement("button")
italicButton.innerText = "๐‘ฐ"
italicButton.addEventListener(
"click", () => replaceRange(withItalic)
)
const boldButton = document.createElement("button")
boldButton.innerText = "๐"
boldButton.addEventListener(
"click", () => replaceRange(withBold)
)
insertAfter(italicButton, editor)
insertAfter(boldButton, editor)
}
<script src="https://rawgit.com/dotcypress/runes/develop/index.js"></script>
/* DEBUG */
#tweet-box-home-timeline {
border: solid 2px #ccc;
width: 200px;
height: 40px;
line-height: 40px;
margin: 5px;
border-radius: 5px;
padding: 0 10px;
outline: 0;
font-family: sans-serif;
font-size: 14px;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment