Skip to content

Instantly share code, notes, and snippets.

@diegovgsilva95
Created August 13, 2024 04:30
Show Gist options
  • Select an option

  • Save diegovgsilva95/778894feb65672f58d8637367d96fe2f to your computer and use it in GitHub Desktop.

Select an option

Save diegovgsilva95/778894feb65672f58d8637367d96fe2f to your computer and use it in GitHub Desktop.
Proof-of-concept: QWERTY Shift Cipher
var keyboard = "qwertyuiop|asdfghjkl|zxcvbnm".split("|") // The grand-old QWERTY keyboard we all love and h8...
var editor = document.querySelector("textarea") // Of couse you'll need some HTML skeleton with a textarea...
var preview = document.querySelector("pre") // ... a pre...
var key = document.querySelector("input") // and a numeric input (e.g. input:number or input:range)
var refreshPreview = function(){
let out = ""
for(let char of editor.value){
if(!char.match(/[a-zA-Z]/)){
out += char
continue
}
let uppercase = char.match(/[A-Z]/)
if(uppercase)
char = char.toLowerCase()
let letterRow = ""
for(let row of keyboard){
if(row.includes(char)){
letterRow = row
break
}
}
if(letterRow == ""){
// Due to the previous code, I don't see any case where this could logically happen but... as a preventive measure...
out += "?"
continue
}
let idx = letterRow.indexOf(char)
idx = (idx+key.valueAsNumber+letterRow.length) % (letterRow.length)
char = letterRow[idx]
if(uppercase) char = char.toUpperCase()
out += char
}
preview.innerText = out
}
editor.addEventListener("change", refreshPreview)
editor.addEventListener("keyup", refreshPreview)
key.addEventListener("change", refreshPreview)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment