Initial commit: проект документации YARU
@@ -0,0 +1,72 @@
|
|||||||
|
# Python
|
||||||
|
__pycache__/
|
||||||
|
*.py[cod]
|
||||||
|
*$py.class
|
||||||
|
*.so
|
||||||
|
.Python
|
||||||
|
env/
|
||||||
|
venv/
|
||||||
|
.venv/
|
||||||
|
ENV/
|
||||||
|
build/
|
||||||
|
develop-eggs/
|
||||||
|
dist/
|
||||||
|
downloads/
|
||||||
|
eggs/
|
||||||
|
.eggs/
|
||||||
|
lib/
|
||||||
|
lib64/
|
||||||
|
parts/
|
||||||
|
sdist/
|
||||||
|
var/
|
||||||
|
wheels/
|
||||||
|
*.egg-info/
|
||||||
|
.installed.cfg
|
||||||
|
*.egg
|
||||||
|
|
||||||
|
# FastAPI / Uvicorn
|
||||||
|
*.log
|
||||||
|
.env
|
||||||
|
.env.local
|
||||||
|
|
||||||
|
# IDE
|
||||||
|
.idea/
|
||||||
|
.vscode/
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
*~
|
||||||
|
|
||||||
|
# OS
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
|
|
||||||
|
# Node (для фронтенда)
|
||||||
|
node_modules/
|
||||||
|
npm-debug.log
|
||||||
|
yarn-error.log
|
||||||
|
|
||||||
|
# Svelte / Vite
|
||||||
|
dist/
|
||||||
|
.svelte-kit/
|
||||||
|
|
||||||
|
# Тесты
|
||||||
|
.pytest_cache/
|
||||||
|
.coverage
|
||||||
|
htmlcov/
|
||||||
|
.tox/
|
||||||
|
|
||||||
|
# Docker
|
||||||
|
docker-compose.override.yml
|
||||||
|
|
||||||
|
# Медиафайлы (локальное хранилище)
|
||||||
|
media/
|
||||||
|
uploads/
|
||||||
|
|
||||||
|
# Бэкапы БД
|
||||||
|
*.sql
|
||||||
|
backups/
|
||||||
|
|
||||||
|
# Временные файлы
|
||||||
|
tmp/
|
||||||
|
temp/
|
||||||
|
*.tmp
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
# Инструкции для Qwen Code
|
||||||
|
|
||||||
|
## О проекте
|
||||||
|
**YARU** — Yet Another Russian Uncompleted... (название меняется)
|
||||||
|
Федеративная социальная сеть на базе ActivityPub, аналог Mastodon без ограничений на длину поста.
|
||||||
|
|
||||||
|
## Общие принципы работы
|
||||||
|
- Отвечать на **русском языке** (технический код, команды, пути — без изменений)
|
||||||
|
- Задавать уточняющие вопросы при неопределённости
|
||||||
|
- Не делать предположений о технологиях без подтверждения
|
||||||
|
- Документировать все решения в `/docs`
|
||||||
|
|
||||||
|
## Контекст проекта
|
||||||
|
- **Цель**: Создать аналог Mastodon с поддержкой длинных постов и статей
|
||||||
|
- **Протокол**: ActivityPub (Fediverse), полная совместимость с Mastodon
|
||||||
|
- **Бэкенд**: Python + FastAPI
|
||||||
|
- **Фронтенд**: Svelte (требуется проверка возможностей)
|
||||||
|
- **База данных**: PostgreSQL (основная + кэш + очереди через дополнения)
|
||||||
|
- **Редактор**: Временное решение (Chronicle в ранней разработке)
|
||||||
|
- **Рабочее название**: YARU (сменяемые подзаголовки: service, revolution, blog, fediverse)
|
||||||
|
|
||||||
|
## Структура документации
|
||||||
|
```
|
||||||
|
docs/
|
||||||
|
├── README.md # Индекс всех документов
|
||||||
|
├── backend/ # Архитектура, API, БД
|
||||||
|
├── frontend/ # UI/UX, компоненты
|
||||||
|
├── marketing/ # Позиционирование, аудитория
|
||||||
|
├── design/ # Дизайн-система, макеты
|
||||||
|
├── api/ # Спецификации API
|
||||||
|
└── deployment/ # Деплой, инфраструктура
|
||||||
|
```
|
||||||
|
|
||||||
|
## История изменений
|
||||||
|
- **2026-03-01**: Инициализация проекта, создание структуры документации
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
# Документация проекта YARU
|
||||||
|
|
||||||
|
**Yet Another Russian Uncompleted...** — федеративная социальная сеть на базе ActivityPub
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📁 Разделы документации
|
||||||
|
|
||||||
|
| Раздел | Описание | Статус |
|
||||||
|
|--------|----------|--------|
|
||||||
|
| [Backend](backend/README.md) | FastAPI, PostgreSQL, ActivityPub, экспорт данных | ✅ Заполнен |
|
||||||
|
| [Frontend](frontend/README.md) | Svelte, компоненты, редактор, real-time | ✅ Заполнен |
|
||||||
|
| [Marketing](marketing/README.md) | Позиционирование, аудитория, конкуренты, брендинг | ✅ Заполнен |
|
||||||
|
| [Design](design/README.md) | Логотип, цвета, типографика, компоненты | 📝 Требует утверждения |
|
||||||
|
| [API](api/README.md) | REST + ActivityPub спецификации | ✅ Заполнен |
|
||||||
|
| [Deployment](deployment/README.md) | Docker, CI/CD, мониторинг, бэкапы | ✅ Заполнен |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎯 О проекте
|
||||||
|
|
||||||
|
YARU — это попытка создать альтернативу Mastodon со следующими особенностями:
|
||||||
|
|
||||||
|
- ✅ **Без ограничений на длину поста** — пишите статьи, а не твиты
|
||||||
|
- ✅ **Экспорт данных** — ваш контент всегда принадлежит вам (Markdown + медиа)
|
||||||
|
- ✅ **Fediverse совместимость** — полная совместимость с Mastodon
|
||||||
|
- ✅ **Карма** — качественная оценка контента вместо лайков
|
||||||
|
- ✅ **Сменяемая концепция** — название адаптируется под контекст
|
||||||
|
|
||||||
|
### Стек технологий
|
||||||
|
|
||||||
|
| Компонент | Технология |
|
||||||
|
|-----------|------------|
|
||||||
|
| Бэкенд | Python 3.11+ + FastAPI |
|
||||||
|
| Фронтенд | Svelte 4+ + TypeScript |
|
||||||
|
| База данных | PostgreSQL 15+ (основная + кэш + очереди) |
|
||||||
|
| Протокол | ActivityPub (Fediverse) |
|
||||||
|
| Редактор | Временное решение (Chronicle в разработке) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📋 MVP функционал
|
||||||
|
|
||||||
|
1. **Лента** — домашняя и публичная
|
||||||
|
2. **Профили** — создание, редактирование, аватар
|
||||||
|
3. **Посты** — создание, редактирование, удаление (без ограничения длины)
|
||||||
|
4. **Подписки** — follow/unfollow, список подписчиков
|
||||||
|
5. **Карма** — начисление/списание, защита от накрутки
|
||||||
|
6. **Экспорт** — выгрузка всего контента в Markdown + медиа
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔍 Вопросы для обсуждения
|
||||||
|
|
||||||
|
### Критичные для начала разработки
|
||||||
|
|
||||||
|
1. **ActivityPub совместимость** — обсуждение полной совместимости с Mastodon (обратная связь?)
|
||||||
|
2. **Дизайн** — кто делает макеты, есть ли предпочтения по цветам/стилю?
|
||||||
|
3. **Хостинг** — где размещать (Timeweb, Selectel, Hetzner, свой сервер)?
|
||||||
|
4. **Домен** — использовать yaru.nixg.ru или купить отдельный (yaru.ru, yaru.social)?
|
||||||
|
5. **Редактор** — какой WYSIWYG выбрать для MVP (TipTap, Quill, Markdown textarea)?
|
||||||
|
|
||||||
|
### Технические детали
|
||||||
|
|
||||||
|
- Нужен ли SSR (SvelteKit) или достаточно SPA?
|
||||||
|
- Как хранить медиа: локально, S3, или оба варианта?
|
||||||
|
- Требуется ли модерация контента (админ-панель)?
|
||||||
|
- Нужна ли программа раннего доступа?
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📞 Контакты и ресурсы
|
||||||
|
|
||||||
|
- **Репозиторий**: `yaru.nixg.ru`
|
||||||
|
- **Редактор**: [chronicle.nixg.ru](https://chronicle.nixg.ru)
|
||||||
|
- **Документация для разработчиков**: см. разделы выше
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Последнее обновление: 2026-03-01*
|
||||||
@@ -0,0 +1,188 @@
|
|||||||
|
# API документация
|
||||||
|
|
||||||
|
## REST API
|
||||||
|
|
||||||
|
### Базовый URL
|
||||||
|
```
|
||||||
|
GET/POST /api/v1/...
|
||||||
|
```
|
||||||
|
|
||||||
|
### Endpoints
|
||||||
|
|
||||||
|
#### Аутентификация
|
||||||
|
| Метод | Endpoint | Описание |
|
||||||
|
|-------|----------|----------|
|
||||||
|
| POST | `/oauth/token` | Получение JWT токена |
|
||||||
|
| POST | `/api/v1/accounts` | Регистрация |
|
||||||
|
| GET | `/api/v1/accounts/verify_credentials` | Текущий пользователь |
|
||||||
|
|
||||||
|
#### Посты
|
||||||
|
| Метод | Endpoint | Описание |
|
||||||
|
|-------|----------|----------|
|
||||||
|
| GET | `/api/v1/statuses/:id` | Получить пост |
|
||||||
|
| POST | `/api/v1/statuses` | Создать пост |
|
||||||
|
| DELETE | `/api/v1/statuses/:id` | Удалить пост |
|
||||||
|
| POST | `/api/v1/statuses/:id/like` | Лайк |
|
||||||
|
| POST | `/api/v1/statuses/:id/reblog` | Репост |
|
||||||
|
|
||||||
|
#### Ленты
|
||||||
|
| Метод | Endpoint | Описание |
|
||||||
|
|-------|----------|----------|
|
||||||
|
| GET | `/api/v1/timelines/home` | Домашняя лента |
|
||||||
|
| GET | `/api/v1/timelines/public` | Публичная лента |
|
||||||
|
| GET | `/api/v1/accounts/:id/statuses` | Посты пользователя |
|
||||||
|
|
||||||
|
#### Подписки
|
||||||
|
| Метод | Endpoint | Описание |
|
||||||
|
|-------|----------|----------|
|
||||||
|
| GET | `/api/v1/accounts/:id/followers` | Подписчики |
|
||||||
|
| GET | `/api/v1/accounts/:id/following` | Подписки |
|
||||||
|
| POST | `/api/v1/accounts/:id/follow` | Подписаться |
|
||||||
|
| POST | `/api/v1/accounts/:id/unfollow` | Отписаться |
|
||||||
|
|
||||||
|
#### Карма
|
||||||
|
| Метод | Endpoint | Описание |
|
||||||
|
|-------|----------|----------|
|
||||||
|
| GET | `/api/v1/accounts/:id/karma` | Карма пользователя |
|
||||||
|
| GET | `/api/v1/karma/history` | История кармы (текущий пользователь) |
|
||||||
|
|
||||||
|
#### Экспорт
|
||||||
|
| Метод | Endpoint | Описание |
|
||||||
|
|-------|----------|----------|
|
||||||
|
| POST | `/api/v1/export` | Запрос экспорта данных |
|
||||||
|
| GET | `/api/v1/export/:job_id` | Статус экспорта |
|
||||||
|
| GET | `/api/v1/export/:job_id/download` | Скачивание архива |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ActivityPub API
|
||||||
|
|
||||||
|
### WebFinger
|
||||||
|
```
|
||||||
|
GET /.well-known/webfinger?resource=acct:{username}@{domain}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Ответ**:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"subject": "acct:username@yaru.nixg.ru",
|
||||||
|
"links": [
|
||||||
|
{
|
||||||
|
"rel": "self",
|
||||||
|
"type": "application/activity+json",
|
||||||
|
"href": "https://yaru.nixg.ru/users/username"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Actor (Профиль пользователя)
|
||||||
|
```
|
||||||
|
GET /users/{username}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Ответ** (ActivityPub Actor):
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"@context": [
|
||||||
|
"https://www.w3.org/ns/activitystreams",
|
||||||
|
"https://w3id.org/security/v1"
|
||||||
|
],
|
||||||
|
"id": "https://yaru.nixg.ru/users/username",
|
||||||
|
"type": "Person",
|
||||||
|
"preferredUsername": "username",
|
||||||
|
"name": "Display Name",
|
||||||
|
"summary": "<p>Bio text</p>",
|
||||||
|
"inbox": "https://yaru.nixg.ru/users/username/inbox",
|
||||||
|
"outbox": "https://yaru.nixg.ru/users/username/outbox",
|
||||||
|
"followers": "https://yaru.nixg.ru/users/username/followers",
|
||||||
|
"following": "https://yaru.nixg.ru/users/username/following",
|
||||||
|
"publicKey": {
|
||||||
|
"id": "https://yaru.nixg.ru/users/username#main-key",
|
||||||
|
"owner": "https://yaru.nixg.ru/users/username",
|
||||||
|
"publicKeyPem": "-----BEGIN PUBLIC KEY-----..."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Inbox (Входящие активности)
|
||||||
|
```
|
||||||
|
POST /users/{username}/inbox
|
||||||
|
```
|
||||||
|
|
||||||
|
**Принимаемые активности**:
|
||||||
|
- `Follow` — запрос подписки
|
||||||
|
- `Undo` — отмена подписки/лайка
|
||||||
|
- `Create` — новый пост (от подписчиков)
|
||||||
|
- `Like` — лайк поста
|
||||||
|
- `Announce` — репост
|
||||||
|
|
||||||
|
### Outbox (Исходящие активности)
|
||||||
|
```
|
||||||
|
GET /users/{username}/outbox
|
||||||
|
```
|
||||||
|
|
||||||
|
**Ответ**:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"@context": "https://www.w3.org/ns/activitystreams",
|
||||||
|
"id": "https://yaru.nixg.ru/users/username/outbox",
|
||||||
|
"type": "OrderedCollection",
|
||||||
|
"totalItems": 42,
|
||||||
|
"orderedItems": [
|
||||||
|
{
|
||||||
|
"id": "https://yaru.nixg.ru/statuses/123/activity",
|
||||||
|
"type": "Create",
|
||||||
|
"actor": "https://yaru.nixg.ru/users/username",
|
||||||
|
"object": { ... }
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Формат ошибок
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"error": {
|
||||||
|
"code": "VALIDATION_ERROR",
|
||||||
|
"message": "Поле 'content' не может быть пустым",
|
||||||
|
"details": {
|
||||||
|
"field": "content",
|
||||||
|
"reason": "required"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Коды ошибок
|
||||||
|
| Код | HTTP статус | Описание |
|
||||||
|
|-----|-------------|----------|
|
||||||
|
| `VALIDATION_ERROR` | 400 | Ошибка валидации |
|
||||||
|
| `UNAUTHORIZED` | 401 | Не авторизован |
|
||||||
|
| `FORBIDDEN` | 403 | Нет доступа |
|
||||||
|
| `NOT_FOUND` | 404 | Ресурс не найден |
|
||||||
|
| `RATE_LIMITED` | 429 | Превышен лимит |
|
||||||
|
| `INTERNAL_ERROR` | 500 | Внутренняя ошибка |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Rate Limiting
|
||||||
|
|
||||||
|
| Endpoint | Лимит | Окно |
|
||||||
|
|----------|-------|------|
|
||||||
|
| `/api/v1/statuses` | 10 запросов | 1 минута |
|
||||||
|
| `/api/v1/timelines/*` | 60 запросов | 1 минута |
|
||||||
|
| `/oauth/token` | 5 запросов | 1 минута |
|
||||||
|
| `/api/v1/export` | 1 запрос | 1 час |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Вопросы для обсуждения
|
||||||
|
|
||||||
|
- [ ] Нужна ли пагинация через cursor или offset?
|
||||||
|
- [ ] Требуется ли версионирование API (`/api/v2/...`)?
|
||||||
|
- [ ] Какие поля включать в ответ при ошибке?
|
||||||
|
- [ ] Нужна ли поддержка GraphQL для сложных запросов?
|
||||||
@@ -0,0 +1,130 @@
|
|||||||
|
# Backend документация
|
||||||
|
|
||||||
|
## Стек технологий
|
||||||
|
|
||||||
|
| Компонент | Технология | Примечание |
|
||||||
|
|-----------|------------|------------|
|
||||||
|
| Язык | Python 3.11+ | |
|
||||||
|
| Фреймворк | FastAPI | Асинхронный, автодокументация |
|
||||||
|
| База данных | PostgreSQL 15+ | Основная БД |
|
||||||
|
| Кэш | PostgreSQL + pg_redis | Или Redis через extension |
|
||||||
|
| Очереди | PostgreSQL + pgqueue | Или Celery + Redis |
|
||||||
|
| ORM | SQLAlchemy 2.0 + Async | Асинхронная работа |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Архитектура сервера
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────────────────────────────┐
|
||||||
|
│ FastAPI App │
|
||||||
|
├─────────────┬─────────────┬─────────────┬───────────────┤
|
||||||
|
│ REST API │ ActivityPub │ Auth API │ Export API │
|
||||||
|
│ (лента, │ (inbox, │ (OAuth2, │ (markdown, │
|
||||||
|
│ профили) │ outbox) │ JWT) │ медиа) │
|
||||||
|
└─────────────┴─────────────┴─────────────┴───────────────┘
|
||||||
|
│
|
||||||
|
┌─────────▼──────────┐
|
||||||
|
│ PostgreSQL │
|
||||||
|
│ ───────────────── │
|
||||||
|
│ • pg_redis (кэш) │
|
||||||
|
│ • pgqueue (очереди)│
|
||||||
|
│ • pg_trgm (поиск) │
|
||||||
|
└────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Требования к бэкенду
|
||||||
|
|
||||||
|
### 1. ActivityPub реализация
|
||||||
|
|
||||||
|
- [ ] **Inbox** — приём активностей от других серверов
|
||||||
|
- [ ] **Outbox** — отправка активностей подписчикам
|
||||||
|
- [ ] **WebFinger** — обнаружение пользователей по @username@domain
|
||||||
|
- [ ] **Actor** — профиль пользователя в формате ActivityPub
|
||||||
|
- [ ] **Follow/Unfollow** — подписки между серверами
|
||||||
|
- [ ] **Create/Update/Delete** — посты и их редактирование
|
||||||
|
- [ ] **Like/Announce** — лайки и репосты
|
||||||
|
- [ ] **Mastodon совместимость** — тестирование с mastodon.social
|
||||||
|
|
||||||
|
### 2. REST API
|
||||||
|
|
||||||
|
- [ ] `/api/v1/accounts` — управление профилем
|
||||||
|
- [ ] `/api/v1/statuses` — создание/чтение постов
|
||||||
|
- [ ] `/api/v1/timelines/home` — домашняя лента
|
||||||
|
- [ ] `/api/v1/timelines/public` — публичная лента
|
||||||
|
- [ ] `/api/v1/follows` — подписки
|
||||||
|
- [ ] `/api/v1/karma` — карма пользователя
|
||||||
|
|
||||||
|
### 3. База данных (PostgreSQL)
|
||||||
|
|
||||||
|
#### Основные таблицы:
|
||||||
|
- `users` — пользователи (id, username, domain, display_name, bio, karma)
|
||||||
|
- `posts` — посты (id, user_id, content, content_type, created_at)
|
||||||
|
- `follows` — подписки (follower_id, following_id, created_at)
|
||||||
|
- `likes` — лайки (user_id, post_id, created_at)
|
||||||
|
- `media` — медиафайлы (id, user_id, filename, mime_type, size)
|
||||||
|
- `activities` — ActivityPub активности (id, type, actor, object, timestamp)
|
||||||
|
|
||||||
|
#### PostgreSQL расширения:
|
||||||
|
- `pg_trgm` — полнотекстовый поиск по постам
|
||||||
|
- `pg_redis` — кэширование лент
|
||||||
|
- `pgqueue` — фоновые задачи (отправка активностей)
|
||||||
|
|
||||||
|
### 4. Экспорт контента
|
||||||
|
|
||||||
|
**Требование**: Пользователь может экспортировать весь свой контент в виде:
|
||||||
|
|
||||||
|
```
|
||||||
|
export_username_2026-03-01/
|
||||||
|
├── profile.md # Информация о профиле
|
||||||
|
├── posts/
|
||||||
|
│ ├── 2026-03-01_post-123.md
|
||||||
|
│ ├── 2026-03-02_post-124.md
|
||||||
|
│ └── ...
|
||||||
|
├── media/
|
||||||
|
│ ├── image-001.png
|
||||||
|
│ ├── image-002.jpg
|
||||||
|
│ └── ...
|
||||||
|
└── manifest.json # Структура экспорта
|
||||||
|
```
|
||||||
|
|
||||||
|
- [ ] Формат постов — Markdown с frontmatter (дата, теги, карма)
|
||||||
|
- [ ] Медиа — оригинальные файлы с переименованием
|
||||||
|
- [ ] Manifest — JSON со списком всех файлов и метаданными
|
||||||
|
- [ ] API endpoint: `GET /api/v1/export/@username`
|
||||||
|
|
||||||
|
### 5. Аутентификация
|
||||||
|
|
||||||
|
- [ ] OAuth2 + JWT токены
|
||||||
|
- [ ] Поддержка Application Passwords для клиентов
|
||||||
|
- [ ] Сессии с возможностью отзыва
|
||||||
|
|
||||||
|
### 6. Карма
|
||||||
|
|
||||||
|
- [ ] Механизм начисления/списания кармы
|
||||||
|
- [ ] Защита от накрутки (лимиты, анти-спам)
|
||||||
|
- [ ] История изменений кармы
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## План разработки бэкенда
|
||||||
|
|
||||||
|
1. [ ] Настройка проекта FastAPI + SQLAlchemy
|
||||||
|
2. [ ] Модели базы данных (users, posts, follows, likes)
|
||||||
|
3. [ ] REST API (CRUD для постов, профили)
|
||||||
|
4. [ ] ActivityPub базовая реализация (Actor, Outbox)
|
||||||
|
5. [ ] ActivityPub полная реализация (Inbox, Federation)
|
||||||
|
6. [ ] Экспорт контента (Markdown + медиа)
|
||||||
|
7. [ ] Система кармы
|
||||||
|
8. [ ] Тестирование совместимости с Mastodon
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Вопросы для обсуждения
|
||||||
|
|
||||||
|
- [ ] Нужно ли поддерживать совместимость с другими Fediverse-серверами (Pleroma, Pixelfed)?
|
||||||
|
- [ ] Требуется ли rate limiting на API? Какие лимиты?
|
||||||
|
- [ ] Как хранить медиа: локально, S3, или оба варианта?
|
||||||
|
- [ ] Нужна ли модерация контента (админ-панель)?
|
||||||
@@ -0,0 +1,205 @@
|
|||||||
|
# Деплой и инфраструктура
|
||||||
|
|
||||||
|
## Архитектура развёртывания
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────┐
|
||||||
|
│ Nginx/Traefik │
|
||||||
|
│ (reverse proxy)│
|
||||||
|
└────────┬────────┘
|
||||||
|
│
|
||||||
|
┌──────────────┼──────────────┐
|
||||||
|
│ │ │
|
||||||
|
┌────────▼───────┐ ┌───▼────────┐ ┌───▼────────┐
|
||||||
|
│ FastAPI App │ │ FastAPI │ │ PostgreSQL│
|
||||||
|
│ (instance 1) │ │ (instance 2)│ │ + pgqueue │
|
||||||
|
└────────────────┘ └────────────┘ └────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Docker контейнеризация
|
||||||
|
|
||||||
|
### Структура проекта
|
||||||
|
```
|
||||||
|
yaru.nixg.ru/
|
||||||
|
├── docker-compose.yml # Основной compose для разработки
|
||||||
|
├── docker-compose.prod.yml # Production конфигурация
|
||||||
|
├── Dockerfile # Образ приложения
|
||||||
|
└── docker/
|
||||||
|
├── nginx/
|
||||||
|
└── postgres/
|
||||||
|
```
|
||||||
|
|
||||||
|
### docker-compose.yml (разработка)
|
||||||
|
```yaml
|
||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
services:
|
||||||
|
db:
|
||||||
|
image: postgres:15
|
||||||
|
environment:
|
||||||
|
POSTGRES_DB: yaru
|
||||||
|
POSTGRES_USER: yaru
|
||||||
|
POSTGRES_PASSWORD: yaru_dev
|
||||||
|
volumes:
|
||||||
|
- postgres_data:/var/lib/postgresql/data
|
||||||
|
|
||||||
|
app:
|
||||||
|
build: .
|
||||||
|
command: uvicorn main:app --reload --host 0.0.0.0
|
||||||
|
volumes:
|
||||||
|
- .:/app
|
||||||
|
environment:
|
||||||
|
DATABASE_URL: postgresql://yaru:yaru_dev@db/yaru
|
||||||
|
depends_on:
|
||||||
|
- db
|
||||||
|
|
||||||
|
nginx:
|
||||||
|
image: nginx:alpine
|
||||||
|
ports:
|
||||||
|
- "8000:80"
|
||||||
|
volumes:
|
||||||
|
- ./docker/nginx/dev.conf:/etc/nginx/nginx.conf
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
postgres_data:
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Production развёртывание
|
||||||
|
|
||||||
|
### Требования
|
||||||
|
- [ ] VPS с Ubuntu 22.04+ (минимум 2GB RAM, 2 CPU)
|
||||||
|
- [ ] Домен с настроенным DNS
|
||||||
|
- [ ] SSL сертификат (Let's Encrypt)
|
||||||
|
|
||||||
|
### Переменные окружения (production)
|
||||||
|
```bash
|
||||||
|
# База данных
|
||||||
|
DATABASE_URL=postgresql://yaru:***@localhost/yaru_prod
|
||||||
|
DATABASE_POOL_SIZE=20
|
||||||
|
|
||||||
|
# Безопасность
|
||||||
|
SECRET_KEY=***
|
||||||
|
JWT_EXPIRE_HOURS=24
|
||||||
|
|
||||||
|
# Файлы
|
||||||
|
MEDIA_ROOT=/var/yaru/media
|
||||||
|
MAX_UPLOAD_SIZE=50MB
|
||||||
|
|
||||||
|
# Fediverse
|
||||||
|
SERVER_DOMAIN=yaru.nixg.ru
|
||||||
|
SERVER_NAME=YARU
|
||||||
|
|
||||||
|
# Логирование
|
||||||
|
LOG_LEVEL=INFO
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## CI/CD пайплайн
|
||||||
|
|
||||||
|
### GitHub Actions (пример)
|
||||||
|
```yaml
|
||||||
|
name: Deploy
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [main]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- name: Run tests
|
||||||
|
run: pytest
|
||||||
|
|
||||||
|
deploy:
|
||||||
|
needs: test
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Deploy to VPS
|
||||||
|
run: |
|
||||||
|
ssh user@server "cd /var/yaru && docker-compose pull && docker-compose up -d"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Мониторинг и логирование
|
||||||
|
|
||||||
|
### Логи
|
||||||
|
- [ ] Access logs (Nginx)
|
||||||
|
- [ ] Application logs (FastAPI → JSON format)
|
||||||
|
- [ ] Database logs (PostgreSQL slow queries)
|
||||||
|
|
||||||
|
### Метрики для мониторинга
|
||||||
|
- [ ] Response time (p50, p95, p99)
|
||||||
|
- [ ] Error rate
|
||||||
|
- [ ] Active users
|
||||||
|
- [ ] Posts per hour
|
||||||
|
- [ ] Federation activities
|
||||||
|
|
||||||
|
### Инструменты
|
||||||
|
- [ ] Prometheus + Grafana (метрики)
|
||||||
|
- [ ] Loki (логи)
|
||||||
|
- [ ] Uptime Kuma (доступность)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Резервное копирование
|
||||||
|
|
||||||
|
### Что备份ровать
|
||||||
|
- [ ] PostgreSQL дамп (ежедневно)
|
||||||
|
- [ ] Медиафайлы (ежедневно)
|
||||||
|
- [ ] Конфигурационные файлы
|
||||||
|
|
||||||
|
### Стратегия
|
||||||
|
```bash
|
||||||
|
# Ежедневный бэкап БД
|
||||||
|
pg_dump -U yaru yaru > /backups/yaru_$(date +%Y%m%d).sql
|
||||||
|
|
||||||
|
# Синхронизация медиа
|
||||||
|
rsync -av /var/yaru/media /backups/media/
|
||||||
|
|
||||||
|
# Хранение: 7 дней локально, 30 дней в облаке
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Масштабирование
|
||||||
|
|
||||||
|
### Горизонтальное
|
||||||
|
- [ ] Несколько инстансов FastAPI за load balancer
|
||||||
|
- [ ] PostgreSQL репликация (read replicas)
|
||||||
|
- [ ] CDN для статики и медиа
|
||||||
|
|
||||||
|
### Оптимизация
|
||||||
|
- [ ] Кэширование лент в Redis
|
||||||
|
- [ ] Индексы PostgreSQL для частых запросов
|
||||||
|
- [ ] Фоновая отправка ActivityPub через очереди
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Чеклист деплоя
|
||||||
|
|
||||||
|
- [ ] Купить домен, настроить DNS
|
||||||
|
- [ ] Подготовить VPS (Ubuntu, firewall, SSH keys)
|
||||||
|
- [ ] Установить Docker + Docker Compose
|
||||||
|
- [ ] Настроить Nginx + SSL (Let's Encrypt)
|
||||||
|
- [ ] Развернуть PostgreSQL
|
||||||
|
- [ ] Запустить FastAPI приложение
|
||||||
|
- [ ] Настроить бэкапы
|
||||||
|
- [ ] Настроить мониторинг
|
||||||
|
- [ ] Протестировать ActivityPub federation
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Вопросы для обсуждения
|
||||||
|
|
||||||
|
- [ ] Какой хостинг выбрать (Timeweb, Selectel, Hetzner, DigitalOcean)?
|
||||||
|
- [ ] Нужен ли отдельный сервер для БД или всё на одном VPS?
|
||||||
|
- [ ] Использовать ли managed PostgreSQL или свой инстанс?
|
||||||
|
- [ ] Требуется ли CDN для медиа (Cloudflare, BunnyCDN)?
|
||||||
@@ -0,0 +1,129 @@
|
|||||||
|
# Дизайн документация
|
||||||
|
|
||||||
|
## План раздела
|
||||||
|
|
||||||
|
- [ ] Логотип и фирменный стиль
|
||||||
|
- [ ] Цветовая палитра
|
||||||
|
- [ ] Типографика
|
||||||
|
- [ ] Дизайн-система компонентов
|
||||||
|
- [ ] Макеты основных страниц
|
||||||
|
- [ ] Анимации и переходы
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Логотип
|
||||||
|
|
||||||
|
### Концепция
|
||||||
|
- **Минимализм** — простой запоминающийся символ
|
||||||
|
- **Адаптивность** — работает с разными подзаголовками
|
||||||
|
- **Fediverse связь** — визуальная ассоциация с федеративными сетями
|
||||||
|
|
||||||
|
### Варианты
|
||||||
|
- [ ] Основной логотип (цветной)
|
||||||
|
- [ ] Монохромная версия
|
||||||
|
- [ ] Иконка для favicon/app
|
||||||
|
- [ ] Версия с подзаголовком (YARU Service/Revolution/Blog/Fediverse)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Цветовая палитра
|
||||||
|
|
||||||
|
### Основная (требует утверждения)
|
||||||
|
|
||||||
|
| Цвет | HEX | Использование |
|
||||||
|
|------|-----|---------------|
|
||||||
|
| Primary | `# TBD` | Кнопки, ссылки, акценты |
|
||||||
|
| Secondary | `# TBD` | Вторичные элементы |
|
||||||
|
| Background | `# TBD` | Фон приложения |
|
||||||
|
| Surface | `# TBD` | Карточки, панели |
|
||||||
|
| Text Primary | `# TBD` | Основной текст |
|
||||||
|
| Text Secondary | `# TBD` | Вторичный текст |
|
||||||
|
| Success | `# TBD` | Положительные действия |
|
||||||
|
| Error | `# TBD` | Ошибки |
|
||||||
|
| Warning | `# TBD` | Предупреждения |
|
||||||
|
|
||||||
|
### Тёмная тема
|
||||||
|
- [ ] Определить цвета для тёмной темы
|
||||||
|
- [ ] Автоматическое переключение по системным настройкам
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Типографика
|
||||||
|
|
||||||
|
### Шрифты (требует выбора)
|
||||||
|
- [ ] Основной шрифт: **TBD** (Inter, Roboto, Open Sans?)
|
||||||
|
- [ ] Моноширинный: **TBD** (Fira Code, JetBrains Mono?)
|
||||||
|
- [ ] Поддержка кириллицы
|
||||||
|
|
||||||
|
### Иерархия
|
||||||
|
```
|
||||||
|
H1 — Заголовки страниц (32px)
|
||||||
|
H2 — Разделы (24px)
|
||||||
|
H3 — Подразделы (20px)
|
||||||
|
Body — Основной текст (16px)
|
||||||
|
Small — Вторичный текст (14px)
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Компоненты дизайн-системы
|
||||||
|
|
||||||
|
### Базовые компоненты
|
||||||
|
- [ ] Button (primary, secondary, outline, ghost)
|
||||||
|
- [ ] Input (text, textarea, password)
|
||||||
|
- [ ] Card (пост, профиль)
|
||||||
|
- [ ] Avatar (пользователь)
|
||||||
|
- [ ] Badge (теги, статусы)
|
||||||
|
- [ ] Modal (диалоги)
|
||||||
|
- [ ] Toast (уведомления)
|
||||||
|
- [ ] Spinner (загрузка)
|
||||||
|
- [ ] Dropdown (меню)
|
||||||
|
|
||||||
|
### Специфичные компоненты
|
||||||
|
- [ ] PostCard (пост с контентом, медиа, кармой)
|
||||||
|
- [ ] KarmaCounter (отображение кармы)
|
||||||
|
- [ ] FollowButton (подписка/отписка)
|
||||||
|
- [ ] Timeline (лента постов)
|
||||||
|
- [ ] Composer (создание поста)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Макеты страниц
|
||||||
|
|
||||||
|
### Требуемые макеты
|
||||||
|
- [ ] Главная страница (лента)
|
||||||
|
- [ ] Профиль пользователя
|
||||||
|
- [ ] Создание поста
|
||||||
|
- [ ] Настройки
|
||||||
|
- [ ] Страница поста (детальный просмотр)
|
||||||
|
- [ ] Подписки/подписчики
|
||||||
|
- [ ] Поиск
|
||||||
|
- [ ] Landing page (для неавторизованных)
|
||||||
|
|
||||||
|
### Формат макетов
|
||||||
|
- [ ] Figma (предпочтительно)
|
||||||
|
- [ ] Или экспорты в PNG/SVG
|
||||||
|
- [ ] Mobile + Desktop версии
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Анимации и переходы
|
||||||
|
|
||||||
|
### Микроанимации
|
||||||
|
- [ ] Hover эффекты на кнопках
|
||||||
|
- [ ] Плавное появление постов в ленте
|
||||||
|
- [ ] Анимация лайка/репоста
|
||||||
|
- [ ] Индикатор загрузки
|
||||||
|
|
||||||
|
### Переходы между страницами
|
||||||
|
- [ ] Fade-in/fade-out
|
||||||
|
- [ ] Slide переходы для mobile
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Вопросы для обсуждения
|
||||||
|
|
||||||
|
- [ ] Есть ли предпочтения по цветовой схеме (тёплая/холодная)?
|
||||||
|
- [ ] Нужен ли готовый UI kit (Material, Chakra) или кастомный дизайн?
|
||||||
|
- [ ] Кто будет делать макеты (самостоятельно или заказывать)?
|
||||||
|
- [ ] Требуется ли brandbook документ?
|
||||||
@@ -0,0 +1,94 @@
|
|||||||
|
# Frontend документация
|
||||||
|
|
||||||
|
## Стек технологий
|
||||||
|
|
||||||
|
| Компонент | Технология | Примечание |
|
||||||
|
|-----------|------------|------------|
|
||||||
|
| Фреймворк | Svelte 4+ | Проверка достаточности возможностей |
|
||||||
|
| Язык | TypeScript | Строгая типизация |
|
||||||
|
| Сборщик | Vite | Быстрая разработка |
|
||||||
|
| Стили | SCSS + CSS Modules | Или Tailwind CSS |
|
||||||
|
| Состояние | Svelte Stores | Или Zustand-like решение |
|
||||||
|
| Роутинг | SvelteKit | Если нужен SSR |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Требования к фронтенду
|
||||||
|
|
||||||
|
### 1. Основные страницы
|
||||||
|
|
||||||
|
- [ ] **Лента (Home)** — посты подписок, бесконечный скролл
|
||||||
|
- [ ] **Публичная лента** — все посты сервера
|
||||||
|
- [ ] **Профиль пользователя** — аватар, био, карма, посты
|
||||||
|
- [ ] **Создание поста** — текстовый редактор + загрузка медиа
|
||||||
|
- [ ] **Пост (детальный просмотр)** — комментарии, лайки, репосты
|
||||||
|
- [ ] **Подписки/Подписчики** — списки пользователей
|
||||||
|
- [ ] **Настройки** — профиль, безопасность, экспорт данных
|
||||||
|
|
||||||
|
### 2. Компоненты интерфейса
|
||||||
|
|
||||||
|
- [ ] `PostCard` — отображение поста (текст, медиа, карма)
|
||||||
|
- [ ] `UserProfile` — карточка пользователя
|
||||||
|
- [ ] `Composer` — форма создания поста
|
||||||
|
- [ ] `Timeline` — лента постов с пагинацией
|
||||||
|
- [ ] `MediaGallery` — галерея изображений/видео
|
||||||
|
- [ ] `KarmaDisplay` — отображение кармы
|
||||||
|
- [ ] `FollowButton` — кнопка подписки/отписки
|
||||||
|
|
||||||
|
### 3. Интеграция с редактором
|
||||||
|
|
||||||
|
**Временно**: Используем готовые решения:
|
||||||
|
- [ ] TipTap — расширяемый WYSIWYG редактор
|
||||||
|
- [ ] Quill — простой редактор с Markdown поддержкой
|
||||||
|
- [ ] Markdown textarea — резервный вариант
|
||||||
|
|
||||||
|
**В будущем**: Интеграция с Chronicle.nixg.ru
|
||||||
|
|
||||||
|
### 4. Управление состоянием
|
||||||
|
|
||||||
|
- [ ] Глобальное состояние: текущий пользователь, настройки
|
||||||
|
- [ ] Кэш постов: оптимистичное обновление UI
|
||||||
|
- [ ] Real-time обновления: WebSocket для новых постов
|
||||||
|
|
||||||
|
### 5. Адаптивный дизайн
|
||||||
|
|
||||||
|
- [ ] Mobile first подход
|
||||||
|
- [ ] Поддержка тёмной темы
|
||||||
|
- [ ] PWA возможности (оффлайн режим, push уведомления)
|
||||||
|
|
||||||
|
### 6. Экспорт данных (UI)
|
||||||
|
|
||||||
|
- [ ] Кнопка "Экспортировать мои данные" в настройках
|
||||||
|
- [ ] Прогресс-бар экспорта
|
||||||
|
- [ ] Скачивание ZIP архива с контентом
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Вопросы для проверки Svelte
|
||||||
|
|
||||||
|
- [ ] Хватит ли Svelte Stores для сложного состояния (лента + real-time)?
|
||||||
|
- [ ] Нужен ли SSR через SvelteKit для SEO?
|
||||||
|
- [ ] Поддержка WebSocket в Svelte (для live обновлений)?
|
||||||
|
- [ ] Производительность при большом количестве постов в ленте?
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## План разработки фронтенда
|
||||||
|
|
||||||
|
1. [ ] Настройка Svelte + Vite + TypeScript
|
||||||
|
2. [ ] Базовая структура проекта (роуты, layout)
|
||||||
|
3. [ ] Компоненты: PostCard, UserProfile, Timeline
|
||||||
|
4. [ ] Интеграция с REST API бэкенда
|
||||||
|
5. [ ] Страница создания поста (редактор + медиа)
|
||||||
|
6. [ ] Real-time обновления (WebSocket)
|
||||||
|
7. [ ] Экспорт данных (UI + download)
|
||||||
|
8. [ ] Адаптивность + тёмная тема
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Вопросы для обсуждения
|
||||||
|
|
||||||
|
- [ ] Нужен ли SSR (SvelteKit) или достаточно SPA?
|
||||||
|
- [ ] Какой редактор выбрать для MVP (TipTap/Quill/Markdown)?
|
||||||
|
- [ ] Требуется ли поддержка PWA (оффлайн, push)?
|
||||||
|
- [ ] Нужна ли локализация интерфейса (только русский или мультиязычность)?
|
||||||
@@ -0,0 +1,110 @@
|
|||||||
|
# Маркетинговая документация
|
||||||
|
|
||||||
|
## Позиционирование проекта
|
||||||
|
|
||||||
|
**YARU** — Yet Another Russian Uncompleted...
|
||||||
|
*Федеративная социальная сеть для тех, кому есть что сказать*
|
||||||
|
|
||||||
|
### УТП (Уникальное Торговое Предложение)
|
||||||
|
|
||||||
|
1. **Без ограничений на длину** — пишите статьи, а не твиты
|
||||||
|
2. **Экспорт данных** — ваш контент всегда принадлежит вам
|
||||||
|
3. **Fediverse совместимость** — общайтесь с пользователями Mastodon
|
||||||
|
4. **Карма вместо лайков** — качественная оценка контента
|
||||||
|
5. **Русскоязычное сообщество** — локальная аудитория
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Целевая аудитория
|
||||||
|
|
||||||
|
| Сегмент | Описание | Потребности |
|
||||||
|
|---------|----------|-------------|
|
||||||
|
| Блогеры | Авторы длинных постов | Удобный редактор, форматирование |
|
||||||
|
| Мигранты из Twitter | Ищут альтернативу | Fediverse совместимость |
|
||||||
|
| Технические писатели | Документация, статьи | Markdown, экспорт |
|
||||||
|
| Приватные пользователи | Закрытые сообщества | Контроль аудитории |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Анализ конкурентов
|
||||||
|
|
||||||
|
### Mastodon
|
||||||
|
| Плюсы | Минусы |
|
||||||
|
|-------|--------|
|
||||||
|
| Большая аудитория | Ограничение 500 символов |
|
||||||
|
| Fediverse совместимость | Нет экспорта данных |
|
||||||
|
| Открытый код | Сложный интерфейс для новичков |
|
||||||
|
|
||||||
|
### Threads (Meta)
|
||||||
|
| Плюсы | Минусы |
|
||||||
|
|-------|--------|
|
||||||
|
| Простота | Закрытая экосистема |
|
||||||
|
| Интеграция с Instagram | Нет федерации |
|
||||||
|
| | Проблемы с приватностью |
|
||||||
|
|
||||||
|
### Bluesky
|
||||||
|
| Плюсы | Минусы |
|
||||||
|
|-------|--------|
|
||||||
|
| AT Protocol | Только английский язык |
|
||||||
|
| Без ограничений | Закрытый доступ (invite) |
|
||||||
|
| | Нет Fediverse совместимости |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Сменяемая концепция названия
|
||||||
|
|
||||||
|
**YARU** — базовое название с динамическим подзаголовком:
|
||||||
|
|
||||||
|
- **YARU Service** — акцент на сервис для пользователей
|
||||||
|
- **YARU Revolution** — революция в социальных сетях
|
||||||
|
- **YARU Blog** — платформа для блогинга
|
||||||
|
- **YARU Fediverse** — часть федеративной сети
|
||||||
|
|
||||||
|
*Реализация*: Подзаголовок меняется в заголовке сайта и мета-тегах.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Стратегия продвижения
|
||||||
|
|
||||||
|
### Этап 1: Pre-launch
|
||||||
|
- [ ] Создать landing page с описанием проекта
|
||||||
|
- [ ] Собрать email ранних пользователей
|
||||||
|
- [ ] Публикация в тематических Telegram-каналах
|
||||||
|
|
||||||
|
### Этап 2: Launch
|
||||||
|
- [ ] Открыть регистрацию для первых 1000 пользователей
|
||||||
|
- [ ] Публикация на Habr, VC.ru
|
||||||
|
- [ ] Участие в Fediverse сообществах
|
||||||
|
|
||||||
|
### Этап 3: Growth
|
||||||
|
- [ ] Реферальная программа
|
||||||
|
- [ ] Интеграции с другими сервисами
|
||||||
|
- [ ] Партнёрства с блогерами
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Брендинг
|
||||||
|
|
||||||
|
### Название
|
||||||
|
- **Основное**: YARU
|
||||||
|
- **Расшифровка**: Yet Another Russian Uncompleted...
|
||||||
|
- **Домен**: yaru.nixg.ru (рабочий)
|
||||||
|
|
||||||
|
### Логотип
|
||||||
|
- [ ] Простой, запоминающийся символ
|
||||||
|
- [ ] Адаптация под сменяемые подзаголовки
|
||||||
|
- [ ] Версии: светлая/тёмная, цветная/монохром
|
||||||
|
|
||||||
|
### Цветовая схема
|
||||||
|
- [ ] Основной цвет: ( TBD )
|
||||||
|
- [ ] Акцентные цвета: ( TBD )
|
||||||
|
- [ ] Тёмная тема: ( TBD )
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Вопросы для обсуждения
|
||||||
|
|
||||||
|
- [ ] Нужно ли регистрировать отдельный домен (yaru.ru, yaru.social)?
|
||||||
|
- [ ] Какой подзаголовок использовать для запуска?
|
||||||
|
- [ ] Требуется ли программа раннего доступа?
|
||||||
|
- [ ] Как работать с модерацией контента (правила сообщества)?
|
||||||
|
After Width: | Height: | Size: 56 KiB |
|
After Width: | Height: | Size: 212 KiB |
|
After Width: | Height: | Size: 214 KiB |
|
After Width: | Height: | Size: 233 KiB |
|
After Width: | Height: | Size: 98 KiB |
|
After Width: | Height: | Size: 102 KiB |
|
After Width: | Height: | Size: 105 KiB |
|
After Width: | Height: | Size: 99 KiB |
|
After Width: | Height: | Size: 97 KiB |
|
After Width: | Height: | Size: 96 KiB |
|
After Width: | Height: | Size: 100 KiB |
|
After Width: | Height: | Size: 191 KiB |
|
After Width: | Height: | Size: 83 KiB |
|
After Width: | Height: | Size: 78 KiB |
|
After Width: | Height: | Size: 90 KiB |
|
After Width: | Height: | Size: 146 KiB |
|
After Width: | Height: | Size: 145 KiB |
|
After Width: | Height: | Size: 178 KiB |
|
After Width: | Height: | Size: 108 KiB |
|
After Width: | Height: | Size: 407 KiB |
|
After Width: | Height: | Size: 494 KiB |
|
After Width: | Height: | Size: 103 KiB |
|
After Width: | Height: | Size: 89 KiB |
|
After Width: | Height: | Size: 86 KiB |
|
After Width: | Height: | Size: 88 KiB |
|
After Width: | Height: | Size: 114 KiB |
|
After Width: | Height: | Size: 100 KiB |
|
After Width: | Height: | Size: 92 KiB |
|
After Width: | Height: | Size: 84 KiB |
|
After Width: | Height: | Size: 84 KiB |
|
After Width: | Height: | Size: 110 KiB |
|
After Width: | Height: | Size: 133 KiB |
@@ -0,0 +1 @@
|
|||||||
|
/* counted */
|
||||||
|
After Width: | Height: | Size: 43 B |
|
After Width: | Height: | Size: 1.2 KiB |
@@ -0,0 +1,8 @@
|
|||||||
|
(function(b){var a={};a.imageError=function(c){var d=c.parentNode,e=d.parentNode.childNodes.length>2?d:d.parentNode;e.innerHTML='<div class="b-image-error">Картинка недоступна</div>'};b.ya=a})(window);
|
||||||
|
/*!
|
||||||
|
* Copyright (c) 2010, Yahoo! Inc. All rights reserved.
|
||||||
|
* Code licensed under the BSD License:
|
||||||
|
* http://developer.yahoo.com/yui/license.html
|
||||||
|
* version: 2.8.2r1
|
||||||
|
*/
|
||||||
|
ya.namespace=function(){var b=arguments,g=null,e,c,f;for(e=0;e<b.length;e=e+1){f=(""+b[e]).split(".");g=ya;for(c=(f[0]=="ya")?1:0;c<f.length;c=c+1){g[f[c]]=g[f[c]]||{};g=g[f[c]]}}return g};
|
||||||
|
After Width: | Height: | Size: 673 B |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1,4 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<!-- saved from url=(0044)http://clubs.ya.ru/update_session.xml?build= -->
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><script type="text/javascript" charset="utf-8" src="mega-y5.js"></script><script type="text/javascript" charset="utf-8" src="update_session.js"></script></head><body>
|
||||||
|
</body></html>
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
y5.require(
|
||||||
|
['Cookies'],
|
||||||
|
function() {
|
||||||
|
/**
|
||||||
|
* Обновляет сессию с помощью редиректа на паспорт.
|
||||||
|
*/
|
||||||
|
function updateSession()
|
||||||
|
{
|
||||||
|
y5.Cookies.set('Cookie_check', '1', false); // для текущего домена
|
||||||
|
var loc = window.location;
|
||||||
|
var url = loc.protocol.concat('//', loc.host) + '/pass?retpath=' + encodeURIComponent(window.parent.friendsURL('update_session'));
|
||||||
|
window.location.replace(url);
|
||||||
|
}
|
||||||
|
|
||||||
|
// обновляем сессию каждые 55 минут
|
||||||
|
var update_delta = 55*1000*60;
|
||||||
|
if (update_delta) window.setTimeout(updateSession, update_delta);
|
||||||
|
}
|
||||||
|
)
|
||||||
@@ -0,0 +1,113 @@
|
|||||||
|
(function(f,d,ga){function E(a,b){return function(){try{return a.apply(this,arguments)}catch(c){("string"!=typeof c.message||-1==c.message.indexOf("NPObject")&&-1==c.message.indexOf("Too much time spent in unload handler"))&&qa(c,b)}}}function qa(a,b){if(0.01>Math.random()){var c=["cp: "+b,a.name+": "+a.message,"debug: "+Aa,"code: "+Ma,"stack: "+a.stack];(new Image).src="//an.yandex.ru/jserr/101500?cnt-class=100&errmsg="+encodeURIComponent(c.join("; ").replace(/\r?\n/g,"\\n"))}}function P(a,b,c){return f.setTimeout(E(a,
|
||||||
|
c||"setTimeout"),b)}function B(){for(var a={},b="hash host hostname href pathname port protocol search".split(" "),c=b.length,d=c;d--;)a[b[d]]="";try{for(var g=f.location,d=c;d--;){var h=b[d];a[h]=""+g[h]}}catch(l){H&&(a=H)}return a}function mb(a){return a?(""+a).replace(/^\s+/,"").replace(/\s+$/,""):""}function Ba(a){return-1!==(""+f.navigator.userAgent).toLowerCase().search(a)}function sa(a){try{delete f[a]}catch(b){f[a]=ga}}function ta(a){var b=d.createElement("script");b.type="text/javascript";
|
||||||
|
b.async=!0;b.src=a;try{var c=d.getElementsByTagName("html")[0];d.getElementsByTagName("head")[0]||c.appendChild(d.createElement("head"));var f=d.getElementsByTagName("head")[0];f.insertBefore(b,f.firstChild)}catch(g){}}function ha(){if(top!=f&&parent==top&&f.postMessage&&!Ya.Metrika_visorPlayerOn){Ya.Metrika_visorPlayerOn=!0;var a=d.createElement("div");a.innerHTML='<iframe name="RemoteIframe" allowtransparency="true" style="position: absolute; left: -999px; top: -999px; width: 1px; height: 1px;"></iframe>';
|
||||||
|
var b=a.firstChild;P(function(){var c=d.body||d.documentElement;a.webkitCreateShadowRoot&&(c.appendChild(a),c=a.webkitCreateShadowRoot(),Ya.Metrika_shadowAppRoot=c);c.appendChild(b);try{var s=b.contentWindow.document}catch(g){}s&&(c=Math.random(),f[c]=function(a,b,c,g,d){try{c.postMessage&&(a.onmessage=function(c){c=c||a.event;try{var f=JSON.parse(c.data)}catch(s){return}if(/(^|\.)yandex\.(ru|com|ua|kz|by|com\.tr)(:\d{4})?$/.test(c.origin)&&f&&"script"==f.name&&f.data){c=g.getElementsByTagName("head")[0];
|
||||||
|
var h=g.createElement("base");h.href=f.data;c.appendChild(h);h=g.createElement("script");h.src=f.data;c.appendChild(h);-1<d.userAgent.indexOf("Firefox/3.6.")&&b.removeEventListener("message",a.onmessage,!1);a.onmessage=null}},-1<d.userAgent.indexOf("Firefox/3.6.")&&b.addEventListener("message",a.onmessage,!1),c.postMessage('{"name":"ping"}',"*"))}catch(f){}},s.open(),s.write('<!doctype html><html><head><meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7,IE=edge" /></head><body><script type="text/javascript">eval("(" + Function.prototype.toString.call(parent['+
|
||||||
|
c+']) + ")")(window, parent, top, document, navigator);\x3c/script></body></html>'),s.close())},500)}}function Wa(a,b,c,s,g,ra){function lb(a){var e=(new Date).getTime();a&&e<a&&(Xa+=a-e+r);P(function(){lb(e)},r,"timeCorrector")}function Na(){var a=(new Date).getTime()+Xa;a<Za&&(a=Za+r/2);return Za=a}function x(){return Math.round((Na()-za)/M)}function q(a,e){e=Math.max(0,Math.min(e,65535));l.mergeArrays(a,[e>>8,e&255])}function z(a,e){l.mergeArrays(a,[e&255])}function n(a,e){for(e=Math.max(0,e|0);127<
|
||||||
|
e;)l.mergeArrays(a,[e&127|128]),e>>=7;l.mergeArrays(a,[e])}function E(a,e){255<e.length&&(e=e.substr(0,255));l.mergeArrays(a,[e.length]);for(var b=0;b<e.length;b++)q(a,e.charCodeAt(b))}function H(a,e){n(a,e.length);for(var b=0;b<e.length;b++)n(a,e.charCodeAt(b))}function C(a,e,b,c,k,t){for(;b&&(!b.offsetWidth||!b.offsetHeight);)b=m.getElementParent(b);if(!b)return null;var v=b[G];if(!v||0>v)return null;var g={mousemove:tb,click:sa,dblclick:ta,mousedown:ub,mouseup:qa,touch:A}[e];if(!g)return null;
|
||||||
|
var d=m.getElementXY(b);b=[];z(b,g);n(b,a);n(b,v);n(b,Math.max(0,c[0]-d[0]));n(b,Math.max(0,c[1]-d[1]));/^mouse(up|down)|click$/.test(e)&&(a=k||t,z(b,2>a?ha:a==(k?2:4)?Ta:la));return b}function L(a,e,b,c){e=e[G];if(!e||0>e)return null;var k=[];z(k,Ma);n(k,a);n(k,e);n(k,b[0]);n(k,b[1]);z(k,0);z(k,0);z(k,c);return k}function J(a,e){var b=[];z(b,vb);n(b,a);n(b,e[0]);n(b,e[1]);return b}function K(a,e,b){var k=[];b=b[G];if(!b||0>b)return null;z(k,wb);n(k,a);n(k,e[0]);n(k,e[1]);n(k,b);return k}function V(a,
|
||||||
|
e,b){var k=[];z(k,Ka);n(k,a);n(k,e[0]);n(k,e[1]);n(k,b[0]);n(k,b[1]);return k}function aa(a,e,b,k){var c=[];z(c,S);n(c,a);q(c,e);z(c,b);a=k[G];if(!a||0>a)a=0;n(c,a);return c}function ea(a,e){var b,k;0==e.length?k=b="":100>=e.length?(b=e,k=""):200>=e.length?(b=e.substr(0,100),k=e.substr(100)):(b=e.substr(0,97),k=e.substr(e.length-97));var c=[];z(c,La);n(c,a);H(c,b);H(c,k);return c}function X(a){var e=[];z(e,Ja);n(e,a);return e}function ia(a){var e=[];z(e,xb);n(e,a);return e}function ga(a){var e=[];
|
||||||
|
z(e,D);n(e,a);return e}function ka(a,e){var b=[];z(b,yb);n(b,a);n(b,e[G]);return b}function Z(a,e){var b=[];z(b,Ba);n(b,a);n(b,e[G]);return b}function $(a,e,b){var k=[];z(k,Ga);n(k,a);n(k,e[G]);E(k,String(b));return k}function ma(a){var e=a[G];if(!e||0>e||!/^INPUT|SELECT|TEXTAREA$/.test(a.nodeName)||!a.form||m.classNameExists(a.form,"-metrika-noform"))return null;var b=m.getFormNumber(a.form);if(0>b)return null;var k;k="INPUT"==a.nodeName?{text:0,color:0,date:0,datetime:0,"datetime-local":0,email:0,
|
||||||
|
number:0,range:0,search:0,tel:0,time:0,url:0,month:0,week:0,password:2,radio:3,checkbox:4,file:6,image:7}[a.type]:{SELECT:1,TEXTAREA:5}[a.nodeName];if("number"!=typeof k)return null;for(var c=-1,t=a.form.elements,v=t.length,g=0,d=0;g<v;g++)if(t[g].name==a.name){if(t[g]==a){c=d;break}d++}if(0>c)return null;t=[];z(t,F);n(t,e);n(t,b);n(t,k);H(t,a.name||"");n(t,c);return t}function xa(a,e){var b=m.getFormNumber(e);if(0>b)return null;for(var k=e.elements,c=k.length,t=[],v=0;v<c;v++)if(!m.isEmptyField(k[v])){var g=
|
||||||
|
k[v][G];g&&0<g&&l.mergeArrays(t,[g])}k=[];z(k,p);n(k,a);n(k,b);n(k,t.length);for(b=0;b<t.length;b++)n(k,t[b]);return k}function ya(){var a=[];z(a,Ab);return a}function y(a,e,b){a=a.apply(f,e);T.append(a,b)}function I(a){if(a[G])a:{var e=x(),b=a[G];if(0<b){var k=[];a=m.getElementRegion(a);var c=Oa[b],t=a[0]+"x"+a[1],v=a[2]+"x"+a[3];t!=c.pos&&(c.pos=t,z(k,ja),n(k,e),n(k,b),n(k,a[0]),n(k,a[1]));v!=c.size&&(c.size=v,z(k,Bb),n(k,e),n(k,b),n(k,a[2]),n(k,a[3]));if(k.length){a=k;break a}}a=null}else{(b=m.getElementParent(a))&&
|
||||||
|
I(b);a[G]=$a;Oa[$a]={};$a++;if(a.nodeName)if(b=+a[G],!isFinite(b)||0>=b)e=null;else{var k=Wa,c=0,g=m.getElementParent(a),t=g&&g[G]?g[G]:0;0>t&&(t=0);var v=a.nodeName.toUpperCase(),d=Ia[v];d||(k|=Ua);var f=m.getElementNeighborPosition(a);f||(k|=Va);var s=m.getElementRegion(a);(g=g?m.getElementRegion(g):null)&&s[0]==g[0]&&s[1]==g[1]&&s[2]==g[2]&&s[3]==g[3]&&(k|=nb);Oa[b].pos=s[0]+"x"+s[1];Oa[b].size=s[2]+"x"+s[3];a.id&&"string"==typeof a.id&&(k|=ob);(g=m.calcTextChecksum(a))&&(k|=Aa);var r=m.calcAttribChecksum(a);
|
||||||
|
r&&(c|=kb);var w;b:{w=m.getElementChildren(m.getElementParent(a),a.tagName);for(var F=0;F<w.length;F++)if((!w[F].id||"string"!=typeof w[F].id)&&m.calcAttribChecksum(w[F])==r&&m.calcTextChecksum(w[F])==g){w=!0;break b}w=!1}w&&(k|=fa,e=m.calcChildrenChecksum(a));w=[];z(w,Cb);n(w,b);z(w,k);n(w,t);d?z(w,d):E(w,v);f&&n(w,f);k&nb||(n(w,s[0]),n(w,s[1]),n(w,s[2]),n(w,s[3]));k&ob&&E(w,a.id);g&&q(w,g);k&fa&&q(w,e);z(w,c);r&&q(w,r);e=w}else a[G]=-1,e=null;T.append(e,void 0);a=ma(a)}T.append(a,void 0)}function ba(a){var e=
|
||||||
|
N.getTarget(a);if(e&&"SCROLLBAR"!=e.nodeName){if(e&&/^INPUT|SELECT|TEXTAREA|BUTTON$/.test(e.tagName))if(e[G])I(e);else{var b=e.form;if(b)for(var b=b.elements,k=b.length,c=0;c<k;c++)/^INPUT|SELECT|TEXTAREA|BUTTON$/.test(b[c].tagName)&&!b[c][G]&&I(b[c]);else I(e)}else I(e);y(C,[x(),a.type,e,N.getPos(a),a.which,a.button])}}function W(a){ba(a);var e,b;f.getSelection?(a=f.getSelection(),e=a.toString(),b=a.anchorNode):d.selection&&d.selection.createRange&&(a=d.selection.createRange(),e=a.text,b=a.parentElement());
|
||||||
|
if("string"==typeof e){for(;b&&1!=b.nodeType;)b=b.parentNode;b&&"INPUT"==b.tagName&&"password"==b.type||b&&(/(?:^|\s)-metrika-nokeys(?:\s|$)/.test(b.className)||m.getElementsByClassName("-metrika-nokeys",b).length)||e==ab||(ab=e,y(ea,[x(),e]))}}function ua(a){var e=Na(),b=e-pb;if(!(b<Q)){var k=N.getPos(a),c=bb[0]-k[0],t=bb[1]-k[1],c=c*c+t*t;0>=c||16>c&&100>b||20>b&&256>c||(pb=e,bb=k,ba(a))}}function ca(){var a=m.getDocumentScroll(),e=Na();e-qb<Q||10>Math.abs(a[0]-cb[0])&&10>Math.abs(a[1]-cb[1])||
|
||||||
|
(qb=e,cb=a,y(J,[x(),a]))}function Ca(a){a=N.getTarget(a);var e=Math.random(),b=[a.scrollLeft,a.scrollTop];if(a.localId){if(e=db[a.localId],!e||10>Math.abs(b[0]-e[0])&&10>Math.abs(b[1]-e[1]))return}else{for(;db[e];)e=Math.random();a.localId=e}db[a.localId]=b;a!==d&&(I(a),y(K,[x(),b,a]))}function va(){y(V,[x(),m.getViewportSize(),m.getDocumentSize()])}function u(){y(ya,[],!0)}function wa(a){return(a.shiftKey?rb:0)|(a.ctrlKey?eb:0)|(a.altKey?sb:0)|(a.metaKey?Ha:0)|(a.ctrlKey||a.altKey?Pa:0)}function na(a,
|
||||||
|
e,b){a=N.getTarget(a);"INPUT"==a.tagName&&"password"==a.type||/(?:^|\s)-metrika-nokeys(?:\s|$)/.test(a.className)||(I(a),y(aa,[x(),e,b,a]))}function oa(a){var e=a.keyCode,b=wa(a);if({3:1,8:1,9:1,13:1,16:1,17:1,18:1,19:1,20:1,27:1,33:1,34:1,35:1,36:1,37:1,38:1,39:1,40:1,45:1,46:1,91:1,92:1,93:1,106:1,110:1,111:1,144:1,145:1}[e]||112<=e&&123>=e||96<=e&&105>=e||b&Pa)19==e&&(b&~Pa)==eb&&(e=144),na(a,e,b|Pa),fb=!1,P(function(){fb=!0},1),67==e&&b&eb&&!(b&sb||b&rb)&&Y()}function pa(a){fb&&!gb&&0!==a.which&&
|
||||||
|
(na(a,a.charCode||a.keyCode,wa(a)),gb=!0,P(function(){gb=!1},1))}function Y(){hb||(hb=!0,ab&&y(X,[x()]),P(function(){hb=!1},1))}function O(){Da||(Da=!0,y(ia,[x()]))}function U(){Da&&(Da=!1,y(ga,[x()]))}function da(a){(!Da||a&&!a.fromElement)&&O()}function Ea(a){a&&!a.toElement&&U()}function R(a){if((a=N.getTarget(a))&&/^INPUT|SELECT|TEXTAREA|BUTTON$/.test(a.tagName)){if(a[G])I(a);else{var e=a.form;if(e)for(var e=e.elements,b=e.length,k=0;k<b;k++)/^INPUT|SELECT|TEXTAREA|BUTTON$/.test(e[k].tagName)&&
|
||||||
|
!e[k][G]&&I(e[k]);else I(a)}y(ka,[x(),a])}}function e(a){(a=N.getTarget(a))&&/^INPUT|SELECT|TEXTAREA|BUTTON$/.test(a.tagName)&&(I(a),y(Z,[x(),a]))}function k(a){a=N.getTarget(a);if(!("INPUT"==a.tagName&&"password"==a.type||a&&/(?:^|\s)-metrika-nokeys(?:\s|$)/.test(a.className))&&a&&/^INPUT|SELECT|TEXTAREA$/.test(a.tagName)){var e=/^(checkbox|radio)$/.test(a.type)?a.checked:a.value;I(a);y($,[x(),a,e])}}function t(a){a=N.getTarget(a);if(!m.classNameExists(a,"-metrika-noform")&&"FORM"==a.nodeName){for(var e=
|
||||||
|
a.elements,b=0;b<e.length;b++)m.isEmptyField(e[b])||I(e[b]);y(xa,[x(),a],!0)}}function v(a){ca();if(a.touches&&a.touches.length){var e=N.getTarget(a);if(e){I(e);for(var b=0;b<a.touches.length;b++)y(C,[x(),"touch",e,[a.touches[b].pageX,a.touches[b].pageY],0,0])}}}function w(a){var e=N.getTarget(a);if(e){var b;"wheel"==a.type?b=0<a.deltaY?1:0>a.deltaY?2:0:"mousewheel"==a.type&&(b=0<a.wheelDelta?2:0>a.wheelDelta?1:0);b&&(I(e),y(L,[x(),e,N.getPos(a),b]))}}var T=new Qa({protocol:a,counterId:b,counterType:c,
|
||||||
|
meta:{url:B().href,hitId:g,timezone:Ra,timestamp:Fa}}),r=20,M=50,Q=10,Cb=1,tb=2,vb=3,wb=16,ub=4,S=5,F=7,ja=9,Bb=10,p=11,A=12,Ab=13,xb=14,D=15,yb=17,Ba=18,Ga=19,Ja=27,Ka=28,La=29,qa=30,Ma=31,sa=32,ta=33,ha=1,la=2,Ta=4,fa=1,Ua=2,Va=4,nb=8,Aa=16,ob=32,Wa=64,kb=2,sb=1,rb=2,eb=4,Ha=8,Pa=16,Ia={A:1,ABBR:2,ACRONYM:3,ADDRESS:4,APPLET:5,AREA:6,B:7,BASE:8,BASEFONT:9,BDO:10,BIG:11,BLOCKQUOTE:12,BODY:13,BR:14,BUTTON:15,CAPTION:16,CENTER:17,CITE:18,CODE:19,COL:20,COLGROUP:21,DD:22,DEL:23,DFN:24,DIR:25,DIV:26,
|
||||||
|
DL:27,DT:28,EM:29,FIELDSET:30,FONT:31,FORM:32,FRAME:33,FRAMESET:34,H1:35,H2:36,H3:37,H4:38,H5:39,H6:40,HEAD:41,HR:42,HTML:43,I:44,IFRAME:45,IMG:46,INPUT:47,INS:48,ISINDEX:49,KBD:50,LABEL:51,LEGEND:52,LI:53,LINK:54,MAP:55,MENU:56,META:57,NOFRAMES:58,NOSCRIPT:59,OBJECT:60,OL:61,OPTGROUP:62,OPTION:63,P:64,PARAM:65,PRE:66,Q:67,S:68,SAMP:69,SCRIPT:70,SELECT:71,SMALL:72,SPAN:73,STRIKE:74,STRONG:75,STYLE:76,SUB:77,SUP:78,TABLE:79,TBODY:80,TD:81,TEXTAREA:82,TFOOT:83,TH:84,THEAD:85,TITLE:86,TR:87,TT:88,U:89,
|
||||||
|
UL:90,VAR:91,NOINDEX:100},Xa=0;lb(0);var Za=0,$a=1,pb=0,bb=[0,0],qb=0,cb=[0,0],db={},fb=!0,gb=!1,ab="",hb=!1,Da=!0,za=Na(),G="metrikaId_"+Math.random(),Oa={},Sa=":submit"+Math.random();if("MetrikaPlayer"!=f.name){h.on(d,"mousemove",ua);h.on(d,"click,dblclick,mousedown",ba);h.on(d,"mouseup",W);h.on(f,"scroll",ca);if("onmousewheel"in d)h.on(d,"mousewheel",w);else h.on(d,"wheel",w);h.on(f,"beforeunload",u);if(!ib)h.on(f,"unload",u);h.on(f,"resize",va);h.on(d,"keydown",oa);h.on(d,"keypress",pa);h.on(d,
|
||||||
|
"copy",Y);h.on(d,"touchmove,touchstart",v);d.attachEvent&&!f.opera?(h.on(d,"focusin",da),h.on(d,"focusout",Ea)):(h.on(f,"focus",O),h.on(f,"blur",U),h.on(d,"blur",U));d.addEventListener?(h.on(d,"scroll",Ca),h.on(d,"focus",R),h.on(d,"blur",e),h.on(d,"change",k),h.on(d,"submit",t)):d.attachEvent&&(h.on(d,"focusin",R),h.on(d,"focusout",e),function(){for(var a=d.getElementsByTagName("form"),e=0;e<a.length;e++){for(var b=a[e].getElementsByTagName("*"),c=0;c<b.length;c++)if(/^INPUT|SELECT|TEXTAREA$/.test(b[c].tagName))h.on(b[c],
|
||||||
|
"change",k);h.on(a[e],"submit",t)}}());(function(){var a=d.getElementsByTagName("form");if(a.length)for(var e=0;e<a.length;e++){var b=a[e].submit;if("function"==typeof b||"object"==typeof b&&/^\s*function submit\(\)/.test(String(b)))a[e][Sa]=b,a[e].submit=function(){t({target:this});return this[Sa]()}}})();"0:0"!=m.getDocumentScroll().join(":")&&ca();va();ra.uploadPage=function(e){if("function"==typeof f.toStaticHTML&&-1<f.toStaticHTML.toString().indexOf("NoScript"))return!1;var k=d.documentElement;
|
||||||
|
if(k&&19E4<(""+k.innerHTML).length)return!1;var t=f.XMLHttpRequest?new f.XMLHttpRequest:new ActiveXObject("Msxml2.XMLHTTP"),v=m.getDocumentCharset(),k="text/html"+(v?";charset="+v:""),s=new jb({protocol:a,counterId:b,counterType:c});if("html"==e)return e=RegExp("<script [^>]*?//mc\\.yandex\\.ru/watch/.*?\x3c/script>","gi"),s.sendContent(m.getDocumentHTML().replace(e,""),k,g,Ra,Fa),!0;t&&(t.open("get",B().href,!0),t.onreadystatechange=function(){4==t.readyState&&s.sendContent(t.responseText,t.getResponseHeader("content-type"),
|
||||||
|
g,Ra,Fa)},t.overrideMimeType&&v&&t.overrideMimeType(k),t.send(null));return!0}}return{start:function(){T.activate()},stop:function(){T.clear();h.un(d,"mousemove",ua);h.un(d,"click,dblclick,mousedown",ba);h.un(d,"mouseup",W);h.un(d,"mousewheel,wheel",w);h.un(f,"scroll",ca);h.un(f,"beforeunload",u);h.un(f,"unload",u);h.un(f,"resize",va);h.un(d,"keydown",oa);h.un(d,"keypress",pa);h.un(d,"copy",Y);h.un(d,"touchmove,touchstart",v);h.un(d,"focusin",da);h.un(d,"focusout",Ea);h.un(f,"focus",O);h.un(f,"blur",
|
||||||
|
U);h.un(d,"blur",U);d.removeEventListener?(h.un(d,"scroll",Ca),h.un(d,"focus",R),h.un(d,"blur",e),h.un(d,"change",k),h.un(d,"submit",t)):d.detachEvent&&(h.un(d,"focusin",R),h.un(d,"focusout",e),function(){for(var a=d.getElementsByTagName("form"),e=0;e<a.length;e++){for(var b=a[e].getElementsByTagName("*"),c=0;c<b.length;c++)/^INPUT|SELECT|TEXTAREA$/.test(b[c].tagName)&&h.un(b[c],"change",k);h.un(a[e],"submit",t)}}());(function(){for(var a=d.getElementsByTagName("form"),e=0;e<a.length;e++)a[e][Sa]&&
|
||||||
|
(a[e].submit=a[e][Sa])})()},uploadPages:function(a,e){function b(){h.un(d,"DOMContentLoaded",b);h.un(f,"load",b);for(var k=a.split(/\n/),c=B().href,t=/regexp:/,v=0;v<k.length;v++){var g=k[v];if(g)if(t.test(g)){g=mb(g.replace(t,""));try{var s=RegExp(g)}catch(w){}if(s&&s.test(c)){ra.uploadPage(e);break}}else if(-1!==c.indexOf(g)){ra.uploadPage(e);break}}}"complete"==d.readyState?b():(h.on(d,"DOMContentLoaded",b),h.on(f,"load",b))}}}var kb=!1,Aa="",ib=!Ba(/webkit/)&&Ba(/gecko/),m={getDocumentCharset:function(){return(""+
|
||||||
|
(d.characterSet||d.charset||"")).toLowerCase()},getDocumentHTML:function(){var a="",b="",a=d.documentElement,c=a.outerHTML;if(c)a=c;else{for(var c=a.attributes,s="",g=0;g<c.length;g++){var f=c[g];f&&(s+=" "+f.name+'="'+(f.value||"")+'"')}a="<html"+s+">"+a.innerHTML+"</html>"}(c=d.doctype)&&(b="<!DOCTYPE "+c.name+(c.publicId?' PUBLIC "'+c.publicId+'"':"")+(c.systemId?' "'+c.systemId+'"':"")+">\n");return b+a},getRootElement:function(){var a=d.documentElement;return"CSS1Compat"==d.compatMode?a:d.body||
|
||||||
|
a},getViewportSize:function(){var a=m.getRootElement();return[a.clientWidth,a.clientHeight]},getDocumentSize:function(){var a=m.getRootElement(),b=m.getViewportSize();return[Math.max(a.scrollWidth,b[0]),Math.max(a.scrollHeight,b[1])]},getDocumentScroll:function(){return[f.pageXOffset||d.documentElement&&d.documentElement.scrollLeft||d.body&&d.body.scrollLeft||0,f.pageYOffset||d.documentElement&&d.documentElement.scrollTop||d.body&&d.body.scrollTop||0]},getElementXY:function(a){if(!a.ownerDocument||
|
||||||
|
"PARAM"==a.tagName||a==d.body||a==d.documentElement)return[0,0];if(a.getBoundingClientRect){a=a.getBoundingClientRect();var b=m.getDocumentScroll();return[Math.round(a.left+b[0]),Math.round(a.top+b[1])]}for(var c=b=0;a;)b+=a.offsetLeft,c+=a.offsetTop,a=a.offsetParent;return[b,c]},getElementParent:function(a){return a==d.documentElement?null:a==d.body?d.documentElement:a.parentNode}},l={isArray:function(a){return"function"==typeof Array.isArray?Array.isArray(a):"[object Array]"==Object.prototype.toString.call(a)},
|
||||||
|
mergeArrays:function(a){for(var b=1;b<arguments.length;b++)if(l.isArray(arguments[b]))for(var c=0;c<arguments[b].length;c++)a[a.length]=arguments[b][c]}};m.getElementChildren=function(a,b){var c=[];if(a){var d=a.childNodes;if(d)for(var g=0,f=d.length;g<f;g++){var h=d[g];"INPUT"==h.nodeName&&h.type&&"hidden"==h.type.toLocaleLowerCase()||b&&h.nodeName!=b||l.mergeArrays(c,[h])}}return c};m.getElementNeighborPosition=function(a){for(var b=m.getElementChildren(m.getElementParent(a),a.nodeName),c=0;c<b.length;c++)if(b[c]==
|
||||||
|
a)return c;return 0};m.getElementRegion=function(a){var b=m.getElementXY(a);a=a==d.body||a==d.documentElement?m.getDocumentSize():[a.offsetWidth,a.offsetHeight];return[b[0],b[1],a[0],a[1]]};l.fletcher=function(a){for(var b=a.length,c=0,d=255,g=255;b;){var f=21<b?21:b,b=b-f;do{var h="string"==typeof a?a.charCodeAt(c):a[c];c++;if(255<h)var l=h>>8,h=h&255,h=h^l;d+=h;g+=d}while(--f);d=(d&255)+(d>>8);g=(g&255)+(g>>8)}a=(d&255)+(d>>8)<<8|(g&255)+(g>>8);return 65535==a?0:a};m.calcTextChecksum=function(a){var b=
|
||||||
|
"";a=a.childNodes;for(var c=0,d=a.length;c<d;c++)a[c]&&3==a[c].nodeType&&(b+=a[c].nodeValue);return l.fletcher(b.replace(/[\u0000-\u0020]+/g,""))};m.calcAttribChecksum=function(a){var b="",c="width height align title alt name".split(" ");"IMG"==a.tagName&&(b+=a.src.toLowerCase());"A"==a.tagName&&(b+=a.href.toLowerCase());for(var b=b+String(a.className||"").toLowerCase(),d=0;d<c.length;d++)a.getAttribute&&(b+=String(a.getAttribute(c[d])||"").toLowerCase());return l.fletcher(b.replace(/[\u0000-\u0020]+/g,
|
||||||
|
""))};m.calcChildrenChecksum=function(a){return l.fletcher((a.innerHTML||"").replace(/(<[^>]*>|[\u0000-\u0020])/g,""))};m.getFormNumber=function(a){for(var b=d.getElementsByTagName("form"),c=0,f=b.length;c<f;c++)if(b[c]==a)return c;return-1};m.classNameExists=function(a,b){return RegExp("(?:^|\\s)"+b+"(?:\\s|$)").test(a.className)};m.isEmptyField=function(a){return"INPUT"==a.nodeName&&"submit"!=a.type&&"image"!=a.type&&"hidden"!=a.type?"radio"==a.type||"checkbox"==a.type?!a.checked:!a.value:"TEXTAREA"==
|
||||||
|
a.nodeName?!a.value:"SELECT"==a.nodeName?0>a.selectedIndex:!0};m.getElementsByClassName=function(a,b){b=b||d;for(var c=b.getElementsByTagName("*"),f=[],g=0;g<c.length;g++)m.classNameExists(c[g],a)&&f.push(c[g]);return f};var N={getPos:function(a){var b=m.getRootElement(),c=m.getDocumentScroll();return[a.pageX||a.clientX+c[0]-(b.clientLeft||0)||0,a.pageY||a.clientY+c[1]-(b.clientTop||0)||0]},getTarget:function(a){return a.target||a.srcElement}};l.mixin=function(a){for(var b=1;b<arguments.length;b++)if(arguments[b]){for(var c in arguments[b])arguments[b].hasOwnProperty(c)&&
|
||||||
|
(a[c]=arguments[b][c]);arguments[b].hasOwnProperty("toString")&&(a.toString=arguments[b].toString)}return a};var J=function(a){a=a||{};l.mixin(this,a);this._initComponent()};J.prototype._initComponent=function(){};J.inherit=function(a){a=a||{};var b="function"==typeof this?this:Object;a.hasOwnProperty("constructor")||(a.constructor=function(){b.apply(this,arguments)});var c=function(){};c.prototype=b.prototype;a.constructor.prototype=new c;l.mixin(a.constructor.prototype,a);a.constructor.prototype.constructor=
|
||||||
|
a.constructor;a.constructor.superclass=b.prototype;a.constructor.inherit=J.inherit;return a.constructor};var h=J.inherit({_initComponent:function(){h.superclass._initComponent.apply(this,arguments);this._listeners=[]},on:function(a,b,c,d,g){g=5>arguments.length?!0:!!g;for(var h=b.split(","),l=0;l<h.length;l++){var m=h[l],x=function(a){c.call(d||this,a||f.event)};this._listeners[this._listeners.length]=[a,m,c,d,g,x];a.addEventListener?a.addEventListener(m,x,g):a.attachEvent&&a.attachEvent("on"+m,x)}},
|
||||||
|
un:function(a,b,c,d,g){g=5>arguments.length?!0:!!g;for(var f=b.split(","),h=0;h<f.length;h++)for(var l=f[h],m=0;m<this._listeners.length;m++){var q=this._listeners[m];if(q[0]==a&&q[1]==l&&q[2]==c&&q[3]==d&&q[4]==g){this._listeners.splice(m,1);this._removeListener(a,l,q[5],g);return}}},unAll:function(){for(var a=0;a<this._listeners.length;a++){var b=this._listeners[a];this._removeListener(b[0],b[1],b[5],b[4])}this._listeners.length=0},_removeListener:function(a,b,c,d){a.removeEventListener?a.removeEventListener(b,
|
||||||
|
c,d):a.detachEvent&&a.detachEvent("on"+b,c)}});h.on=function(a,b,c,d,g){h._instance||(h._instance=new h);h._instance.on.apply(h._instance,arguments)};h.un=function(a,b,c,d,g){h._instance&&h._instance.un.apply(h._instance,arguments)};h.onDocumentVisible=function(a,b){if("prerender"==d.webkitVisibilityState){var c=function(){"prerender"!=d.webkitVisibilityState&&(h.un(d,"webkitvisibilitychange",c),a.call(b,!0))};h.on(d,"webkitvisibilitychange",c)}else a.call(b,!1)};var Ga=null,ea=J.inherit({counterId:"",
|
||||||
|
_initComponent:function(){ea.superclass._initComponent.apply(this,arguments);this._ls=null;try{this._ls=f.localStorage}catch(a){}},set:function(a,b){if(this.isEnabled())try{!b||b&&l.isArray(b)&&!b.length?this.remove(a):this._ls.setItem(this._getLsKey(a),JSON.stringify(b))}catch(c){}},get:function(a){if(this.isEnabled())try{return JSON.parse(this._ls.getItem(this._getLsKey(a)))}catch(b){}return null},remove:function(a){if(this.isEnabled())try{this._ls.removeItem(this._getLsKey(a))}catch(b){}},isEnabled:function(){return this._ls&&
|
||||||
|
f.JSON&&"object"==typeof this._ls&&"object"==typeof f.JSON},getStorageId:function(){var a=this.get("lsid");a||(a=Math.round(Math.random()*new Date),this.set("lsid",a));return a},clearStorageId:function(){this.remove("lsid")},_getLsKey:function(a){return"_ym"+this.counterId+"_"+a}}),ka=J.inherit({counterId:"",onlyCurrentDomain:!1,skipPrefix:!1,_initComponent:function(){ka.superclass._initComponent.apply(this,arguments);this._domain=null;if(!this.onlyCurrentDomain)for(var a=H.host.split("."),b=2;;)if(b<=
|
||||||
|
a.length){if(this._domain="."+a.slice(-b).join("."),b++,this.isEnabled())break}else{this._domain=null;break}},create:function(a,b,c){a=[this._prepareName(a)+"="+encodeURIComponent(b)];c&&(b=new Date,b.setTime(b.getTime()+6E4*c),a.push("expires="+b.toGMTString()));this._domain&&a.push("domain="+this._domain);a.push("path=/");try{d.cookie=a.join(";")}catch(f){}},read:function(a){try{var b=d.cookie}catch(c){}return b&&b.match(RegExp("(?:^|;\\s*)"+this._prepareName(a)+"=([^;]*)"))?decodeURIComponent(RegExp.$1):
|
||||||
|
null},erase:function(a){this.create(a,"",-1)},isEnabled:function(){this.create("metrika_enabled","1",60);var a=!!this.read("metrika_enabled");this.erase("metrika_enabled");return a},_prepareName:function(a){return(this.skipPrefix?"":"_ym_")+a+(this.counterId?"_"+this.counterId:"")}});ka.isEnabled=function(){return(new ka({onlyCurrentDomain:!0})).isEnabled()};var C=J.inherit({transports:[],postParams:[],send:function(a,b,c,d){c=c||function(){};(function ra(f){if(f<this.transports.length)try{var h=
|
||||||
|
new this.transports[f]({postParams:this.postParams});h.request(a,b,function(a,b){a?c.call(d,b):ra.call(this,f+1)},this)}catch(l){qa(l,"send by "+(h&&h.id)),ra.call(this,f+1)}}).call(this,0)}}),la={stringify:function(a){var b=[],c;for(c in a)if(a.hasOwnProperty(c)){var d=a[c];if(l.isArray(d))for(var g=0;g<d.length;g++)b.push(encodeURIComponent(c)+"="+encodeURIComponent(String(d[g])));else b.push(encodeURIComponent(c)+"="+encodeURIComponent(String(d)))}return b.join("&")}};l.forEachKey=function(a,b,
|
||||||
|
c){for(var d in a)a.hasOwnProperty(d)&&b.call(c,d,a[d],a)};l.inArray=function(a,b){for(var c=0;c<a.length;c++)if(a[c]==b)return!0;return!1};var xa=J.inherit({postParams:[],_buildUrl:function(a,b){return a+(-1<a.indexOf("?")?"&":"?")+la.stringify(b)},_splitParams:function(a){var b={},c={};l.forEachKey(a,function(a,d){l.inArray(this.postParams,a)?c[a]=d:b[a]=d},this);return{get:b,post:c}}}),K=xa.inherit({id:"XHR",request:function(a,b,c,d){if(f.opera&&"function"==typeof f.opera.version){var g=f.opera.version();
|
||||||
|
if("string"==typeof g&&"12"==g.split(".")[0]&&/[^a-z0-9.:-]/.test(H.host))return c.call(d,!1)}if(f.XMLHttpRequest){var h=new XMLHttpRequest;if("withCredentials"in h){b=this._splitParams(b);a=this._buildUrl(a,b.get);h.open("POST",a,!0);h.withCredentials=!0;h.setRequestHeader("Content-Type","application/x-www-form-urlencoded");h.send(la.stringify(b.post));(function(){4==h.readyState?c.call(d,200==h.status):P(arguments.callee,50,"TransportXHR.request")})();return}}c.call(d,!1)}});l.random=function(a,
|
||||||
|
b){2>arguments.length&&(b=a,a=0);1>arguments.length&&(b=1073741824);return Math.floor(Math.random()*(b-a))+a};var Z=xa.inherit({id:"form",enctype:"application/x-www-form-urlencoded",htmlfileOnly:!1,_initComponent:function(){Z.superclass._initComponent.apply(this,arguments);"_htmlfile"in Z.prototype||(Z.prototype._htmlfile=this._createHtmlfile());this._doc=this._htmlfile||(this.htmlfileOnly?null:d)},request:function(a,b,c,d){var g=this._doc;if(!g)return c.call(d,!1);b=this._splitParams(b);var f="ifr"+
|
||||||
|
l.random(),h=g.createElement("div");h.style.position="absolute";h.style.left="-99999px";h.style.top="-99999px";var m=['<iframe name="',f,'"></iframe>','<form action="',this._buildUrl(a,b.get),'" method="post" target="',f,'" enctype="',this.enctype,'">'];l.forEachKey(b.post,function(a){l.mergeArrays(m,['<textarea name="',a,'"></textarea>'])});l.mergeArrays(m,["</form>"]);h.innerHTML=m.join("");g.body.appendChild(h);var q=h.getElementsByTagName("form")[0];l.forEachKey(b.post,function(a,b){q[a].value=
|
||||||
|
b});q.submit();P(function(){g.body.removeChild(h)},1E4,"TransportForm.request.2");return c.call(d,!0)},_createHtmlfile:function(){try{if(f.ActiveXObject){var a=new ActiveXObject("htmlfile");a.open();a.write("<html><body></body></html>");a.close();return a}}catch(b){}return null}}),X=Z.inherit({id:"htmlfile",htmlfileOnly:!0}),Ta=xa.inherit({id:"img",request:function(a,b,c,d){a=this._buildUrl(a,b);b=new Image;b.onload=E(function(){c.call(d,!0)},"TransportImage.request");b.onerror=E(function(){c.call(d,
|
||||||
|
!1)},"TransportImage.request");b.src=a}});l.defer=function(a,b,c,d,g){return P(function(){a.apply(c,d||[])},b,g)};var V=C.inherit({protocol:"",host:"mc.yandex.ru",resource:"",counterId:"",counterType:0,retry:!1,transports:[K,X,Ta],_initComponent:function(){V.superclass._initComponent.apply(this,arguments);this.retry&&(this._storage=new ea)},send:function(a,b,c,d){if(this.retry&&this._storage.isEnabled()){b.rqnl=b.rqnl||0;b.rqnl++;for(var g=this._storage.get("retryReqs")||{},f=0;g[f];)f++;g[f]={protocol:this.protocol,
|
||||||
|
host:this.host,resource:this.resource,counterId:this.counterId,counterType:this.counterType,postParams:this.postParams,params:a,browserInfo:b,ghid:Ya._globalMetrikaHitId,time:+new Date};this._storage.set("retryReqs",g)}g={};this.counterType&&(g["cnt-class"]=this.counterType);l.mixin(g,a);b.st=Math.round((new Date).getTime()/1E3);a=[this.protocol,"//",this.host,"/"+this.resource+"/"+this.counterId].join("");var h=[];b&&(l.forEachKey(b,function(a,b){"t"!=a&&l.mergeArrays(h,[a,b])}),b.t&&l.mergeArrays(h,
|
||||||
|
["t",b.t]));h.length&&(g["browser-info"]=h.join(":"));if(this.retry&&this._storage.isEnabled())var m=l.defer(function(){},1E4,this,[],"SenderBK.timeout");return V.superclass.send.call(this,a,g,function(){if(this.retry&&this._storage.isEnabled()){clearTimeout(m);var a=this._storage.get("retryReqs")||{};a[f]&&(delete a[f],this._storage.set("retryReqs",a))}c&&c.apply(d,arguments)},this)}});V.retransmit=function(){var a=new ea,b=a.get("retryReqs")||{};a.remove("retryReqs");l.forEachKey(b,function(a,b){b.ghid&&
|
||||||
|
b.ghid!=Ya._globalMetrikaHitId&&b.time&&b.time+864E5>+new Date&&2>=b.browserInfo.rqnl&&(new V({protocol:b.protocol,host:b.host,resource:b.resource,counterId:b.counterId,counterType:b.counterType,postParams:b.postParams||[],retry:!0})).send(b.params,b.browserInfo)})};var $={abc:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",tail:"+/=",tailSafe:"*-_",encode:function(a,b){for(var c=($.abc+(b?$.tailSafe:$.tail)).split(""),d=a.length,g=[],f=d-d%3,h,m=0;m<f;m+=3)h=(a[m]<<16)+(a[m+1]<<
|
||||||
|
8)+a[m+2],l.mergeArrays(g,[c[h>>18&63],c[h>>12&63],c[h>>6&63],c[h&63]]);switch(d-f){case 1:h=a[f]<<4;l.mergeArrays(g,[c[h>>6&63],c[h&63],c[64],c[64]]);break;case 2:h=(a[f]<<10)+(a[f+1]<<2),l.mergeArrays(g,[c[h>>12&63],c[h>>6&63],c[h&63],c[64]])}return g.join("")}},Ha={encode:function(a){for(var b=[],c=0,d=a.length;c<d;c++){var g=a.charCodeAt(c);128>g?b.push(g):(127<g&&2048>g?b.push(g>>6|192):(b.push(g>>12|224),b.push(g>>6&63|128)),b.push(g&63|128))}return b}},jb=V.inherit({resource:"webvisor",transports:[K,
|
||||||
|
Z],postParams:["wv-data"],sendContent:function(a,b,c,d,g,f,h){if(!a)return!1;-1<a.indexOf("\r")&&(a=a.replace(/\r\n/g,"\n"));a={"wv-type":1,"page-url":B().href,"wv-hit":c,"wv-data":$.encode(Ha.encode(a))};return this.send(a,{z:d,i:g,pct:b||""},f,h)}});l.throttle=function(a,b,c,d){var g,f,h;return function(){f=arguments;h=this;g||function(){g=null;f&&(a.apply(c||h,f),f=null,g=P(arguments.callee,b,d))}()}};var fa=J.inherit({storage:null,storageKey:"dataBuffer",maxBufferSize:255,flushTimeout:1E4,active:!0,
|
||||||
|
meta:null,onFlush:function(){},onFlushCtx:null,bufferExpireTime:864E5,_initComponent:function(){fa.superclass._initComponent.apply(this,arguments);this._data=[];this._packetNumber=0;this._flushTID=null;this._saveToStorageThrottled=l.throttle(this._saveToStorage,300,this,"DataBuffer._saveToStorage");if(this.storage){var a=this.storage.get(this.storageKey);a&&a.data&&a.meta&&a.time&&a.time+this.bufferExpireTime>+new Date&&this.onFlush.call(this.onFlushCtx||this,a.data,a.meta,a.pnum);this.clear()}},
|
||||||
|
append:function(a,b){l.mergeArrays(this._data,a);this._saveToStorageThrottled();this.active&&((b||this._data.length>=this.maxBufferSize)&&this._flush(),this._flushTID||(this._flushTID=l.defer(this._flush,this.flushTimeout,this,[],"DataBuffer._flush")))},activate:function(){this.active||(this.active=!0,this.append([]))},clear:function(){this._data.length=0;this._flushTID=null;this.storage&&this.storage.remove(this.storageKey)},_flush:function(){this.onFlush.call(this.onFlushCtx||this,this._data,this.meta,
|
||||||
|
this._packetNumber);this._packetNumber++;this.clear()},_saveToStorage:function(){this.storage&&this._data.length&&this.storage.set(this.storageKey,{data:this._data,meta:this.meta,pnum:this._packetNumber,time:+new Date})}}),Ia=V.inherit({resource:"webvisor",retry:!0,postParams:["wv-data"],sendPacket:function(a,b,c,d,g,f,h,m){if(!a||!a.length)return!1;a={rn:l.random(),"page-url":b,wmode:0,"wv-type":0,"wv-hit":c,"wv-part":d+1,"wv-check":l.fletcher(a),"wv-data":$.encode(a,!0)};return this.send(a,{z:g,
|
||||||
|
i:f},h,m)}}),Qa=fa.inherit({protocol:"",counterId:"",counterType:"",meta:null,maxBufferSize:7500,flushTimeout:3E4,storageKey:"visorbuff",active:!1,_initComponent:function(){this.storage=new ea({counterId:this.counterId});this._sender=new Ia({protocol:this.protocol,counterId:this.counterId,counterType:this.counterType});Qa.superclass._initComponent.apply(this,arguments)},onFlush:function(a,b,c){this._sender.sendPacket(a,b.url,b.hitId,c,b.timezone,b.timestamp)}});l.toJSON=function(a){if(a===ga)return"";
|
||||||
|
if(null===a)return"null";switch(a.constructor){case Boolean:return a.toString();case Number:return isFinite(a)?a.toString():"null";case String:return'"'+a.replace(/\\/g,"\\\\").replace(/"/g,'\\"')+'"';case Array:for(var b=[],c=0,d=a.length;c<d;c++)b[b.length]=l.toJSON(a[c]);return"["+b.join(",")+"]";case Object:b=[];for(c in a)a.hasOwnProperty(c)&&a[c]!==ga&&(b[b.length]=l.toJSON(c)+":"+l.toJSON(a[c]));return"{"+b.join(",")+"}";default:return"null"}};var q={_jScriptVersion:0,getJScriptVersion:function(){q._jScriptVersion||
|
||||||
|
(q._jScriptVersion=(new Function("return /*@cc_on @_jscript_version @*/;"))());return q._jScriptVersion}},ya={log:function(){f.console&&console.log&&(-1<H.href.indexOf("_ym_debug=1")||f._ym_debug)&&console.log.apply(console,arguments)}};l.bind=function(a,b){return function(){return a.apply(b||this,arguments)}};var za=J.inherit({_initComponent:function(){za.superclass._initComponent.apply(this,arguments);this._origErrorHandler=f.onerror;f.onerror=l.bind(this._errorHandler,this)},_errorHandler:function(a,
|
||||||
|
b,c){if("function"==typeof this._origErrorHandler)return this._origErrorHandler.apply(f,arguments)}});f.Ya=f.Ya||{};Ya._metrika=Ya._metrika||{};Ya._metrika.counters=Ya._metrika.counters||{};Ya._metrika.hitParam=Ya._metrika.hitParam||{};Ya._globalMetrikaHitId=l.random();var H=B(),Ra,Fa,L=f.navigator,ma=f.screen,aa="https:"==H.protocol?"https:":"http:",Ma=544,na=5.8>=q.getJScriptVersion(),Ja=na?512:2048,Gb=na?512:2048,Ua=na?100:400,Ka="noindex",oa=50,Va=RegExp("\\.(3gp|7z|aac|ac3|acs|ai|avi|ape|apk|asf|bmp|bz2|cab|cdr|crc32|css|csv|cue|divx|dmg|djvu?|doc(x|m|b)?|emf|eps|exe|flac?|flv|iso|swf|gif|t?gz|jpe?g?|js|m3u8?|m4a|mp(3|4|e?g?)|m4v|md5|mkv|mov|msi|ods|og(g|m|v)|pdf|phps|png|ppt(x|m|b)?|psd|rar|rss|rtf|sea|sfv|sit|sha1|svg|tar|tif?f|torrent|ts|txt|vob|wave?|wma|wmv|wmf|webm|xls(x|m|b)?|xpi|g?zip)$",
|
||||||
|
"i"),Hb=+new Date,La,pa;f.Ya.Metrika=function(a,b,c,s){var g=this;return E(function(){function C(a,b){if(!a||!b)return!1;for(var c=[],d=0;d<b.length;d++)c.push(b[d].replace(/\^/g,"\\^").replace(/\$/g,"\\$").replace(/\./g,"\\.").replace(/\[/g,"\\[").replace(/\]/g,"\\]").replace(/\|/g,"\\|").replace(/\(/g,"\\(").replace(/\)/g,"\\)").replace(/\?/g,"\\?").replace(/\*/g,"\\*").replace(/\+/g,"\\+").replace(/\{/g,"\\{").replace(/\}/g,"\\}"));return RegExp("\\.("+c.join("|")+")$","i").test(a)}function N(a){a=
|
||||||
|
a.target||a.srcElement;if(!a)return!1;3==a.nodeType&&(a=a.parentNode);for(var b=a.nodeName.toString().toLowerCase();a.parentNode&&a.parentNode.nodeName&&("a"!=b&&"area"!=b||!a.href);)a=a.parentNode,b=a.nodeName.toString().toLowerCase();return a.href?a:!1}function J(a,b){return(a?a.replace(/^www\./,""):"")==(b?b.replace(/^www\./,""):"")}function x(a,b){function c(a){a=a.split(":");a=a[1]||"";a=a.replace(/^\/*/,"").replace(/^www\./,"");return a.split("/")[0]}return a&&b?c(a)==c(b):a||b?!1:!0}function K(a,
|
||||||
|
b){var c=b.target,d=!1;if(!b.hostname)return!1;c&&"_self"!=c&&"_top"!=c&&"_parent"!=c||(d=!0);(c=a.shiftKey||a.ctrlKey||a.altKey)||a.modifiers&&f.Event&&(c=a.modifiers&f.Event.CONTROL_MASK||a.modifiers&f.Event.SHIFT_MASK||a.modifiers&f.Event.ALT_MASK);return d&&!c}function z(e,b,c){function d(a,e){a&&e&&(c?T[a]=e:T[T.length]=[a,e].join(":"))}function h(a){d(a,b[a]?"1":"")}b=b||{};var T=c?{}:[],r=-1*(new Date).getTimezoneOffset(),M=X();Fa||(Fa=M,Ra=r);d("j",q.getJavaEnabled()?"1":"");ma&&d("s",ma.width+
|
||||||
|
"x"+ma.height+"x"+(ma.colorDepth||ma.pixelDepth));f.devicePixelRatio&&d("sk",f.devicePixelRatio);d("f",q.getFlashVersion());d("l",q.getSilverlightVersion());d("fpr",q.getFingerPrint());b.pa||d("w",Z()+"x"+$());d("z",r);d("i",M);d("et",Math.round((new Date).getTime()/1E3));d("en",m.getDocumentCharset());d("v",Ma);d("c",L.cookieEnabled?"1":"");d("jv",q.getJScriptVersion());d("la",q.getLanguage());R&&d("wh","1");M="ar ln dl ad nb pa".split(" ");for(r=0;r<M.length;r++)h(M[r]);M=["va","vt","sn","sa","he"];
|
||||||
|
b.nb&&M.push("cl");for(r=0;r<M.length;r++){var Q=M[r];d(Q,b[Q])}b.reqNum&&(r=new ea({counterId:a}),r.isEnabled()&&(M=r.getStorageId(),(Q=r.get("reqNum"))?Q++:Q=1,r.set("reqNum",Q),r.get("reqNum")==Q?(d("ls",M),d("rqn",Q)):(r.remove("reqNum"),r.clearStorageId(),1<Q&&(d("ls",M),d("rqn",0)))));d("rn",l.random());d("hid",ba);d("ds",qa());g._firstPaint||(g._firstPaint=sa(),d("fp",g._firstPaint));if(g._webvisor){f.name||(f.name=Math.round(65535*Math.random()));if(r=+f.name)0>r&&(r*=-1),r%=65535;d("wn",
|
||||||
|
r||l.fletcher(f.name));try{f.history&&d("hl",String(f.history.length))}catch(s){}}e="undefined"==typeof e?(e=n())?l.trim(e,Ua):"":l.trim(e,Ua);d("t",e);return c?T:T.join(":")}function n(){var a=d.title;"string"!=typeof a&&(a=(a=d.getElementsByTagName("title"))&&a.length?a[0].innerHTML:"");return a}function X(){for(var a=new Date,a=[a.getFullYear(),a.getMonth()+1,a.getDate(),a.getHours(),a.getMinutes(),a.getSeconds()],b="",c=0;c<a.length;c++)b+=10>a[c]?"0"+a[c]:a[c];return b}function Z(){var a=-1;
|
||||||
|
d.documentElement&&"CSS1Compat"==d.compatMode?a=d.documentElement.clientWidth:d.body&&(a=d.body.clientWidth);return a}function $(){var a=-1;d.documentElement&&"CSS1Compat"==d.compatMode?a=d.documentElement.clientHeight:d.body&&(a=d.body.clientHeight);return a}function fa(){var a=f.performance||f.webkitPerformance,b=[];if(a=a&&a.timing){var c=a.navigationStart;if(c)for(b=[a.domainLookupEnd-a.domainLookupStart,a.connectEnd-a.connectStart,a.responseStart-a.requestStart,a.responseEnd-a.responseStart,
|
||||||
|
a.fetchStart-c,a.redirectEnd-a.redirectStart,a.redirectCount],b.push(a.domInteractive&&a.domLoading?a.domInteractive-a.domLoading:null),b.push(a.domContentLoadedEventStart&&a.domContentLoadedEventEnd?a.domContentLoadedEventEnd-a.domContentLoadedEventStart:null),b.push(a.domComplete?a.domComplete-c:null),b.push(a.loadEventStart?a.loadEventStart-c:null),b.push(a.loadEventStart&&a.loadEventEnd?a.loadEventEnd-a.loadEventStart:null),b.push(a.domContentLoadedEventStart?a.domContentLoadedEventStart-c:null),
|
||||||
|
a=0;a<b.length;a++)c=b[a],null!==c&&(0>c||36E5<c)&&(b[a]=null)}return b}function qa(){var a=[],b=g._lastPerformanceTiming,c=fa();if(b)for(var d=0,f=b.length;d<f;d++)null===c[d]?a.push(c[d]):a.push(b[d]===c[d]?"":c[d]);else a=c;g._lastPerformanceTiming=c;return a.join(",")}function sa(){var a;if("object"==typeof f.chrome&&f.chrome.loadTimes){if(a=f.chrome.loadTimes(),a.requestTime&&a.firstPaintTime)return~~(1E3*(a.firstPaintTime-a.requestTime))}else if(f.performance&&f.performance.timing&&(a=f.performance.timing,
|
||||||
|
a.navigationStart&&a.msFirstPaint))return a.msFirstPaint-a.navigationStart;return null}function ta(a){var b=d.referrer||"";if(RegExp("^https?://"+H.host+"/").test(b))return!1;for(var c=a.patterns,g=0;g<c.length;g++)if(b.match(RegExp(c[g],"i"))){var f=a.params||[];if(f.length)for(var h=ia((RegExp.$1||"").replace(/\+/g,"%20")),r=0;r<f.length;r++){if(h==ia(f[r]))return!0}else return!0}return!1}function ha(a,b){var c=!1;if(a&&"string"!=typeof a&&a.length)for(var g=0;g<a.length;g++){var f=a[g].selector,
|
||||||
|
h=a[g].text,r=f.charAt(0),f=f.slice(1);if("#"==r){if(r=d.getElementById(f))c=!0,b&&Y.unshift([r,r.innerHTML]),r.innerHTML=h}else if("."==r)for(r=m.getElementsByClassName(f),f=0;f<r.length;f++){var c=!0,l=r[f],n=h;b&&Y.unshift([l,l.innerHTML]);l.innerHTML=n}}return c}function la(){for(var a=0;a<Y.length;a++)Y[a][0].innerHTML=Y[a][1]}function Aa(a,b){a=a&&a.replace(/^\?/,"");b=b&&b.replace(/^#/,"");var c="";if(a)for(var d=a.split("&"),f=0;f<d.length;f++){var g=d[f].split("=");"_openstat"==g[0]&&(c=
|
||||||
|
g[1])}b&&0==b.indexOf("_openstat=")&&(c=b.slice(10));c&&(c=-1<c.indexOf(";")?ia(c):Ha(c.replace(/[-*_]/g,function(a){return{"*":"+","-":"/",_:"="}[a]||a})));return c&&(c=c.split(";"),4==c.length)?{service:c[0],campaign:c[1],ad:c[2],source:c[3]}:null}function ia(a){try{return decodeURIComponent(a)}catch(b){return""}}function Ha(a){for(;a.length%4;)a+="=";var b,c,d,f,g,h=0,l="";do{b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(a.charAt(h++));c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(a.charAt(h++));
|
||||||
|
f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(a.charAt(h++));g="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(a.charAt(h++));if(0>b||0>c||0>f||0>g)return null;d=b<<18|c<<12|f<<6|g;b=d>>16&255;c=d>>8&255;d&=255;l=64==f?l+String.fromCharCode(b):64==g?l+String.fromCharCode(b,c):l+String.fromCharCode(b,c,d)}while(h<a.length);a=l;f="";for(b=l=h=g=0;g<a.length;)h=a.charCodeAt(g),128>h?(f+=String.fromCharCode(h),g++):191<h&&224>h?(l=a.charCodeAt(g+
|
||||||
|
1),f+=String.fromCharCode((h&31)<<6|l&63),g+=2):(l=a.charCodeAt(g+1),b=a.charCodeAt(g+2),f+=String.fromCharCode((h&15)<<12|(l&63)<<6|b&63),g+=3);return f}function Ia(e){var k=!1;if(Ya._metrika.hitParam[W]){if(1!=c||Ya._metrika.counters[W])return!1;k=!0}Ya._metrika.counters[W]=g;Ya._metrika.hitParam[W]=1;g._webvisor=!s&&(u&&u.webvisor||kb);g._directCampaign=u&&u.directCampaign;u&&u.trackHash&&g.trackHash(!0);if(!s&&!k){g.replacePhones();var t=new ka({counterId:a}),v=t.read("visorc");"b"!=v&&"w"!=v&&
|
||||||
|
(v="");if(!t.isEnabled()||Ba("opera mini"))v="b";La=+new Date;var k=new Eb({protocol:aa,counterType:c,counterId:a}),w={ut:ua,he:u?~~u.httpError:0,ad:1==c&&f.Ya&&f.Ya.Direct?!0:!1,saveRef:!0};ya.log("PageView. Counter "+a+". URL: "+H.href+". Referer: "+d.referrer);k.sendHit(H.href,n(),d.referrer,b,w,v,e,function(a){pa||(pa=+new Date);a=a||{};var b=a.webvisor||{};if(U){var e=+b.recp;if(!isFinite(e)||0>e||1<e)v="w";v||(v=ba%1E4/1E4<e?"w":"b");t.create("visorc",v,30);"w"==v?(U.start(),e=b.arch_type,(b=
|
||||||
|
b.urls)&&e&&U.uploadPages(b,e)):U.stop()}b=a.mp2;a=g;t.erase("mp2_substs");if(b){b:if((e=b.conditions)&&e.length)for(var c=0;c<e.length;c++){var k;if("ref"==e[c].type)k=ta(e[c]);else if(k="adv"==e[c].type){var w=e[c],m=Ya._metrika.counter._directCampaign,n=w.ServiceNamePattern,q=w.RefererPattern;k=m?w.direct_orders:w.direct_camp;var S=d.referrer,F=H.search,F=F&&F.replace(/^\?/,""),ja={};if(F)for(var F=F.split("&"),s=0;s<F.length;s++){var p=F[s].split("=");ja[ia(p[0])]=ia(p[1])}for(var F=Aa(H.search,
|
||||||
|
H.hash),s={},p=["source","medium","campaign","term","content"],A=0;A<p.length;A++)ja["utm_"+p[A]]&&(s[p[A]]=ja["utm_"+p[A]]);A=m?"direct.yandex.ru":F&&F.service||s.source;p=!1;if(!p&&n&&n.length)for(var z=0;z<n.length;z++)if(RegExp(n[z],"i").test(A)){p=!0;break}if(!p&&q&&q.length)for(n=0;n<q.length;n++)if(RegExp(q[n],"i").test(S)){p=!0;break}!p&&w.google_adwords&&ja.gclid&&(p=!0);!p&&w.yandex_direct&&ja.yclid&&(p=!0);if(p&&k&&k.length&&(p=!1,w=m||F&&F.campaign||s&&s.campaign))for(m=0;m<k.length;m++)if(k[m]==
|
||||||
|
w){p=!0;break}k=p}if(k){e[c].track_id&&t.create("mp2_track",e[c].track_id,43200);break b}}e=t.read("mp2_track");b=b.substs&&b.substs[e];e&&b?(t.create("mp2_substs",l.toJSON(b)),b=ha(b),a.params("__ym",b?"mp_trackid":"mp_trackid_bad",e)):la()}else la();h.on(f,"load",g.replacePhones,g);g._inited=!0})}Qa();u&&(u.enableAll?g.enableAll():(u.clickmap&&g.clickmap(u.clickmap),u.trackLinks&&g.trackLinks(u.trackLinks),u.accurateTrackBounce&&g.accurateTrackBounce(u.accurateTrackBounce),u.ad&&ad()));g._webvisor&&
|
||||||
|
(U=new Wa(aa,a,c,u,ba,g))}function za(a){var b={delay:oa};switch(typeof a){case "string":b.on=!0;break;case "object":b.on=!0;b.delay="number"!=typeof a.delay?oa:a.delay;break;case "boolean":b.on=a;break;default:return}g._trackLinks=b}function Qa(){za(!1);h.on(d,"click",function(a){g._trackLinks.on&&ib(a)})}function ib(a){var b=N(a);if(b){var c=!1,d=""+b.href,f=d?d.split(/\?/)[0]:"",h=function(a){var e=mb(b.innerHTML.replace(/<\/?[^>]+>/gi,""));O.sendClickLink(d,d==e?"":e,a)},l=function(){return K(a,
|
||||||
|
b)?g._trackLinks.delay:0};if(Va.test(f)||Va.test(d)||C(d,da)||C(f,da))c=!0;var n=m.classNameExists(b,"ym-disable-tracklink"),f=m.classNameExists(b,"ym-external-link");n||(n={ln:!0,dl:c},f?(n.delay=l(),h(n)):J(B().hostname,b.hostname)?c&&(n.ln=!1,n.delay=l(),h(n)):d&&-1!=d.search(/^ *(data|javascript):/i)||(n.ut=Ka,n.delay=l(),h(n)))}}function jb(a,b){function c(){if(!y){x&&clearTimeout(x);var d=b,f;f=z?u:u+ +new Date-B;d-=f;0>d&&(d=0);x=P(function(){y=!0;n(!1);a()},d,"trackUserTime")}}function g(){z=
|
||||||
|
s=q=!0;u+=+new Date-B;B=+new Date;c()}function l(){s||q||(u=0);B=+new Date;s=q=!0;z=!1;c()}function m(){q||(s=!0,z=!1,q=!0,c())}function n(a){for(var b=0;b<S.length;b+=3)if(a)h.on(S[b],S[b+1],S[b+2]);else h.un(S[b],S[b+1],S[b+2])}var s=!1,q=!1,z=!0,u=0,B=+new Date,x=null,y=!1;if(na)P(a,b,"trackUserTime");else{var S=[f,"blur",g,f,"focus",l,d,"click",m,d,"mousemove",m,d,"keydown",m,d,"scroll",m];n(!0);c()}}function zb(a){function b(){var a=B().hash.split("#")[1];if("undefined"==typeof a)return!1;var e=
|
||||||
|
a.indexOf("?");0<e&&(a=a.substring(0,e));return a}var c=b();(function w(){var d=b();d!==c&&(a(),c=d);Ea=P(w,200,"trackHash")})()}function y(){va=lastReferrer=Ca;var a={ut:ua,ad:1==c&&f.Ya&&f.Ya.Direct?!0:!1,wh:!0,saveRef:!0};O.sendAjaxHit(B().href,n(),va,a);Ca=B().href}function I(b){function k(){var a=d.documentElement;return Math.max(a.scrollWidth,d.body.scrollWidth,a.clientWidth)}function g(a){function b(a){a=a.getBoundingClientRect();var e=d.body,c=d.documentElement,k=a.left+(f.pageXOffset||c.scrollLeft||
|
||||||
|
e.scrollLeft)-(c.clientLeft||e.clientLeft||0);return{top:Math.round(a.top+(f.pageYOffset||c.scrollTop||e.scrollTop)-(c.clientTop||e.clientTop||0)),left:Math.round(k)}}return a.getBoundingClientRect?b(a):function(a){for(var b=0,e=0;a;)b+=parseInt(a.offsetTop),e+=parseInt(a.offsetLeft),a=a.offsetParent;return{top:b,left:e}}(a)}function v(a){return a.toString().toUpperCase()}function n(a){if(null==a.pageX&&null!=a.clientX){var b=d.documentElement,e=d.body;a.pageX=a.clientX+(b&&b.scrollLeft||e&&e.scrollLeft||
|
||||||
|
0)-(b.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||e&&e.scrollTop||0)-(b.clientTop||0)}return{x:a.pageX,y:a.pageY}}function s(a){for(var b=v(a.nodeName);a.parentNode&&"BODY"!=b&&"HTML"!=b;){if("A"==b||"INPUT"==b||"TEXTAREA"==b)return!0;a=a.parentNode;b=a.nodeName}return!1}for(var r=this,q=0,z=null,u="A B BIG BODY BUTTON DD DIV DL DT EM FIELDSET FORM H1 H2 H3 H4 H5 H6 HR I IMG INPUT LI OL P PRE SELECT SMALL SPAN STRONG SUB SUP TABLE TBODY TD TEXTAREA TFOOT TH THEAD TR U UL ABBR AREA BLOCKQUOTE CAPTION CENTER CITE CODE CANVAS DFN EMBED FONT INS KBD LEGEND LABEL MAP OBJECT Q S SAMP STRIKE TT ARTICLE AUDIO ASIDE FOOTER HEADER MENU METER NAV PROGRESS SECTION TIME VIDEO NOINDEX NOBR MAIN".split(" "),
|
||||||
|
x=59,y=String.fromCharCode,E={},C=0;C<u.length;C++)E[u[C]]=y(x),y(x),x++;this.handler=function(b){var e,h=d.getElementsByTagName("body")[0];if(!f.ymDisabledClickmap&&!m.classNameExists(h,"ym-clickmap-ignore")){if(r._prefs.hasQuota){if(!r._prefs.quota)return;r._prefs.quota--}var u=b.target||b.srcElement;3==u.nodeType&&(u=u.parentNode);h=v(u.nodeName);e=n(b);var p;b.which||b.button===ga||(b.which=b.button&1?1:b.button&2?3:b.button&4?2:0);p=b.which;if(p=2!=p&&3!=p||"A"==h)if(p=u.offsetHeight,p=!(0===
|
||||||
|
u.offsetWidth&&0===p||u.style&&"none"===u.style.display)){b:{for(p=u;p.parentNode;){if(m.classNameExists(p,"ym-clickmap-ignore")){p=!0;break b}p=p.parentNode}p=!1}if(p=!p){b:{p=r._prefs.ignoreTags;for(var A=0;A<p.length;A++)if(v(p[A])==v(h)){p=!0;break b}p=!1}p=!p&&r._prefs.filter(u,h)}}if(p){h=+new Date;u={dom:u,x:e.x,y:e.y,time:h};if((e=50<h-q)&&!(e=!r._prefs.ignoreSameClicks)){if(e=z){p=Math.abs(e.x-u.x);var A=Math.abs(e.y-u.y),x=u.time-e.time;e=e.dom==u.dom&&2>p&&2>A&&1E3>x}else e=!1;e=!e}if(e&&
|
||||||
|
"MetrikaPlayer"!=f.name){if(e=b.target||b.srcElement){3==e.nodeType&&(e=e.parentNode);for(p=v(e.nodeName);e.parentNode&&e.parentNode.nodeName&&("A"!=p&&"AREA"!=p||!e.href);)e=e.parentNode,p=v(e.nodeName);e=e.href?e:!1}else e=!1;e&&K(b,e)&&J(B().hostname,e.hostname);p=n(b);e=p.x;p=p.y;var A=b.target||b.srcElement,y=r._prefs,x=g(A),D="";b=B().href;switch(y.mode){case "fixed":D="0";s(A)&&(D+="u");break;case "centered":D="1";x=Math.floor(k()/2);e=e>x?e-x+32768:e;s(A)&&(D+="u");break;default:D=v(A.nodeName);
|
||||||
|
D="BODY"==D||"HTML"==D?k():A.offsetWidth;y=v(A.nodeName);"BODY"==y||"HTML"==y?(y=d.documentElement,y=Math.max(y.scrollHeight,d.body.scrollHeight,y.clientHeight)):y=A.offsetHeight;D||(D=1);y||(y=1);e=Math.floor(65535*(e-x.left)/D);p=Math.floor(65535*(p-x.top)/y);for(x="";A.parentNode&&"BODY"!=v(A.nodeName)&&"HTML"!=v(A.nodeName);){x+=E[A.nodeName]||"*";b:{for(var D=A.parentNode,C=y=0;C<D.childNodes.length;C++)if(A.nodeName==D.childNodes[C].nodeName){if(A==D.childNodes[C]){D=y;break b}y++}D=0}x+=D||
|
||||||
|
"";A=A.parentNode}D=l.trim(x,128)}e=["rn",l.random(),"x",e,"y",p,"t",Math.floor(Math.floor(+new Date-Hb)/100),"p",D];R?e=e.concat("wh","1"):b=b?b.replace(/\#.*$/,""):b;"function"==typeof r._prefs.urlFilter&&(b=r._prefs.urlFilter(b));b=l.trim(b,Ja);e=e.join(":");(new Fb({protocol:ca,counterId:a,counterType:c})).sendClick(b,e)}q=h;z=u}}};this.setPrefs=function(a){function b(a,e){return!0}this._prefs="undefined"==typeof a||!1===a||!0===a?{filter:b,ignoreTags:[],mode:"",delay:oa,quota:0,hasQuota:!1,ignoreSameClicks:!0}:
|
||||||
|
{filter:a.filter||b,ignoreTags:a.ignoreTags||[],mode:a.mode||"",delay:"undefined"==typeof a.delay?oa:a.delay,quota:a.quota||0,hasQuota:!!a.quota,ignoreSameClicks:"undefined"==typeof a.ignoreSameClicks,urlFilter:a.urlFilter}};this.updateStatus=function(a){switch(typeof a){case "undefined":this.start(!0);break;case "boolean":a?this.start(a):this.stop();break;case "object":this.start(a)}};this._start=!1;this.start=function(a){this.setPrefs(a);if(!this._start)h.on(d,"click",this.handler);this._start=
|
||||||
|
!0};this.stop=function(){this._start&&h.un(d,"click",this.handler);this._start=!1};this.start(b)}var ba=Math.round(1073741824*Math.random()),W,ua="",ca=aa,Ca=Ga=H.href,va="",u;Ya._metrika.counter||(Ya._metrika.counter=g);"object"==typeof a&&(u=a,s=a.defer,ua=a.ut,c=a.type,b=a.params,ca=a.onlyHttps?"https:":aa,a=a.id);a=a||0;/^\d+$/.test(a)||(a=0);c=c||0;W=a+":"+c;if(Ya._metrika.counters[W])return Ya._metrika.counters[W];l.trim=function(a,b){a=String(a).replace(/^\s+|\s+$/g,"");b&&a.length>b&&(a=a.substr(0,
|
||||||
|
b));return a};q._silverlightVersion="";q.getSilverlightVersion=function(){if(!q._silverlightVersion)if(f.ActiveXObject)try{var a=new ActiveXObject("AgControl.AgControl"),b=function(a,b,e,c){for(;a.isVersionSupported(b[0]+"."+b[1]+"."+b[2]+"."+b[3]);)b[e]+=c;b[e]-=c},c=[1,0,0,0];b(a,c,0,1);b(a,c,1,1);b(a,c,2,1E4);b(a,c,2,1E3);b(a,c,2,100);b(a,c,2,10);b(a,c,2,1);b(a,c,3,1);q._silverlightVersion=c.join(".")}catch(d){}else if(a=L.plugins["Silverlight Plug-In"])q._silverlightVersion=a.description;return q._silverlightVersion||
|
||||||
|
""};q._flashVersion=0;q.getFlashVersion=function(){if(!q._flashVersion){var a=f.navigator;if("undefined"!=typeof a.plugins&&"object"==typeof a.plugins["Shockwave Flash"]){var b=a.plugins["Shockwave Flash"].description;b&&(a=a.mimeTypes,"undefined"==typeof a||!a["application/x-shockwave-flash"]||a["application/x-shockwave-flash"].enabledPlugin)&&(q._flashVersion=b.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s+r|\s+b[0-9]+)/,"."))}else if("undefined"!=typeof f.ActiveXObject)try{if(b=new ActiveXObject("ShockwaveFlash.ShockwaveFlash")){var c=
|
||||||
|
b.GetVariable("$version");c&&(q._flashVersion=c.split(" ")[1].replace(/,/g,".").replace(/[^.\d]/g,""))}}catch(d){}}return q._flashVersion};q.getLanguage=function(){return(f.navigator&&(L.language||L.browserLanguage)||"").toLowerCase()};q.getJavaEnabled=function(){try{return L.javaEnabled()}catch(a){return!1}};l.fnv32a=function(a){for(var b=2166136261,c=0,d=a.length;c<d;++c)b^=a.charCodeAt(c),b+=(b<<1)+(b<<4)+(b<<7)+(b<<8)+(b<<24);return b>>>0};q.getFingerPrint=function(){var a=[];if(L.plugins&&L.plugins.length)for(var b=
|
||||||
|
0;b<L.plugins.length;b++){var c=L.plugins[b];l.mergeArrays(a,[c.name,c.version,c.description,c.filename])}if(L.mimeTypes&&L.mimeTypes.length)for(b=0;b<L.mimeTypes.length;b++)c=L.mimeTypes[b],l.mergeArrays(a,[c.type,c.description,c.suffixes]);return l.fnv32a(a.join(";"))+"01"};var wa=V.inherit({trimParams:!1,resource:"watch",retry:!0,postParams:["site-info"],sendHit:function(a,b,c,d,f){this._hitExt(a,b,c,d,{ut:f,ar:!0,saveRef:!0})},sendAjaxHit:function(a,b,c,d){this._hitExt(a,b,c,null,d)},sendParams:function(a){this._hitExt(B().href,
|
||||||
|
"","",a,{ar:!0,pa:!0,onlyData:!0})},sendGoal:function(a,b){if(!/[\/&=?#]/.test(a)){var c=a?"goal://"+B().hostname+"/"+encodeURIComponent(a):B().href,f=n(),g=a?B().href:d.referrer;this._hitExt(c,f,g,b,{ar:!0})}},sendClickLink:function(a,b,c){this._hitExt(a,b,B().href,null,c)},sendExtLink:function(a,b,c,d){this._hitExt(a,"",B().href,d,{ar:!0,ln:!0,ut:Ka})},sendFileUpload:function(a,b,c,d){this._hitExt(a,"",B().href,d,{ar:!0,ln:!0,dl:!0})},sendNotBounce:function(a){this._hitExt(B().href,"","",null,{cl:a,
|
||||||
|
ar:!0,nb:!0,onlyData:!0})},sendVideoAction:function(a,b,c,d){this._hitExt(c,d||"","",null,{ar:!0,va:a,vt:+b})},sendSocialClick:function(a,b,c){this._hitExt(c||B().href,"","",null,{ar:!0,sn:l.trim(a,64),sa:l.trim(b,64)})},_hitExt:function(a,b,c,d,g,h,m,n){function s(a,b){b&&(q[a]=b)}g=g||{};h=h||{};if("MetrikaPlayer"!=f.name){c="undefined"!=typeof c?c:Ga;var q={};g.ar&&!g.onlyData&&(c=this._prepareHitUrl(c),a=this._prepareHitUrl(a));g.reqNum=!0;s("page-ref",l.trim(c,Ja));s("page-url",l.trim(a,Ja));
|
||||||
|
-1!=B().hostname.search(/(?:^|\.)(?:ya|yandex|narod|narod2)\.(?:\w+|com\.\w+)$/)?s("ut",Ka):"undefined"!=typeof g.ut&&s("ut",l.trim(g.ut,64));if(d)if(a=l.toJSON(d),this.trimParams&&a.length>Gb)var u=!0;else s("site-info",a);g.saveRef&&(Ga=c);l.mixin(h,z(b,g,!0));this.send(q,h,function(){u&&(new wa({protocol:this.protocol,counterType:this.counterType,counterId:this.counterId})).sendParams(d);m&&m.apply(n,arguments)},this)}},_prepareHitUrl:function(a){var b=B(),c=b.host,b=b.href;if(!a)return b;if(-1!=
|
||||||
|
a.search(/^\w+:\/\//))return a;var d=a.charAt(0);if("?"==d)return d=b.search(/\?/),-1==d?b+a:b.substr(0,d)+a;if("#"==d)return d=b.search(/#/),-1==d?b+a:b.substr(0,d)+a;if("/"==d){if(d=b.search(c),-1!=d)return b.substr(0,d+c.length)+a}else return c=b.split("/"),c[c.length-1]=a,c.join("/");return a}}),Db=xa.inherit({id:"script",request:function(a,b,c,g){var h="_ymjsp"+l.random(),m=d.createElement("script");f[h]=E(function(a){try{delete f[h]}catch(b){f[h]=ga}c.call(g,!0,a);m.parentNode&&m.parentNode.removeChild(m)},
|
||||||
|
"transport.script");m.type="text/javascript";m.src=this._buildUrl(a,l.mixin({wmode:5,callback:h},b));a=d.getElementsByTagName("head")[0];a.insertBefore(m,a.firstChild);return!0}}),Eb=wa.inherit({transports:[Db],trimParams:!0,sendHit:function(a,b,c,d,g,f,h,l,m){var n={};f&&(n.vc=f);h&&(n.pr=1);this._hitExt(a,b,c,d,g,n,l,m)}}),Fb=V.inherit({resource:"clmap",retry:!0,transports:[Ta],sendClick:function(a,b,c,d){this.send({"page-url":a,"pointer-click":b},{},c,d)}}),Y=[];V.retransmit();var O=new wa({protocol:ca,
|
||||||
|
counterType:c,counterId:a}),U;g.replacePhones=E(function(){try{var b=(new ka({counterId:a})).read("mp2_substs");if(b){var c=(new Function("return "+b))();c&&ha(c,!0)}}catch(d){}},"counter.replacePhones");g.reachGoal=E(function(b,c){ya.log("Reach goal. Counter: "+a+". Goal id: "+b);O.sendGoal(b,c);return!0},"counter.reachGoal");g.trackLinks=E(za,"counter.trackLinks");g.hit=E(function(b,c,d,g,f){b&&(ya.log("PageView. Counter "+a+". URL: "+b+". Referer: "+d),O.sendHit(b,c,d,g,f))},"counter.hit");g.params=
|
||||||
|
E(function(b){if(b){var c=arguments.length;if(1<c){for(var d={},g=d,f=0;f<c-1;f++){var h=""+arguments[f];g[h]={};f<c-2&&(g=g[h])}g[h]=arguments[c-1];b=d}ya.log("User params. Counter "+a+". Params: ",b);O.sendParams(b)}},"counter.params");g.file=E(function(a,b,c,d){a&&O.sendFileUpload(a,b,c,d)},"counter.file");g.extLink=E(function(a,b,c,d){a&&O.sendExtLink(a,b,c,d)},"counter.extLink");g.notBounce=E(function(){var a=0;La&&pa&&(a=pa-La);O.sendNotBounce(a)},"counter.notBounce");var da=[];g.addFileExtension=
|
||||||
|
function(a){"string"==typeof a?da.push(a):da=da.concat(a)};g.clickmap=function(a){g._clickmap?g._clickmap.updateStatus(a):g._clickmap=new I(a)};g.accurateTrackBounce=function(b){"number"!=typeof b&&(b=15E3);if(!g._isAccurateTrackBounce){g._isAccurateTrackBounce=!0;var c=new ea({counterId:a}),f=c.get("lastHit");c.set("lastHit",+new Date);((c=c.get("lastHit"))&&(!f||f<c-18E5)||!x(d.referrer,B().href)||0.1>Math.random())&&jb(function(){g.notBounce()},b)}};var Ea=null,R=!1;g.trackHash=function(a){if(!1===
|
||||||
|
a)R&&("onhashchange"in f?h.un(f,"hashchange",y):clearInterval(Ea),R=!1);else if(!R){if("onhashchange"in f)h.on(f,"hashchange",y);else zb(y);R=!0}g._trackHash=R};g.video=E(function(a,b,c,d){var g=["end","play","pause","seek"];if(a&&c){a:{for(var f=0,h=g.length;f<h;f+=1)if(a===g[f]){g=f;break a}g=-1}-1!==g&&O.sendVideoAction(a,b,c,d)}},"counter.video");g.social=E(function(a,b,c){a&&b&&O.sendSocialClick(a,b,c)},"counter.social");g.enableAll=function(){g.trackLinks(!0);g.clickmap(!0);g.accurateTrackBounce()};
|
||||||
|
g.uploadPage=function(){};g._performanceTiming=fa;if(a)h.onDocumentVisible(Ia)},"init")()};f.Ya.Metrika.counters=function(){var a=[];l.forEachKey(f.Ya._metrika.counters,function(b,c){var d=b.split(":");a.push({id:+d[0],type:+d[1],accurateTrackBounce:c._isAccurateTrackBounce,clickmap:c._clickmap&&c._clickmap._start,oldCode:!!f.ya_cid,trackHash:!!c._trackHash,trackLinks:c._trackLinks&&c._trackLinks.on,webvisor:!!c._webvisor})});return a};f.ya_cid&&new Ya.Metrika(f.ya_cid,f.ya_params,f.ya_class);f.ya_cid&&
|
||||||
|
!f.ya_hit&&(f.ya_hit=function(a,b){Ya._metrika.counter&&Ya._metrika.counter.reachGoal(a,b)});C=f.yandex_metrika_callback;K=f.yandex_metrika_callbacks;"function"==typeof C&&C();if("object"==typeof K)for(C=0;C<K.length;C++)if(X=K[C])K[C]=null,X();sa("yandex_metrika_callback");sa("yandex_metrika_callbacks");K=["link","click","scroll","res"];for(C=0;C<K.length;C++)if(X=K[C]+"map",-1!=H.href.search("ym_playback="+X)){ta(aa+"//metrika.yandex.ru/js/"+X+"/_loader.js");break}f.Ya.Metrika.informer=function(a){var b=
|
||||||
|
!!Ya.Metrika._informer;Ya.Metrika._informer=a;b||ta(aa+"//mc.yandex.ru/metrika/informer.js")};(function(){var a=q.getJScriptVersion();if(!a||5.8<a)if("complete"==d.readyState)ha();else h.on(f,"load",ha)})();(function(){var a=function(){var a=d.getElementsByTagName("body")[0],b=d.createElement("iframe");b.src="http://awaps.yandex.ru/0/2153/0.htm?ad=165746&pl=93829&rnd="+l.random();b.setAttribute("style","position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden;visibility:hidden");a.appendChild(b);
|
||||||
|
P(function(){a.removeChild(b)},1E4,"ad")},b=function(){f.removeEventListener("load",b,!1);a()},c=f.performance;l.random(200)||Ya._metrika.isAd||(Ya._metrika.isAd=!0,"http:"==aa&&"object"==typeof c&&f.addEventListener&&(c.timing&&c.timing.loadEventStart?a():f.addEventListener("load",b,!1)))})()})(this,this.document);
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
/* counted */
|
||||||
|
After Width: | Height: | Size: 1.2 KiB |
@@ -0,0 +1,8 @@
|
|||||||
|
(function(b){var a={};a.imageError=function(c){var d=c.parentNode,e=d.parentNode.childNodes.length>2?d:d.parentNode;e.innerHTML='<div class="b-image-error">Картинка недоступна</div>'};b.ya=a})(window);
|
||||||
|
/*!
|
||||||
|
* Copyright (c) 2010, Yahoo! Inc. All rights reserved.
|
||||||
|
* Code licensed under the BSD License:
|
||||||
|
* http://developer.yahoo.com/yui/license.html
|
||||||
|
* version: 2.8.2r1
|
||||||
|
*/
|
||||||
|
ya.namespace=function(){var b=arguments,g=null,e,c,f;for(e=0;e<b.length;e=e+1){f=(""+b[e]).split(".");g=ya;for(c=(f[0]=="ya")?1:0;c<f.length;c=c+1){g[f[c]]=g[f[c]]||{};g=g[f[c]]}}return g};
|
||||||
|
After Width: | Height: | Size: 673 B |
|
After Width: | Height: | Size: 111 B |
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 4.1 KiB |
|
After Width: | Height: | Size: 7.5 KiB |
|
After Width: | Height: | Size: 7.5 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 6.3 KiB |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 3.4 KiB |
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 2.7 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1,4 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<!-- saved from url=(0041)http://my.ya.ru/update_session.xml?build= -->
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><script type="text/javascript" charset="utf-8" src="mega-y5.js"></script><script type="text/javascript" charset="utf-8" src="update_session.js"></script></head><body>
|
||||||
|
</body></html>
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
y5.require(
|
||||||
|
['Cookies'],
|
||||||
|
function() {
|
||||||
|
/**
|
||||||
|
* Обновляет сессию с помощью редиректа на паспорт.
|
||||||
|
*/
|
||||||
|
function updateSession()
|
||||||
|
{
|
||||||
|
y5.Cookies.set('Cookie_check', '1', false); // для текущего домена
|
||||||
|
var loc = window.location;
|
||||||
|
var url = loc.protocol.concat('//', loc.host) + '/pass?retpath=' + encodeURIComponent(window.parent.friendsURL('update_session'));
|
||||||
|
window.location.replace(url);
|
||||||
|
}
|
||||||
|
|
||||||
|
// обновляем сессию каждые 55 минут
|
||||||
|
var update_delta = 55*1000*60;
|
||||||
|
if (update_delta) window.setTimeout(updateSession, update_delta);
|
||||||
|
}
|
||||||
|
)
|
||||||
|
After Width: | Height: | Size: 53 B |
|
After Width: | Height: | Size: 53 B |
@@ -0,0 +1,113 @@
|
|||||||
|
(function(f,d,ga){function E(a,b){return function(){try{return a.apply(this,arguments)}catch(c){("string"!=typeof c.message||-1==c.message.indexOf("NPObject")&&-1==c.message.indexOf("Too much time spent in unload handler"))&&qa(c,b)}}}function qa(a,b){if(0.01>Math.random()){var c=["cp: "+b,a.name+": "+a.message,"debug: "+Aa,"code: "+Ma,"stack: "+a.stack];(new Image).src="//an.yandex.ru/jserr/101500?cnt-class=100&errmsg="+encodeURIComponent(c.join("; ").replace(/\r?\n/g,"\\n"))}}function P(a,b,c){return f.setTimeout(E(a,
|
||||||
|
c||"setTimeout"),b)}function B(){for(var a={},b="hash host hostname href pathname port protocol search".split(" "),c=b.length,d=c;d--;)a[b[d]]="";try{for(var g=f.location,d=c;d--;){var h=b[d];a[h]=""+g[h]}}catch(l){H&&(a=H)}return a}function mb(a){return a?(""+a).replace(/^\s+/,"").replace(/\s+$/,""):""}function Ba(a){return-1!==(""+f.navigator.userAgent).toLowerCase().search(a)}function sa(a){try{delete f[a]}catch(b){f[a]=ga}}function ta(a){var b=d.createElement("script");b.type="text/javascript";
|
||||||
|
b.async=!0;b.src=a;try{var c=d.getElementsByTagName("html")[0];d.getElementsByTagName("head")[0]||c.appendChild(d.createElement("head"));var f=d.getElementsByTagName("head")[0];f.insertBefore(b,f.firstChild)}catch(g){}}function ha(){if(top!=f&&parent==top&&f.postMessage&&!Ya.Metrika_visorPlayerOn){Ya.Metrika_visorPlayerOn=!0;var a=d.createElement("div");a.innerHTML='<iframe name="RemoteIframe" allowtransparency="true" style="position: absolute; left: -999px; top: -999px; width: 1px; height: 1px;"></iframe>';
|
||||||
|
var b=a.firstChild;P(function(){var c=d.body||d.documentElement;a.webkitCreateShadowRoot&&(c.appendChild(a),c=a.webkitCreateShadowRoot(),Ya.Metrika_shadowAppRoot=c);c.appendChild(b);try{var s=b.contentWindow.document}catch(g){}s&&(c=Math.random(),f[c]=function(a,b,c,g,d){try{c.postMessage&&(a.onmessage=function(c){c=c||a.event;try{var f=JSON.parse(c.data)}catch(s){return}if(/(^|\.)yandex\.(ru|com|ua|kz|by|com\.tr)(:\d{4})?$/.test(c.origin)&&f&&"script"==f.name&&f.data){c=g.getElementsByTagName("head")[0];
|
||||||
|
var h=g.createElement("base");h.href=f.data;c.appendChild(h);h=g.createElement("script");h.src=f.data;c.appendChild(h);-1<d.userAgent.indexOf("Firefox/3.6.")&&b.removeEventListener("message",a.onmessage,!1);a.onmessage=null}},-1<d.userAgent.indexOf("Firefox/3.6.")&&b.addEventListener("message",a.onmessage,!1),c.postMessage('{"name":"ping"}',"*"))}catch(f){}},s.open(),s.write('<!doctype html><html><head><meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7,IE=edge" /></head><body><script type="text/javascript">eval("(" + Function.prototype.toString.call(parent['+
|
||||||
|
c+']) + ")")(window, parent, top, document, navigator);\x3c/script></body></html>'),s.close())},500)}}function Wa(a,b,c,s,g,ra){function lb(a){var e=(new Date).getTime();a&&e<a&&(Xa+=a-e+r);P(function(){lb(e)},r,"timeCorrector")}function Na(){var a=(new Date).getTime()+Xa;a<Za&&(a=Za+r/2);return Za=a}function x(){return Math.round((Na()-za)/M)}function q(a,e){e=Math.max(0,Math.min(e,65535));l.mergeArrays(a,[e>>8,e&255])}function z(a,e){l.mergeArrays(a,[e&255])}function n(a,e){for(e=Math.max(0,e|0);127<
|
||||||
|
e;)l.mergeArrays(a,[e&127|128]),e>>=7;l.mergeArrays(a,[e])}function E(a,e){255<e.length&&(e=e.substr(0,255));l.mergeArrays(a,[e.length]);for(var b=0;b<e.length;b++)q(a,e.charCodeAt(b))}function H(a,e){n(a,e.length);for(var b=0;b<e.length;b++)n(a,e.charCodeAt(b))}function C(a,e,b,c,k,t){for(;b&&(!b.offsetWidth||!b.offsetHeight);)b=m.getElementParent(b);if(!b)return null;var v=b[G];if(!v||0>v)return null;var g={mousemove:tb,click:sa,dblclick:ta,mousedown:ub,mouseup:qa,touch:A}[e];if(!g)return null;
|
||||||
|
var d=m.getElementXY(b);b=[];z(b,g);n(b,a);n(b,v);n(b,Math.max(0,c[0]-d[0]));n(b,Math.max(0,c[1]-d[1]));/^mouse(up|down)|click$/.test(e)&&(a=k||t,z(b,2>a?ha:a==(k?2:4)?Ta:la));return b}function L(a,e,b,c){e=e[G];if(!e||0>e)return null;var k=[];z(k,Ma);n(k,a);n(k,e);n(k,b[0]);n(k,b[1]);z(k,0);z(k,0);z(k,c);return k}function J(a,e){var b=[];z(b,vb);n(b,a);n(b,e[0]);n(b,e[1]);return b}function K(a,e,b){var k=[];b=b[G];if(!b||0>b)return null;z(k,wb);n(k,a);n(k,e[0]);n(k,e[1]);n(k,b);return k}function V(a,
|
||||||
|
e,b){var k=[];z(k,Ka);n(k,a);n(k,e[0]);n(k,e[1]);n(k,b[0]);n(k,b[1]);return k}function aa(a,e,b,k){var c=[];z(c,S);n(c,a);q(c,e);z(c,b);a=k[G];if(!a||0>a)a=0;n(c,a);return c}function ea(a,e){var b,k;0==e.length?k=b="":100>=e.length?(b=e,k=""):200>=e.length?(b=e.substr(0,100),k=e.substr(100)):(b=e.substr(0,97),k=e.substr(e.length-97));var c=[];z(c,La);n(c,a);H(c,b);H(c,k);return c}function X(a){var e=[];z(e,Ja);n(e,a);return e}function ia(a){var e=[];z(e,xb);n(e,a);return e}function ga(a){var e=[];
|
||||||
|
z(e,D);n(e,a);return e}function ka(a,e){var b=[];z(b,yb);n(b,a);n(b,e[G]);return b}function Z(a,e){var b=[];z(b,Ba);n(b,a);n(b,e[G]);return b}function $(a,e,b){var k=[];z(k,Ga);n(k,a);n(k,e[G]);E(k,String(b));return k}function ma(a){var e=a[G];if(!e||0>e||!/^INPUT|SELECT|TEXTAREA$/.test(a.nodeName)||!a.form||m.classNameExists(a.form,"-metrika-noform"))return null;var b=m.getFormNumber(a.form);if(0>b)return null;var k;k="INPUT"==a.nodeName?{text:0,color:0,date:0,datetime:0,"datetime-local":0,email:0,
|
||||||
|
number:0,range:0,search:0,tel:0,time:0,url:0,month:0,week:0,password:2,radio:3,checkbox:4,file:6,image:7}[a.type]:{SELECT:1,TEXTAREA:5}[a.nodeName];if("number"!=typeof k)return null;for(var c=-1,t=a.form.elements,v=t.length,g=0,d=0;g<v;g++)if(t[g].name==a.name){if(t[g]==a){c=d;break}d++}if(0>c)return null;t=[];z(t,F);n(t,e);n(t,b);n(t,k);H(t,a.name||"");n(t,c);return t}function xa(a,e){var b=m.getFormNumber(e);if(0>b)return null;for(var k=e.elements,c=k.length,t=[],v=0;v<c;v++)if(!m.isEmptyField(k[v])){var g=
|
||||||
|
k[v][G];g&&0<g&&l.mergeArrays(t,[g])}k=[];z(k,p);n(k,a);n(k,b);n(k,t.length);for(b=0;b<t.length;b++)n(k,t[b]);return k}function ya(){var a=[];z(a,Ab);return a}function y(a,e,b){a=a.apply(f,e);T.append(a,b)}function I(a){if(a[G])a:{var e=x(),b=a[G];if(0<b){var k=[];a=m.getElementRegion(a);var c=Oa[b],t=a[0]+"x"+a[1],v=a[2]+"x"+a[3];t!=c.pos&&(c.pos=t,z(k,ja),n(k,e),n(k,b),n(k,a[0]),n(k,a[1]));v!=c.size&&(c.size=v,z(k,Bb),n(k,e),n(k,b),n(k,a[2]),n(k,a[3]));if(k.length){a=k;break a}}a=null}else{(b=m.getElementParent(a))&&
|
||||||
|
I(b);a[G]=$a;Oa[$a]={};$a++;if(a.nodeName)if(b=+a[G],!isFinite(b)||0>=b)e=null;else{var k=Wa,c=0,g=m.getElementParent(a),t=g&&g[G]?g[G]:0;0>t&&(t=0);var v=a.nodeName.toUpperCase(),d=Ia[v];d||(k|=Ua);var f=m.getElementNeighborPosition(a);f||(k|=Va);var s=m.getElementRegion(a);(g=g?m.getElementRegion(g):null)&&s[0]==g[0]&&s[1]==g[1]&&s[2]==g[2]&&s[3]==g[3]&&(k|=nb);Oa[b].pos=s[0]+"x"+s[1];Oa[b].size=s[2]+"x"+s[3];a.id&&"string"==typeof a.id&&(k|=ob);(g=m.calcTextChecksum(a))&&(k|=Aa);var r=m.calcAttribChecksum(a);
|
||||||
|
r&&(c|=kb);var w;b:{w=m.getElementChildren(m.getElementParent(a),a.tagName);for(var F=0;F<w.length;F++)if((!w[F].id||"string"!=typeof w[F].id)&&m.calcAttribChecksum(w[F])==r&&m.calcTextChecksum(w[F])==g){w=!0;break b}w=!1}w&&(k|=fa,e=m.calcChildrenChecksum(a));w=[];z(w,Cb);n(w,b);z(w,k);n(w,t);d?z(w,d):E(w,v);f&&n(w,f);k&nb||(n(w,s[0]),n(w,s[1]),n(w,s[2]),n(w,s[3]));k&ob&&E(w,a.id);g&&q(w,g);k&fa&&q(w,e);z(w,c);r&&q(w,r);e=w}else a[G]=-1,e=null;T.append(e,void 0);a=ma(a)}T.append(a,void 0)}function ba(a){var e=
|
||||||
|
N.getTarget(a);if(e&&"SCROLLBAR"!=e.nodeName){if(e&&/^INPUT|SELECT|TEXTAREA|BUTTON$/.test(e.tagName))if(e[G])I(e);else{var b=e.form;if(b)for(var b=b.elements,k=b.length,c=0;c<k;c++)/^INPUT|SELECT|TEXTAREA|BUTTON$/.test(b[c].tagName)&&!b[c][G]&&I(b[c]);else I(e)}else I(e);y(C,[x(),a.type,e,N.getPos(a),a.which,a.button])}}function W(a){ba(a);var e,b;f.getSelection?(a=f.getSelection(),e=a.toString(),b=a.anchorNode):d.selection&&d.selection.createRange&&(a=d.selection.createRange(),e=a.text,b=a.parentElement());
|
||||||
|
if("string"==typeof e){for(;b&&1!=b.nodeType;)b=b.parentNode;b&&"INPUT"==b.tagName&&"password"==b.type||b&&(/(?:^|\s)-metrika-nokeys(?:\s|$)/.test(b.className)||m.getElementsByClassName("-metrika-nokeys",b).length)||e==ab||(ab=e,y(ea,[x(),e]))}}function ua(a){var e=Na(),b=e-pb;if(!(b<Q)){var k=N.getPos(a),c=bb[0]-k[0],t=bb[1]-k[1],c=c*c+t*t;0>=c||16>c&&100>b||20>b&&256>c||(pb=e,bb=k,ba(a))}}function ca(){var a=m.getDocumentScroll(),e=Na();e-qb<Q||10>Math.abs(a[0]-cb[0])&&10>Math.abs(a[1]-cb[1])||
|
||||||
|
(qb=e,cb=a,y(J,[x(),a]))}function Ca(a){a=N.getTarget(a);var e=Math.random(),b=[a.scrollLeft,a.scrollTop];if(a.localId){if(e=db[a.localId],!e||10>Math.abs(b[0]-e[0])&&10>Math.abs(b[1]-e[1]))return}else{for(;db[e];)e=Math.random();a.localId=e}db[a.localId]=b;a!==d&&(I(a),y(K,[x(),b,a]))}function va(){y(V,[x(),m.getViewportSize(),m.getDocumentSize()])}function u(){y(ya,[],!0)}function wa(a){return(a.shiftKey?rb:0)|(a.ctrlKey?eb:0)|(a.altKey?sb:0)|(a.metaKey?Ha:0)|(a.ctrlKey||a.altKey?Pa:0)}function na(a,
|
||||||
|
e,b){a=N.getTarget(a);"INPUT"==a.tagName&&"password"==a.type||/(?:^|\s)-metrika-nokeys(?:\s|$)/.test(a.className)||(I(a),y(aa,[x(),e,b,a]))}function oa(a){var e=a.keyCode,b=wa(a);if({3:1,8:1,9:1,13:1,16:1,17:1,18:1,19:1,20:1,27:1,33:1,34:1,35:1,36:1,37:1,38:1,39:1,40:1,45:1,46:1,91:1,92:1,93:1,106:1,110:1,111:1,144:1,145:1}[e]||112<=e&&123>=e||96<=e&&105>=e||b&Pa)19==e&&(b&~Pa)==eb&&(e=144),na(a,e,b|Pa),fb=!1,P(function(){fb=!0},1),67==e&&b&eb&&!(b&sb||b&rb)&&Y()}function pa(a){fb&&!gb&&0!==a.which&&
|
||||||
|
(na(a,a.charCode||a.keyCode,wa(a)),gb=!0,P(function(){gb=!1},1))}function Y(){hb||(hb=!0,ab&&y(X,[x()]),P(function(){hb=!1},1))}function O(){Da||(Da=!0,y(ia,[x()]))}function U(){Da&&(Da=!1,y(ga,[x()]))}function da(a){(!Da||a&&!a.fromElement)&&O()}function Ea(a){a&&!a.toElement&&U()}function R(a){if((a=N.getTarget(a))&&/^INPUT|SELECT|TEXTAREA|BUTTON$/.test(a.tagName)){if(a[G])I(a);else{var e=a.form;if(e)for(var e=e.elements,b=e.length,k=0;k<b;k++)/^INPUT|SELECT|TEXTAREA|BUTTON$/.test(e[k].tagName)&&
|
||||||
|
!e[k][G]&&I(e[k]);else I(a)}y(ka,[x(),a])}}function e(a){(a=N.getTarget(a))&&/^INPUT|SELECT|TEXTAREA|BUTTON$/.test(a.tagName)&&(I(a),y(Z,[x(),a]))}function k(a){a=N.getTarget(a);if(!("INPUT"==a.tagName&&"password"==a.type||a&&/(?:^|\s)-metrika-nokeys(?:\s|$)/.test(a.className))&&a&&/^INPUT|SELECT|TEXTAREA$/.test(a.tagName)){var e=/^(checkbox|radio)$/.test(a.type)?a.checked:a.value;I(a);y($,[x(),a,e])}}function t(a){a=N.getTarget(a);if(!m.classNameExists(a,"-metrika-noform")&&"FORM"==a.nodeName){for(var e=
|
||||||
|
a.elements,b=0;b<e.length;b++)m.isEmptyField(e[b])||I(e[b]);y(xa,[x(),a],!0)}}function v(a){ca();if(a.touches&&a.touches.length){var e=N.getTarget(a);if(e){I(e);for(var b=0;b<a.touches.length;b++)y(C,[x(),"touch",e,[a.touches[b].pageX,a.touches[b].pageY],0,0])}}}function w(a){var e=N.getTarget(a);if(e){var b;"wheel"==a.type?b=0<a.deltaY?1:0>a.deltaY?2:0:"mousewheel"==a.type&&(b=0<a.wheelDelta?2:0>a.wheelDelta?1:0);b&&(I(e),y(L,[x(),e,N.getPos(a),b]))}}var T=new Qa({protocol:a,counterId:b,counterType:c,
|
||||||
|
meta:{url:B().href,hitId:g,timezone:Ra,timestamp:Fa}}),r=20,M=50,Q=10,Cb=1,tb=2,vb=3,wb=16,ub=4,S=5,F=7,ja=9,Bb=10,p=11,A=12,Ab=13,xb=14,D=15,yb=17,Ba=18,Ga=19,Ja=27,Ka=28,La=29,qa=30,Ma=31,sa=32,ta=33,ha=1,la=2,Ta=4,fa=1,Ua=2,Va=4,nb=8,Aa=16,ob=32,Wa=64,kb=2,sb=1,rb=2,eb=4,Ha=8,Pa=16,Ia={A:1,ABBR:2,ACRONYM:3,ADDRESS:4,APPLET:5,AREA:6,B:7,BASE:8,BASEFONT:9,BDO:10,BIG:11,BLOCKQUOTE:12,BODY:13,BR:14,BUTTON:15,CAPTION:16,CENTER:17,CITE:18,CODE:19,COL:20,COLGROUP:21,DD:22,DEL:23,DFN:24,DIR:25,DIV:26,
|
||||||
|
DL:27,DT:28,EM:29,FIELDSET:30,FONT:31,FORM:32,FRAME:33,FRAMESET:34,H1:35,H2:36,H3:37,H4:38,H5:39,H6:40,HEAD:41,HR:42,HTML:43,I:44,IFRAME:45,IMG:46,INPUT:47,INS:48,ISINDEX:49,KBD:50,LABEL:51,LEGEND:52,LI:53,LINK:54,MAP:55,MENU:56,META:57,NOFRAMES:58,NOSCRIPT:59,OBJECT:60,OL:61,OPTGROUP:62,OPTION:63,P:64,PARAM:65,PRE:66,Q:67,S:68,SAMP:69,SCRIPT:70,SELECT:71,SMALL:72,SPAN:73,STRIKE:74,STRONG:75,STYLE:76,SUB:77,SUP:78,TABLE:79,TBODY:80,TD:81,TEXTAREA:82,TFOOT:83,TH:84,THEAD:85,TITLE:86,TR:87,TT:88,U:89,
|
||||||
|
UL:90,VAR:91,NOINDEX:100},Xa=0;lb(0);var Za=0,$a=1,pb=0,bb=[0,0],qb=0,cb=[0,0],db={},fb=!0,gb=!1,ab="",hb=!1,Da=!0,za=Na(),G="metrikaId_"+Math.random(),Oa={},Sa=":submit"+Math.random();if("MetrikaPlayer"!=f.name){h.on(d,"mousemove",ua);h.on(d,"click,dblclick,mousedown",ba);h.on(d,"mouseup",W);h.on(f,"scroll",ca);if("onmousewheel"in d)h.on(d,"mousewheel",w);else h.on(d,"wheel",w);h.on(f,"beforeunload",u);if(!ib)h.on(f,"unload",u);h.on(f,"resize",va);h.on(d,"keydown",oa);h.on(d,"keypress",pa);h.on(d,
|
||||||
|
"copy",Y);h.on(d,"touchmove,touchstart",v);d.attachEvent&&!f.opera?(h.on(d,"focusin",da),h.on(d,"focusout",Ea)):(h.on(f,"focus",O),h.on(f,"blur",U),h.on(d,"blur",U));d.addEventListener?(h.on(d,"scroll",Ca),h.on(d,"focus",R),h.on(d,"blur",e),h.on(d,"change",k),h.on(d,"submit",t)):d.attachEvent&&(h.on(d,"focusin",R),h.on(d,"focusout",e),function(){for(var a=d.getElementsByTagName("form"),e=0;e<a.length;e++){for(var b=a[e].getElementsByTagName("*"),c=0;c<b.length;c++)if(/^INPUT|SELECT|TEXTAREA$/.test(b[c].tagName))h.on(b[c],
|
||||||
|
"change",k);h.on(a[e],"submit",t)}}());(function(){var a=d.getElementsByTagName("form");if(a.length)for(var e=0;e<a.length;e++){var b=a[e].submit;if("function"==typeof b||"object"==typeof b&&/^\s*function submit\(\)/.test(String(b)))a[e][Sa]=b,a[e].submit=function(){t({target:this});return this[Sa]()}}})();"0:0"!=m.getDocumentScroll().join(":")&&ca();va();ra.uploadPage=function(e){if("function"==typeof f.toStaticHTML&&-1<f.toStaticHTML.toString().indexOf("NoScript"))return!1;var k=d.documentElement;
|
||||||
|
if(k&&19E4<(""+k.innerHTML).length)return!1;var t=f.XMLHttpRequest?new f.XMLHttpRequest:new ActiveXObject("Msxml2.XMLHTTP"),v=m.getDocumentCharset(),k="text/html"+(v?";charset="+v:""),s=new jb({protocol:a,counterId:b,counterType:c});if("html"==e)return e=RegExp("<script [^>]*?//mc\\.yandex\\.ru/watch/.*?\x3c/script>","gi"),s.sendContent(m.getDocumentHTML().replace(e,""),k,g,Ra,Fa),!0;t&&(t.open("get",B().href,!0),t.onreadystatechange=function(){4==t.readyState&&s.sendContent(t.responseText,t.getResponseHeader("content-type"),
|
||||||
|
g,Ra,Fa)},t.overrideMimeType&&v&&t.overrideMimeType(k),t.send(null));return!0}}return{start:function(){T.activate()},stop:function(){T.clear();h.un(d,"mousemove",ua);h.un(d,"click,dblclick,mousedown",ba);h.un(d,"mouseup",W);h.un(d,"mousewheel,wheel",w);h.un(f,"scroll",ca);h.un(f,"beforeunload",u);h.un(f,"unload",u);h.un(f,"resize",va);h.un(d,"keydown",oa);h.un(d,"keypress",pa);h.un(d,"copy",Y);h.un(d,"touchmove,touchstart",v);h.un(d,"focusin",da);h.un(d,"focusout",Ea);h.un(f,"focus",O);h.un(f,"blur",
|
||||||
|
U);h.un(d,"blur",U);d.removeEventListener?(h.un(d,"scroll",Ca),h.un(d,"focus",R),h.un(d,"blur",e),h.un(d,"change",k),h.un(d,"submit",t)):d.detachEvent&&(h.un(d,"focusin",R),h.un(d,"focusout",e),function(){for(var a=d.getElementsByTagName("form"),e=0;e<a.length;e++){for(var b=a[e].getElementsByTagName("*"),c=0;c<b.length;c++)/^INPUT|SELECT|TEXTAREA$/.test(b[c].tagName)&&h.un(b[c],"change",k);h.un(a[e],"submit",t)}}());(function(){for(var a=d.getElementsByTagName("form"),e=0;e<a.length;e++)a[e][Sa]&&
|
||||||
|
(a[e].submit=a[e][Sa])})()},uploadPages:function(a,e){function b(){h.un(d,"DOMContentLoaded",b);h.un(f,"load",b);for(var k=a.split(/\n/),c=B().href,t=/regexp:/,v=0;v<k.length;v++){var g=k[v];if(g)if(t.test(g)){g=mb(g.replace(t,""));try{var s=RegExp(g)}catch(w){}if(s&&s.test(c)){ra.uploadPage(e);break}}else if(-1!==c.indexOf(g)){ra.uploadPage(e);break}}}"complete"==d.readyState?b():(h.on(d,"DOMContentLoaded",b),h.on(f,"load",b))}}}var kb=!1,Aa="",ib=!Ba(/webkit/)&&Ba(/gecko/),m={getDocumentCharset:function(){return(""+
|
||||||
|
(d.characterSet||d.charset||"")).toLowerCase()},getDocumentHTML:function(){var a="",b="",a=d.documentElement,c=a.outerHTML;if(c)a=c;else{for(var c=a.attributes,s="",g=0;g<c.length;g++){var f=c[g];f&&(s+=" "+f.name+'="'+(f.value||"")+'"')}a="<html"+s+">"+a.innerHTML+"</html>"}(c=d.doctype)&&(b="<!DOCTYPE "+c.name+(c.publicId?' PUBLIC "'+c.publicId+'"':"")+(c.systemId?' "'+c.systemId+'"':"")+">\n");return b+a},getRootElement:function(){var a=d.documentElement;return"CSS1Compat"==d.compatMode?a:d.body||
|
||||||
|
a},getViewportSize:function(){var a=m.getRootElement();return[a.clientWidth,a.clientHeight]},getDocumentSize:function(){var a=m.getRootElement(),b=m.getViewportSize();return[Math.max(a.scrollWidth,b[0]),Math.max(a.scrollHeight,b[1])]},getDocumentScroll:function(){return[f.pageXOffset||d.documentElement&&d.documentElement.scrollLeft||d.body&&d.body.scrollLeft||0,f.pageYOffset||d.documentElement&&d.documentElement.scrollTop||d.body&&d.body.scrollTop||0]},getElementXY:function(a){if(!a.ownerDocument||
|
||||||
|
"PARAM"==a.tagName||a==d.body||a==d.documentElement)return[0,0];if(a.getBoundingClientRect){a=a.getBoundingClientRect();var b=m.getDocumentScroll();return[Math.round(a.left+b[0]),Math.round(a.top+b[1])]}for(var c=b=0;a;)b+=a.offsetLeft,c+=a.offsetTop,a=a.offsetParent;return[b,c]},getElementParent:function(a){return a==d.documentElement?null:a==d.body?d.documentElement:a.parentNode}},l={isArray:function(a){return"function"==typeof Array.isArray?Array.isArray(a):"[object Array]"==Object.prototype.toString.call(a)},
|
||||||
|
mergeArrays:function(a){for(var b=1;b<arguments.length;b++)if(l.isArray(arguments[b]))for(var c=0;c<arguments[b].length;c++)a[a.length]=arguments[b][c]}};m.getElementChildren=function(a,b){var c=[];if(a){var d=a.childNodes;if(d)for(var g=0,f=d.length;g<f;g++){var h=d[g];"INPUT"==h.nodeName&&h.type&&"hidden"==h.type.toLocaleLowerCase()||b&&h.nodeName!=b||l.mergeArrays(c,[h])}}return c};m.getElementNeighborPosition=function(a){for(var b=m.getElementChildren(m.getElementParent(a),a.nodeName),c=0;c<b.length;c++)if(b[c]==
|
||||||
|
a)return c;return 0};m.getElementRegion=function(a){var b=m.getElementXY(a);a=a==d.body||a==d.documentElement?m.getDocumentSize():[a.offsetWidth,a.offsetHeight];return[b[0],b[1],a[0],a[1]]};l.fletcher=function(a){for(var b=a.length,c=0,d=255,g=255;b;){var f=21<b?21:b,b=b-f;do{var h="string"==typeof a?a.charCodeAt(c):a[c];c++;if(255<h)var l=h>>8,h=h&255,h=h^l;d+=h;g+=d}while(--f);d=(d&255)+(d>>8);g=(g&255)+(g>>8)}a=(d&255)+(d>>8)<<8|(g&255)+(g>>8);return 65535==a?0:a};m.calcTextChecksum=function(a){var b=
|
||||||
|
"";a=a.childNodes;for(var c=0,d=a.length;c<d;c++)a[c]&&3==a[c].nodeType&&(b+=a[c].nodeValue);return l.fletcher(b.replace(/[\u0000-\u0020]+/g,""))};m.calcAttribChecksum=function(a){var b="",c="width height align title alt name".split(" ");"IMG"==a.tagName&&(b+=a.src.toLowerCase());"A"==a.tagName&&(b+=a.href.toLowerCase());for(var b=b+String(a.className||"").toLowerCase(),d=0;d<c.length;d++)a.getAttribute&&(b+=String(a.getAttribute(c[d])||"").toLowerCase());return l.fletcher(b.replace(/[\u0000-\u0020]+/g,
|
||||||
|
""))};m.calcChildrenChecksum=function(a){return l.fletcher((a.innerHTML||"").replace(/(<[^>]*>|[\u0000-\u0020])/g,""))};m.getFormNumber=function(a){for(var b=d.getElementsByTagName("form"),c=0,f=b.length;c<f;c++)if(b[c]==a)return c;return-1};m.classNameExists=function(a,b){return RegExp("(?:^|\\s)"+b+"(?:\\s|$)").test(a.className)};m.isEmptyField=function(a){return"INPUT"==a.nodeName&&"submit"!=a.type&&"image"!=a.type&&"hidden"!=a.type?"radio"==a.type||"checkbox"==a.type?!a.checked:!a.value:"TEXTAREA"==
|
||||||
|
a.nodeName?!a.value:"SELECT"==a.nodeName?0>a.selectedIndex:!0};m.getElementsByClassName=function(a,b){b=b||d;for(var c=b.getElementsByTagName("*"),f=[],g=0;g<c.length;g++)m.classNameExists(c[g],a)&&f.push(c[g]);return f};var N={getPos:function(a){var b=m.getRootElement(),c=m.getDocumentScroll();return[a.pageX||a.clientX+c[0]-(b.clientLeft||0)||0,a.pageY||a.clientY+c[1]-(b.clientTop||0)||0]},getTarget:function(a){return a.target||a.srcElement}};l.mixin=function(a){for(var b=1;b<arguments.length;b++)if(arguments[b]){for(var c in arguments[b])arguments[b].hasOwnProperty(c)&&
|
||||||
|
(a[c]=arguments[b][c]);arguments[b].hasOwnProperty("toString")&&(a.toString=arguments[b].toString)}return a};var J=function(a){a=a||{};l.mixin(this,a);this._initComponent()};J.prototype._initComponent=function(){};J.inherit=function(a){a=a||{};var b="function"==typeof this?this:Object;a.hasOwnProperty("constructor")||(a.constructor=function(){b.apply(this,arguments)});var c=function(){};c.prototype=b.prototype;a.constructor.prototype=new c;l.mixin(a.constructor.prototype,a);a.constructor.prototype.constructor=
|
||||||
|
a.constructor;a.constructor.superclass=b.prototype;a.constructor.inherit=J.inherit;return a.constructor};var h=J.inherit({_initComponent:function(){h.superclass._initComponent.apply(this,arguments);this._listeners=[]},on:function(a,b,c,d,g){g=5>arguments.length?!0:!!g;for(var h=b.split(","),l=0;l<h.length;l++){var m=h[l],x=function(a){c.call(d||this,a||f.event)};this._listeners[this._listeners.length]=[a,m,c,d,g,x];a.addEventListener?a.addEventListener(m,x,g):a.attachEvent&&a.attachEvent("on"+m,x)}},
|
||||||
|
un:function(a,b,c,d,g){g=5>arguments.length?!0:!!g;for(var f=b.split(","),h=0;h<f.length;h++)for(var l=f[h],m=0;m<this._listeners.length;m++){var q=this._listeners[m];if(q[0]==a&&q[1]==l&&q[2]==c&&q[3]==d&&q[4]==g){this._listeners.splice(m,1);this._removeListener(a,l,q[5],g);return}}},unAll:function(){for(var a=0;a<this._listeners.length;a++){var b=this._listeners[a];this._removeListener(b[0],b[1],b[5],b[4])}this._listeners.length=0},_removeListener:function(a,b,c,d){a.removeEventListener?a.removeEventListener(b,
|
||||||
|
c,d):a.detachEvent&&a.detachEvent("on"+b,c)}});h.on=function(a,b,c,d,g){h._instance||(h._instance=new h);h._instance.on.apply(h._instance,arguments)};h.un=function(a,b,c,d,g){h._instance&&h._instance.un.apply(h._instance,arguments)};h.onDocumentVisible=function(a,b){if("prerender"==d.webkitVisibilityState){var c=function(){"prerender"!=d.webkitVisibilityState&&(h.un(d,"webkitvisibilitychange",c),a.call(b,!0))};h.on(d,"webkitvisibilitychange",c)}else a.call(b,!1)};var Ga=null,ea=J.inherit({counterId:"",
|
||||||
|
_initComponent:function(){ea.superclass._initComponent.apply(this,arguments);this._ls=null;try{this._ls=f.localStorage}catch(a){}},set:function(a,b){if(this.isEnabled())try{!b||b&&l.isArray(b)&&!b.length?this.remove(a):this._ls.setItem(this._getLsKey(a),JSON.stringify(b))}catch(c){}},get:function(a){if(this.isEnabled())try{return JSON.parse(this._ls.getItem(this._getLsKey(a)))}catch(b){}return null},remove:function(a){if(this.isEnabled())try{this._ls.removeItem(this._getLsKey(a))}catch(b){}},isEnabled:function(){return this._ls&&
|
||||||
|
f.JSON&&"object"==typeof this._ls&&"object"==typeof f.JSON},getStorageId:function(){var a=this.get("lsid");a||(a=Math.round(Math.random()*new Date),this.set("lsid",a));return a},clearStorageId:function(){this.remove("lsid")},_getLsKey:function(a){return"_ym"+this.counterId+"_"+a}}),ka=J.inherit({counterId:"",onlyCurrentDomain:!1,skipPrefix:!1,_initComponent:function(){ka.superclass._initComponent.apply(this,arguments);this._domain=null;if(!this.onlyCurrentDomain)for(var a=H.host.split("."),b=2;;)if(b<=
|
||||||
|
a.length){if(this._domain="."+a.slice(-b).join("."),b++,this.isEnabled())break}else{this._domain=null;break}},create:function(a,b,c){a=[this._prepareName(a)+"="+encodeURIComponent(b)];c&&(b=new Date,b.setTime(b.getTime()+6E4*c),a.push("expires="+b.toGMTString()));this._domain&&a.push("domain="+this._domain);a.push("path=/");try{d.cookie=a.join(";")}catch(f){}},read:function(a){try{var b=d.cookie}catch(c){}return b&&b.match(RegExp("(?:^|;\\s*)"+this._prepareName(a)+"=([^;]*)"))?decodeURIComponent(RegExp.$1):
|
||||||
|
null},erase:function(a){this.create(a,"",-1)},isEnabled:function(){this.create("metrika_enabled","1",60);var a=!!this.read("metrika_enabled");this.erase("metrika_enabled");return a},_prepareName:function(a){return(this.skipPrefix?"":"_ym_")+a+(this.counterId?"_"+this.counterId:"")}});ka.isEnabled=function(){return(new ka({onlyCurrentDomain:!0})).isEnabled()};var C=J.inherit({transports:[],postParams:[],send:function(a,b,c,d){c=c||function(){};(function ra(f){if(f<this.transports.length)try{var h=
|
||||||
|
new this.transports[f]({postParams:this.postParams});h.request(a,b,function(a,b){a?c.call(d,b):ra.call(this,f+1)},this)}catch(l){qa(l,"send by "+(h&&h.id)),ra.call(this,f+1)}}).call(this,0)}}),la={stringify:function(a){var b=[],c;for(c in a)if(a.hasOwnProperty(c)){var d=a[c];if(l.isArray(d))for(var g=0;g<d.length;g++)b.push(encodeURIComponent(c)+"="+encodeURIComponent(String(d[g])));else b.push(encodeURIComponent(c)+"="+encodeURIComponent(String(d)))}return b.join("&")}};l.forEachKey=function(a,b,
|
||||||
|
c){for(var d in a)a.hasOwnProperty(d)&&b.call(c,d,a[d],a)};l.inArray=function(a,b){for(var c=0;c<a.length;c++)if(a[c]==b)return!0;return!1};var xa=J.inherit({postParams:[],_buildUrl:function(a,b){return a+(-1<a.indexOf("?")?"&":"?")+la.stringify(b)},_splitParams:function(a){var b={},c={};l.forEachKey(a,function(a,d){l.inArray(this.postParams,a)?c[a]=d:b[a]=d},this);return{get:b,post:c}}}),K=xa.inherit({id:"XHR",request:function(a,b,c,d){if(f.opera&&"function"==typeof f.opera.version){var g=f.opera.version();
|
||||||
|
if("string"==typeof g&&"12"==g.split(".")[0]&&/[^a-z0-9.:-]/.test(H.host))return c.call(d,!1)}if(f.XMLHttpRequest){var h=new XMLHttpRequest;if("withCredentials"in h){b=this._splitParams(b);a=this._buildUrl(a,b.get);h.open("POST",a,!0);h.withCredentials=!0;h.setRequestHeader("Content-Type","application/x-www-form-urlencoded");h.send(la.stringify(b.post));(function(){4==h.readyState?c.call(d,200==h.status):P(arguments.callee,50,"TransportXHR.request")})();return}}c.call(d,!1)}});l.random=function(a,
|
||||||
|
b){2>arguments.length&&(b=a,a=0);1>arguments.length&&(b=1073741824);return Math.floor(Math.random()*(b-a))+a};var Z=xa.inherit({id:"form",enctype:"application/x-www-form-urlencoded",htmlfileOnly:!1,_initComponent:function(){Z.superclass._initComponent.apply(this,arguments);"_htmlfile"in Z.prototype||(Z.prototype._htmlfile=this._createHtmlfile());this._doc=this._htmlfile||(this.htmlfileOnly?null:d)},request:function(a,b,c,d){var g=this._doc;if(!g)return c.call(d,!1);b=this._splitParams(b);var f="ifr"+
|
||||||
|
l.random(),h=g.createElement("div");h.style.position="absolute";h.style.left="-99999px";h.style.top="-99999px";var m=['<iframe name="',f,'"></iframe>','<form action="',this._buildUrl(a,b.get),'" method="post" target="',f,'" enctype="',this.enctype,'">'];l.forEachKey(b.post,function(a){l.mergeArrays(m,['<textarea name="',a,'"></textarea>'])});l.mergeArrays(m,["</form>"]);h.innerHTML=m.join("");g.body.appendChild(h);var q=h.getElementsByTagName("form")[0];l.forEachKey(b.post,function(a,b){q[a].value=
|
||||||
|
b});q.submit();P(function(){g.body.removeChild(h)},1E4,"TransportForm.request.2");return c.call(d,!0)},_createHtmlfile:function(){try{if(f.ActiveXObject){var a=new ActiveXObject("htmlfile");a.open();a.write("<html><body></body></html>");a.close();return a}}catch(b){}return null}}),X=Z.inherit({id:"htmlfile",htmlfileOnly:!0}),Ta=xa.inherit({id:"img",request:function(a,b,c,d){a=this._buildUrl(a,b);b=new Image;b.onload=E(function(){c.call(d,!0)},"TransportImage.request");b.onerror=E(function(){c.call(d,
|
||||||
|
!1)},"TransportImage.request");b.src=a}});l.defer=function(a,b,c,d,g){return P(function(){a.apply(c,d||[])},b,g)};var V=C.inherit({protocol:"",host:"mc.yandex.ru",resource:"",counterId:"",counterType:0,retry:!1,transports:[K,X,Ta],_initComponent:function(){V.superclass._initComponent.apply(this,arguments);this.retry&&(this._storage=new ea)},send:function(a,b,c,d){if(this.retry&&this._storage.isEnabled()){b.rqnl=b.rqnl||0;b.rqnl++;for(var g=this._storage.get("retryReqs")||{},f=0;g[f];)f++;g[f]={protocol:this.protocol,
|
||||||
|
host:this.host,resource:this.resource,counterId:this.counterId,counterType:this.counterType,postParams:this.postParams,params:a,browserInfo:b,ghid:Ya._globalMetrikaHitId,time:+new Date};this._storage.set("retryReqs",g)}g={};this.counterType&&(g["cnt-class"]=this.counterType);l.mixin(g,a);b.st=Math.round((new Date).getTime()/1E3);a=[this.protocol,"//",this.host,"/"+this.resource+"/"+this.counterId].join("");var h=[];b&&(l.forEachKey(b,function(a,b){"t"!=a&&l.mergeArrays(h,[a,b])}),b.t&&l.mergeArrays(h,
|
||||||
|
["t",b.t]));h.length&&(g["browser-info"]=h.join(":"));if(this.retry&&this._storage.isEnabled())var m=l.defer(function(){},1E4,this,[],"SenderBK.timeout");return V.superclass.send.call(this,a,g,function(){if(this.retry&&this._storage.isEnabled()){clearTimeout(m);var a=this._storage.get("retryReqs")||{};a[f]&&(delete a[f],this._storage.set("retryReqs",a))}c&&c.apply(d,arguments)},this)}});V.retransmit=function(){var a=new ea,b=a.get("retryReqs")||{};a.remove("retryReqs");l.forEachKey(b,function(a,b){b.ghid&&
|
||||||
|
b.ghid!=Ya._globalMetrikaHitId&&b.time&&b.time+864E5>+new Date&&2>=b.browserInfo.rqnl&&(new V({protocol:b.protocol,host:b.host,resource:b.resource,counterId:b.counterId,counterType:b.counterType,postParams:b.postParams||[],retry:!0})).send(b.params,b.browserInfo)})};var $={abc:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",tail:"+/=",tailSafe:"*-_",encode:function(a,b){for(var c=($.abc+(b?$.tailSafe:$.tail)).split(""),d=a.length,g=[],f=d-d%3,h,m=0;m<f;m+=3)h=(a[m]<<16)+(a[m+1]<<
|
||||||
|
8)+a[m+2],l.mergeArrays(g,[c[h>>18&63],c[h>>12&63],c[h>>6&63],c[h&63]]);switch(d-f){case 1:h=a[f]<<4;l.mergeArrays(g,[c[h>>6&63],c[h&63],c[64],c[64]]);break;case 2:h=(a[f]<<10)+(a[f+1]<<2),l.mergeArrays(g,[c[h>>12&63],c[h>>6&63],c[h&63],c[64]])}return g.join("")}},Ha={encode:function(a){for(var b=[],c=0,d=a.length;c<d;c++){var g=a.charCodeAt(c);128>g?b.push(g):(127<g&&2048>g?b.push(g>>6|192):(b.push(g>>12|224),b.push(g>>6&63|128)),b.push(g&63|128))}return b}},jb=V.inherit({resource:"webvisor",transports:[K,
|
||||||
|
Z],postParams:["wv-data"],sendContent:function(a,b,c,d,g,f,h){if(!a)return!1;-1<a.indexOf("\r")&&(a=a.replace(/\r\n/g,"\n"));a={"wv-type":1,"page-url":B().href,"wv-hit":c,"wv-data":$.encode(Ha.encode(a))};return this.send(a,{z:d,i:g,pct:b||""},f,h)}});l.throttle=function(a,b,c,d){var g,f,h;return function(){f=arguments;h=this;g||function(){g=null;f&&(a.apply(c||h,f),f=null,g=P(arguments.callee,b,d))}()}};var fa=J.inherit({storage:null,storageKey:"dataBuffer",maxBufferSize:255,flushTimeout:1E4,active:!0,
|
||||||
|
meta:null,onFlush:function(){},onFlushCtx:null,bufferExpireTime:864E5,_initComponent:function(){fa.superclass._initComponent.apply(this,arguments);this._data=[];this._packetNumber=0;this._flushTID=null;this._saveToStorageThrottled=l.throttle(this._saveToStorage,300,this,"DataBuffer._saveToStorage");if(this.storage){var a=this.storage.get(this.storageKey);a&&a.data&&a.meta&&a.time&&a.time+this.bufferExpireTime>+new Date&&this.onFlush.call(this.onFlushCtx||this,a.data,a.meta,a.pnum);this.clear()}},
|
||||||
|
append:function(a,b){l.mergeArrays(this._data,a);this._saveToStorageThrottled();this.active&&((b||this._data.length>=this.maxBufferSize)&&this._flush(),this._flushTID||(this._flushTID=l.defer(this._flush,this.flushTimeout,this,[],"DataBuffer._flush")))},activate:function(){this.active||(this.active=!0,this.append([]))},clear:function(){this._data.length=0;this._flushTID=null;this.storage&&this.storage.remove(this.storageKey)},_flush:function(){this.onFlush.call(this.onFlushCtx||this,this._data,this.meta,
|
||||||
|
this._packetNumber);this._packetNumber++;this.clear()},_saveToStorage:function(){this.storage&&this._data.length&&this.storage.set(this.storageKey,{data:this._data,meta:this.meta,pnum:this._packetNumber,time:+new Date})}}),Ia=V.inherit({resource:"webvisor",retry:!0,postParams:["wv-data"],sendPacket:function(a,b,c,d,g,f,h,m){if(!a||!a.length)return!1;a={rn:l.random(),"page-url":b,wmode:0,"wv-type":0,"wv-hit":c,"wv-part":d+1,"wv-check":l.fletcher(a),"wv-data":$.encode(a,!0)};return this.send(a,{z:g,
|
||||||
|
i:f},h,m)}}),Qa=fa.inherit({protocol:"",counterId:"",counterType:"",meta:null,maxBufferSize:7500,flushTimeout:3E4,storageKey:"visorbuff",active:!1,_initComponent:function(){this.storage=new ea({counterId:this.counterId});this._sender=new Ia({protocol:this.protocol,counterId:this.counterId,counterType:this.counterType});Qa.superclass._initComponent.apply(this,arguments)},onFlush:function(a,b,c){this._sender.sendPacket(a,b.url,b.hitId,c,b.timezone,b.timestamp)}});l.toJSON=function(a){if(a===ga)return"";
|
||||||
|
if(null===a)return"null";switch(a.constructor){case Boolean:return a.toString();case Number:return isFinite(a)?a.toString():"null";case String:return'"'+a.replace(/\\/g,"\\\\").replace(/"/g,'\\"')+'"';case Array:for(var b=[],c=0,d=a.length;c<d;c++)b[b.length]=l.toJSON(a[c]);return"["+b.join(",")+"]";case Object:b=[];for(c in a)a.hasOwnProperty(c)&&a[c]!==ga&&(b[b.length]=l.toJSON(c)+":"+l.toJSON(a[c]));return"{"+b.join(",")+"}";default:return"null"}};var q={_jScriptVersion:0,getJScriptVersion:function(){q._jScriptVersion||
|
||||||
|
(q._jScriptVersion=(new Function("return /*@cc_on @_jscript_version @*/;"))());return q._jScriptVersion}},ya={log:function(){f.console&&console.log&&(-1<H.href.indexOf("_ym_debug=1")||f._ym_debug)&&console.log.apply(console,arguments)}};l.bind=function(a,b){return function(){return a.apply(b||this,arguments)}};var za=J.inherit({_initComponent:function(){za.superclass._initComponent.apply(this,arguments);this._origErrorHandler=f.onerror;f.onerror=l.bind(this._errorHandler,this)},_errorHandler:function(a,
|
||||||
|
b,c){if("function"==typeof this._origErrorHandler)return this._origErrorHandler.apply(f,arguments)}});f.Ya=f.Ya||{};Ya._metrika=Ya._metrika||{};Ya._metrika.counters=Ya._metrika.counters||{};Ya._metrika.hitParam=Ya._metrika.hitParam||{};Ya._globalMetrikaHitId=l.random();var H=B(),Ra,Fa,L=f.navigator,ma=f.screen,aa="https:"==H.protocol?"https:":"http:",Ma=544,na=5.8>=q.getJScriptVersion(),Ja=na?512:2048,Gb=na?512:2048,Ua=na?100:400,Ka="noindex",oa=50,Va=RegExp("\\.(3gp|7z|aac|ac3|acs|ai|avi|ape|apk|asf|bmp|bz2|cab|cdr|crc32|css|csv|cue|divx|dmg|djvu?|doc(x|m|b)?|emf|eps|exe|flac?|flv|iso|swf|gif|t?gz|jpe?g?|js|m3u8?|m4a|mp(3|4|e?g?)|m4v|md5|mkv|mov|msi|ods|og(g|m|v)|pdf|phps|png|ppt(x|m|b)?|psd|rar|rss|rtf|sea|sfv|sit|sha1|svg|tar|tif?f|torrent|ts|txt|vob|wave?|wma|wmv|wmf|webm|xls(x|m|b)?|xpi|g?zip)$",
|
||||||
|
"i"),Hb=+new Date,La,pa;f.Ya.Metrika=function(a,b,c,s){var g=this;return E(function(){function C(a,b){if(!a||!b)return!1;for(var c=[],d=0;d<b.length;d++)c.push(b[d].replace(/\^/g,"\\^").replace(/\$/g,"\\$").replace(/\./g,"\\.").replace(/\[/g,"\\[").replace(/\]/g,"\\]").replace(/\|/g,"\\|").replace(/\(/g,"\\(").replace(/\)/g,"\\)").replace(/\?/g,"\\?").replace(/\*/g,"\\*").replace(/\+/g,"\\+").replace(/\{/g,"\\{").replace(/\}/g,"\\}"));return RegExp("\\.("+c.join("|")+")$","i").test(a)}function N(a){a=
|
||||||
|
a.target||a.srcElement;if(!a)return!1;3==a.nodeType&&(a=a.parentNode);for(var b=a.nodeName.toString().toLowerCase();a.parentNode&&a.parentNode.nodeName&&("a"!=b&&"area"!=b||!a.href);)a=a.parentNode,b=a.nodeName.toString().toLowerCase();return a.href?a:!1}function J(a,b){return(a?a.replace(/^www\./,""):"")==(b?b.replace(/^www\./,""):"")}function x(a,b){function c(a){a=a.split(":");a=a[1]||"";a=a.replace(/^\/*/,"").replace(/^www\./,"");return a.split("/")[0]}return a&&b?c(a)==c(b):a||b?!1:!0}function K(a,
|
||||||
|
b){var c=b.target,d=!1;if(!b.hostname)return!1;c&&"_self"!=c&&"_top"!=c&&"_parent"!=c||(d=!0);(c=a.shiftKey||a.ctrlKey||a.altKey)||a.modifiers&&f.Event&&(c=a.modifiers&f.Event.CONTROL_MASK||a.modifiers&f.Event.SHIFT_MASK||a.modifiers&f.Event.ALT_MASK);return d&&!c}function z(e,b,c){function d(a,e){a&&e&&(c?T[a]=e:T[T.length]=[a,e].join(":"))}function h(a){d(a,b[a]?"1":"")}b=b||{};var T=c?{}:[],r=-1*(new Date).getTimezoneOffset(),M=X();Fa||(Fa=M,Ra=r);d("j",q.getJavaEnabled()?"1":"");ma&&d("s",ma.width+
|
||||||
|
"x"+ma.height+"x"+(ma.colorDepth||ma.pixelDepth));f.devicePixelRatio&&d("sk",f.devicePixelRatio);d("f",q.getFlashVersion());d("l",q.getSilverlightVersion());d("fpr",q.getFingerPrint());b.pa||d("w",Z()+"x"+$());d("z",r);d("i",M);d("et",Math.round((new Date).getTime()/1E3));d("en",m.getDocumentCharset());d("v",Ma);d("c",L.cookieEnabled?"1":"");d("jv",q.getJScriptVersion());d("la",q.getLanguage());R&&d("wh","1");M="ar ln dl ad nb pa".split(" ");for(r=0;r<M.length;r++)h(M[r]);M=["va","vt","sn","sa","he"];
|
||||||
|
b.nb&&M.push("cl");for(r=0;r<M.length;r++){var Q=M[r];d(Q,b[Q])}b.reqNum&&(r=new ea({counterId:a}),r.isEnabled()&&(M=r.getStorageId(),(Q=r.get("reqNum"))?Q++:Q=1,r.set("reqNum",Q),r.get("reqNum")==Q?(d("ls",M),d("rqn",Q)):(r.remove("reqNum"),r.clearStorageId(),1<Q&&(d("ls",M),d("rqn",0)))));d("rn",l.random());d("hid",ba);d("ds",qa());g._firstPaint||(g._firstPaint=sa(),d("fp",g._firstPaint));if(g._webvisor){f.name||(f.name=Math.round(65535*Math.random()));if(r=+f.name)0>r&&(r*=-1),r%=65535;d("wn",
|
||||||
|
r||l.fletcher(f.name));try{f.history&&d("hl",String(f.history.length))}catch(s){}}e="undefined"==typeof e?(e=n())?l.trim(e,Ua):"":l.trim(e,Ua);d("t",e);return c?T:T.join(":")}function n(){var a=d.title;"string"!=typeof a&&(a=(a=d.getElementsByTagName("title"))&&a.length?a[0].innerHTML:"");return a}function X(){for(var a=new Date,a=[a.getFullYear(),a.getMonth()+1,a.getDate(),a.getHours(),a.getMinutes(),a.getSeconds()],b="",c=0;c<a.length;c++)b+=10>a[c]?"0"+a[c]:a[c];return b}function Z(){var a=-1;
|
||||||
|
d.documentElement&&"CSS1Compat"==d.compatMode?a=d.documentElement.clientWidth:d.body&&(a=d.body.clientWidth);return a}function $(){var a=-1;d.documentElement&&"CSS1Compat"==d.compatMode?a=d.documentElement.clientHeight:d.body&&(a=d.body.clientHeight);return a}function fa(){var a=f.performance||f.webkitPerformance,b=[];if(a=a&&a.timing){var c=a.navigationStart;if(c)for(b=[a.domainLookupEnd-a.domainLookupStart,a.connectEnd-a.connectStart,a.responseStart-a.requestStart,a.responseEnd-a.responseStart,
|
||||||
|
a.fetchStart-c,a.redirectEnd-a.redirectStart,a.redirectCount],b.push(a.domInteractive&&a.domLoading?a.domInteractive-a.domLoading:null),b.push(a.domContentLoadedEventStart&&a.domContentLoadedEventEnd?a.domContentLoadedEventEnd-a.domContentLoadedEventStart:null),b.push(a.domComplete?a.domComplete-c:null),b.push(a.loadEventStart?a.loadEventStart-c:null),b.push(a.loadEventStart&&a.loadEventEnd?a.loadEventEnd-a.loadEventStart:null),b.push(a.domContentLoadedEventStart?a.domContentLoadedEventStart-c:null),
|
||||||
|
a=0;a<b.length;a++)c=b[a],null!==c&&(0>c||36E5<c)&&(b[a]=null)}return b}function qa(){var a=[],b=g._lastPerformanceTiming,c=fa();if(b)for(var d=0,f=b.length;d<f;d++)null===c[d]?a.push(c[d]):a.push(b[d]===c[d]?"":c[d]);else a=c;g._lastPerformanceTiming=c;return a.join(",")}function sa(){var a;if("object"==typeof f.chrome&&f.chrome.loadTimes){if(a=f.chrome.loadTimes(),a.requestTime&&a.firstPaintTime)return~~(1E3*(a.firstPaintTime-a.requestTime))}else if(f.performance&&f.performance.timing&&(a=f.performance.timing,
|
||||||
|
a.navigationStart&&a.msFirstPaint))return a.msFirstPaint-a.navigationStart;return null}function ta(a){var b=d.referrer||"";if(RegExp("^https?://"+H.host+"/").test(b))return!1;for(var c=a.patterns,g=0;g<c.length;g++)if(b.match(RegExp(c[g],"i"))){var f=a.params||[];if(f.length)for(var h=ia((RegExp.$1||"").replace(/\+/g,"%20")),r=0;r<f.length;r++){if(h==ia(f[r]))return!0}else return!0}return!1}function ha(a,b){var c=!1;if(a&&"string"!=typeof a&&a.length)for(var g=0;g<a.length;g++){var f=a[g].selector,
|
||||||
|
h=a[g].text,r=f.charAt(0),f=f.slice(1);if("#"==r){if(r=d.getElementById(f))c=!0,b&&Y.unshift([r,r.innerHTML]),r.innerHTML=h}else if("."==r)for(r=m.getElementsByClassName(f),f=0;f<r.length;f++){var c=!0,l=r[f],n=h;b&&Y.unshift([l,l.innerHTML]);l.innerHTML=n}}return c}function la(){for(var a=0;a<Y.length;a++)Y[a][0].innerHTML=Y[a][1]}function Aa(a,b){a=a&&a.replace(/^\?/,"");b=b&&b.replace(/^#/,"");var c="";if(a)for(var d=a.split("&"),f=0;f<d.length;f++){var g=d[f].split("=");"_openstat"==g[0]&&(c=
|
||||||
|
g[1])}b&&0==b.indexOf("_openstat=")&&(c=b.slice(10));c&&(c=-1<c.indexOf(";")?ia(c):Ha(c.replace(/[-*_]/g,function(a){return{"*":"+","-":"/",_:"="}[a]||a})));return c&&(c=c.split(";"),4==c.length)?{service:c[0],campaign:c[1],ad:c[2],source:c[3]}:null}function ia(a){try{return decodeURIComponent(a)}catch(b){return""}}function Ha(a){for(;a.length%4;)a+="=";var b,c,d,f,g,h=0,l="";do{b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(a.charAt(h++));c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(a.charAt(h++));
|
||||||
|
f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(a.charAt(h++));g="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(a.charAt(h++));if(0>b||0>c||0>f||0>g)return null;d=b<<18|c<<12|f<<6|g;b=d>>16&255;c=d>>8&255;d&=255;l=64==f?l+String.fromCharCode(b):64==g?l+String.fromCharCode(b,c):l+String.fromCharCode(b,c,d)}while(h<a.length);a=l;f="";for(b=l=h=g=0;g<a.length;)h=a.charCodeAt(g),128>h?(f+=String.fromCharCode(h),g++):191<h&&224>h?(l=a.charCodeAt(g+
|
||||||
|
1),f+=String.fromCharCode((h&31)<<6|l&63),g+=2):(l=a.charCodeAt(g+1),b=a.charCodeAt(g+2),f+=String.fromCharCode((h&15)<<12|(l&63)<<6|b&63),g+=3);return f}function Ia(e){var k=!1;if(Ya._metrika.hitParam[W]){if(1!=c||Ya._metrika.counters[W])return!1;k=!0}Ya._metrika.counters[W]=g;Ya._metrika.hitParam[W]=1;g._webvisor=!s&&(u&&u.webvisor||kb);g._directCampaign=u&&u.directCampaign;u&&u.trackHash&&g.trackHash(!0);if(!s&&!k){g.replacePhones();var t=new ka({counterId:a}),v=t.read("visorc");"b"!=v&&"w"!=v&&
|
||||||
|
(v="");if(!t.isEnabled()||Ba("opera mini"))v="b";La=+new Date;var k=new Eb({protocol:aa,counterType:c,counterId:a}),w={ut:ua,he:u?~~u.httpError:0,ad:1==c&&f.Ya&&f.Ya.Direct?!0:!1,saveRef:!0};ya.log("PageView. Counter "+a+". URL: "+H.href+". Referer: "+d.referrer);k.sendHit(H.href,n(),d.referrer,b,w,v,e,function(a){pa||(pa=+new Date);a=a||{};var b=a.webvisor||{};if(U){var e=+b.recp;if(!isFinite(e)||0>e||1<e)v="w";v||(v=ba%1E4/1E4<e?"w":"b");t.create("visorc",v,30);"w"==v?(U.start(),e=b.arch_type,(b=
|
||||||
|
b.urls)&&e&&U.uploadPages(b,e)):U.stop()}b=a.mp2;a=g;t.erase("mp2_substs");if(b){b:if((e=b.conditions)&&e.length)for(var c=0;c<e.length;c++){var k;if("ref"==e[c].type)k=ta(e[c]);else if(k="adv"==e[c].type){var w=e[c],m=Ya._metrika.counter._directCampaign,n=w.ServiceNamePattern,q=w.RefererPattern;k=m?w.direct_orders:w.direct_camp;var S=d.referrer,F=H.search,F=F&&F.replace(/^\?/,""),ja={};if(F)for(var F=F.split("&"),s=0;s<F.length;s++){var p=F[s].split("=");ja[ia(p[0])]=ia(p[1])}for(var F=Aa(H.search,
|
||||||
|
H.hash),s={},p=["source","medium","campaign","term","content"],A=0;A<p.length;A++)ja["utm_"+p[A]]&&(s[p[A]]=ja["utm_"+p[A]]);A=m?"direct.yandex.ru":F&&F.service||s.source;p=!1;if(!p&&n&&n.length)for(var z=0;z<n.length;z++)if(RegExp(n[z],"i").test(A)){p=!0;break}if(!p&&q&&q.length)for(n=0;n<q.length;n++)if(RegExp(q[n],"i").test(S)){p=!0;break}!p&&w.google_adwords&&ja.gclid&&(p=!0);!p&&w.yandex_direct&&ja.yclid&&(p=!0);if(p&&k&&k.length&&(p=!1,w=m||F&&F.campaign||s&&s.campaign))for(m=0;m<k.length;m++)if(k[m]==
|
||||||
|
w){p=!0;break}k=p}if(k){e[c].track_id&&t.create("mp2_track",e[c].track_id,43200);break b}}e=t.read("mp2_track");b=b.substs&&b.substs[e];e&&b?(t.create("mp2_substs",l.toJSON(b)),b=ha(b),a.params("__ym",b?"mp_trackid":"mp_trackid_bad",e)):la()}else la();h.on(f,"load",g.replacePhones,g);g._inited=!0})}Qa();u&&(u.enableAll?g.enableAll():(u.clickmap&&g.clickmap(u.clickmap),u.trackLinks&&g.trackLinks(u.trackLinks),u.accurateTrackBounce&&g.accurateTrackBounce(u.accurateTrackBounce),u.ad&&ad()));g._webvisor&&
|
||||||
|
(U=new Wa(aa,a,c,u,ba,g))}function za(a){var b={delay:oa};switch(typeof a){case "string":b.on=!0;break;case "object":b.on=!0;b.delay="number"!=typeof a.delay?oa:a.delay;break;case "boolean":b.on=a;break;default:return}g._trackLinks=b}function Qa(){za(!1);h.on(d,"click",function(a){g._trackLinks.on&&ib(a)})}function ib(a){var b=N(a);if(b){var c=!1,d=""+b.href,f=d?d.split(/\?/)[0]:"",h=function(a){var e=mb(b.innerHTML.replace(/<\/?[^>]+>/gi,""));O.sendClickLink(d,d==e?"":e,a)},l=function(){return K(a,
|
||||||
|
b)?g._trackLinks.delay:0};if(Va.test(f)||Va.test(d)||C(d,da)||C(f,da))c=!0;var n=m.classNameExists(b,"ym-disable-tracklink"),f=m.classNameExists(b,"ym-external-link");n||(n={ln:!0,dl:c},f?(n.delay=l(),h(n)):J(B().hostname,b.hostname)?c&&(n.ln=!1,n.delay=l(),h(n)):d&&-1!=d.search(/^ *(data|javascript):/i)||(n.ut=Ka,n.delay=l(),h(n)))}}function jb(a,b){function c(){if(!y){x&&clearTimeout(x);var d=b,f;f=z?u:u+ +new Date-B;d-=f;0>d&&(d=0);x=P(function(){y=!0;n(!1);a()},d,"trackUserTime")}}function g(){z=
|
||||||
|
s=q=!0;u+=+new Date-B;B=+new Date;c()}function l(){s||q||(u=0);B=+new Date;s=q=!0;z=!1;c()}function m(){q||(s=!0,z=!1,q=!0,c())}function n(a){for(var b=0;b<S.length;b+=3)if(a)h.on(S[b],S[b+1],S[b+2]);else h.un(S[b],S[b+1],S[b+2])}var s=!1,q=!1,z=!0,u=0,B=+new Date,x=null,y=!1;if(na)P(a,b,"trackUserTime");else{var S=[f,"blur",g,f,"focus",l,d,"click",m,d,"mousemove",m,d,"keydown",m,d,"scroll",m];n(!0);c()}}function zb(a){function b(){var a=B().hash.split("#")[1];if("undefined"==typeof a)return!1;var e=
|
||||||
|
a.indexOf("?");0<e&&(a=a.substring(0,e));return a}var c=b();(function w(){var d=b();d!==c&&(a(),c=d);Ea=P(w,200,"trackHash")})()}function y(){va=lastReferrer=Ca;var a={ut:ua,ad:1==c&&f.Ya&&f.Ya.Direct?!0:!1,wh:!0,saveRef:!0};O.sendAjaxHit(B().href,n(),va,a);Ca=B().href}function I(b){function k(){var a=d.documentElement;return Math.max(a.scrollWidth,d.body.scrollWidth,a.clientWidth)}function g(a){function b(a){a=a.getBoundingClientRect();var e=d.body,c=d.documentElement,k=a.left+(f.pageXOffset||c.scrollLeft||
|
||||||
|
e.scrollLeft)-(c.clientLeft||e.clientLeft||0);return{top:Math.round(a.top+(f.pageYOffset||c.scrollTop||e.scrollTop)-(c.clientTop||e.clientTop||0)),left:Math.round(k)}}return a.getBoundingClientRect?b(a):function(a){for(var b=0,e=0;a;)b+=parseInt(a.offsetTop),e+=parseInt(a.offsetLeft),a=a.offsetParent;return{top:b,left:e}}(a)}function v(a){return a.toString().toUpperCase()}function n(a){if(null==a.pageX&&null!=a.clientX){var b=d.documentElement,e=d.body;a.pageX=a.clientX+(b&&b.scrollLeft||e&&e.scrollLeft||
|
||||||
|
0)-(b.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||e&&e.scrollTop||0)-(b.clientTop||0)}return{x:a.pageX,y:a.pageY}}function s(a){for(var b=v(a.nodeName);a.parentNode&&"BODY"!=b&&"HTML"!=b;){if("A"==b||"INPUT"==b||"TEXTAREA"==b)return!0;a=a.parentNode;b=a.nodeName}return!1}for(var r=this,q=0,z=null,u="A B BIG BODY BUTTON DD DIV DL DT EM FIELDSET FORM H1 H2 H3 H4 H5 H6 HR I IMG INPUT LI OL P PRE SELECT SMALL SPAN STRONG SUB SUP TABLE TBODY TD TEXTAREA TFOOT TH THEAD TR U UL ABBR AREA BLOCKQUOTE CAPTION CENTER CITE CODE CANVAS DFN EMBED FONT INS KBD LEGEND LABEL MAP OBJECT Q S SAMP STRIKE TT ARTICLE AUDIO ASIDE FOOTER HEADER MENU METER NAV PROGRESS SECTION TIME VIDEO NOINDEX NOBR MAIN".split(" "),
|
||||||
|
x=59,y=String.fromCharCode,E={},C=0;C<u.length;C++)E[u[C]]=y(x),y(x),x++;this.handler=function(b){var e,h=d.getElementsByTagName("body")[0];if(!f.ymDisabledClickmap&&!m.classNameExists(h,"ym-clickmap-ignore")){if(r._prefs.hasQuota){if(!r._prefs.quota)return;r._prefs.quota--}var u=b.target||b.srcElement;3==u.nodeType&&(u=u.parentNode);h=v(u.nodeName);e=n(b);var p;b.which||b.button===ga||(b.which=b.button&1?1:b.button&2?3:b.button&4?2:0);p=b.which;if(p=2!=p&&3!=p||"A"==h)if(p=u.offsetHeight,p=!(0===
|
||||||
|
u.offsetWidth&&0===p||u.style&&"none"===u.style.display)){b:{for(p=u;p.parentNode;){if(m.classNameExists(p,"ym-clickmap-ignore")){p=!0;break b}p=p.parentNode}p=!1}if(p=!p){b:{p=r._prefs.ignoreTags;for(var A=0;A<p.length;A++)if(v(p[A])==v(h)){p=!0;break b}p=!1}p=!p&&r._prefs.filter(u,h)}}if(p){h=+new Date;u={dom:u,x:e.x,y:e.y,time:h};if((e=50<h-q)&&!(e=!r._prefs.ignoreSameClicks)){if(e=z){p=Math.abs(e.x-u.x);var A=Math.abs(e.y-u.y),x=u.time-e.time;e=e.dom==u.dom&&2>p&&2>A&&1E3>x}else e=!1;e=!e}if(e&&
|
||||||
|
"MetrikaPlayer"!=f.name){if(e=b.target||b.srcElement){3==e.nodeType&&(e=e.parentNode);for(p=v(e.nodeName);e.parentNode&&e.parentNode.nodeName&&("A"!=p&&"AREA"!=p||!e.href);)e=e.parentNode,p=v(e.nodeName);e=e.href?e:!1}else e=!1;e&&K(b,e)&&J(B().hostname,e.hostname);p=n(b);e=p.x;p=p.y;var A=b.target||b.srcElement,y=r._prefs,x=g(A),D="";b=B().href;switch(y.mode){case "fixed":D="0";s(A)&&(D+="u");break;case "centered":D="1";x=Math.floor(k()/2);e=e>x?e-x+32768:e;s(A)&&(D+="u");break;default:D=v(A.nodeName);
|
||||||
|
D="BODY"==D||"HTML"==D?k():A.offsetWidth;y=v(A.nodeName);"BODY"==y||"HTML"==y?(y=d.documentElement,y=Math.max(y.scrollHeight,d.body.scrollHeight,y.clientHeight)):y=A.offsetHeight;D||(D=1);y||(y=1);e=Math.floor(65535*(e-x.left)/D);p=Math.floor(65535*(p-x.top)/y);for(x="";A.parentNode&&"BODY"!=v(A.nodeName)&&"HTML"!=v(A.nodeName);){x+=E[A.nodeName]||"*";b:{for(var D=A.parentNode,C=y=0;C<D.childNodes.length;C++)if(A.nodeName==D.childNodes[C].nodeName){if(A==D.childNodes[C]){D=y;break b}y++}D=0}x+=D||
|
||||||
|
"";A=A.parentNode}D=l.trim(x,128)}e=["rn",l.random(),"x",e,"y",p,"t",Math.floor(Math.floor(+new Date-Hb)/100),"p",D];R?e=e.concat("wh","1"):b=b?b.replace(/\#.*$/,""):b;"function"==typeof r._prefs.urlFilter&&(b=r._prefs.urlFilter(b));b=l.trim(b,Ja);e=e.join(":");(new Fb({protocol:ca,counterId:a,counterType:c})).sendClick(b,e)}q=h;z=u}}};this.setPrefs=function(a){function b(a,e){return!0}this._prefs="undefined"==typeof a||!1===a||!0===a?{filter:b,ignoreTags:[],mode:"",delay:oa,quota:0,hasQuota:!1,ignoreSameClicks:!0}:
|
||||||
|
{filter:a.filter||b,ignoreTags:a.ignoreTags||[],mode:a.mode||"",delay:"undefined"==typeof a.delay?oa:a.delay,quota:a.quota||0,hasQuota:!!a.quota,ignoreSameClicks:"undefined"==typeof a.ignoreSameClicks,urlFilter:a.urlFilter}};this.updateStatus=function(a){switch(typeof a){case "undefined":this.start(!0);break;case "boolean":a?this.start(a):this.stop();break;case "object":this.start(a)}};this._start=!1;this.start=function(a){this.setPrefs(a);if(!this._start)h.on(d,"click",this.handler);this._start=
|
||||||
|
!0};this.stop=function(){this._start&&h.un(d,"click",this.handler);this._start=!1};this.start(b)}var ba=Math.round(1073741824*Math.random()),W,ua="",ca=aa,Ca=Ga=H.href,va="",u;Ya._metrika.counter||(Ya._metrika.counter=g);"object"==typeof a&&(u=a,s=a.defer,ua=a.ut,c=a.type,b=a.params,ca=a.onlyHttps?"https:":aa,a=a.id);a=a||0;/^\d+$/.test(a)||(a=0);c=c||0;W=a+":"+c;if(Ya._metrika.counters[W])return Ya._metrika.counters[W];l.trim=function(a,b){a=String(a).replace(/^\s+|\s+$/g,"");b&&a.length>b&&(a=a.substr(0,
|
||||||
|
b));return a};q._silverlightVersion="";q.getSilverlightVersion=function(){if(!q._silverlightVersion)if(f.ActiveXObject)try{var a=new ActiveXObject("AgControl.AgControl"),b=function(a,b,e,c){for(;a.isVersionSupported(b[0]+"."+b[1]+"."+b[2]+"."+b[3]);)b[e]+=c;b[e]-=c},c=[1,0,0,0];b(a,c,0,1);b(a,c,1,1);b(a,c,2,1E4);b(a,c,2,1E3);b(a,c,2,100);b(a,c,2,10);b(a,c,2,1);b(a,c,3,1);q._silverlightVersion=c.join(".")}catch(d){}else if(a=L.plugins["Silverlight Plug-In"])q._silverlightVersion=a.description;return q._silverlightVersion||
|
||||||
|
""};q._flashVersion=0;q.getFlashVersion=function(){if(!q._flashVersion){var a=f.navigator;if("undefined"!=typeof a.plugins&&"object"==typeof a.plugins["Shockwave Flash"]){var b=a.plugins["Shockwave Flash"].description;b&&(a=a.mimeTypes,"undefined"==typeof a||!a["application/x-shockwave-flash"]||a["application/x-shockwave-flash"].enabledPlugin)&&(q._flashVersion=b.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s+r|\s+b[0-9]+)/,"."))}else if("undefined"!=typeof f.ActiveXObject)try{if(b=new ActiveXObject("ShockwaveFlash.ShockwaveFlash")){var c=
|
||||||
|
b.GetVariable("$version");c&&(q._flashVersion=c.split(" ")[1].replace(/,/g,".").replace(/[^.\d]/g,""))}}catch(d){}}return q._flashVersion};q.getLanguage=function(){return(f.navigator&&(L.language||L.browserLanguage)||"").toLowerCase()};q.getJavaEnabled=function(){try{return L.javaEnabled()}catch(a){return!1}};l.fnv32a=function(a){for(var b=2166136261,c=0,d=a.length;c<d;++c)b^=a.charCodeAt(c),b+=(b<<1)+(b<<4)+(b<<7)+(b<<8)+(b<<24);return b>>>0};q.getFingerPrint=function(){var a=[];if(L.plugins&&L.plugins.length)for(var b=
|
||||||
|
0;b<L.plugins.length;b++){var c=L.plugins[b];l.mergeArrays(a,[c.name,c.version,c.description,c.filename])}if(L.mimeTypes&&L.mimeTypes.length)for(b=0;b<L.mimeTypes.length;b++)c=L.mimeTypes[b],l.mergeArrays(a,[c.type,c.description,c.suffixes]);return l.fnv32a(a.join(";"))+"01"};var wa=V.inherit({trimParams:!1,resource:"watch",retry:!0,postParams:["site-info"],sendHit:function(a,b,c,d,f){this._hitExt(a,b,c,d,{ut:f,ar:!0,saveRef:!0})},sendAjaxHit:function(a,b,c,d){this._hitExt(a,b,c,null,d)},sendParams:function(a){this._hitExt(B().href,
|
||||||
|
"","",a,{ar:!0,pa:!0,onlyData:!0})},sendGoal:function(a,b){if(!/[\/&=?#]/.test(a)){var c=a?"goal://"+B().hostname+"/"+encodeURIComponent(a):B().href,f=n(),g=a?B().href:d.referrer;this._hitExt(c,f,g,b,{ar:!0})}},sendClickLink:function(a,b,c){this._hitExt(a,b,B().href,null,c)},sendExtLink:function(a,b,c,d){this._hitExt(a,"",B().href,d,{ar:!0,ln:!0,ut:Ka})},sendFileUpload:function(a,b,c,d){this._hitExt(a,"",B().href,d,{ar:!0,ln:!0,dl:!0})},sendNotBounce:function(a){this._hitExt(B().href,"","",null,{cl:a,
|
||||||
|
ar:!0,nb:!0,onlyData:!0})},sendVideoAction:function(a,b,c,d){this._hitExt(c,d||"","",null,{ar:!0,va:a,vt:+b})},sendSocialClick:function(a,b,c){this._hitExt(c||B().href,"","",null,{ar:!0,sn:l.trim(a,64),sa:l.trim(b,64)})},_hitExt:function(a,b,c,d,g,h,m,n){function s(a,b){b&&(q[a]=b)}g=g||{};h=h||{};if("MetrikaPlayer"!=f.name){c="undefined"!=typeof c?c:Ga;var q={};g.ar&&!g.onlyData&&(c=this._prepareHitUrl(c),a=this._prepareHitUrl(a));g.reqNum=!0;s("page-ref",l.trim(c,Ja));s("page-url",l.trim(a,Ja));
|
||||||
|
-1!=B().hostname.search(/(?:^|\.)(?:ya|yandex|narod|narod2)\.(?:\w+|com\.\w+)$/)?s("ut",Ka):"undefined"!=typeof g.ut&&s("ut",l.trim(g.ut,64));if(d)if(a=l.toJSON(d),this.trimParams&&a.length>Gb)var u=!0;else s("site-info",a);g.saveRef&&(Ga=c);l.mixin(h,z(b,g,!0));this.send(q,h,function(){u&&(new wa({protocol:this.protocol,counterType:this.counterType,counterId:this.counterId})).sendParams(d);m&&m.apply(n,arguments)},this)}},_prepareHitUrl:function(a){var b=B(),c=b.host,b=b.href;if(!a)return b;if(-1!=
|
||||||
|
a.search(/^\w+:\/\//))return a;var d=a.charAt(0);if("?"==d)return d=b.search(/\?/),-1==d?b+a:b.substr(0,d)+a;if("#"==d)return d=b.search(/#/),-1==d?b+a:b.substr(0,d)+a;if("/"==d){if(d=b.search(c),-1!=d)return b.substr(0,d+c.length)+a}else return c=b.split("/"),c[c.length-1]=a,c.join("/");return a}}),Db=xa.inherit({id:"script",request:function(a,b,c,g){var h="_ymjsp"+l.random(),m=d.createElement("script");f[h]=E(function(a){try{delete f[h]}catch(b){f[h]=ga}c.call(g,!0,a);m.parentNode&&m.parentNode.removeChild(m)},
|
||||||
|
"transport.script");m.type="text/javascript";m.src=this._buildUrl(a,l.mixin({wmode:5,callback:h},b));a=d.getElementsByTagName("head")[0];a.insertBefore(m,a.firstChild);return!0}}),Eb=wa.inherit({transports:[Db],trimParams:!0,sendHit:function(a,b,c,d,g,f,h,l,m){var n={};f&&(n.vc=f);h&&(n.pr=1);this._hitExt(a,b,c,d,g,n,l,m)}}),Fb=V.inherit({resource:"clmap",retry:!0,transports:[Ta],sendClick:function(a,b,c,d){this.send({"page-url":a,"pointer-click":b},{},c,d)}}),Y=[];V.retransmit();var O=new wa({protocol:ca,
|
||||||
|
counterType:c,counterId:a}),U;g.replacePhones=E(function(){try{var b=(new ka({counterId:a})).read("mp2_substs");if(b){var c=(new Function("return "+b))();c&&ha(c,!0)}}catch(d){}},"counter.replacePhones");g.reachGoal=E(function(b,c){ya.log("Reach goal. Counter: "+a+". Goal id: "+b);O.sendGoal(b,c);return!0},"counter.reachGoal");g.trackLinks=E(za,"counter.trackLinks");g.hit=E(function(b,c,d,g,f){b&&(ya.log("PageView. Counter "+a+". URL: "+b+". Referer: "+d),O.sendHit(b,c,d,g,f))},"counter.hit");g.params=
|
||||||
|
E(function(b){if(b){var c=arguments.length;if(1<c){for(var d={},g=d,f=0;f<c-1;f++){var h=""+arguments[f];g[h]={};f<c-2&&(g=g[h])}g[h]=arguments[c-1];b=d}ya.log("User params. Counter "+a+". Params: ",b);O.sendParams(b)}},"counter.params");g.file=E(function(a,b,c,d){a&&O.sendFileUpload(a,b,c,d)},"counter.file");g.extLink=E(function(a,b,c,d){a&&O.sendExtLink(a,b,c,d)},"counter.extLink");g.notBounce=E(function(){var a=0;La&&pa&&(a=pa-La);O.sendNotBounce(a)},"counter.notBounce");var da=[];g.addFileExtension=
|
||||||
|
function(a){"string"==typeof a?da.push(a):da=da.concat(a)};g.clickmap=function(a){g._clickmap?g._clickmap.updateStatus(a):g._clickmap=new I(a)};g.accurateTrackBounce=function(b){"number"!=typeof b&&(b=15E3);if(!g._isAccurateTrackBounce){g._isAccurateTrackBounce=!0;var c=new ea({counterId:a}),f=c.get("lastHit");c.set("lastHit",+new Date);((c=c.get("lastHit"))&&(!f||f<c-18E5)||!x(d.referrer,B().href)||0.1>Math.random())&&jb(function(){g.notBounce()},b)}};var Ea=null,R=!1;g.trackHash=function(a){if(!1===
|
||||||
|
a)R&&("onhashchange"in f?h.un(f,"hashchange",y):clearInterval(Ea),R=!1);else if(!R){if("onhashchange"in f)h.on(f,"hashchange",y);else zb(y);R=!0}g._trackHash=R};g.video=E(function(a,b,c,d){var g=["end","play","pause","seek"];if(a&&c){a:{for(var f=0,h=g.length;f<h;f+=1)if(a===g[f]){g=f;break a}g=-1}-1!==g&&O.sendVideoAction(a,b,c,d)}},"counter.video");g.social=E(function(a,b,c){a&&b&&O.sendSocialClick(a,b,c)},"counter.social");g.enableAll=function(){g.trackLinks(!0);g.clickmap(!0);g.accurateTrackBounce()};
|
||||||
|
g.uploadPage=function(){};g._performanceTiming=fa;if(a)h.onDocumentVisible(Ia)},"init")()};f.Ya.Metrika.counters=function(){var a=[];l.forEachKey(f.Ya._metrika.counters,function(b,c){var d=b.split(":");a.push({id:+d[0],type:+d[1],accurateTrackBounce:c._isAccurateTrackBounce,clickmap:c._clickmap&&c._clickmap._start,oldCode:!!f.ya_cid,trackHash:!!c._trackHash,trackLinks:c._trackLinks&&c._trackLinks.on,webvisor:!!c._webvisor})});return a};f.ya_cid&&new Ya.Metrika(f.ya_cid,f.ya_params,f.ya_class);f.ya_cid&&
|
||||||
|
!f.ya_hit&&(f.ya_hit=function(a,b){Ya._metrika.counter&&Ya._metrika.counter.reachGoal(a,b)});C=f.yandex_metrika_callback;K=f.yandex_metrika_callbacks;"function"==typeof C&&C();if("object"==typeof K)for(C=0;C<K.length;C++)if(X=K[C])K[C]=null,X();sa("yandex_metrika_callback");sa("yandex_metrika_callbacks");K=["link","click","scroll","res"];for(C=0;C<K.length;C++)if(X=K[C]+"map",-1!=H.href.search("ym_playback="+X)){ta(aa+"//metrika.yandex.ru/js/"+X+"/_loader.js");break}f.Ya.Metrika.informer=function(a){var b=
|
||||||
|
!!Ya.Metrika._informer;Ya.Metrika._informer=a;b||ta(aa+"//mc.yandex.ru/metrika/informer.js")};(function(){var a=q.getJScriptVersion();if(!a||5.8<a)if("complete"==d.readyState)ha();else h.on(f,"load",ha)})();(function(){var a=function(){var a=d.getElementsByTagName("body")[0],b=d.createElement("iframe");b.src="http://awaps.yandex.ru/0/2153/0.htm?ad=165746&pl=93829&rnd="+l.random();b.setAttribute("style","position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden;visibility:hidden");a.appendChild(b);
|
||||||
|
P(function(){a.removeChild(b)},1E4,"ad")},b=function(){f.removeEventListener("load",b,!1);a()},c=f.performance;l.random(200)||Ya._metrika.isAd||(Ya._metrika.isAd=!0,"http:"==aa&&"object"==typeof c&&f.addEventListener&&(c.timing&&c.timing.loadEventStart?a():f.addEventListener("load",b,!1)))})()})(this,this.document);
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
/* counted */
|
||||||
|
After Width: | Height: | Size: 43 B |
|
After Width: | Height: | Size: 1.2 KiB |
@@ -0,0 +1,214 @@
|
|||||||
|
/*
|
||||||
|
* компонент поиска Я-пользователя
|
||||||
|
*/
|
||||||
|
Friends.YauserSearch = function(element, params) {
|
||||||
|
if (arguments.length > 0) {
|
||||||
|
this.init.apply(this, arguments);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Friends.YauserSearch.prototype = {
|
||||||
|
init: function(element, params) {
|
||||||
|
/** control container. */
|
||||||
|
this.control = element;
|
||||||
|
this.control.YauserSearchControl = this;
|
||||||
|
this.params = params;
|
||||||
|
|
||||||
|
this.searchError_b = y5.Dom.getDescendants(this.control, 'b', 'b-note-attention')[0];
|
||||||
|
this.search_input = y5.Dom.getDescendant(this.control, 'input', 'text');
|
||||||
|
this.usersList_table = y5.Dom.getDescendant(this.control, 'table', 'b-write-users-list');
|
||||||
|
|
||||||
|
this.search_btn = y5.Dom.getDescendants(this.control, 'input', 'submit')[0];
|
||||||
|
this.myFriends_link = y5.Dom.getDescendant(this.control, 'a', 'my-friends');
|
||||||
|
|
||||||
|
this.friendControl = new Friends.FriendControl(this.control);
|
||||||
|
this.search_btn.disabled = false;
|
||||||
|
|
||||||
|
this.INVALID_SEARCH_TEXT = 'Логин или имя пользователя должны быть заданы';
|
||||||
|
|
||||||
|
// ajax-метод поиска пользователя
|
||||||
|
this.ajaxMethod_search = 'ajax/search_users_by_name_not_me';
|
||||||
|
// ajax-метод получения определенного списка пользовтаелей
|
||||||
|
if (this.params) {
|
||||||
|
this.ajaxMethod_get = 'ajax/' + this.params.ajaxMethod_get;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.setEvents();
|
||||||
|
},
|
||||||
|
|
||||||
|
// навешиваем обработчики событий
|
||||||
|
setEvents: function() {
|
||||||
|
var self = this;
|
||||||
|
$(this.control).find(".my-friends").die("click.yausersearch").live("click.yausersearch", function(e){
|
||||||
|
self.hideErrorMessages();
|
||||||
|
self.resetSearchResults();
|
||||||
|
e.preventDefault();
|
||||||
|
|
||||||
|
self.friendControl.setStatusMessage('Идёт загрузка пользователей<br /><img src="' + g_globals.img_base + 'bar.gif" alt=""/>');
|
||||||
|
y5.Events.notify('y5:usersAreFound', self.friendControl, true);
|
||||||
|
|
||||||
|
if (self.friendsHTML) {
|
||||||
|
self.onFriendsSearch(self.friendsHTML);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var _self = self;
|
||||||
|
|
||||||
|
// функция на успех запроса
|
||||||
|
function responseOK(request, trace) {
|
||||||
|
_self.onFriendsSearch(request.html);
|
||||||
|
_self.friendsHTML = request.html; // запоминаем список друзей
|
||||||
|
}
|
||||||
|
|
||||||
|
// функция на успех запроса
|
||||||
|
function responseError(trace) {
|
||||||
|
self.friendControl.setStatusMessage("ошибка " + trace);
|
||||||
|
}
|
||||||
|
|
||||||
|
var url = friendsURL(self.ajaxMethod_get);
|
||||||
|
|
||||||
|
// загружаем список друзей
|
||||||
|
jQuery.ajax({
|
||||||
|
url: url,
|
||||||
|
dataType: 'json',
|
||||||
|
success: responseOK,
|
||||||
|
error: responseError
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
y5.ShortCut.down([{key: y5.ShortCut.ENTER}],
|
||||||
|
function(e) {
|
||||||
|
// dispatch'им click по кнопке 'Найти'
|
||||||
|
return new y5.Event('click', this.search_btn, true);
|
||||||
|
},
|
||||||
|
this.search_input, {checkTarget: false, context: this});
|
||||||
|
},
|
||||||
|
|
||||||
|
// при поиске друзей
|
||||||
|
onFriendsSearch: function(html) {
|
||||||
|
this.fillUsers_select(html);
|
||||||
|
if (this.users_select.options.length === 0){
|
||||||
|
this.friendControl.setStatusMessage("никого не найдено");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.users_select.selectedIndex = 0;
|
||||||
|
|
||||||
|
this.friendControl.setStatusMessage("← выберите человека");
|
||||||
|
this.friendControl.list = this.users_select;
|
||||||
|
this.friendControl.showUserInfo();
|
||||||
|
y5.Events.notify('y5:userIsSelected', this.friendControl, true);
|
||||||
|
new y5.AEventListener('change', function() {
|
||||||
|
this.friendControl.list = this.users_select;
|
||||||
|
this.friendControl.showUserInfo();
|
||||||
|
y5.Events.notify('y5:userIsSelected', this.friendControl, true);
|
||||||
|
}, this.users_select, true, this);
|
||||||
|
},
|
||||||
|
|
||||||
|
// заполняем список найденных пользователей
|
||||||
|
fillUsers_select: function(html) {
|
||||||
|
this.users_select = y5.Dom.getDescendant(this.control, 'td', 'list').getElementsByTagName('select')[0];
|
||||||
|
var parent = this.users_select.parentNode;
|
||||||
|
//' ставится стандартной xscript'овой функцией xmlescape
|
||||||
|
//в IE6 такой html вызывает ошибку, вот замена на ucp-шное значение выручает
|
||||||
|
html = html.replace(/'/g,'\x27');
|
||||||
|
parent.innerHTML = html;
|
||||||
|
this.users_select = parent.firstChild;
|
||||||
|
},
|
||||||
|
|
||||||
|
// при поиске пользователя
|
||||||
|
onSearch: function() {
|
||||||
|
this.resetSearchResults();
|
||||||
|
|
||||||
|
if (!this.isYauserLogin()) {
|
||||||
|
this.showErrorMessage(this.searchError_b, this.INVALID_SEARCH_TEXT);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
y5.Events.notify('y5:usersAreFound', this.friendControl, true);
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
|
||||||
|
// проверяем, задана ли строка поиска
|
||||||
|
isYauserLogin: function() {
|
||||||
|
return !y5.Strings.isVoid(this.search_input.value);
|
||||||
|
},
|
||||||
|
|
||||||
|
// показываем сообщения об ошибках
|
||||||
|
showErrorMessage: function (errorNote, msg) {
|
||||||
|
if (msg) {
|
||||||
|
errorNote.innerHTML = msg;
|
||||||
|
}
|
||||||
|
y5.Classes.remove(errorNote, 'i-hidden');
|
||||||
|
},
|
||||||
|
|
||||||
|
// прячем сообщения об ошибках
|
||||||
|
hideErrorMessages: function(errorNote) {
|
||||||
|
y5.Classes.add(this.searchError_b, 'i-hidden');
|
||||||
|
y5.Events.notify('y5:hideErrorMessages', this.friendControl, true);
|
||||||
|
},
|
||||||
|
|
||||||
|
// сбрасываем результаты поиска
|
||||||
|
resetSearchResults: function() {
|
||||||
|
this.hideErrorMessages();
|
||||||
|
y5.Events.notify('y5:resetSearchResults', this.friendControl, true);
|
||||||
|
},
|
||||||
|
|
||||||
|
// инициализируем список найденных пользователей
|
||||||
|
initUsers_select: function() {
|
||||||
|
this.users_select = y5.Dom.getDescendant(this.control, 'td', 'list').getElementsByTagName('select')[0];
|
||||||
|
new y5.AEventListener('change', function() {
|
||||||
|
y5.Events.notify('y5:userIsSelected', this.friendControl, true);
|
||||||
|
}, this.users_select, true, this);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
y5.require (
|
||||||
|
['Dom', 'Events', 'ShortCuts', '{Friends}.FriendControl'],
|
||||||
|
function() {
|
||||||
|
y5.loaded('{Friends}.YauserSearch');
|
||||||
|
|
||||||
|
Friends.FriendControl.prototype.searchResponseOKOld = Friends.FriendControl.prototype.searchResponseOK;
|
||||||
|
Friends.FriendControl.prototype.searchResponseOK = function (request, trace) {
|
||||||
|
var _this = trace.parent;
|
||||||
|
_this.searchResponseOKOld(request, trace);
|
||||||
|
if (_this.list.length) {
|
||||||
|
_this.list.selectedIndex = 0;
|
||||||
|
_this.showUserInfo();
|
||||||
|
|
||||||
|
_this.control.YauserSearchControl.initUsers_select();
|
||||||
|
y5.Events.notify('y5:userIsSelected', _this.control.YauserSearchControl.friendControl, true);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Friends.FriendControl.prototype.searchResponseError = function (trace) {
|
||||||
|
var _this = trace.parent;
|
||||||
|
_this.setStatusMessage("ошбика " + trace);
|
||||||
|
};
|
||||||
|
|
||||||
|
Friends.FriendControl.prototype.onSearch = function() {
|
||||||
|
if (!this.control.YauserSearchControl.onSearch()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var _this = this;
|
||||||
|
|
||||||
|
this.setStatusMessage('Идёт загрузка пользователей<br /><img src="' + g_globals.img_base + 'bar.gif" alt=""/>');
|
||||||
|
|
||||||
|
var fields = getByTagName("input", this.submit.form);
|
||||||
|
var url = friendsURL(this.control.YauserSearchControl.ajaxMethod_search, y5.FormCollector.collectTags(this.control));
|
||||||
|
// загружаем список пользователей
|
||||||
|
jQuery.ajax({
|
||||||
|
url: url,
|
||||||
|
dataType: "json",
|
||||||
|
success: function(response){
|
||||||
|
_this.searchResponseOK(response, {parent:_this} );
|
||||||
|
},
|
||||||
|
error: function(response){
|
||||||
|
_this.searchResponseError(response, {parent:_this} );
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
@@ -0,0 +1,205 @@
|
|||||||
|
y5.require(['{Friends}.YauserSearch', '{Friends}.CommonConstructor'], function() {
|
||||||
|
var Yauser = Friends.CommonConstructor(Friends.YauserSearch);
|
||||||
|
|
||||||
|
Yauser.prototype.init = function() {
|
||||||
|
Friends.YauserSearch.prototype.init.apply(this, arguments);
|
||||||
|
|
||||||
|
this.insertError_b = y5.Dom.getDescendants(this.control, 'b', 'b-note-attention')[1];
|
||||||
|
this.yauser_span = y5.Dom.getDescendant(this.control, 'b', 'b-user');
|
||||||
|
this.yauserPreview_div = y5.Dom.getDescendant(this.control, 'div', 'b-friend-name-preview');
|
||||||
|
this.toChange_link = y5.Dom.getDescendant(this.control, 'a', 'to-change');
|
||||||
|
this.yauserName_input = y5.cssQuery('input[name="yauser-name"]', this.control)[0];
|
||||||
|
this.dialogBtns = y5.Dom.getDescendant(this.control, 'div', 'y5-w-buttons');
|
||||||
|
|
||||||
|
this.ajaxMethod_search = 'ajax/search_users_by_name';
|
||||||
|
this.ajaxMethod_get = 'ajax/get_friends';
|
||||||
|
|
||||||
|
// навешиваем события
|
||||||
|
y5.Events.observe('y5:userIsSelected', this.showPreviewBlock, this.friendControl, true, this);
|
||||||
|
y5.Events.observe('y5:usersAreFound', this.showSearchResult, this.friendControl, true, this);
|
||||||
|
y5.Events.observe('y5:resetSearchResults', this.resetSearchResults, this.friendControl, true, this);
|
||||||
|
y5.Events.observe('y5:hideErrorMessages', function() {
|
||||||
|
y5.Classes.add(this.insertError_b, 'i-hidden');
|
||||||
|
}, this.friendControl, true, this);
|
||||||
|
|
||||||
|
y5.Events.observe('click', function(evt) {
|
||||||
|
this.hideErrorMessages();
|
||||||
|
this.yauserName_input.value = this.yauserName;
|
||||||
|
y5.Classes.add(this.yauserPreview_div, 'b-friend-name-preview-edit');
|
||||||
|
this.yauserName_input.focus();
|
||||||
|
this.yauserName_input.select();
|
||||||
|
evt.preventDefault();
|
||||||
|
}, this.toChange_link, true, this);
|
||||||
|
|
||||||
|
|
||||||
|
if (!this.has_been_inited) {
|
||||||
|
y5.Events.observe('y5:show', function(evt) {
|
||||||
|
if (typeof evt.caller === "object") {
|
||||||
|
this.caller = evt.caller;
|
||||||
|
this.caller_params = evt.caller_params || {};
|
||||||
|
this.title = this.caller_params.title || 'Вставить ссылку на страницу пользователя Я.ру';
|
||||||
|
this.showWidget();
|
||||||
|
}
|
||||||
|
}, Yauser, true, this);
|
||||||
|
|
||||||
|
y5.Events.observe('y5:make', function(widget) {
|
||||||
|
this.dialog = widget;
|
||||||
|
this.control = widget.window;
|
||||||
|
var el = this.dialog.element;
|
||||||
|
|
||||||
|
this.init(this.control);
|
||||||
|
y5.ShortCut.down([{key: y5.ShortCut.ENTER}],
|
||||||
|
function(e) {
|
||||||
|
// dispatch'им click по кнопке 'Вставить'
|
||||||
|
y5.Events.notify('click', this.dialog.button_ok);
|
||||||
|
},
|
||||||
|
this.yauserName_input, {checkTarget: false, context: this});
|
||||||
|
|
||||||
|
y5.Events.notify('y5:yauser_make', this.caller, true, {caller:this});
|
||||||
|
this.initDialogEvents();
|
||||||
|
}, this.getWidgetInitElement(), true, this);
|
||||||
|
|
||||||
|
this.has_been_inited = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
y5.loaded('{Friends}.YauserSearchInPostInstance');
|
||||||
|
};
|
||||||
|
|
||||||
|
// показываем результат поиска: список найденных пользователей и карточку выбранного пользователя
|
||||||
|
Yauser.prototype.showSearchResult = function() {
|
||||||
|
y5.Classes.remove(this.usersList_table, 'i-hidden');
|
||||||
|
};
|
||||||
|
|
||||||
|
// сбрасываем результаты поиска
|
||||||
|
Yauser.prototype.resetSearchResults = function() {
|
||||||
|
this.yauserLogin = '';
|
||||||
|
this.yauserName = '';
|
||||||
|
this.yauser_span.innerHTML = '';
|
||||||
|
|
||||||
|
// скрываем реузальтат поиска: список, карточку, preview-блок "Что получается", кнопки
|
||||||
|
y5.Classes.add(this.usersList_table, 'i-hidden');
|
||||||
|
y5.Classes.add(this.yauserPreview_div, 'i-hidden');
|
||||||
|
if (this.dialogBtns) {
|
||||||
|
y5.Classes.add(this.dialogBtns, 'i-hidden');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// показываем preview-блок "Что получается"
|
||||||
|
Yauser.prototype.showPreviewBlock = function() {
|
||||||
|
y5.Classes.add(this.insertError_b, 'i-hidden');
|
||||||
|
if (!this.caller_params.dont_preview) {
|
||||||
|
y5.Classes.remove(this.yauserPreview_div, 'i-hidden');
|
||||||
|
y5.Classes.remove(this.yauserPreview_div, 'b-friend-name-preview-edit');
|
||||||
|
}
|
||||||
|
|
||||||
|
var s = this.users_select;
|
||||||
|
$(".b-friend-name-preview").yhide();
|
||||||
|
if( s.options && s.options.length ){
|
||||||
|
var selectedOption = s.options[this.users_select.selectedIndex];
|
||||||
|
this.yauserLogin = selectedOption.id;
|
||||||
|
// т.к. в selectedOption.text выводится сокращенное имя, то полное имя было записано как параметр в onclick
|
||||||
|
var data = selectedOption.onclick();
|
||||||
|
this.yauserName = data.title;
|
||||||
|
this.data = data;
|
||||||
|
this.data.id = selectedOption.value;
|
||||||
|
|
||||||
|
this.setYauserName();
|
||||||
|
|
||||||
|
$(".b-friend-name-preview").yshow();
|
||||||
|
y5.Classes.remove(this.dialogBtns, 'i-hidden');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// записываем в span preview-блока полное имя выбранного пользователя
|
||||||
|
Yauser.prototype.setYauserName = function() {
|
||||||
|
this.yauser_span.innerHTML = this.createYauserLink(this.yauserLogin, this.yauserName);
|
||||||
|
};
|
||||||
|
|
||||||
|
// TODO: заменить глобальной функцией yauser(user, needQu), когда в y5.Dom появится функция replaceNode
|
||||||
|
Yauser.prototype.createYauserLink = function(login, name) {
|
||||||
|
var firstCharacter = name.substring(0, 1);
|
||||||
|
var otherCharacters = name.substring(1);
|
||||||
|
return '<a class="b-user__link" href="' + friendsFullURL(login) + '" target="_blank">'
|
||||||
|
+ '<b class="b-user__first-letter">' + ya.xmlEscape(firstCharacter) + '</b>' + ya.xmlEscape(otherCharacters) + '</a>';
|
||||||
|
};
|
||||||
|
|
||||||
|
// определяем имя пользователя с учетом значения поля "Что получается"
|
||||||
|
Yauser.prototype.defineYauserName = function() {
|
||||||
|
if (!y5.Strings.isVoid(this.yauserName_input.value)) {
|
||||||
|
this.yauserName = this.yauserName_input.value;
|
||||||
|
this.setYauserName();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Yauser.prototype.getWidgetInitElement = function() {
|
||||||
|
var res = this.dialog ? this.dialog.element : this.control;
|
||||||
|
return res;
|
||||||
|
};
|
||||||
|
|
||||||
|
Yauser.prototype.showWidget = function() {
|
||||||
|
var make_params = {
|
||||||
|
title: this.title
|
||||||
|
},
|
||||||
|
params = this.caller_params;
|
||||||
|
if ("valign" in params) {
|
||||||
|
make_params.valign = params.valign;
|
||||||
|
}
|
||||||
|
if ("halign" in params) {
|
||||||
|
make_params.halign = params.halign;
|
||||||
|
}
|
||||||
|
|
||||||
|
var dialog = y5.Widget.make(
|
||||||
|
this.getWidgetInitElement(),
|
||||||
|
'Widget.Dialog.Standard',
|
||||||
|
make_params
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
Yauser.prototype.showErrorMessage = function(errorNode, msg) {
|
||||||
|
if (msg) {
|
||||||
|
errorNode.innerHTML = msg;
|
||||||
|
}
|
||||||
|
y5.Classes.remove(errorNode, 'i-hidden');
|
||||||
|
};
|
||||||
|
|
||||||
|
Yauser.prototype.initDialogEvents = function() {
|
||||||
|
var el = this.dialog.element;
|
||||||
|
y5.Events.observe('y5:ok', this.onDialogOK, el, true, this);
|
||||||
|
y5.Events.observe('y5:esc', this.onDialogEsc, el, true, this);
|
||||||
|
y5.Events.observe('y5:cancel', this.onDialogCancel, el, true, this);
|
||||||
|
this.initDialogEvents = function() {};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Yauser.prototype.onDialogOK = function() {
|
||||||
|
//console.log('onDialogOk');
|
||||||
|
this.hideErrorMessages();
|
||||||
|
|
||||||
|
this.defineYauserName();
|
||||||
|
|
||||||
|
if (this.yauserName.length) {
|
||||||
|
y5.Events.notify('y5:yauser_defined', this.caller, true, {login:this.yauserLogin, name:this.yauserName, inflects: this.data.inflects, id: this.data.id});
|
||||||
|
} else {
|
||||||
|
this.showErrorMessage(this.insertError_b, 'Не задано имя пользователя');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
Yauser.prototype.onDialogEsc = function() {
|
||||||
|
//console.log('onDialogEsc');
|
||||||
|
y5.Events.notify('y5:yauser_src', this.caller, true, {caller: this});
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
Yauser.prototype.onDialogCancel = function() {
|
||||||
|
//console.log('onDialogCancel');
|
||||||
|
y5.Events.notify('y5:yauser_cancel', this.caller, true, {caller: this});
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
Friends.YauserSearchInPost = Yauser;
|
||||||
|
y5.loaded('{Friends}.YauserSearchInPost');
|
||||||
|
});
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
(function(b){var a={};a.imageError=function(c){var d=c.parentNode,e=d.parentNode.childNodes.length>2?d:d.parentNode;e.innerHTML='<div class="b-image-error">Картинка недоступна</div>'};b.ya=a})(window);
|
||||||
|
/*!
|
||||||
|
* Copyright (c) 2010, Yahoo! Inc. All rights reserved.
|
||||||
|
* Code licensed under the BSD License:
|
||||||
|
* http://developer.yahoo.com/yui/license.html
|
||||||
|
* version: 2.8.2r1
|
||||||
|
*/
|
||||||
|
ya.namespace=function(){var b=arguments,g=null,e,c,f;for(e=0;e<b.length;e=e+1){f=(""+b[e]).split(".");g=ya;for(c=(f[0]=="ya")?1:0;c<f.length;c=c+1){g[f[c]]=g[f[c]]||{};g=g[f[c]]}}return g};
|
||||||
|
After Width: | Height: | Size: 673 B |
|
After Width: | Height: | Size: 2.8 KiB |