Ring Race Club ry
Kerhon tulevat tapahtumat
-
Ei tapahtumia
-
23.7.2026, 12:00
Ajoharjoittelutorstai 23.7.2026
Lue lisääMoottoripyörien ratapäivät/ajohajroittelutapahtuma. 4 nopeusryhmää.
-
12.9.2026, 12:00
Finnish Racing Championship 12.-13.9.2025
Autojen Circuit Racing, Rata-ajon -SM osakilpailu KymiRingillä.
Tapahtuma
Nimi
Kuvaus
<p>Autojen Circuit Racing, Rata-ajon -SM osakilpailu KymiRingillä.<br>Ring Race Club järjestää FRC kilpailun ensimmäistä kertaa KymiRingillä</p>
Normaali MuotoilutNormaaliOtsikko 1Otsikko 2Otsikko 3Otsikko 4KoodiTasaaTasaa vasemmalleKeskitäTasaa oikealleTasaaLihavointiKursivointiAlleviivausJärjestetty listaOletusarvoAlempi alfaAlempi kreikkaAlempi roomalainenYlempi alfaYlempi roomalainenJärjestämätön listaOletusarvoYmpyräLevyNeliö-Insert SnippetLisää taulukkoLisää linkkiLisää kuvaLisää vaakasuora viivaKoodi näkymäAutojen Circuit Racing, Rata-ajon -SM osakilpailu KymiRingillä.Ring Race Club järjestää FRC kilpailun ensimmäistä kertaa KymiRingillä
<div
class="modal fade component-backend-modal"
role="dialog"
aria-modal="true"
v-if="visible"
v-bind:aria-labelledby="ariaLabeledBy"
:style="containerStyle"
:class="containerCssClass"
@click="onOverlayClick"
>
<div
ref="document"
role="document"
class="modal-dialog"
:class="cssClass"
>
<div
ref="content"
class="modal-content"
:class="contentCssClassName"
:style="modalStyle"
@mousedown="onMouseDown"
@transitionend="onTransitionEnd"
>
<slot name="content"></slot>
<template v-if="resizable">
<div v-if="resizable === true || resizable === 'vertical'" class="resize-handle" data-side="bt"></div>
<div v-if="resizable === true || resizable === 'vertical'" class="resize-handle" data-side="tp"></div>
<div v-if="resizable === true || resizable === 'horizontal'" class="resize-handle" data-side="lf"></div>
<div v-if="resizable === true || resizable === 'horizontal'" class="resize-handle" data-side="rt"></div>
<div v-if="resizable === true" class="resize-handle" data-side="bt-rt"></div>
<div v-if="resizable === true" class="resize-handle" data-side="bt-lf"></div>
<div v-if="resizable === true" class="resize-handle" data-side="tp-rt"></div>
<div v-if="resizable === true" class="resize-handle" data-side="tp-lf"></div>
</template>
</div>
</div>
</div>
<div
data-default-button-text="OK"
>
<backend-component-modal
ref="modal"
:aria-labeled-by="modalTitleId"
:unique-key="uniqueKey"
:size="size"
:storePosition="false"
@hidden="onHidden"
>
<template v-slot:content>
<div class="modal-header">
<h4 class="modal-title" v-bind:id="modalTitleId" v-text="title"></h4>
<button
@click.prevent="$refs.modal.hide()"
type="button"
class="btn-close"
aria-label="Sulje"
tabindex="0"
></button>
</div>
<div class="modal-body">
<p v-text="text"></p>
</div>
<div class="modal-footer">
<button
type="button"
class="btn btn-primary btn-default-action"
data-default-focus
@click="$refs.modal.hide()"
v-text="primaryButtonText"
></button>
</div>
</template>
</backend-component-modal>
</div>
<div
data-default-button-text="OK"
>
<backend-component-modal
ref="modal"
:aria-labeled-by="modalTitleId"
:unique-key="uniqueKey"
:size="size"
:storePosition="false"
@hidden="onHidden"
>
<template v-slot:content>
<div class="modal-header">
<h4 class="modal-title" v-bind:id="modalTitleId" v-text="title"></h4>
<button
@click.prevent="$refs.modal.hide()"
type="button"
class="btn-close"
aria-label="Sulje"
tabindex="0"
></button>
</div>
<div class="modal-body">
<p v-text="text"></p>
</div>
<div class="modal-footer">
<button
type="button"
class="btn btn-primary btn-default-action"
:class="{'btn-primary': !isDanger, 'btn-danger': isDanger}"
v-bind:data-default-focus="!isDanger"
@click="onButtonClick"
v-text="primaryButtonText"
></button>
<span class="button-separator">tai</span>
<button
class="btn btn-link text-muted"
@click.prevent="$refs.modal.hide()"
v-bind:data-default-focus="isDanger"
>Peruuta</button>
</div>
</template>
</backend-component-modal>
</div>
<div>
<backend-component-modal
ref="modal"
:aria-labeled-by="modalTitleId"
:unique-key="uniqueKey"
:size="size"
:storePosition="false"
@hidden="onHidden"
>
<template v-slot:content>
<div class="modal-header">
<h4 class="modal-title" v-bind:id="modalTitleId" v-text="title"></h4>
<button
@click.prevent="$refs.modal.hide()"
type="button"
class="btn-close"
aria-label="Sulje"
tabindex="0"
></button>
</div>
<div v-html="text" @click="onClick"></div>
</template>
</backend-component-modal>
</div>
<div
class="component-backend-richeditor-document-connector flex-layout-column layout-absolute"
:class="cssClass"
data-configuration="{"lang":{"command_upload_from_computer":"Siirr\u00e4 tietokoneelta","browse":"Selaa mediakirjastoa","by_url":"URL-osoitteen mukaan","url_required":"URL-osoite on pakollinen","url_validation":"URL-osoitteen on alettava http:\/\/ tai https:\/\/","add_image_title":"Lis\u00e4\u00e4 kuva","add_video_title":"Lis\u00e4\u00e4 video","add_audio_title":"Lis\u00e4\u00e4 audio","add_file_title":"Lis\u00e4\u00e4 tiedosto","embedding_code":"Liitet\u00e4\u00e4n koodia","embedding_code_required":"Upotuskoodi on pakollinen","invalid_embedding_code_title":"Virheellinen koodi","invalid_embedding_code_message":"Liit\u00e4 kelvollinen HTML-upotuskoodi"},"vendorPath":"https:\/\/www.ringraceclub.fi\/modules\/backend\/vuecomponents\/richeditordocumentconnector\/assets\/vendor"}"
>
<div v-if="allowResizing && !codeEditingMode" class="top-ruler flex-layout-item fix">
<div class="width-indicator" :style="rulerStyle">
<span v-for="tick in majorTicks" :style="tick.style" class="width-tick tick-major"></span>
<span v-for="tick in minorTicks" :style="tick.style" class="width-tick tick-minor"></span>
<div class="width-drag-handle" @mousedown.stop="onResizingHandleMouseDown" ref="handle"></div>
</div>
</div>
<div class="flex-layout-item stretch richeditor-container">
<slot></slot>
</div>
<div class="flex-layout-item stretch relative codeeditor-container">
<backend-component-monacoeditor
v-if="codeEditingMode"
ref="codeEditor"
container-css-class="fill-container"
:model-definitions="codeEditorModelDefinitions"
>
</backend-component-monacoeditor>
</div>
</div>
<backend-component-document
container-css-class="fill-container"
:built-in-mode="true"
:full-screen="fullScreen"
ref="document"
>
<template v-slot:toolbar v-if="!hasExternalToolbar">
<backend-component-document-toolbar
:elements="toolbarElements"
:disabled="readOnly"
@command="onToolbarCommand"
ref="toolbar"
></backend-component-document-toolbar>
</template>
<template v-slot:content>
<div class="flex-layout-column fill-container" ref="contentContainer">
<div class="flex-layout-item stretch editor-panel relative">
<backend-component-richeditor-document-connector
:allow-resizing="showMargins"
:toolbar-container="toolbarExtensionPointProxy"
:external-toolbar-app-state="externalToolbarAppState"
:use-media-manager="useMediaManager"
:built-in-mode="true"
unique-key="html-editor-form-widget"
container-css-class="fill-container"
>
<backend-component-richeditor
v-model="value"
:read-only="options.readOnly"
:use-line-breaks="options.useLineBreaks"
:full-page="fullPage"
:editor-options="editorOptions"
:toolbar-buttons="toolbarButtons"
ref="richeditor"
@blur="onBlur"
@focus="onFocus"
>
</backend-component-richeditor>
</backend-component-richeditor-document-connector>
</div>
</div>
</template>
</backend-component-document>
<div
class="component-backend-document flex-layout-column"
:class="cssClass"
>
<transition name="document-fade-in">
<template v-if="!loading && !errorLoadingDocument">
<transition name="document-header-fade">
<div class="document-header-container flex-layout-item fix" v-show="!headerCollapsed">
<slot name="header"></slot>
</div>
</transition>
</template>
</transition>
<transition name="document-fade-in">
<div v-if="!loading && !errorLoadingDocument" class="document-toolbar-container flex-layout-item fix">
<slot name="toolbar"></slot>
</div>
</transition>
<div v-if="!loading && !errorLoadingDocument" class="flex-layout-item fix">
<slot name="drawer"></slot>
</div>
<transition name="document-fade-in">
<div v-if="!loading && !errorLoadingDocument" class="document-content-container flex-layout-item stretch relative">
<slot name="content"></slot>
<transition name="processing-fade-in">
<backend-component-loading-indicator
v-if="processing"
indicator-style="stripe"
css-class="document-progress-indicator"
></backend-component-loading-indicator>
</transition>
</div>
</transition>
<div v-if="loading" class="flex-layout-item justify-center">
<backend-component-loading-indicator
size="small"
></backend-component-loading-indicator>
</div>
<transition name="processing-fade-in">
<div v-if="errorLoadingDocument" class="flex-layout-item justify-center">
<div class="document-loading-error backend-icon-background-pseudo">
<h3 v-text="errorLoadingDocumentHeader"></h3>
<p v-text="errorLoadingDocument"></p>
</div>
</div>
</transition>
</div>
<div class="flex-layout-row document-toolbar-scroll-container" ref="toolbarContainer">
<div class="document-toolbar-scrollable flex-layout-item stretch" ref="scrollable">
<template v-for="element in scrollableElements" v-if="!element.hidden">
<div
class="document-toolbar-element"
:class="['element-type-'+element.type, {'button-group': !!element.buttonGroup, 'button-icon-only': element.type == 'button' && !element.label}]">
<backend-component-document-toolbar-button
v-if="element.type == 'button' || element.type == 'dropdown'"
:settings=element
:toolbar-disabled="disabled"
@dropdowncontentshown="onDropdownContentShown"
@dropdowncontenthidden="onDropdownContentHidden"
@command="onElementCommand"
></backend-component-document-toolbar-button>
</div> </template>
</div>
<div class="flex-layout-item fix fixed-right">
<template v-for="element in fixedRightElements" v-if="!element.hidden">
<div
class="document-toolbar-element"
:class="['element-type-'+element.type, {'button-group': !!element.buttonGroup, 'button-icon-only': element.type == 'button' && !element.label}]">
<backend-component-document-toolbar-button
v-if="element.type == 'button' || element.type == 'dropdown'"
:settings=element
:toolbar-disabled="disabled"
@dropdowncontentshown="onDropdownContentShown"
@dropdowncontenthidden="onDropdownContentHidden"
@command="onElementCommand"
></backend-component-document-toolbar-button>
</div> </template>
</div>
</div>
<div v-oc-hotkey:[settings.hotkey]="onHotkey" v-if="!settings.hidden">
<a
role="button"
v-if="settings.href"
v-bind:href="settings.href"
v-bind:target="settings.target ? settings.target : '_self'"
v-bind:disabled="settings.disabled || toolbarDisabled"
v-bind:tabindex="settings.disabled || toolbarDisabled ? -1 : 0"
v-bind:aria-controls="ariaControlsId"
v-bind:aria-haspopup="settings.type == 'dropdown'"
v-bind:id="buttonId"
v-bind:data-cmd="command"
v-bind:data-tooltip-text="tooltip"
v-bind:data-tooltip-hotkey="tooltipHotkey"
class="backend-toolbar-button"
:class="cssClass"
@click="onClick"
ref="button"
>
<i v-if="icon" :class="icon"></i>
<span v-if="label" v-text="label"></span>
</a>
<button
type="button"
v-else
v-bind:disabled="settings.disabled || toolbarDisabled"
v-bind:tabindex="settings.disabled || toolbarDisabled ? -1 : 0"
v-bind:aria-controls="ariaControlsId"
v-bind:aria-haspopup="settings.type == 'dropdown'"
v-bind:id="buttonId"
v-bind:data-cmd="command"
v-bind:data-tooltip-text="tooltip"
v-bind:data-tooltip-hotkey="tooltipHotkey"
class="backend-toolbar-button"
:class="cssClass"
@click="onClick"
ref="button"
>
<i v-if="icon" :class="icon"></i>
<span class="button-label" v-if="label" v-text="label" :style="titleStyle"></span>
</button
><button
type="button"
v-if="settings.type != 'dropdown' && settings.menuitems"
class="backend-toolbar-button menu-trigger"
:class="menuTriggerCssClass"
aria-haspopup="true"
v-bind:disabled="settings.disabled || toolbarDisabled"
v-bind:tabindex="settings.disabled || toolbarDisabled ? -1 : 0"
v-bind:id="menuButtonId"
v-bind:aria-controls="menuId"
@click="onClick($event, false, true)"
ref="menuButton"
>
<span v-if="settings.showBadge" class="badge"></span>
</button>
<backend-component-dropdownmenu
v-if="settings.menuitems"
:items=settings.menuitems
:menu-id="menuId"
:labeled-by-id="buttonId"
ref="menu"
@closedwithesc="onMenuClosedWithEsc"
@command="onMenuItemCommand"
@shown="onMenuShown"
@hidden="onMenuHidden"
@aligntotrigger="onAlignToTrigger"
></backend-component-dropdownmenu>
</div>
<div class="document-header" :class="{'has-document-icon': documentIcon, 'has-close-icon': showCloseIcon}">
<span
v-if="documentIcon"
class="document-icon"
v-bind:style="documentIconStyle"
>
<i :class="documentIcon.cssClass"></i>
</span>
<input type="text" ref="titleInput" class="header-title" v-model="data[titleProperty]" v-bind:disabled="disabled || disableTitleEditor" @input="onTitleInput"></input>
<div class="flex-layout-row" v-if="subtitleProperty" v-show="!hideSubtitleEditor">
<div class="flex-layout-item fix subtitle-label center" v-text="subtitleLabel + ':'"></div>
<input
type="text"
class="header-subtitle flex-layout-item stretch"
v-model="data[subtitleProperty]"
v-bind:disabled="disabled"
@input="onSubtitleInput"
></input>
</div>
<button
v-if="showCloseIcon"
class="close close-icon backend-icon-background-pseudo"
@click="$emit('documentcloseclick')"
>
<span aria-hidden="true">×</span>
</button>
</div>
<div>
<transition name="backend-dropdown-overlay-touch-screen">
<div v-if="visible" class="backend-dropdownmenu-overlay" @click.prevent="onOverlayClick" @contextmenu.prevent="onOverlayContextMenu"></div>
</transition>
<backend-component-dropdownmenu-sheet
ref="sheet"
:items="items"
:labeled-by-id="labeledById"
:menu-id="menuId"
:preferable-position="preferablePosition"
@aligntotrigger="$emit('aligntotrigger', $event)"
@command="$emit('command', $event)"
@hidden="onSheetHidden"
@closemenu="hideMenu"
></backend-component-dropdownmenu-sheet>
</div>
<div class="dropdown-menu backend-dropdownmenu" data-menu-position-container>
<div class="dropdown-container">
<transition name="backend-dropdown-menu-touch-screen" v-on:after-leave="onAfterLeave">
<ul
role="menu"
:class="menuClassName"
ref="menu"
v-if="visible"
v-bind:id="menuId"
v-bind:aria-labelledby="labeledById"
>
<li class="submenu-header clearfix" v-if="isSubmenu">
<button
class="go-back-link backend-icon-background-pseudo"
@click.stop.prevent="onGoBackClick"
>Takaisin</button>
<button
class="close-link backend-icon-background-pseudo"
@click.stop.prevent="onCloseClick"
>Sulje valittko</button>
</li>
<backend-component-dropdownmenu-menuitem
v-for="(item, index) in items"
:type="item.type"
:disabled="item.disabled"
:href="item.href"
:target="item.target"
:checked="item.checked"
:items="item.items"
:icon="item.icon"
:label="item.label"
:command="item.command"
:itemStyle="item.style"
:key="index"
:is-first="index == 0"
@command="onCommand($event)"
@hide="onHide"
@itemmouseenter="onItemMouseEnter"
@submenushown="onItemSubmenuShown"
@submenuhidden="onItemSubmenuHidden"
@closemenu="$emit('closemenu', $event)"
></backend-component-dropdownmenu-menuitem>
</ul>
</transition>
</div>
</div>
<li
class="item"
:class="{
separator: type == 'separator',
first: isFirst,
'submenu-expanded': isSubmenuExpanded
}"
v-bind:role="type == 'separator' ? 'separator' : 'presentation'"
v-bind:disabled="disabled"
>
<button v-if="!href && type != 'separator'"
ref="itemElement"
v-bind:tabindex="disabled ? -1 : 0"
v-bind:disabled="disabled"
v-bind:aria-disabled="disabled"
v-bind:role="itemRole"
v-bind:aria-checked="itemIsChecked ? 'true' : 'false'"
v-bind:id="menuItemId"
v-bind:aria-haspopup="hasSubmenu"
v-bind:aria-expanded="isSubmenuExpanded"
:class="{'has-submenu': hasSubmenu}"
:style="itemStyle"
@click="onClick($event)"
@mouseenter="onMouseEnter"
data-menuitem
>
<i :class="icon" v-if="icon"></i>
<i
class="backend-icon-background-pseudo"
v-if="type == 'checkbox' || type == 'radiobutton'"
></i>
<i
class="backend-icon-background-pseudo submenu-indicator"
v-if="hasSubmenu"
></i>
<span v-text="label"></span>
</button>
<a
ref="itemElement"
v-if="href && type != 'separator'"
v-bind:href="href"
v-bind:target="target ? target : '_self'"
v-bind:tabindex="disabled ? -1 : 0"
v-bind:disabled="disabled"
v-bind:aria-disabled="disabled"
v-bind:aria-checked="itemIsChecked ? 'true' : 'false'"
v-bind:role="itemRole"
:style="itemStyle"
@click="onClick($event)"
@mouseenter="onMouseEnter"
data-menuitem
>
<i :class="icon" v-if="icon"></i>
<i
class="backend-icon-background-pseudo"
v-if="type == 'checkbox' || type == 'radiobutton'"
></i>
<span v-text="label"></span>
</a>
<backend-component-dropdownmenu-sheet
v-if="hasSubmenu"
ref="submenu"
:items="items"
:labeled-by-id="menuItemId"
:menu-id="submenuId"
:is-submenu="true"
@command="$emit('command', $event)"
@hidden="onSubmenuHidden"
@closemenu="$emit('closemenu', $event)"
></backend-component-dropdownmenu-sheet>
</li>
<div class="component-backend-loading-indicator" :class="className">
<div class="spinner" v-if="indicatorStyle == 'circles'">
<div class="bounce1"></div>
<div class="bounce2"></div>
<div class="bounce3"></div>
</div>
<div v-if="indicatorStyle == 'stripe'">
<div class="stripe-indicator">
<div></div>
</div>
</div>
<div v-if="indicatorStyle == 'bar'" class="bar-indicator">
<div class="stripe-indicator">
<div :style="barIndicatorStyle" :class="{'progress-done': this.progress == 100}"></div>
</div>
</div>
</div>
<div
class="component-backend-richeditor flex-layout-column"
:class="cssClass"
data-configuration="{"editorLang":"fi","useMediaManager":true,"iframeStylesFile":"https:\/\/www.ringraceclub.fi\/modules\/backend\/vuecomponents\/richeditor\/assets\/css\/iframestyles.css","globalToolbarButtons":null,"allowEmptyTags":null,"allowTags":null,"allowAttrs":null,"noWrapTags":null,"removeTags":null,"lineBreakerTags":null,"imageStyles":null,"linkStyles":null,"paragraphFormat":null,"paragraphStyles":null,"inlineStyles":null,"tableStyles":null,"tableCellStyles":null}"
>
<div class="flex-layout-item field-richeditor stretch relative" data-richeditor-vue>
<textarea ref="textarea" v-bind:id="editorId" class="editor-element"></textarea>
</div>
</div>
<div
class="component-backend-uploader"
v-show="!hidden"
:class="{'uploader-collapsed': collapsed}"
data-lang-uploading="Siirretään tiedostoja"
data-lang-complete="Siirto valmis"
>
<div class="uploader-header">
<h3 v-text="titleText"></h3>
<backend-component-loading-indicator
indicator-style="bar"
:progress="totalProgress"
></backend-component-loading-indicator>
<button
@click.prevent="onHeaderButtonClick"
type="button"
class="close backend-icon-background-pseudo"
:class="{'collapse': !collapsed && hasFilesInProgress, 'expand': collapsed && hasFilesInProgress}"
tabindex="0"
><span aria-hidden="true">×</span>
</button>
</div>
<div class="uploader-body-container">
<div class="uploader-body">
<backend-component-scrollable-panel
:relative-layout="true"
:relative-layout-max-height="200"
>
<div>
<ul>
<backend-component-uploader-item
v-for="(file, index) in files"
:key="file.key"
:fileName="file.name"
:status="file.status"
:progress="file.progress"
:errorMessage="file.errorMessage"
@removeclick="onRemoveClick(index)"
></backend-component-uploader-item>
</ul>
</div>
</backend-component-scrollable-panel>
</div>
</div>
</div>
<li :class="cssClass">
<span class="item-name" v-text="fileName"></span>
<span class="item-error" v-if="errorMessage" v-text="errorMessage"></span>
<i
class="backend-icon-background"
v-if="status == 'completed'"
></i>
<template
v-if="status == 'uploading'"
>
<backend-component-loading-indicator
indicator-style="bar"
:progress="progress"
></backend-component-loading-indicator>
<button
@click.prevent="$emit('removeclick')"
type="button"
class="close backend-icon-background-pseudo"
tabindex="0"
><span aria-hidden="true">×</span>
</button>
</template>
</li>
<div
class="component-backend-scrollablepanel"
:class="{'scrollablepanel-relative': relativeLayout}"
>
<div class="scrollable-panel-container" ref="container">
<div
class="scrollable"
ref="scrollable"
v-on:scroll.passive="onScroll"
:style="containerStyle"
>
<slot></slot>
</div>
</div>
</div>
<backend-component-inspector-panel
ref="panel"
:controls="dataSchema"
:obj="liveObject"
:parent-obj="parentObject"
:inspector-unique-id="uniqueId"
:layout-update-data="layoutUpdateData"
:inspector-preferences="inspectorPreferences"
>
</backend-component-inspector-panel>
<div
class="component-backend-inspector-panel"
data-validation-alert-title="Virhe"
>
<backend-component-inspector-grouphost
:controls="untabbedControls"
:obj="obj"
:parent-obj="parentObj"
:splitter-data="splitterData"
:inspector-unique-id="inspectorUniqueId"
:depth="0"
:panel-update-data="panelUpdateData"
:layout-update-data="layoutUpdateData"
:inspector-preferences="inspectorPreferences"
></backend-component-inspector-grouphost>
<backend-component-tabs
v-show="tabs.length > 0"
ref="tabs"
:tabs="tabs"
:closeable="false"
:use-slots="true"
tabs-style="inspector"
@tabselected="onTabSelected"
>
<template v-for="tabInfo in tabs" v-slot:[tabInfo.key]>
<backend-component-inspector-grouphost
:controls="tabbedControls[tabInfo.key]"
:obj="obj"
:parent-obj="parentObj"
:splitter-data="splitterData"
:inspector-unique-id="inspectorUniqueId"
:depth="0"
:panel-update-data="panelUpdateData"
:layout-update-data="layoutUpdateData"
:inspector-preferences="inspectorPreferences"
></backend-component-inspector-grouphost>
</template>
</backend-component-tabs>
</div>
<div class="component-backend-inspector-group">
<div
class="group-name inspector-padding-control-left inspector-padding-control-right"
:class="{expanded: expanded, collapsed: !expanded, loading: loading, 'has-errors': hasErrors, 'hide-bottom-border-collapsed': hideBottomBorder}"
@click.stop="onToggleGroup"
>
<div :style="nameStyle">
<span
v-text="nameAndValue"
class="backend-icon-background-pseudo"
></span>
<backend-component-loading-indicator v-if="loading"
size="tiny"
></backend-component-loading-indicator>
</div>
</div>
<transition name="group-fade-in">
<backend-component-inspector-controlhost
v-show="expanded"
:controls="controls"
:obj="obj"
:parent-obj="parentObj"
:splitter-data="splitterData"
:depth="depth + 1"
:panel-update-data="panelUpdateData"
:inspector-preferences="inspectorPreferences"
:inspector-unique-id="inspectorUniqueId"
@inspectorcommand="$emit('inspectorcommand', $event)"
>
</backend-component-inspector-controlhost>
</transition>
</div>
<div class="component-backend-inspector-grouphost">
<backend-component-inspector-controlhost
:controls="groupedControls.ungrouped"
:obj="obj"
:parent-obj="parentObj"
:splitter-data="splitterData"
:depth="depth"
:panel-update-data="panelUpdateData"
:layout-update-data="layoutUpdateData"
:inspector-unique-id="inspectorUniqueId"
:inspector-preferences="inspectorPreferences"
>
</backend-component-inspector-controlhost>
<backend-component-inspector-group
v-for="(controls, groupName) in groupedControls"
v-if="groupName != 'ungrouped'"
:key="groupName"
:group-name="groupName"
:obj="obj"
:parent-obj="parentObj"
:controls="controls"
:splitter-data="splitterData"
:depth="depth"
:panel-update-data="panelUpdateData"
:layout-update-data="layoutUpdateData"
:inspector-unique-id="inspectorUniqueId"
:inspector-preferences="inspectorPreferences"
>
</backend-component-inspector-group>
</div>
<table class="component-backend-inspector-controlhost" @mousedown.stop="onHandleMouseDown">
<backend-component-inspector-controlhost-row
v-for="control in controls"
:obj="obj"
:parent-obj="parentObj"
:key="control.property"
:control-host-unique-id="uniqueId"
:control="control"
:splitter-data="splitterData"
:depth="depth"
:panel-update-data="panelUpdateData"
:layout-update-data="layoutUpdateData"
:inspector-preferences="inspectorPreferences"
:inspector-unique-id="inspectorUniqueId"
:is-full-width="isFullWidthControl(control)"
@inspectorcommand="$emit('inspectorcommand', $event)"
>
</backend-component-inspector-controlhost-row>
</table>
<tr class="inspector-control-row" :class="{'has-errors': hasErrors, 'hide-bottom-border': bottomBorderHidden}" v-show="rowVisible">
<th v-if="!isFullWidth && !controlLabelHidden" :style="titlePanelStyle">
<div class="inspector-label-container" :class="{'has-description': control.description}">
<label
class="inspector-padding-control-left"
v-text="control.title"
v-bind:for="controlEditorId"
:style="labelStyle"
@click.stop="onLabelClick"
></label>
<span
v-if="control.description"
class="property-description backend-icon-background-pseudo"
v-bind:data-tooltip-text="control.description"
></span>
</div>
</th>
<td v-bind:colspan="controlColspan">
<div class="full-width-control-label" v-if="isFullWidth && (control.title || control.description) && ! controlLabelHidden">
<label
class="inspector-padding-control-left"
v-text="control.title"
v-bind:for="controlEditorId"
:style="labelStyle"
@click.stop="onLabelClick"
></label>
<div
v-if="control.description"
class="inspector-padding-control-left full-width-property-description"
v-text="control.description"
:style="labelStyle"
></div>
</div>
<div :class="{'inspector-control-container': !isFullWidth, 'no-property-title': !control.title && !control.description}">
<div v-if="!isFullWidth" class="inspector-drag-handle"></div>
<backend-component-inspector-control-text
v-if="control.type == 'string' || control.type == 'text'"
:obj="obj"
:parent-obj="parentObj"
:control="control"
:control-id="controlEditorId"
:splitter-data="splitterData"
:panel-update-data="panelUpdateData"
:layout-update-data="layoutUpdateData"
:inspector-preferences="inspectorPreferences"
ref="editor"
@focus="onEditorFocus"
@blur="onEditorBlur"
@invalid="onEditorInvalid"
@valid="onEditorValid"
></backend-component-inspector-control-text>
<backend-component-inspector-control-dropdown
v-if="control.type == 'dropdown'"
:obj="obj"
:parent-obj="parentObj"
:control="control"
:control-id="controlEditorId"
:inspector-preferences="inspectorPreferences"
ref="editor"
@focus="onEditorFocus"
@blur="onEditorBlur"
@invalid="onEditorInvalid"
@valid="onEditorValid"
></backend-component-inspector-control-dropdown>
<backend-component-inspector-control-autocomplete
v-if="control.type == 'autocomplete'"
:obj="obj"
:control="control"
:control-id="controlEditorId"
:inspector-preferences="inspectorPreferences"
ref="editor"
@focus="onEditorFocus"
@blur="onEditorBlur"
@invalid="onEditorInvalid"
@valid="onEditorValid"
></backend-component-inspector-control-autocomplete>
<backend-component-inspector-control-checkbox
v-if="control.type == 'checkbox'"
:obj="obj"
:control="control"
:control-id="controlEditorId"
:inspector-preferences="inspectorPreferences"
ref="editor"
@focus="onEditorFocus"
@blur="onEditorBlur"
@invalid="onEditorInvalid"
@valid="onEditorValid"
></backend-component-inspector-control-checkbox>
<backend-component-inspector-control-table
v-if="control.type == 'table'"
:obj="obj"
:parent-obj="parentObj"
:control="control"
:control-id="controlEditorId"
:inspector-preferences="inspectorPreferences"
ref="editor"
@hidebottomborder="bottomBorderHidden = true"
@hidefullwidthlabel="controlLabelHidden = true"
></backend-component-inspector-control-table>
<backend-component-inspector-control-object
v-if="control.type == 'object'"
:obj="obj"
:parent-obj="parentObj"
:control="control"
:control-id="controlEditorId"
:inspector-preferences="inspectorPreferences"
:splitter-data="splitterData"
:inspector-unique-id="inspectorUniqueId"
:depth="depth"
:panel-update-data="panelUpdateData"
:layout-update-data="layoutUpdateData"
ref="editor"
@hidefullwidthlabel="controlLabelHidden = true"
@hidebottomborder="bottomBorderHidden = true"
></backend-component-inspector-control-object>
<backend-component-inspector-control-set
v-if="control.type == 'set'"
:obj="obj"
:parent-obj="parentObj"
:control="control"
:control-id="controlEditorId"
:inspector-preferences="inspectorPreferences"
:splitter-data="splitterData"
:inspector-unique-id="inspectorUniqueId"
:depth="depth"
:panel-update-data="panelUpdateData"
:layout-update-data="layoutUpdateData"
ref="editor"
@hidefullwidthlabel="controlLabelHidden = true"
@hidebottomborder="bottomBorderHidden = true"
></backend-component-inspector-control-set>
<backend-component-inspector-control-objectlist
v-if="control.type == 'objectList'"
:obj="obj"
:parent-obj="parentObj"
:control="control"
:control-id="controlEditorId"
:inspector-preferences="inspectorPreferences"
:splitter-data="splitterData"
:inspector-unique-id="inspectorUniqueId"
:depth="depth"
:panel-update-data="panelUpdateData"
:layout-update-data="layoutUpdateData"
ref="editor"
@hidefullwidthlabel="controlLabelHidden = true"
@hidebottomborder="bottomBorderHidden = true"
></backend-component-inspector-control-objectlist>
<backend-component-inspector-control-objectlist-records
v-if="control.type == 'objectListRecords'"
:obj="obj"
:parent-obj="parentObj"
:control="control"
:control-id="controlEditorId"
:inspector-preferences="inspectorPreferences"
:splitter-data="splitterData"
:inspector-unique-id="inspectorUniqueId"
:depth="depth"
:panel-update-data="panelUpdateData"
:layout-update-data="layoutUpdateData"
ref="editor"
@hidefullwidthlabel="controlLabelHidden = true"
@hidebottomborder="bottomBorderHidden = true"
@inspectorcommand="$emit('inspectorcommand', $event)"
></backend-component-inspector-control-objectlist-records>
<backend-component-inspector-control-dictionary
v-if="control.type == 'dictionary'"
:obj="obj"
:parent-obj="parentObj"
:control="control"
:control-id="controlEditorId"
:inspector-preferences="inspectorPreferences"
:splitter-data="splitterData"
:inspector-unique-id="inspectorUniqueId"
:depth="depth"
:panel-update-data="panelUpdateData"
:layout-update-data="layoutUpdateData"
ref="editor"
@hidefullwidthlabel="controlLabelHidden = true"
@hidebottomborder="bottomBorderHidden = true"
></backend-component-inspector-control-dictionary>
<backend-component-inspector-control-mediafinder
v-if="control.type == 'mediafinder'"
:obj="obj"
:parent-obj="parentObj"
:control="control"
:control-id="controlEditorId"
:splitter-data="splitterData"
:panel-update-data="panelUpdateData"
:layout-update-data="layoutUpdateData"
:inspector-preferences="inspectorPreferences"
ref="editor"
@focus="onEditorFocus"
@blur="onEditorBlur"
@invalid="onEditorInvalid"
@valid="onEditorValid"
></backend-component-inspector-control-mediafinder> </div>
</td>
</tr>
<div>
<input
v-if="control.type == 'string'"
class="inspector-control"
type="text"
ref="input"
v-bind:value="valueWithPreset"
v-bind:id="controlId"
v-bind:placeholder="control.placeholder"
v-bind:readonly="inspectorPreferences.readOnly"
@input="updateValue"
@focus="$emit('focus', $event)"
@blur="$emit('blur', $event)"
/>
<textarea
v-if="control.type == 'text'"
class="component-backend-inspector-textinput inspector-control"
:class="cssClass"
ref="input"
v-bind:value="valueWithPreset"
v-bind:id="controlId"
v-bind:placeholder="control.placeholder"
v-bind:readonly="inspectorPreferences.readOnly"
@keydown.enter.stop
@input="updateValue"
@focus="$emit('focus', $event)"
@blur="$emit('blur', $event)"
></textarea>
<div
v-if="control.type == 'text'"
class="inspector-textarea-shadow inspector-control component-backend-inspector-textinput"
ref="textareaShadow"
v-text="valueWithPreset"
></div>
</div>
<div v-bind:tabindex="containerTabIndex" @focus="onContainerFocus">
<backend-component-loading-indicator v-if="loadingDynamicOptions"
size="tiny"
></backend-component-loading-indicator>
<backend-component-dropdown
v-if="!loadingDynamicOptions"
:options="options"
:id="controlId"
:placeholder="control.placeholder"
:tabindex="0"
:disabled="inspectorPreferences.readOnly"
:allow-empty="true"
track-by="code"
label="label"
ref="input"
v-model="selectedValue"
select-label=""
selected-label=""
deselect-label=""
@input="updateValue"
@open="onFocus"
@close="onBlur"
@hook:mounted="onDropdownMounted"
>
<span slot="noResult">Vaihtoehtoja ei löytynyt</span>
<template v-if="useValuesAsIcons || useValuesAsColors" slot="option" slot-scope="props">
<div class="option-with-icon" v-if="useValuesAsIcons">
<div class="option-icon" :class="props.option.code"></div>
<span>{{ props.option.label }}</span>
</div>
<div class="option-with-color" v-if="useValuesAsColors">
<div class="option-color" :style="{'background-color': props.option.code}"></div>
<span>{{ props.option.label }}</span>
</div>
</template>
</backend-component-dropdown>
</div>
<div class="inspector-control">
<div
class="component-backend-inspector-checkbox"
>
<label
tabindex="0"
@keydown="onLabelKeydown"
@focus="$emit('focus', $event)"
@blur="$emit('blur', $event)"
>
<input
type="checkbox"
ref="input"
value="1"
v-bind:checked="isChecked"
v-bind:id="controlId"
v-bind:readonly="inspectorPreferences.readOnly"
v-bind:disabled="inspectorPreferences.readOnly"
@input="updateValue"
/><span class="backend-icon-background-pseudo"></span>
</label>
</div>
</div>
<div
class="component-backend-inspector-table"
data-lang-add-item="Lisää kohde"
>
<table>
<backend-component-inspector-control-table-head
:columns="columns"
>
</backend-component-inspector-control-table-head>
<tbody>
<backend-component-inspector-control-table-row
v-for="(row, index) in value"
:row="row"
:key="index"
:columns="columns"
:row-index="index"
:inspector-preferences="inspectorPreferences"
:table-configuration="tableConfiguration"
@removerow="onRemoveRowClick"
>
</backend-component-inspector-control-table-row>
</tbody>
</table>
<div v-if="tableConfiguration.adding" class="inspector-padding-control-left table-control-links">
<a
href="#"
class="add-item-link"
:class="{disabled: inspectorPreferences.readOnly}"
@click.stop.prevent="onAddItemClick"
v-text="control.btnAddRowLabel === undefined ? lang.addItem : control.btnAddRowLabel"
></a>
</div>
</div>
<thead @mousedown.stop="onHandleMouseDown">
<tr>
<backend-component-inspector-control-table-headcell
v-for="(column, index) in columns"
:key="index"
:column="column"
:column-index="index"
:column-width="columnWidth"
>
</backend-component-inspector-control-table-headcell>
</tr>
</thead>
<th v-bind:style="cellStyle">
<div class="header-cell-container">
<div v-if="columnIndex != 0" class="cell-resize-handle"></div>
<span v-text="column.title"></span>
</div>
</th>
<tr :class="{focused: focused, 'has-errors': hasErrors}">
<backend-component-inspector-control-table-cell
v-for="(column, index) in columns"
:key="index"
:column="column"
:row="row"
:cell-index="index"
:inspector-preferences="inspectorPreferences"
:table-configuration="tableConfiguration"
:is-last-cell="index == columns.length-1"
@focus="onCellFocus"
@blur="onCellBlur"
@valid="onValid"
@invalid="onInvalid"
@removerow="$emit('removerow', rowIndex)"
>
</backend-component-inspector-control-table-cell>
</tr>
<td>
<div class="table-cell-container">
<backend-component-inspector-control-table-text
v-if="column.type == 'string'"
:row="row"
:column="column"
:cell-index="cellIndex"
:inspector-preferences="inspectorPreferences"
ref="editor"
@focus="$emit('focus', $event)"
@blur="$emit('blur', $event)"
@valid="$emit('valid', $event)"
@invalid="$emit('invalid', $event)"
>
</backend-component-inspector-control-table-text>
<backend-component-inspector-control-table-dropdown
v-if="column.type == 'dropdown'"
:row="row"
:column="column"
:cell-index="cellIndex"
:inspector-preferences="inspectorPreferences"
ref="editor"
@focus="$emit('focus', $event)"
@blur="$emit('blur', $event)"
@valid="$emit('valid', $event)"
@invalid="$emit('invalid', $event)"
>
</backend-component-inspector-control-table-dropdown>
<button v-if="isLastCell && tableConfiguration.deleting && !inspectorPreferences.readOnly" @click.stop="$emit('removerow')" class="remove-row-btn"></button>
</div>
</td>
<input
type="text"
class="inspector-table-control-text"
v-model="row[column.column]"
ref="input"
v-bind:readonly="inspectorPreferences.readOnly"
@focus="$emit('focus', $event)"
@blur="$emit('blur', $event)"
/>
<div
v-bind:tabindex="containerTabIndex"
@focus="onContainerFocus"
class="inspector-table-dropdown-container"
>
<backend-component-dropdown
:options="options"
:placeholder="column.placeholder"
:tabindex="0"
:disabled="inspectorPreferences.readOnly"
:allow-empty="true"
track-by="code"
label="label"
ref="editor"
v-model="selectedValue"
select-label=""
selected-label=""
deselect-label=""
@input="updateValue"
@open="onFocus"
@close="onBlur"
>
<span slot="noResult">Vaihtoehtoja ei löytynyt</span>
</backend-component-dropdown>
<div class="dropdown-placeholder" v-if="!hasValue" v-text="column.placeholder"></div>
</div>
<div>
<backend-component-inspector-group
:group-name="control.title"
:obj="editedObject"
:controls="control.properties"
:splitter-data="splitterData"
:depth="depth"
:panel-update-data="panelUpdateData"
:layout-update-data="layoutUpdateData"
:inspector-unique-id="inspectorUniqueId"
:inspector-preferences="inspectorPreferences"
ref="group"
>
</backend-component-inspector-group>
</div>
<div>
<backend-component-inspector-group
:group-name="control.title"
:obj="editedObject"
:controls="nestedControlProperties"
:splitter-data="splitterData"
:depth="depth"
:group-value="groupValue"
:panel-update-data="panelUpdateData"
:layout-update-data="layoutUpdateData"
:inspector-unique-id="inspectorUniqueId"
:inspector-preferences="inspectorPreferences"
:loading="loadingDynamicOptions"
ref="group"
>
</backend-component-inspector-group>
</div>
<div
data-lang-key-required="Avainkenttä on pakollinen"
data-lang-value-required="Arvokenttä on pakollinen"
>
<backend-component-inspector-group
:group-name="control.title"
:obj="editedObject"
:controls="nestedControlProperties"
:splitter-data="splitterData"
:depth="depth"
:panel-update-data="panelUpdateData"
:group-value="groupValue"
:layout-update-data="layoutUpdateData"
:inspector-unique-id="inspectorUniqueId"
:inspector-preferences="inspectorPreferences"
:hide-bottom-border="true"
ref="group"
>
</backend-component-inspector-group>
</div>
<div
data-lang-error="Virhe"
data-lang-prop-cant-be-empty="Ominaisuus :property ei voi olla tyhjä"
data-lang-key-value-exists="Arvo on jo määritelty: :property_value"
>
<backend-component-inspector-group
:group-name="control.title"
:obj="editedObject"
:parent-obj="obj"
:controls="nestedControlProperties"
:splitter-data="splitterData"
:depth="depth"
:panel-update-data="panelUpdateData"
:layout-update-data="layoutUpdateData"
:inspector-unique-id="inspectorUniqueId"
:inspector-preferences="inspectorPreferences"
ref="group"
@inspectorcommand="onInspectorCommand"
>
</backend-component-inspector-group>
</div>
<div
class="component-backend-inspector-table"
data-lang-add-item="Lisää kohde"
>
<table v-if="hasValues">
<tbody>
<tr v-for="(record, key) in obj">
<td class="no-sub-controls" :class="{clickable: !inspectorPreferences.readOnly}" @click.stop="onItemClick(key)">
<div class="clickable-data-container">
<backend-component-inspector-control-objectlist-record-title
:control="control"
:record="record"
:parent-obj="parentObj"
:obj="obj"
></backend-component-inspector-control-objectlist-record-title>
<button v-if="!inspectorPreferences.readOnly" @click.stop.prevent="onRemoveItemClick(key)" class="remove-row-btn"></button>
</div>
</td>
</tr>
</tbody>
</table>
<div class="inspector-padding-control-left table-control-links">
<a
href="#"
class="add-item-link"
:class="{disabled: inspectorPreferences.readOnly || !displayAddItem}"
:disabled="inspectorPreferences.readOnly || !displayAddItem"
@click.stop.prevent="onAddItemClick"
v-text="lang.addItem"
></a>
</div>
</div>
<div class="title-container">
<backend-component-loading-indicator v-if="loadingDynamicTitle"
size="tiny"
></backend-component-loading-indicator>
<template v-else>
<span class="record-color" v-if="recordColor" :style="{'background-color': recordColor}"></span>
<span v-text="recordTitle"></span>
</template>
</div>
<div>
<backend-component-loading-indicator v-if="loadingDynamicOptions"
size="tiny"
></backend-component-loading-indicator>
<backend-component-autocomplete
v-if="!loadingDynamicOptions"
ref="autocomplete"
:search="onSearch"
:getResultValue="getResultValue"
:placeholder="placeholder"
:defaultValue="initialValue"
:readonly="inspectorPreferences.readOnly"
v-bind:id="controlId"
@input="onInput"
@change="onChange"
@update="onUpdate"
@focus="onFocus"
@blur="onBlur"
>
<template #result="{ result, props }">
<li v-bind="props" class="autocomplete-result">
{{ result.value }}
</li>
</template>
</backend-component-autocomplete>
</div>
<div
data-lang-error-not-image="Valitsemasi tiedosto ei ole kuva"
data-lang-placeholder="Klikkaa valitaksesi kuva"
class="inspector-control-clearable"
>
<div
class="inspector-control clickable act-as-text-input"
:class="cssClass"
:tabindex="0"
@focus="onFocus"
@blur="onBlur"
ref="input"
v-text:value="displayedText"
v-bind:readonly="inspectorPreferences.readOnly"
@click.stop="onClick"
@keydown.stop="onKeyDown"
></div>
<button v-if="this.value && !inspectorPreferences.readOnly" @click.stop="onClearClick" class="clear-value"></button>
</div>
<div
data-default-button-text="OK"
>
<backend-component-modal
ref="modal"
:aria-labeled-by="modalTitleId"
:unique-key="uniqueId"
:size="size"
:store-position="true"
:resizable="resizableWidth ? 'horizontal' : false"
:resize-default-width="600"
:close-by-esc="!readOnly"
:modal-temporary-hidden="layoutUpdateData.modalTemporaryHidden"
@hidden="onHidden"
@resized="onResized"
@shown="onShown"
@enterkey="onEnterKey"
>
<template v-slot:content>
<div class="modal-header">
<h4 class="modal-title" v-bind:id="modalTitleId" v-text="title"></h4>
<button
@click.prevent="onCloseClick"
type="button"
class="btn-close"
v-bind:disabled="readOnly"
aria-label="Sulje"
tabindex="0"
></button>
</div>
<div class="modal-body inspector-modal-host">
<backend-component-inspector
:data-schema="dataSchema"
:data="data"
:live-mode="liveMode"
:unique-id="uniqueId"
:layout-update-data="layoutUpdateData"
:read-only="readOnly"
ref="inspector"
>
</backend-component-inspector>
</div>
<div class="modal-footer">
<button
type="button"
class="btn btn-primary btn-default-action"
data-default-focus
@click="onApplyClick"
v-text="primaryButtonText"
v-bind:disabled="readOnly"
></button>
<span class="button-separator">tai</span>
<button
class="btn btn-link text-muted"
:class="{disabled: readOnly}"
@click.prevent="onCancelClick"
>Peruuta</button>
</div>
</template>
</backend-component-modal>
</div>
<div
class="component-backend-splitter" :class="cssClass"
>
<div class="flex-layout-item fix splitter-first-panel" :style="firstPanelStyle" ref="firstPanel">
<slot name="first">
Left panel
</slot>
</div>
<div
class="flex-layout-item fix splitter-handle"
:class="{dragging: dragging}"
ref="handle"
@mousedown.stop="onHandleMouseDown"
></div>
<div class="flex-layout-item stretch relative">
<slot name="second">
Right panel
</slot>
</div>
</div>
<div
class="component-backend-tabs flex-layout-column"
:class="cssClass"
data-lang-close="Sulje välilehti"
data-lang-close-all="Sulje kaikki"
data-lang-close-others="Sulje muut"
data-lang-close-saved="Sulje tallennetut"
>
<div class="tablist-container flex-layout-item fix" v-show="!hideTabPanel">
<div class="flex-layout-row tablist-scrollable-container" :class="{'has-fixed-panel': supportsFullScreen && hasTabs}" ref="scrollableTabsContainer">
<div class="tabs-scrollable flex-layout-item stretch" ref="scrollable">
<div
class="tablist flex-layout-row"
role="tablist"
ref="tabList"
v-bind:aria-label="ariaLabel"
@keydown="onKeyDown"
>
<button
v-for="tab in tabs"
role="tab"
data-component-backend-tab
class="flex-layout-item"
:class="{
active: currentTabKey == tab.key,
stretch: tabsStyle == 'document',
fix: tabsStyle == 'form',
'has-icon': tab.icon || tab.fatalError,
'has-close-button': closeable
}"
v-bind:id="getTabId(tab, 'tab')"
v-bind:aria-controls="getTabId(tab, 'panel')"
v-bind:aria-selected="currentTabKey == tab.key ? 'true' : 'false'"
v-bind:tabindex="currentTabKey == tab.key ? 0 : -1"
v-bind:data-tooltip-text="getTooltipText(tab)"
@click.ignore="onClick(tab)"
@mouseup.middle="onMiddleClick(tab)"
@contextmenu.stop="onContextMenu($event, tab)"
>
<span
class="tab-icon"
:class="{'tab-error': tab.fatalError}"
v-if="tab.icon"
aria-hidden="true"
>
<span
class="tab-icon-background"
v-bind:style="getTabIconStyle(tab)"
>
<i
:class="tab.icon.cssClass"
></i>
</span>
<i class="backend-icon-background tab-error"></i>
</span>
<span v-text="tab.label" role="text"></span>
<span
class="backend-icon-background-pseudo close-tab"
:class="{'has-changes': tab.hasChanges}"
v-bind:tabindex="currentTabKey == tab.key ? 0 : -1"
v-if="closeable"
role="button"
aria-hidden="true"
aria-label="Sulje välilehti"
v-bind:title="closeTooltip ? '' : 'Sulje välilehti'"
v-bind:data-tooltip-text="closeTooltip"
v-bind:data-tooltip-hotkey="closeTooltipHotkey"
@click.stop.prevent="onCloseClick(tab)"
>✕</span>
</button>
</div>
</div>
<div class="flex-layout-item fix fixed-right tabs-toolbar" v-if="supportsFullScreen && hasTabs">
<div class="toolbar-container">
<button
class="backend-toolbar-button icon-only"
data-tooltip-text="Kokoruudun tila"
@click.stop.prevent="onToggleFullscreen"
>
<i :class="{'icon-fullscreen': !isFullScreen, 'icon-fullscreen-collapse': isFullScreen}"></i>
</button>
</div>
</div>
</div>
</div>
<template v-if="!noPanes">
<div
v-for="tab in tabs"
role="tabpanel"
tabindex="0"
:key="getTabUniqueKey(tab)"
v-show="currentTabKey == tab.key"
v-bind:id="getTabId(tab, 'panel')"
v-bind:aria-labelledby="getTabId(tab, 'tab')"
class="tabpanel flex-layout-item stretch relative"
:class="tabPanelCssClass"
>
<component
v-if="!useSlots"
:ref="getTabComponentRefName(tab)"
v-bind:is="tab.component"
:component-data="tab.componentData"
@tabfatalerror="onTabFatalError(tab)"
@tabkeychanged="onTabkeyChanged"
@tabclose="onHostedComponentTabClose(tab)"
></component>
<slot v-else :name="tab.key"></slot>
</div>
</template>
<slot v-if="!tabs.length" name="noTabsView"></slot>
<backend-component-dropdownmenu
:items="contextMenuItems"
:menu-id="contextMenuId"
:labeled-by-id="contextMenuLabeledById"
ref="contextmenu"
@command="onMenuItemCommand"
></backend-component-dropdownmenu>
</div>
<div
class="flex-layout-column component-backend-monaco-editor"
:class="cssClass"
data-configuration="{"vendorPath":"https:\/\/www.ringraceclub.fi\/modules\/backend\/vuecomponents\/monacoeditor\/assets\/vendor\/monaco","fontSize":"12px","tabSize":4,"useEmmet":true,"yamlSchemas":[{"uri":"https:\/\/www.ringraceclub.fi\/modules\/tailor\/assets\/js\/blueprint-yaml-schema.json","fileMatch":["*-blueprint.yaml"]}],"renderLineHighlight":"all","useTabStops":false,"renderIndentGuides":false,"renderWhitespace":"all","autoClosingBrackets":"languageDefined","autoClosingQuotes":"languageDefined","hover":{"delay":750},"wordWrap":"off","theme":"vs-dark"}"
>
<div class="flex-layout-item fix" v-if="showTabs">
<backend-component-tabs
:tabs="editorTabs"
:closeable="false"
:no-panes="true"
:container-css-class="tabsContainerCssClass"
:tooltips-enabled="false"
tabs-style="monaco-editor"
@tabselected="onTabSelected"
></backend-component-tabs>
</div>
<div class="flex-layout-item stretch position-relative h-100" style="overflow: hidden">
<div
class="flex-layout-column fill-container"
:class="editorContainerCssClass"
ref="editorContainer"
@dragover.capture="onDragOver"
@drop.capture="onDragDrop"
></div>
</div>
</div>
Päivämäärä
Kuva
Valitse
Tyhjennä
<div class="item-object item-object-image ">
<div class="file-data-container">
<div class="file-data-container-inner">
<div class="icon-container image">
<img data-thumb-url alt="" />
<video data-thumb-url preload="metadata" data-document-type="video"></video>
<audio data-thumb-url controls preload="metadata" data-document-type="audio"></audio>
</div>
<div class="info">
<h4 class="filename">
<span data-title></span>
</h4>
</div>
</div>
</div>
</div>
Linkki
-- Ei valittu --
Sisäinen
Ulkoinen
-- Ei valittu --
Valitse pudotusvalikosta -Ei valittu-, jos et tarvitse linkkiä.
Teksti
Linkki sivulle
Etusivu
FSBK KymiRing 26 tulokset
Tapahtumat
Autojen ratapäivä
Naisten tapahtuma 25.4.2025
Ratapäivät -tapahtumat
Säännöt
Ratapäivät -Ajoharjoittelutapahtumat
Track day rules
Turvallisuus info
Endurosäännöt
KymiRing 23.7.2026
KymiRing 6.-7.6.2026
KymiRing 29.5.2025
Äitienpäivän ajot KymiRing 10.5.2026
KymiRing 15.8.2025
EnduroDays 23.7.2026
Susikosken päräys paraati 29.5.2025
KymiRing 13.-14.9.2025
FinSBK205
Hymyilevän Motoristin Kevätpäivä by Ring Race Club
KymiRing 19-20.7.2025
Finnish Superbike SM KymiRing 2026
Finnish Racing Championship SM KymiRing 2026
Finnish Superbike KymiRing 2024
Katsojalle info
Kumppanit
Yhteystiedot
Media
Toimitsijaksi
Kartta ja etäisyydet
Majoitus
Kerhon jäsenistön kalenteri
Tapahtumakalenteri
Kesäkuun vauhtilauantai 19.6
Menneet tapahtumat
Ratapäivä 5.7.2020
KymiRing 21.-22.8.2021
Heinäkuun ratapäivät viikonloppu 17.-18.7.2021
KymiRing iltapäivä 4.8.2022
KymiRing 13.-14.8.2022
KymiRing 27.-28.8.2022
Talkoolais- ja jäsenpäivä 1.10.2022
KymiRing Helatorstai 18.5.2023
KymiRing 10.-11.6.2023
KymiRing 6.7.2023
KymiRing 26.7.2023
KymiRing 9.-10.8.2023
Jäsen- ja talkoolaispäivä 9.9.2023
KymiRing 16.-17.9.2023
KymiRing 8.-9.6.2024
KymiRing 13.-14.7.2024
Finnish Superbike KymiRing 2024
KymiRing 11.08.2024
Talkoolais- ja Jäsenpäivä 24.8.2024
KymiRing 7.-8.9.2024
Kaudenavaus tapahtuma 25.-27.4.2025
KymiRing 29.5.2025 Helatorstai
Jäsenten ja talkoolaisten iltapäivä
KymiRing 28.-29.6.2025
KymiRing 19.-20.7.2025
Finnish Superbike KymiRing 2025
KymiRing 14.8.2025
KymiRing 13.-14.9.2025
HMKP26
Äitienpäivänajot 2026
KymiRing 6.-7.6.2026
Finnish Superbike SM KymiRing 2026
Kerhomatka imatranajoihin 6.-7.7.2024
Nuorison tapahtumat
Palvelut
Finnish Racing Championship KymiRing 2026
Caravan Park Ravilinna
Suomeksi
In English
Camping info/ safety
Ring Race Club
Esittely
Rekisteriseloste
Jäseneksi
Ring Race Club in English
Vuosikokous 2026
Linkit
Jäsentapahtumat
Jäsenkokoontumiset
Kauden 2025 talkoolaisten tapahtuma
Koulutus
MP26 Messut 30.1-1.2.2026 Helsingin Messukeskus
Classic Motorshow 2.-3.5.2026 Lahden messukeskus
Jäsentiedotteet
Helmikuu 2025
Maaliskuu 2025
Toukokuu 2025
Kesäkuu 2025
Heinäkuu 2025
Syyskuu 2025
Lokakuu 2025
Joulukuu 2025
Yhteystiedot
Ratapäivät -Ajoharjoittelutapahtumat
Ulkoinen linkki (lisää myös http:// tai https://)
Ring Race Club järjestää FRC kilpailun ensimmäistä kertaa KymiRingillä