# Zkratky stavu: INC, TOGGLE, NUL, UPDATE, UNWATCH, WAIT, BLOCKED a CACHEPATH

> Malé funkce, které mění nebo sledují hodnotu stavu podle její cesty, čekají, až hodnota existuje, spustí něco jen jednou za období a uchovávají hodnotu stavu v cache.

Framework: jcomponent20
Product: jComponent 20 (jcomponent@20)
Language: cs
Content-SHA256: de70117e59cfdce22dbed414416e0add58f5e1be24efb4747acc40fec589f81a
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: jcomponent20@3fedd009a277f50fddc608b97afbec553b67c51b
Review: not-recorded

Tyto funkce pracují se stavem jComponent podle **cesty** (`'user.visits'`), jako `SET()` a `GET()`, a každá z nich upozorní komponenty a sledovače cesty.

- `INC(path, [value])` přičte `value` (výchozí `1`) k číslu; když je hodnota prázdná, začne od `0`, a když je to text, nejprve se přečte jako číslo.
- `TOGGLE(path)` změní boolean (prázdná hodnota se stane `true`). `NUL(path)` a jeho alias `NULL(path)` nastaví hodnotu na `null`.
- `UPDATE(path)` (alias `UPD`) upozorní všechny, kdo cestu používají, **bez změny hodnoty**: použijte jej po úpravě objektu nebo pole na místě.
- `UNWATCH(path, [fn])` odstraní sledovače cesty vytvořené přes `WATCH()`; s `fn` pouze ten jeden.
- `WAIT(fn or path, callback)` spustí `callback`, jakmile funkce vrátí něco pravdivého, nebo cesta má hodnotu. Zkontroluje hned a pak **každých 500 ms**.
- `BLOCKED(key, timeout, [callback])` vrátí `false` poprvé a `true` po dalších `timeout` ms (funguje i `'5 seconds'`): je to ochrana proti dvojitému kliknutí nebo opakovanému požadavku. `callback` se spustí pouze tehdy, když není zablokováno.
- `CACHEPATH(path, expire, [default])` uchovává hodnotu stavu v cache (`CACHE()`): nastaví cestu na uloženou hodnotu, pokud existuje (nebo na `default`, který může být funkce), a každou změnu ukládá pod klíč `path_<path>`.
- Cesta je cesta ve stavu stránky, takže název jako `name` nebo `location` je vlastnost `window`: používejte vlastní názvy (`person`, `prefs.mode`).
- `setTimeout2(id, fn, ms, [limit], [param])` je `setTimeout()` s debounce: opětovné zavolání se stejným `id` restartuje časovač, takže `fn` se spustí jednou, `ms` po posledním volání. S `limit` se časovač restartuje nejvýše tolikrát a další volání se ignorují, dokud `fn` neběžel, takže proud volání jej nemůže odkládat donekonečna. `clearTimeout2(id)` jej zruší a vrátí `true`, když nějaký byl.
- `CLONE(value)` vytvoří hlubokou kopii (data zůstanou daty), `COPY(from, to)` hluboce zkopíruje vlastnosti jednoho objektu do druhého a vrátí `to`. `NOOP` je funkce, která nedělá nic, a `WARN(...)` píše do `console.warn`.

```html public/index.html
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8" />
	<title>jComponent</title>
	<link rel="stylesheet" href="//cdn.componentator.com/spa.min@20.css" />
	<script src="//cdn.componentator.com/spa.min@20.js"></script>
</head>
<body>
	<p class="out"></p>
	<script>

		window.sample = { watched: 0 };

	</script>
</body>
</html>
```
