public broadcast(type: string, receivers: string[], msg?: any) {
const events = this.emitter.eventNames()
if (!events.includes(type)) {
console.warn('Предупреждение: такое событие не добавлено!')
return
}
const list = receivers.map(id => this._players.indexOf(id))
const listeners = this.emitter.listeners(type)
for (const index of list) {
const fn = listeners[index]
if (typeof fn === 'function')
fn(msg)
else
console.error(`Ошибка, под индексом ${index} нет слушателя!`)
}
}
type MoveData = ((dir: "left" | "right", i: number) => void)
type TestItemProps = {
data: { name: string }, i: number, onMove: MoveData
}
const TestItem: FC<TestItemProps> = ({ data, i, onMove }) => {
return (
<div>
<div style={{ display: "flex", justifyContent: "space-between" }}>
<span
style={{ cursor: "pointer" }}
onClick={() => onMove("left", i)}
>◀</span>
<span
style={{ cursor: "pointer" }}
onClick={() => onMove("right", i)}
>▶</span>
</div>
<span>{data.name}</span>
</div>
)
}
function Test() {
const [state, setState] = useState([
{ name: "Petya", order: 0 },
{ name: "Nikita", order: 1 },
{ name: "Sasha", order: 2 },
{ name: "Valera", order: 3 },
])
const onMoveHandle: MoveData = (dir, prev) => {
const isLeftBlock = prev === 0 && dir === "left"
const isRightBlock = prev === state.length - 1 && dir === "right"
if (isLeftBlock || isRightBlock) return
const next = dir === "left" ? prev - 1 : prev + 1
setState((past) => past.reduce((acc: { name: string, order: number }[], it, i, arr) => {
if (![prev, next].includes(i))
acc.push(it)
else {
if (i === prev) acc.push(arr[next])
else acc.push(arr[prev])
}
return acc
}, []))
}
return (
<div style={{ display: "flex", columnGap: "10px" }}>
{state.map((it, i) => (
<TestItem
data={it} i={i} onMove={onMoveHandle} key={i}
/>
))}
</div>
)
}
const url = new URL(window.location.href)
url.searchParams.append("afterSending", "1")
window.history.pushState(null, null, url);
// window.location.href = url.toString()
// window.location.replace(url.toString())
const Input = () => {
const range = { min: 5, max: 50 }
const [value, setValue] = useState<number | "">(range.min)
function onBlurHandle(value: number) {
if (value >= range.min && value < range.max) return;
setValue(range.min)
}
return (
<input
type="number"
value={value}
onChange={({ target }) => setValue(target.value === "" ? "" : +target.value)}
onBlur={({ target }) => onBlurHandle(+target.value)}
min={range.min}
max={range.max}
/>
)
}
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{QUERY_STRING} !path=
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ ?path=$1 [QSA,L]
global $post, $wp_post_types;
$q_obj = get_queried_object();
$ptype = null;
if (!empty($post)) $ptype = &$wp_post_types[$post->post_type];
else if (isset($q_obj->taxonomy)) $ptype = &$wp_post_types[get_taxonomy($q_obj->taxonomy)->object_type[0]];
$post_title = $ptype->labels->name;