bem / bem-core

BEM Core Library
https://ru.bem.info/technologies/classic/i-bem/
Other
275 stars 94 forks source link

page: <html lang="lang"> #751

Closed vaseker closed 7 years ago

vaseker commented 9 years ago

В page.bh.js не предусмотрена установка аттрибута lang для тега html.

Приходится указывать язык в meta: <meta http-equiv="content-language" content="ru"/>

W3 validator по этому поводу говорит:

Using the meta element to specify the document-wide default language is obsolete. Consider specifying the language on the root element instead.

Логично ли для решения этой проблемы создать PR с изменением:

tag : 'html',
attrs: { lang: json.lang }

или есть аргументы "против"?

gorbenko commented 9 years ago

Костыльное решение может быть таким:

bemjson:

{
 block: 'b-page',
 lang: '%lang%'
}

b-page.bh.js на уровне проекта:

module.exports = function (bh) {
    bh.match('b-page', function (ctx) {
        ctx.tParam('lang', ctx.param('lang'));
    });

    bh.match('b-page__html', function (ctx) {
        ctx.attr('lang', ctx.tParam('lang'));
    });
};

Но думается, что такая реализация должна быть на уровне вендора.

steve-reichbach commented 9 years ago

+1

qfox commented 9 years ago

Если уж в одном файле, то...

module.exports = function (bh) {
    var lang;
    bh.match('b-page', function (ctx) {
        lang = ctx.param('lang');
    });
    bh.match('b-page__html', function (ctx) {
        ctx.attr('lang', lang);
    });
};
gorbenko commented 9 years ago

@zxqfox Когда bh-шаблоны выгружаются на клиент, все module.exports режутся и ваш lang улетает в window. Но pull не об этом.

tadatuta commented 9 years ago

для <html> потенциально могут понадобится еще атрибуты manifest и xmlns.

qfox commented 9 years ago

@gorbenko А разве оно не заворачивается в module.exports = function или modules.define('BH', function ? Впрочем, согласен, что tParam лучше. В т.ч. это лучше, если преобразовывать в bh.{notJs}.

@tadatuta @vaseker А в bemhtml это есть? Имхо, надо тоже добавить, если нет.

vaseker commented 9 years ago

@zxqfox в bemhtml тоже нет.

qfox commented 9 years ago

@vaseker Спасибо.

@tadatuta В общем, надо и туда, и суда добавлять? Или надо подумать?

tadatuta commented 9 years ago

@gorbenko я правильно понимаю, что пример про костыльную реализацию — не про bem-core, а про какую-то кастомную реализацию обвязки?

@zxqfox похоже, что нужно. @veged, нет возражений против добавления опционального ключа htmlParams в BEMJSON API page?

gorbenko commented 9 years ago

@tadatuta да, в нашем случае это bem-bl.

veged commented 9 years ago

@tadatuta почему htmlParams а не просто lang? какие-то ещё нужны будут параметры? по умолчанию мы против абстрактных коллекций на любые параметры, лучше точечно решать

tadatuta commented 9 years ago

@veged если следовать принципу минимализма, то, вроде, нужно оставлять только lang. Но, например, для rtl-языков потребуется dir, для оффлайн-приложений — manifest. И в отличии от кейса с контролами, чтобы на своем уровне их добавить, придется копипаститить чуть ли не весь page.

veged commented 9 years ago

@tadatuta предлагаю "on demand" по прецедентам добавлять то, что действительно нужно нам и нашим пользователям