First
This commit is contained in:
commit
ece60fc6ea
|
@ -0,0 +1,169 @@
|
||||||
|
const M = {}
|
||||||
|
|
||||||
|
M.init = function () {
|
||||||
|
M.numb = M.$("#numb")
|
||||||
|
M.filter = M.$("#filter")
|
||||||
|
|
||||||
|
M.keydec()
|
||||||
|
M.start_widgets()
|
||||||
|
M.update()
|
||||||
|
|
||||||
|
if (M.numb.value) {
|
||||||
|
M.do_numb_action()
|
||||||
|
}
|
||||||
|
|
||||||
|
if (M.filter.value) {
|
||||||
|
M.do_filter_action()
|
||||||
|
}
|
||||||
|
|
||||||
|
M.filter.focus()
|
||||||
|
M.move_cursor_to_end(M.filter)
|
||||||
|
}
|
||||||
|
|
||||||
|
M.$ = function (s, parent = false) {
|
||||||
|
if (!parent) {
|
||||||
|
parent = document
|
||||||
|
}
|
||||||
|
|
||||||
|
return parent.querySelector(s)
|
||||||
|
}
|
||||||
|
|
||||||
|
M.$$ = function (s, parent = false, direct = false) {
|
||||||
|
if (!parent) {
|
||||||
|
parent = document
|
||||||
|
}
|
||||||
|
|
||||||
|
let items = Array.from(parent.querySelectorAll(s))
|
||||||
|
|
||||||
|
if (direct) {
|
||||||
|
items = items.filter((node) => node.parentNode === parent)
|
||||||
|
}
|
||||||
|
|
||||||
|
return items
|
||||||
|
}
|
||||||
|
|
||||||
|
M.debounce = function (func, wait, immediate) {
|
||||||
|
let timeout
|
||||||
|
|
||||||
|
return function executedFunction() {
|
||||||
|
let context = this
|
||||||
|
let args = arguments
|
||||||
|
|
||||||
|
let later = function () {
|
||||||
|
timeout = null
|
||||||
|
if (!immediate) func.apply(context, args)
|
||||||
|
}
|
||||||
|
|
||||||
|
let callNow = immediate && !timeout
|
||||||
|
clearTimeout(timeout)
|
||||||
|
timeout = setTimeout(later, wait)
|
||||||
|
if (callNow) func.apply(context, args)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
M.move_cursor_to_end = function (element) {
|
||||||
|
element.selectionStart = element.selectionEnd = element.value.length
|
||||||
|
}
|
||||||
|
|
||||||
|
M.do_numb_action = function () {
|
||||||
|
M.numb.value = parseInt(M.numb.value.replace(/\D/g, ""))
|
||||||
|
|
||||||
|
if (M.numb.value > 9999) {
|
||||||
|
M.numb.value = 9999
|
||||||
|
} else if (M.numb.value != "" && M.numb.value < 0) {
|
||||||
|
M.numb.value = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
M.update(M.filter.value.trim())
|
||||||
|
}
|
||||||
|
|
||||||
|
M.do_filter_action = function () {
|
||||||
|
M.update(M.filter.value.trim())
|
||||||
|
}
|
||||||
|
|
||||||
|
M.keydec = function () {
|
||||||
|
M.numb.addEventListener(
|
||||||
|
"input",
|
||||||
|
M.debounce(function (e) {
|
||||||
|
M.do_numb_action()
|
||||||
|
}, 350)
|
||||||
|
)
|
||||||
|
|
||||||
|
M.filter.addEventListener(
|
||||||
|
"input",
|
||||||
|
M.debounce(function (e) {
|
||||||
|
M.do_filter_action()
|
||||||
|
}, 350)
|
||||||
|
)
|
||||||
|
|
||||||
|
M.filter.addEventListener("keydown", function (e) {
|
||||||
|
if (e.key === "Escape") {
|
||||||
|
M.clear_filter()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
document.addEventListener("keydown", function (e) {
|
||||||
|
if (document.activeElement !== M.filter) {
|
||||||
|
if (e.key.length === 1 && e.key.match(/[a-zA-Z]/)) {
|
||||||
|
filter.focus()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
M.update = function (txt = "") {
|
||||||
|
txt = txt.toLowerCase()
|
||||||
|
let s = ""
|
||||||
|
let all = txt ? false : true
|
||||||
|
let len = M.nouns.length
|
||||||
|
let index = parseInt(M.numb.value) % len
|
||||||
|
let exact = M.$("#exact_filter").checked
|
||||||
|
|
||||||
|
for (let i = 0; i < M.nouns.length; i++) {
|
||||||
|
let include = false
|
||||||
|
|
||||||
|
if (all) {
|
||||||
|
include = true
|
||||||
|
} else if (exact) {
|
||||||
|
include = M.nouns[i] === txt || M.nouns[index] === txt
|
||||||
|
} else {
|
||||||
|
include = M.nouns[i].includes(txt) || M.nouns[index].includes(txt)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (include) {
|
||||||
|
s += `
|
||||||
|
<div class='list_item'>
|
||||||
|
<div class='list_item_word'>${M.nouns[i]}</div>
|
||||||
|
<div class='list_item_arrow'>-></div>
|
||||||
|
<div class='list_item_word_2'>${M.nouns[index]}</div>
|
||||||
|
</div>`
|
||||||
|
}
|
||||||
|
|
||||||
|
index += 1
|
||||||
|
|
||||||
|
if (index >= len) {
|
||||||
|
index = 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
M.$("#list").innerHTML = s
|
||||||
|
}
|
||||||
|
|
||||||
|
M.start_widgets = function () {
|
||||||
|
M.$("#exact_filter").addEventListener("change", function (e) {
|
||||||
|
if (M.filter.value) {
|
||||||
|
M.do_filter_action()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
M.$("#clear_filter").addEventListener("click", function (e) {
|
||||||
|
M.clear_filter()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
M.clear_filter = function () {
|
||||||
|
if (M.filter.value) {
|
||||||
|
M.filter.value = ""
|
||||||
|
M.do_filter_action()
|
||||||
|
}
|
||||||
|
}
|
Binary file not shown.
After Width: | Height: | Size: 318 B |
|
@ -0,0 +1,32 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title> Coke Bottle Glasses </title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<link rel="shortcut icon" href="favicon.ico?v=1" type="image/x-icon">
|
||||||
|
<link rel="stylesheet" type="text/css" href="style.css?v=1">
|
||||||
|
<script src='base.js?v=4'></script>
|
||||||
|
<script src='nouns.js?v=1'></script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
window.onload = function(){
|
||||||
|
M.init()
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div id='inputs'>
|
||||||
|
<input type='number' max='9999' min='0' id='numb' value='88' title='Page'>
|
||||||
|
<input type='text' id='filter' placeholder='Filter'>
|
||||||
|
<div class='flex_row_center'>
|
||||||
|
<div>Exact:</div>
|
||||||
|
<input id='exact_filter' type='checkbox'>
|
||||||
|
<div class='separator'>|</div>
|
||||||
|
<div id='clear_filter' class='pointer'>Clear</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id='list'></div>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,117 @@
|
||||||
|
body,
|
||||||
|
html {
|
||||||
|
background-color: #242424;
|
||||||
|
color: #e6e6e6;
|
||||||
|
font-size: 20px;
|
||||||
|
font-family: monospace;
|
||||||
|
margin: 0;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="text"],
|
||||||
|
input[type="number"] {
|
||||||
|
background-color: #151515;
|
||||||
|
color: #c2bbe0;
|
||||||
|
font-size: 1rem;
|
||||||
|
padding: 5px;
|
||||||
|
box-shadow: inset 0 0 2px currentColor;
|
||||||
|
border-radius: 50px;
|
||||||
|
text-align: center;
|
||||||
|
outline: none;
|
||||||
|
border: 0px solid grey;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="checkbox"] {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#inputs {
|
||||||
|
position: sticky;
|
||||||
|
top: 0;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: flex-start;
|
||||||
|
background-color: inherit;
|
||||||
|
width: 100%;
|
||||||
|
padding-top: 20px;
|
||||||
|
padding-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#numb {
|
||||||
|
width: 80px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#filter {
|
||||||
|
width: 320px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#exact_filter {
|
||||||
|
margin-left: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#list {
|
||||||
|
display: table;
|
||||||
|
text-shadow: 0 0 10px currentColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
.list_item {
|
||||||
|
display: table-row;
|
||||||
|
padding-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.list_item > div {
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.list_item:first-child > div {
|
||||||
|
padding-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.list_item:last-child > div {
|
||||||
|
padding-bottom: 50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.list_item_word {
|
||||||
|
display: table-cell;
|
||||||
|
text-align: right;
|
||||||
|
text-transform: capitalize;
|
||||||
|
}
|
||||||
|
|
||||||
|
.list_item_word_2 {
|
||||||
|
display: table-cell;
|
||||||
|
text-align: left;
|
||||||
|
text-transform: capitalize;
|
||||||
|
}
|
||||||
|
|
||||||
|
.list_item_arrow {
|
||||||
|
display: table-cell;
|
||||||
|
text-align: center;
|
||||||
|
color: #c2bbe0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flex_row_center {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.separator {
|
||||||
|
opacity: 0.5;
|
||||||
|
margin-left: 15px;
|
||||||
|
margin-right: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pointer {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pointer:hover {
|
||||||
|
text-shadow: 0 0 10px currentColor;
|
||||||
|
}
|
Loading…
Reference in New Issue