обновление для подгрузки конфигов для веб-интерфейса
This commit is contained in:
4
.gitignore
vendored
4
.gitignore
vendored
@@ -40,9 +40,7 @@ pip-wheel-metadata/
|
|||||||
!.env.example
|
!.env.example
|
||||||
!.env.sample
|
!.env.sample
|
||||||
|
|
||||||
# Runtime settings, credentials, UI layouts and backups.
|
backups/
|
||||||
# These are machine/account specific and are created automatically.
|
|
||||||
settings/
|
|
||||||
|
|
||||||
# Stat2TV / API diagnostic snapshots
|
# Stat2TV / API diagnostic snapshots
|
||||||
hockey_data/snapshots/
|
hockey_data/snapshots/
|
||||||
|
|||||||
9
settings/editor_security.json
Normal file
9
settings/editor_security.json
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"daily_mask": "4827",
|
||||||
|
"master_pin": "638194",
|
||||||
|
"timezone": "Europe/Moscow",
|
||||||
|
"session_minutes": 30,
|
||||||
|
"max_attempts": 5,
|
||||||
|
"lock_seconds": 30,
|
||||||
|
"cookie_secure": false
|
||||||
|
}
|
||||||
158
settings/hockey_api.json
Normal file
158
settings/hockey_api.json
Normal file
@@ -0,0 +1,158 @@
|
|||||||
|
{
|
||||||
|
"base_url": "https://stat2tv.khl.ru/",
|
||||||
|
"auth_mode": "auto",
|
||||||
|
"ui_language": "ru",
|
||||||
|
"fallback_language": "ru",
|
||||||
|
"store_ru": true,
|
||||||
|
"store_en": true,
|
||||||
|
"sync_interval_seconds": 300,
|
||||||
|
"request_timeout_seconds": 20,
|
||||||
|
"verify_ssl": true,
|
||||||
|
"timezone": "Europe/Moscow",
|
||||||
|
"auto_sync_on_startup": false,
|
||||||
|
"games_endpoint_template": "{tournament_id}/schedule-{tournament_id}-live.xml",
|
||||||
|
"games_auto_discovery": true,
|
||||||
|
"games_cache_seconds": 300,
|
||||||
|
"players_endpoint_template": "{tournament_id}/players-{tournament_id}.xml",
|
||||||
|
"player_countries_endpoint_template": "players-countries.xml",
|
||||||
|
"referees_endpoint_template": "{tournament_id}/referees-{tournament_id}.xml",
|
||||||
|
"match_json_endpoint_template": "{tournament_id}/json/{game_id}.json",
|
||||||
|
"match_json_en_endpoint_template": "{tournament_id}/json_en/{game_id}.json",
|
||||||
|
"shots_endpoint_template": "shots/shots-{game_id}.json",
|
||||||
|
"match_directories_cache_seconds": 300,
|
||||||
|
"standings_endpoint_template": "{tournament_id}/standings-{tournament_id}.xml",
|
||||||
|
"standings_cache_seconds": 300,
|
||||||
|
"powerplay_endpoint_template": "{tournament_id}/powerplay-{tournament_id}.xml",
|
||||||
|
"rank_endpoint_template": "{tournament_id}/rank-{tournament_id}.xml",
|
||||||
|
"navigation_endpoint_template": "{tournament_id}/navigation-{tournament_id}.xml",
|
||||||
|
"tournament_statistics_cache_seconds": 300,
|
||||||
|
"optional_resource_negative_cache_seconds": 86400,
|
||||||
|
"timer_period_minutes": 20,
|
||||||
|
"timer_regular_overtime_minutes": 5,
|
||||||
|
"timer_playoff_overtime_minutes": 20,
|
||||||
|
"timer_reset_on_period_change": true,
|
||||||
|
"strength_regulation_skaters": 5,
|
||||||
|
"strength_regular_overtime_skaters": 3,
|
||||||
|
"strength_playoff_overtime_skaters": 5,
|
||||||
|
"strength_min_skaters": 3,
|
||||||
|
"strength_regulation_display": "pp",
|
||||||
|
"strength_regular_overtime_display": "numbers",
|
||||||
|
"strength_playoff_overtime_display": "pp",
|
||||||
|
"strength_powerplay_label": "PP",
|
||||||
|
"strength_shorthanded_label": "PK",
|
||||||
|
"strength_show_shorthanded": false,
|
||||||
|
"strength_state_labels": {
|
||||||
|
"regulation": {
|
||||||
|
"5x5": {
|
||||||
|
"ru": "",
|
||||||
|
"en": ""
|
||||||
|
},
|
||||||
|
"5x4": {
|
||||||
|
"ru": "БОЛ",
|
||||||
|
"en": "PP"
|
||||||
|
},
|
||||||
|
"4x4": {
|
||||||
|
"ru": "4 на 4",
|
||||||
|
"en": "4 on 4"
|
||||||
|
},
|
||||||
|
"5x3": {
|
||||||
|
"ru": "5 на 3",
|
||||||
|
"en": "5 on 3"
|
||||||
|
},
|
||||||
|
"4x3": {
|
||||||
|
"ru": "4 на 3",
|
||||||
|
"en": "4 on 3"
|
||||||
|
},
|
||||||
|
"3x3": {
|
||||||
|
"ru": "3 на 3",
|
||||||
|
"en": "3 on 3"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"regular_overtime": {
|
||||||
|
"3x3": {
|
||||||
|
"ru": "3 на 3",
|
||||||
|
"en": "3 on 3"
|
||||||
|
},
|
||||||
|
"4x3": {
|
||||||
|
"ru": "4 на 3",
|
||||||
|
"en": "4 on 3"
|
||||||
|
},
|
||||||
|
"4x4": {
|
||||||
|
"ru": "4 на 4",
|
||||||
|
"en": "4 on 4"
|
||||||
|
},
|
||||||
|
"5x3": {
|
||||||
|
"ru": "5 на 3",
|
||||||
|
"en": "5 on 3"
|
||||||
|
},
|
||||||
|
"5x4": {
|
||||||
|
"ru": "5 на 4",
|
||||||
|
"en": "5 on 4"
|
||||||
|
},
|
||||||
|
"5x5": {
|
||||||
|
"ru": "5 на 5",
|
||||||
|
"en": "5 on 5"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"playoff_overtime": {
|
||||||
|
"5x5": {
|
||||||
|
"ru": "",
|
||||||
|
"en": ""
|
||||||
|
},
|
||||||
|
"5x4": {
|
||||||
|
"ru": "PP",
|
||||||
|
"en": "PP"
|
||||||
|
},
|
||||||
|
"4x4": {
|
||||||
|
"ru": "4 на 4",
|
||||||
|
"en": "4 on 4"
|
||||||
|
},
|
||||||
|
"5x3": {
|
||||||
|
"ru": "5 на 3",
|
||||||
|
"en": "5 on 3"
|
||||||
|
},
|
||||||
|
"4x3": {
|
||||||
|
"ru": "4 на 3",
|
||||||
|
"en": "4 on 3"
|
||||||
|
},
|
||||||
|
"3x3": {
|
||||||
|
"ru": "3 на 3",
|
||||||
|
"en": "3 on 3"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"scoreboard_team_states": {
|
||||||
|
"home_delayed_penalty": {
|
||||||
|
"ru": "Отложенный штраф",
|
||||||
|
"en": "Delayed penalty",
|
||||||
|
"input": "4419919f-86d1-4bd5-b0b0-c369cd5f647a",
|
||||||
|
"input_title": "DELAYED PENALTY HOME",
|
||||||
|
"overlay": "2",
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
"home_empty_net": {
|
||||||
|
"ru": "Пустые ворота",
|
||||||
|
"en": "Empty net",
|
||||||
|
"input": "9acba229-3c9a-49e0-9e84-0a97b4c19062",
|
||||||
|
"input_title": "EMPTY NET HOME",
|
||||||
|
"overlay": "3",
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
"away_delayed_penalty": {
|
||||||
|
"ru": "Отложенный штраф",
|
||||||
|
"en": "Delayed penalty",
|
||||||
|
"input": "165dc512-4a45-477f-acb4-9c3838e407a3",
|
||||||
|
"input_title": "DELAYED PENALTY AWAY",
|
||||||
|
"overlay": "2",
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
"away_empty_net": {
|
||||||
|
"ru": "Пустые ворота",
|
||||||
|
"en": "Empty net",
|
||||||
|
"input": "34e288f3-3be4-41a7-ae2a-a3489cc2fd7d",
|
||||||
|
"input_title": "EMPTY NET AWAY",
|
||||||
|
"overlay": "3",
|
||||||
|
"enabled": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
296
settings/ui_builder.json
Normal file
296
settings/ui_builder.json
Normal file
@@ -0,0 +1,296 @@
|
|||||||
|
{
|
||||||
|
"version": 24,
|
||||||
|
"project_name": "Хоккей — назначения удалений",
|
||||||
|
"data_source": "hockey_stat2tv",
|
||||||
|
"canvas": {
|
||||||
|
"width": 1440,
|
||||||
|
"height": 760,
|
||||||
|
"grid_size": 10,
|
||||||
|
"snap_enabled": true,
|
||||||
|
"snap_threshold": 8,
|
||||||
|
"show_grid": true,
|
||||||
|
"auto_bind_containers": true,
|
||||||
|
"background": "#060d17"
|
||||||
|
},
|
||||||
|
"tabs": [
|
||||||
|
{
|
||||||
|
"id": "main",
|
||||||
|
"label": "Игра"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "shootout",
|
||||||
|
"label": "Буллиты"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "referees",
|
||||||
|
"label": "Судьи"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "statistics",
|
||||||
|
"label": "Статистика"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "schedule",
|
||||||
|
"label": "Расписание"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "standings",
|
||||||
|
"label": "Турнирная таблица"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"components": [
|
||||||
|
{
|
||||||
|
"id": "hockey-dashboard-game-timer",
|
||||||
|
"type": "timer",
|
||||||
|
"title": "Время периода",
|
||||||
|
"x": 520,
|
||||||
|
"y": 28,
|
||||||
|
"w": 400,
|
||||||
|
"h": 82,
|
||||||
|
"z": 1,
|
||||||
|
"tabs": [
|
||||||
|
"main"
|
||||||
|
],
|
||||||
|
"props": {
|
||||||
|
"label": "Время периода",
|
||||||
|
"mode": "count_down",
|
||||||
|
"startTime": "20:00",
|
||||||
|
"endTime": "00:00",
|
||||||
|
"targetDateTime": "",
|
||||||
|
"externalPath": "",
|
||||||
|
"format": "mm_ss",
|
||||||
|
"customFormat": "{totalMinutes}:{seconds}",
|
||||||
|
"footballBaseMinute": 45,
|
||||||
|
"afterEnd": "stop",
|
||||||
|
"autoStart": false,
|
||||||
|
"showStatus": true,
|
||||||
|
"persist": false,
|
||||||
|
"continueBackground": false,
|
||||||
|
"runtimeHidden": true,
|
||||||
|
"updateInterval": 100,
|
||||||
|
"milestones": "10:00|05:00|01:00|00:10|00:00"
|
||||||
|
},
|
||||||
|
"style": {
|
||||||
|
"background": "#101d31",
|
||||||
|
"color": "#fff",
|
||||||
|
"accent": "#48dfbd",
|
||||||
|
"borderColor": "#2e4663",
|
||||||
|
"borderWidth": 1,
|
||||||
|
"borderRadius": 16,
|
||||||
|
"padding": 12,
|
||||||
|
"fontSize": 17,
|
||||||
|
"fontWeight": 900,
|
||||||
|
"align": "center",
|
||||||
|
"opacity": 100,
|
||||||
|
"shadow": true
|
||||||
|
},
|
||||||
|
"locked": false,
|
||||||
|
"hidden": false,
|
||||||
|
"parent_id": null,
|
||||||
|
"action_id": "hockey_game_timer",
|
||||||
|
"interaction_mode": "event_only",
|
||||||
|
"initial_state": false,
|
||||||
|
"shortcuts": [
|
||||||
|
{
|
||||||
|
"id": "hockey-dashboard-space",
|
||||||
|
"enabled": true,
|
||||||
|
"combo": "Space",
|
||||||
|
"event": "timer_toggle",
|
||||||
|
"item_id": "",
|
||||||
|
"value": "",
|
||||||
|
"prevent_default": true,
|
||||||
|
"allow_in_inputs": false,
|
||||||
|
"global": false,
|
||||||
|
"scope": "runtime"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "hockey-dashboard-reset",
|
||||||
|
"enabled": true,
|
||||||
|
"combo": "Ctrl+R",
|
||||||
|
"event": "timer_reset",
|
||||||
|
"item_id": "",
|
||||||
|
"value": "",
|
||||||
|
"prevent_default": true,
|
||||||
|
"allow_in_inputs": false,
|
||||||
|
"global": false,
|
||||||
|
"scope": "runtime"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "hockey-penalty-dashboard",
|
||||||
|
"type": "hockey_penalty_dashboard",
|
||||||
|
"title": "Дашборд удалений",
|
||||||
|
"x": 10,
|
||||||
|
"y": 10,
|
||||||
|
"w": 1420,
|
||||||
|
"h": 740,
|
||||||
|
"z": 2,
|
||||||
|
"tabs": [
|
||||||
|
"main"
|
||||||
|
],
|
||||||
|
"props": {
|
||||||
|
"homePlayersPath": "hockey.home.players",
|
||||||
|
"awayPlayersPath": "hockey.away.players",
|
||||||
|
"homeTeamPath": "hockey.home.name",
|
||||||
|
"awayTeamPath": "hockey.away.name",
|
||||||
|
"idField": "id",
|
||||||
|
"numberField": "number",
|
||||||
|
"nameField": "name",
|
||||||
|
"positionField": "position",
|
||||||
|
"presets": "2=02:00|2+2=04:00|4=04:00|5=05:00|5+20=05:00|10=10:00",
|
||||||
|
"defaultPreset": "2",
|
||||||
|
"maxActivePerTeam": 8,
|
||||||
|
"rosterLimit": 40,
|
||||||
|
"historyLimit": 16,
|
||||||
|
"autoStartOnAssign": false,
|
||||||
|
"showSearch": true,
|
||||||
|
"persist": false,
|
||||||
|
"homeColor": "#4d9cff",
|
||||||
|
"awayColor": "#ff5f79",
|
||||||
|
"warningAt": "00:15",
|
||||||
|
"emptyText": "Перетащите игрока сюда",
|
||||||
|
"infractions": "TRIP=Подножка=2|HOOK=Задержка клюшкой=2|HOLD=Задержка соперника=2|INTERF=Атака игрока, не владеющего шайбой=2|ROUGH=Грубость=2|SLASH=Удар клюшкой=2|HIGH=Игра высоко поднятой клюшкой=2+2|BOARD=Толчок на борт=2|CHARGE=Неправильная атака=2|ELBOW=Удар локтем=2|TOO_MANY=Нарушение численного состава=2|DELAY=Задержка игры=2|UNSPORT=Неспортивное поведение=10|FIGHT=Драка=5+20",
|
||||||
|
"gameTimerActionId": "hockey_game_timer"
|
||||||
|
},
|
||||||
|
"style": {
|
||||||
|
"background": "#091321",
|
||||||
|
"color": "#eef4ff",
|
||||||
|
"accent": "#48dfbd",
|
||||||
|
"borderColor": "#263b55",
|
||||||
|
"borderWidth": 1,
|
||||||
|
"borderRadius": 20,
|
||||||
|
"padding": 0,
|
||||||
|
"fontSize": 14,
|
||||||
|
"fontWeight": 700,
|
||||||
|
"align": "center",
|
||||||
|
"opacity": 100,
|
||||||
|
"shadow": true
|
||||||
|
},
|
||||||
|
"locked": false,
|
||||||
|
"hidden": false,
|
||||||
|
"parent_id": null,
|
||||||
|
"action_id": "hockey_penalty_dashboard",
|
||||||
|
"interaction_mode": "event_only",
|
||||||
|
"initial_state": false,
|
||||||
|
"shortcuts": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "hockey-shootout-control",
|
||||||
|
"type": "hockey_shootout_control",
|
||||||
|
"title": "Буллиты",
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 1440,
|
||||||
|
"h": 760,
|
||||||
|
"tabs": [
|
||||||
|
"shootout"
|
||||||
|
],
|
||||||
|
"parent_id": null,
|
||||||
|
"hidden": false,
|
||||||
|
"locked": false,
|
||||||
|
"z_index": 0,
|
||||||
|
"action_id": "hockey_shootout_control",
|
||||||
|
"interaction_mode": "event_only",
|
||||||
|
"shortcuts": [],
|
||||||
|
"props": {
|
||||||
|
"gamePath": "hockey.selected_game",
|
||||||
|
"tournamentPath": "hockey.selected_tournament",
|
||||||
|
"homeColor": "#4d9cff",
|
||||||
|
"awayColor": "#ff5f79"
|
||||||
|
},
|
||||||
|
"style": {
|
||||||
|
"background": "#091321",
|
||||||
|
"color": "#eef4ff",
|
||||||
|
"accent": "#48dfbd",
|
||||||
|
"borderColor": "#263b55",
|
||||||
|
"borderWidth": 1,
|
||||||
|
"borderRadius": 20,
|
||||||
|
"padding": 0,
|
||||||
|
"fontSize": 14,
|
||||||
|
"fontWeight": 700,
|
||||||
|
"shadow": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "hockey-referees",
|
||||||
|
"type": "hockey_referees",
|
||||||
|
"title": "Судьи",
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 1440,
|
||||||
|
"h": 760,
|
||||||
|
"z": 2,
|
||||||
|
"tabs": [
|
||||||
|
"referees"
|
||||||
|
],
|
||||||
|
"props": {
|
||||||
|
"refereesPath": "hockey.referees",
|
||||||
|
"homeTeamPath": "hockey.home.name",
|
||||||
|
"awayTeamPath": "hockey.away.name"
|
||||||
|
},
|
||||||
|
"style": {
|
||||||
|
"background": "#091321",
|
||||||
|
"color": "#eef4ff",
|
||||||
|
"accent": "#48dfbd",
|
||||||
|
"borderColor": "#263b55",
|
||||||
|
"borderWidth": 1,
|
||||||
|
"borderRadius": 20,
|
||||||
|
"padding": 0,
|
||||||
|
"fontSize": 14,
|
||||||
|
"fontWeight": 700,
|
||||||
|
"align": "center",
|
||||||
|
"opacity": 100,
|
||||||
|
"shadow": true
|
||||||
|
},
|
||||||
|
"locked": false,
|
||||||
|
"hidden": false,
|
||||||
|
"parent_id": null,
|
||||||
|
"action_id": "hockey_referees",
|
||||||
|
"interaction_mode": "event_only",
|
||||||
|
"initial_state": false,
|
||||||
|
"shortcuts": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "hockey-schedule",
|
||||||
|
"type": "hockey_schedule",
|
||||||
|
"title": "Расписание",
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 1440,
|
||||||
|
"h": 760,
|
||||||
|
"z": 2,
|
||||||
|
"tabs": [
|
||||||
|
"schedule"
|
||||||
|
],
|
||||||
|
"props": {
|
||||||
|
"schedulePath": "hockey.schedule",
|
||||||
|
"tournamentPath": "hockey.selected_tournament",
|
||||||
|
"selectedGamePath": "hockey.selected_game.external_id",
|
||||||
|
"homeColor": "#4d9cff",
|
||||||
|
"awayColor": "#ff5f79"
|
||||||
|
},
|
||||||
|
"style": {
|
||||||
|
"background": "#091321",
|
||||||
|
"color": "#eef4ff",
|
||||||
|
"accent": "#48dfbd",
|
||||||
|
"borderColor": "#263b55",
|
||||||
|
"borderWidth": 1,
|
||||||
|
"borderRadius": 20,
|
||||||
|
"padding": 0,
|
||||||
|
"fontSize": 14,
|
||||||
|
"fontWeight": 700,
|
||||||
|
"align": "center",
|
||||||
|
"opacity": 100,
|
||||||
|
"shadow": true
|
||||||
|
},
|
||||||
|
"locked": false,
|
||||||
|
"hidden": false,
|
||||||
|
"parent_id": null,
|
||||||
|
"interaction_mode": "event_only",
|
||||||
|
"initial_state": true,
|
||||||
|
"shortcuts": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"triggers": []
|
||||||
|
}
|
||||||
1472
settings/ui_builder_draft.json
Normal file
1472
settings/ui_builder_draft.json
Normal file
File diff suppressed because it is too large
Load Diff
1472
settings/ui_builder_published.json
Normal file
1472
settings/ui_builder_published.json
Normal file
File diff suppressed because it is too large
Load Diff
307
settings/vmix_functions.json
Normal file
307
settings/vmix_functions.json
Normal file
@@ -0,0 +1,307 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"title": "Функции формул vMix JSON — хоккей",
|
||||||
|
"description": "Справочник функций для вычисляемых колонок хоккейных vMix JSON.",
|
||||||
|
"categories": [
|
||||||
|
{
|
||||||
|
"title": "Поля и сборка строк",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "get",
|
||||||
|
"example": "get('player')",
|
||||||
|
"description": "Взять поле по имени. Если поля нет — пустая строка."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "val",
|
||||||
|
"example": "val('total', '-')",
|
||||||
|
"description": "То же самое, что get()."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "concat",
|
||||||
|
"example": "concat(position, '. ', player)",
|
||||||
|
"description": "Склеить значения без разделителя."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "join",
|
||||||
|
"example": "join(' / ', player, club, total)",
|
||||||
|
"description": "Склеить только заполненные значения через разделитель."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "tpl",
|
||||||
|
"example": "tpl('#{position} {player} {total}')",
|
||||||
|
"description": "Шаблон с подстановкой полей в фигурных скобках."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "coalesce",
|
||||||
|
"example": "coalesce(player, name, '-')",
|
||||||
|
"description": "Первое непустое значение."
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Текст",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "split",
|
||||||
|
"example": "split(player, ' ', 0)",
|
||||||
|
"description": "Разбить строку и взять часть по индексу."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "part",
|
||||||
|
"example": "part(player, ' ', 1)",
|
||||||
|
"description": "Короткий вариант split(value, sep, index)."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "left",
|
||||||
|
"example": "left(player, 3)",
|
||||||
|
"description": "Первые N символов."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "right",
|
||||||
|
"example": "right(player, 3)",
|
||||||
|
"description": "Последние N символов."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "mid",
|
||||||
|
"example": "mid(player, 2, 4)",
|
||||||
|
"description": "Фрагмент строки."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "replace",
|
||||||
|
"example": "replace(player, ' ', ' ')",
|
||||||
|
"description": "Обычная замена текста."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "upper/lower/title/strip",
|
||||||
|
"example": "upper(country)",
|
||||||
|
"description": "Регистр и очистка пробелов."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "swap",
|
||||||
|
"example": "swap(player)",
|
||||||
|
"description": "Поменять порядок частей строки: Иван Петров → Петров Иван."
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Условия",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "case / iif",
|
||||||
|
"example": "case(to_par == 0, 'E', to_par)",
|
||||||
|
"description": "Если условие истинно — первое значение, иначе второе."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "empty / filled",
|
||||||
|
"example": "if_empty(total, '-', total)",
|
||||||
|
"description": "Проверка пустого/заполненного значения."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "if_empty",
|
||||||
|
"example": "if_empty(thru, '—', thru)",
|
||||||
|
"description": "Если пусто."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "if_filled",
|
||||||
|
"example": "if_filled(country, country, '')",
|
||||||
|
"description": "Если заполнено."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "if_contains",
|
||||||
|
"example": "if_contains(status, 'active', 'LIVE', '')",
|
||||||
|
"description": "Если строка содержит текст."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "if_not_contains",
|
||||||
|
"example": "if_not_contains(status, 'active', '', 'LIVE')",
|
||||||
|
"description": "Если строка не содержит текст."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "if_equals / if_eq",
|
||||||
|
"example": "if_eq(to_par, '0', 'E', to_par)",
|
||||||
|
"description": "Если значение равно ожидаемому."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "if_field_empty",
|
||||||
|
"example": "if_field_empty('today', '-', today)",
|
||||||
|
"description": "Проверить поле по имени."
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Поиск и Regex",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "contains",
|
||||||
|
"example": "contains(player, 'Иван')",
|
||||||
|
"description": "True/False: содержит текст."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "starts / ends",
|
||||||
|
"example": "starts(player, 'A')",
|
||||||
|
"description": "Начинается/заканчивается на текст."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "regex / match",
|
||||||
|
"example": "regex(player, '^A')",
|
||||||
|
"description": "Проверка регулярным выражением."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "if_regex",
|
||||||
|
"example": "if_regex(player, '^A', 'A', '')",
|
||||||
|
"description": "Условие по регулярному выражению."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "re_replace",
|
||||||
|
"example": "re_replace(title, '(\\d)(?=(\\d{3})+\\b)', '\\1.')",
|
||||||
|
"description": "Regex-замена."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "re_replace_first",
|
||||||
|
"example": "re_replace_first(text, '\\s+', ' ')",
|
||||||
|
"description": "Заменить только первое совпадение."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "re_remove",
|
||||||
|
"example": "re_remove(player, '\\s+')",
|
||||||
|
"description": "Удалить по regex."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "re_extract",
|
||||||
|
"example": "re_extract(player, '#(\\d+)', 1)",
|
||||||
|
"description": "Достать группу из текста."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "first_match",
|
||||||
|
"example": "first_match(title, {'СБ':'Барьеры', 'Бег':'Бег'}, '')",
|
||||||
|
"description": "Первое совпавшее правило."
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Числа, время, даты",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "number / num",
|
||||||
|
"example": "number(total, 0)",
|
||||||
|
"description": "Преобразовать в число."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "int/float/round/min/max/abs/sum",
|
||||||
|
"example": "round(number(total), 1)",
|
||||||
|
"description": "Базовая математика Python."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "format_thousands",
|
||||||
|
"example": "format_thousands(10000)",
|
||||||
|
"description": "10.000."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "format_distance",
|
||||||
|
"example": "format_distance('10000')",
|
||||||
|
"description": "Формат дистанций: 10.000."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "time_seconds",
|
||||||
|
"example": "time_seconds('1:02.34')",
|
||||||
|
"description": "Время в секунды."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "format_time",
|
||||||
|
"example": "format_time(62.34, 'auto_tt')",
|
||||||
|
"description": "Секунды обратно во время."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "time_diff",
|
||||||
|
"example": "time_diff(result, leader, 'auto_tt')",
|
||||||
|
"description": "Разница двух времен."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "today",
|
||||||
|
"example": "today('%d.%m.%Y')",
|
||||||
|
"description": "Сегодняшняя дата."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "age / age_at",
|
||||||
|
"example": "age_at(birthDate, today())",
|
||||||
|
"description": "Возраст по дате рождения."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "birth_year",
|
||||||
|
"example": "birth_year(birthDate)",
|
||||||
|
"description": "Год рождения."
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Склейка JSON",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "match",
|
||||||
|
"example": "player_id=id",
|
||||||
|
"description": "Сопоставление ключей: слева поле основного JSON, справа поле подключаемого источника."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "fields",
|
||||||
|
"example": "club=club\\ncountry=country",
|
||||||
|
"description": "Какие поля подтянуть: слева новое имя поля, справа поле источника."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "multiple",
|
||||||
|
"example": "first / last / all / count",
|
||||||
|
"description": "Что делать, если найдено несколько совпадений."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "source_type",
|
||||||
|
"example": "scores / tournament / round / vmix_json / url",
|
||||||
|
"description": "Тип подключаемого источника данных."
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Вертикальные вычисления по таблице",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "max",
|
||||||
|
"example": "max('total')",
|
||||||
|
"description": "Максимальное числовое значение колонки по всем строкам текущей таблицы. Для обычных чисел max(1, 2) тоже работает."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "min",
|
||||||
|
"example": "min('total')",
|
||||||
|
"description": "Минимальное числовое значение колонки по всем строкам текущей таблицы."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "avg / average / mean",
|
||||||
|
"example": "avg('total')",
|
||||||
|
"description": "Среднее числовое значение колонки по всем строкам текущей таблицы."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "values",
|
||||||
|
"example": "values('total')",
|
||||||
|
"description": "Список числовых значений колонки по всем строкам. Можно использовать в своих формулах."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "first_value / first",
|
||||||
|
"example": "first_value('total')",
|
||||||
|
"description": "Значение колонки из первой строки таблицы после сортировки/подготовки данных."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "diff_first / diff_from_first",
|
||||||
|
"example": "diff_first('total', 2)",
|
||||||
|
"description": "Разница между значением текущей строки и первой строки: current - first. Второй аргумент — округление."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "gap_first / gap_from_first",
|
||||||
|
"example": "gap_first('total', 2)",
|
||||||
|
"description": "То же, что diff_first(), но сразу форматирует со знаком +/-. Удобно для отставаний."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "row_index / row_number",
|
||||||
|
"example": "row_number()",
|
||||||
|
"description": "Номер текущей строки: row_index() с нуля, row_number() с единицы."
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
375
settings/vmix_json.json
Normal file
375
settings/vmix_json.json
Normal file
@@ -0,0 +1,375 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"configs": [
|
||||||
|
{
|
||||||
|
"key": "scoreboard",
|
||||||
|
"title": "Верхний счёт",
|
||||||
|
"description": "Счёт, период, время и численные составы.",
|
||||||
|
"endpoint": "/vmix/hockey/channel/{channel}/{language}/custom/scoreboard.json",
|
||||||
|
"source_type": "scoreboard",
|
||||||
|
"root_key": "rows",
|
||||||
|
"output_mode": "columns",
|
||||||
|
"default_limit": 1,
|
||||||
|
"enabled": true,
|
||||||
|
"columns": [
|
||||||
|
{
|
||||||
|
"key": "game_id",
|
||||||
|
"label": "ID матча",
|
||||||
|
"source": "game_id",
|
||||||
|
"default": "",
|
||||||
|
"enabled": true,
|
||||||
|
"mode": "field"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "home_score",
|
||||||
|
"label": "Счёт хозяев",
|
||||||
|
"source": "home_score",
|
||||||
|
"default": "",
|
||||||
|
"enabled": true,
|
||||||
|
"mode": "field"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "away_score",
|
||||||
|
"label": "Счёт гостей",
|
||||||
|
"source": "away_score",
|
||||||
|
"default": "",
|
||||||
|
"enabled": true,
|
||||||
|
"mode": "field"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "period",
|
||||||
|
"label": "Период",
|
||||||
|
"source": "period",
|
||||||
|
"default": "",
|
||||||
|
"enabled": true,
|
||||||
|
"mode": "field"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "time",
|
||||||
|
"label": "Время",
|
||||||
|
"source": "time",
|
||||||
|
"default": "",
|
||||||
|
"enabled": true,
|
||||||
|
"mode": "field"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "timer_running",
|
||||||
|
"label": "Таймер запущен",
|
||||||
|
"source": "timer_running",
|
||||||
|
"default": "",
|
||||||
|
"enabled": true,
|
||||||
|
"mode": "field"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "strength",
|
||||||
|
"label": "Состав",
|
||||||
|
"source": "strength",
|
||||||
|
"default": "",
|
||||||
|
"enabled": true,
|
||||||
|
"mode": "field"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "strength_state_key",
|
||||||
|
"label": "Ключ состава",
|
||||||
|
"source": "strength_state_key",
|
||||||
|
"default": "",
|
||||||
|
"enabled": true,
|
||||||
|
"mode": "field"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "strength_state_label",
|
||||||
|
"label": "Подпись состава",
|
||||||
|
"source": "strength_state_label",
|
||||||
|
"default": "",
|
||||||
|
"enabled": true,
|
||||||
|
"mode": "field"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "home_strength",
|
||||||
|
"label": "Игроков хозяев",
|
||||||
|
"source": "home_strength",
|
||||||
|
"default": "",
|
||||||
|
"enabled": true,
|
||||||
|
"mode": "field"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "away_strength",
|
||||||
|
"label": "Игроков гостей",
|
||||||
|
"source": "away_strength",
|
||||||
|
"default": "",
|
||||||
|
"enabled": true,
|
||||||
|
"mode": "field"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "home_powerplay_label",
|
||||||
|
"label": "Подпись хозяев",
|
||||||
|
"source": "home_powerplay_label",
|
||||||
|
"default": "",
|
||||||
|
"enabled": true,
|
||||||
|
"mode": "field"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "away_powerplay_label",
|
||||||
|
"label": "Подпись гостей",
|
||||||
|
"source": "away_powerplay_label",
|
||||||
|
"default": "",
|
||||||
|
"enabled": true,
|
||||||
|
"mode": "field"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "status",
|
||||||
|
"label": "Статус",
|
||||||
|
"source": "status",
|
||||||
|
"default": "",
|
||||||
|
"enabled": true,
|
||||||
|
"mode": "field"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"joins": [],
|
||||||
|
"web_display": {
|
||||||
|
"enabled": true,
|
||||||
|
"tab_title": "Верхний счёт",
|
||||||
|
"description": "Счёт, период, время и численные составы.",
|
||||||
|
"columns": [
|
||||||
|
"game_id",
|
||||||
|
"home_score",
|
||||||
|
"away_score",
|
||||||
|
"period",
|
||||||
|
"time",
|
||||||
|
"timer_running",
|
||||||
|
"strength",
|
||||||
|
"strength_state_key",
|
||||||
|
"strength_state_label",
|
||||||
|
"home_strength",
|
||||||
|
"away_strength",
|
||||||
|
"home_powerplay_label",
|
||||||
|
"away_powerplay_label",
|
||||||
|
"status"
|
||||||
|
],
|
||||||
|
"sort_key": "",
|
||||||
|
"sort_dir": "asc"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "info",
|
||||||
|
"title": "Информация о матче",
|
||||||
|
"description": "Команды, арена, дата, турнир и управление матчем.",
|
||||||
|
"endpoint": "/vmix/hockey/channel/{channel}/{language}/custom/info.json",
|
||||||
|
"source_type": "info",
|
||||||
|
"root_key": "rows",
|
||||||
|
"output_mode": "columns",
|
||||||
|
"default_limit": 1,
|
||||||
|
"enabled": true,
|
||||||
|
"columns": [
|
||||||
|
{
|
||||||
|
"key": "game_id",
|
||||||
|
"label": "ID матча",
|
||||||
|
"source": "game_id",
|
||||||
|
"default": "",
|
||||||
|
"enabled": true,
|
||||||
|
"mode": "field"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "home_team",
|
||||||
|
"label": "Хозяева",
|
||||||
|
"source": "home_team",
|
||||||
|
"default": "",
|
||||||
|
"enabled": true,
|
||||||
|
"mode": "field"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "away_team",
|
||||||
|
"label": "Гости",
|
||||||
|
"source": "away_team",
|
||||||
|
"default": "",
|
||||||
|
"enabled": true,
|
||||||
|
"mode": "field"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "arena",
|
||||||
|
"label": "Арена",
|
||||||
|
"source": "arena",
|
||||||
|
"default": "",
|
||||||
|
"enabled": true,
|
||||||
|
"mode": "field"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "date",
|
||||||
|
"label": "Дата",
|
||||||
|
"source": "date",
|
||||||
|
"default": "",
|
||||||
|
"enabled": true,
|
||||||
|
"mode": "field"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "start_time",
|
||||||
|
"label": "Время начала",
|
||||||
|
"source": "start_time",
|
||||||
|
"default": "",
|
||||||
|
"enabled": true,
|
||||||
|
"mode": "field"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "tournament_title",
|
||||||
|
"label": "Турнир",
|
||||||
|
"source": "tournament.title",
|
||||||
|
"default": "",
|
||||||
|
"enabled": true,
|
||||||
|
"mode": "field"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "period",
|
||||||
|
"label": "Период",
|
||||||
|
"source": "control.current_period",
|
||||||
|
"default": "",
|
||||||
|
"enabled": true,
|
||||||
|
"mode": "field"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"joins": [],
|
||||||
|
"web_display": {
|
||||||
|
"enabled": true,
|
||||||
|
"tab_title": "Информация о матче",
|
||||||
|
"description": "Команды, арена, дата, турнир и управление матчем.",
|
||||||
|
"columns": [
|
||||||
|
"game_id",
|
||||||
|
"home_team",
|
||||||
|
"away_team",
|
||||||
|
"arena",
|
||||||
|
"date",
|
||||||
|
"start_time",
|
||||||
|
"tournament_title",
|
||||||
|
"period"
|
||||||
|
],
|
||||||
|
"sort_key": "",
|
||||||
|
"sort_dir": "asc"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "home_lineup",
|
||||||
|
"title": "Состав хозяев",
|
||||||
|
"description": "Все игроки левой команды.",
|
||||||
|
"endpoint": "/vmix/hockey/channel/{channel}/{language}/custom/home_lineup.json",
|
||||||
|
"source_type": "home_lineup",
|
||||||
|
"root_key": "rows",
|
||||||
|
"output_mode": "all",
|
||||||
|
"default_limit": 0,
|
||||||
|
"enabled": true,
|
||||||
|
"columns": [],
|
||||||
|
"joins": [],
|
||||||
|
"web_display": {
|
||||||
|
"enabled": true,
|
||||||
|
"tab_title": "Состав хозяев",
|
||||||
|
"description": "Все игроки левой команды.",
|
||||||
|
"columns": [],
|
||||||
|
"sort_key": "",
|
||||||
|
"sort_dir": "asc"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "away_lineup",
|
||||||
|
"title": "Состав гостей",
|
||||||
|
"description": "Все игроки правой команды.",
|
||||||
|
"endpoint": "/vmix/hockey/channel/{channel}/{language}/custom/away_lineup.json",
|
||||||
|
"source_type": "away_lineup",
|
||||||
|
"root_key": "rows",
|
||||||
|
"output_mode": "all",
|
||||||
|
"default_limit": 0,
|
||||||
|
"enabled": true,
|
||||||
|
"columns": [],
|
||||||
|
"joins": [],
|
||||||
|
"web_display": {
|
||||||
|
"enabled": true,
|
||||||
|
"tab_title": "Состав гостей",
|
||||||
|
"description": "Все игроки правой команды.",
|
||||||
|
"columns": [],
|
||||||
|
"sort_key": "",
|
||||||
|
"sort_dir": "asc"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "penalties",
|
||||||
|
"title": "Активные удаления",
|
||||||
|
"description": "Текущие удаления обеих команд.",
|
||||||
|
"endpoint": "/vmix/hockey/channel/{channel}/{language}/custom/penalties.json",
|
||||||
|
"source_type": "penalties",
|
||||||
|
"root_key": "rows",
|
||||||
|
"output_mode": "all",
|
||||||
|
"default_limit": 0,
|
||||||
|
"enabled": true,
|
||||||
|
"columns": [],
|
||||||
|
"joins": [],
|
||||||
|
"web_display": {
|
||||||
|
"enabled": true,
|
||||||
|
"tab_title": "Активные удаления",
|
||||||
|
"description": "Текущие удаления обеих команд.",
|
||||||
|
"columns": [],
|
||||||
|
"sort_key": "",
|
||||||
|
"sort_dir": "asc"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "officials",
|
||||||
|
"title": "Судьи",
|
||||||
|
"description": "Судьи выбранного матча.",
|
||||||
|
"endpoint": "/vmix/hockey/channel/{channel}/{language}/custom/officials.json",
|
||||||
|
"source_type": "officials",
|
||||||
|
"root_key": "rows",
|
||||||
|
"output_mode": "all",
|
||||||
|
"default_limit": 0,
|
||||||
|
"enabled": true,
|
||||||
|
"columns": [],
|
||||||
|
"joins": [],
|
||||||
|
"web_display": {
|
||||||
|
"enabled": true,
|
||||||
|
"tab_title": "Судьи",
|
||||||
|
"description": "Судьи выбранного матча.",
|
||||||
|
"columns": [],
|
||||||
|
"sort_key": "",
|
||||||
|
"sort_dir": "asc"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "events",
|
||||||
|
"title": "События матча",
|
||||||
|
"description": "Play-by-play и события выбранного матча.",
|
||||||
|
"endpoint": "/vmix/hockey/channel/{channel}/{language}/custom/events.json",
|
||||||
|
"source_type": "events",
|
||||||
|
"root_key": "rows",
|
||||||
|
"output_mode": "all",
|
||||||
|
"default_limit": 0,
|
||||||
|
"enabled": true,
|
||||||
|
"columns": [],
|
||||||
|
"joins": [],
|
||||||
|
"web_display": {
|
||||||
|
"enabled": true,
|
||||||
|
"tab_title": "События матча",
|
||||||
|
"description": "Play-by-play и события выбранного матча.",
|
||||||
|
"columns": [],
|
||||||
|
"sort_key": "",
|
||||||
|
"sort_dir": "asc"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "full_match",
|
||||||
|
"title": "Полный матч",
|
||||||
|
"description": "Сессия, турнир, матч и состояние управления одним объектом.",
|
||||||
|
"endpoint": "/vmix/hockey/channel/{channel}/{language}/custom/full_match.json",
|
||||||
|
"source_type": "full_match",
|
||||||
|
"root_key": "rows",
|
||||||
|
"output_mode": "all",
|
||||||
|
"default_limit": 1,
|
||||||
|
"enabled": true,
|
||||||
|
"columns": [],
|
||||||
|
"joins": [],
|
||||||
|
"web_display": {
|
||||||
|
"enabled": true,
|
||||||
|
"tab_title": "Полный матч",
|
||||||
|
"description": "Сессия, турнир, матч и состояние управления одним объектом.",
|
||||||
|
"columns": [],
|
||||||
|
"sort_key": "",
|
||||||
|
"sort_dir": "asc"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
5
settings/vmix_settings.json
Normal file
5
settings/vmix_settings.json
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"active_vmix_json": "scoreboard",
|
||||||
|
"selection": {}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user