Pug - это препроцессор HTML и шаблонизатор, который был написан на JavaScript для Node.js.
function memo(fn) { | |
const cache = new Map(); | |
return function () { | |
if (!cache.has(fn)) { | |
cache.set(fn, new Map()); | |
} | |
const argsKey = JSON.stringify(arguments); |
/* | |
Проблема заключалась в следующем: когда имеется интерактивный элемент с :focus стилем и вы щелкаете по этому элементу, на нём остаётся focus стиль (outline обводка). | |
У нативной кнопки всё работает as expected, но стоит её добавить любой стиль и, как побочный эффект, меняется её поведение. | |
Конечно outline можно убрать, но с интерактивными элементам так делать не стоит, так как он обеспечивает визуальную обратную связь для элементов, которые имеют «фокус» при навигации по документу с помощью клавиши TAB (или эквивалентной). | |
Это особенно полезно для людей, которые не могут использовать мышь или имеют нарушения зрения. | |
Если вы удалите outline, вы сделаете свой сайт недоступным для этих людей. | |
*/ | |
// РЕШЕНИЕ 1 | |
document |
async function retry(fn, retriesLeft = 5, interval = 1000, exponential = false) { | |
try { | |
const val = await fn(); | |
return val; | |
} catch (error) { | |
if (retriesLeft) { | |
await new Promise(r => setTimeout(r, interval)); | |
return retry(fn, retriesLeft - 1, exponential ? interval * 2 : interval, exponential); | |
} else throw new Error('Max retries reached'); | |
} |
UPDATE Table_1 T_1 | |
LEFT JOIN | |
( | |
SELECT | |
id_table1, | |
Sum(CASE | |
WHEN direction = 'one' | |
THEN volume | |
ELSE 0 | |
END) AS sum_one, |
Конвертацию БД из Win-1251 в UTF8 можно произвести разными способами, но самый быстрый и простой - использование SQL-запроса, приведенного ниже. | |
ALTER TABLE `db_name`.`table_name` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; | |
При помощи этого запроса, можно конвертировать таблицу базы данных в любую, доступную в MySQL кодировку. Но что делать, если таблиц 100, 200 или больше, и все таблицы необходимо перекодировать в UTF8 из Win-1251? Для решения этой проблемы, можно отправить в MySQL запрос, который сгенерирует необходимые SQL-запросы для всех таблиц БД. При использовании PHPMyAdmin останется только скопировать результаты и запустить их как SQL-запрос: | |
SELECT CONCAT( 'ALTER TABLE `', t.`TABLE_SCHEMA` , '`.`', t.`TABLE_NAME` , '` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;' ) AS sqlcode | |
FROM `information_schema`.`TABLES` t | |
WHERE 1 | |
AND t.`TABLE_SCHEMA` = 'My_DB_for_convert' | |
ORDER BY 1 |
У CSS есть несколько базовых проблем, которые позволяют очень быстро отстрелить себе ногу при неправильном использовании:
-
Глобальный неймспейс – в серверном программировании все что написано в файле, в файле и остается. Все же что написано в css и js засирает глобальное пространство имен со всеми вытекающими. В JS эту проблему сейчас побороли всякими модульными системами, а вот с css сложнее. В идеальном мире это должен починить Shadow DOM и настоящие Web Components, но пока их нет единственный способ с этим бороться – следовать какой-то системе именований селекторов, которая по возможности уменьшает и исключает возможные конфликты.
-
Каскадность – если на один элемент может сработать несколько правил, то они все и сработают последовательно. Если есть элемент
h1.title
, на него сработают все правила для теговh1
и все правила для класса.title
. Так как весь html состоит из тегов, то правил которые применяются на теги без классов будут работать на все вообще.
Соответственно наз
<script> | |
console.log(<? echo CUtil::PhpToJSObject($arResult, false, true); ?>); | |
</script> |
$regexstr = '~ | |
# Match Youtube link and embed code | |
(?: # Group to match embed codes | |
(?:<iframe [^>]*src=")? # If iframe match up to first quote of src | |
|(?: # Group to match if older embed | |
(?:<object .*>)? # Match opening Object tag | |
(?:<param .*</param>)* # Match all param tags | |
(?:<embed [^>]*src=")? # Match embed tag to the first quote of src | |
)? # End older embed code group | |
)? # End embed code groups |
/* | |
* String nanoTpl (String template, Object data) | |
* | |
* Usage: nanoTpl('Hello ${name}! (not ${name}?)', { name: 'Gandalf' }) | |
* | |
* Result: Hello Gandalf! (not Gandalf?) | |
*/ | |
function nanoTpl (template, data) { | |
var result = template; |