PageSourceSearch

https://bttlgrnd.com/VAADIN/build/at-program-A6OIP4rX.js

js bttlgrnd.com collected 2026-10-10 02:03:13 UTC 14,838 bytes, 225 lines download raw bytes

1import{a as D,f as C,t as m,i as O,n as f,A as u,x as o,e as x,d as Y,U as b,k as l,l as $,ae as y,m as c,af as X,r as M,Y as _,I,aa as S}from"./indexhtml-BUWO91-d.js";import"./oum-map-CgrE2ke3.js";import{C as z}from"./comp-desc-HFyQLeTb.js";import{A}from"./at-base-Ci6DRU9u.js";import"./oum-mux-player-BqH1FKVr.js";import"./comp-downloads-CvSC1df2.js";import"./oum-download-CRF4LjuG.js";import"./class-level-CFVjWWOq.js";var j=Object.defineProperty,k=Object.getOwnPropertyDescriptor,P=(t,e,a,s)=>{for(var i=s>1?void 0:s?k(e,a):e,r=t.length-1,n;r>=0;r--)(n=t[r])&&(i=(s?n(e,a,i):n(i))||i);return s&&i&&j(e,a,i),i};let d=class extends O{constructor(){super(...arguments),this.scale=1,this.lastDistance=0,this.initialDistance=0,this.isPanning=!1,this.lastPanX=0,this.lastPanY=0,this.translateX=0,this.translateY=0,this.maxed=!1,this.originalTransform="",this.handleTouchStart=t=>{t.touches.length===2?(console.log("Zooming start"),t.preventDefault(),this.isPanning=!1,this.initialDistance=this.getDistance(t.touches[0],t.touches[1]),this.lastDistance=this.initialDistance):t.touches.length===1&&this.scale>1?(console.log("Panning start"),t.preventDefault(),this.isPanning=!0,this.lastPanX=t.touches[0].clientX,this.lastPanY=t.touches[0].clientY):console.log("Passthrough start")},this.handleTouchMove=t=>{if(t.touches.length===2){console.log("Zooming move"),t.preventDefault();const e=this.getDistance(t.touches[0],t.touches[1]),a=e/this.lastDistance;this.scale*=a,this.scale=Math.max(1,Math.min(3,this.scale)),this.updateTransform(),this.lastDistance=e}else if(this.isPanning&&t.touches.length===1){console.log("Panning move"),t.preventDefault();const e=t.touches[0].clientX-this.lastPanX,a=t.touches[0].clientY-this.lastPanY;this.translateX+=e,this.translateY+=a,this.updateTransform(),this.lastPanX=t.touches[0].clientX,this.lastPanY=t.touches[0].clientY}else console.log("Passthrough move")},this.handleTouchEnd=t=>{t.touches.length<2&&(this.lastDistance=0),t.touches.length===0&&(this.isPanning=!1,this.scale===1&&(this.translateX=0,this.translateY=0,this.updateTransform()))}}willUpdate(t){if(t.has("maxed")){if(this.originalTransform===""){const e=this.shadowRoot?.querySelector("#maxedimage");e&&(this.originalTransform=e.style.transform,console.log("Maxed changed to",this.maxed,"originalTransform:",this.originalTransform))}this.classList.toggle("maxed",this.maxed)}}clampPan(t){const e=this.shadowRoot?.host;if(!t||!e)return;const a=e.getBoundingClientRect(),s=t.naturalWidth/t.naturalHeight,i=a.width/a.height;let r,n;s>i?(r=a.width,n=r/s):(n=a.height,r=n*s);const v=r*this.scale,w=n*this.scale;if(v<=a.width)this.translateX=0;else{const g=(v-a.width)/2;this.translateX=Math.max(-g,Math.min(g,this.translateX))}if(w<=a.height)this.translateY=0;else{const g=(w-a.height)/2;this.translateY=Math.max(-g,Math.min(g,this.translateY))}}updateTransform(){const t=this.shadowRoot?.querySelector("#maxedimage");t&&(this.clampPan(t),t.style.transform=`scale(${this.scale}) translate(${this.translateX}px, ${this.translateY}px)`)}resetTransform(){this.scale=1,this.translateX=0,this.translateY=0;const t=this.shadowRoot?.querySelector("#maxedimage");t.style.transform=this.originalTransform}getDistance(t,e){const a=t.clientX-e.clientX,s=t.clientY-e.clientY;return Math.sqrt(a*a+s*s)}render(){return this.src?o`
2            <img id="theimage"
3                 src="${this.src}"
4                 alt="${this.alt}"
5                 @click=${t=>{console.log("Clicked image, maxed:",this.maxed),t.stopPropagation(),f.setBottomBarVisible(!1),this.maxed=!0}}/>
6            ${this.maxed?o`
7                <dialog>
8                    <img id="maxedimage"
9                         src="${this.src}"
10                         alt="${this.alt}"
11                         class="zoomable-image"
12                         @click=${t=>{t.stopPropagation(),this.maxed=!1,f.setBottomBarVisible(u.mobile),this.resetTransform()}}
13                         @touchstart="${this.handleTouchStart}"
14                         @touchmove="${this.handleTouchMove}"
15                         @touchend="${this.handleTouchEnd}"/>
16
17                    <wa-button appearance="filled"
18                               aria-label="Close"
19                               @click=${()=>this.maxed=!1}
20                               style="position:fixed;top:var(--space-m);right:var(--space-m);z-index:1020"
21                    >
22                        <wa-icon name="close" label="Close"></wa-icon>
23                    </wa-button>
23
24                </dialog>
25
26            `:null}
27        `:null}};d.styles=D`
28        :host {
29            display: block;
30            width: 100%;
31            height: 100%;
32            overflow: hidden;
33            background: var(--c-system-bg);
34        }
35
36        dialog {
37            z-index: 9999;
38            position: fixed;
39            top: 0;
40            left: 0;
41            width: 100vw;
42            height: 100vh;
43            margin: 0;
44            padding: 0;
45            border: none;
46            background: var(--c-system-bg);
47            display: flex;
48            align-items: center;
49            justify-content: center;
50        }
51
52        dialog::backdrop {
53            background: rgba(0, 0, 0, 0.9);
54        }
55
56        //:host(.maxed) {
57        //    z-index: 1000;
58        //    position: fixed;
59        //    top: 0;
60        //    left: 0;
61        //    width: 100vw;
62        //    height: 100vh;
63        //}
64
65        #theimage {
66            cursor: zoom-in;
67            height: 100%;
68            width: 100%;
69            object-fit: contain;
70        }
71
72        #maxedimage {
73            z-index: 1010;
74            cursor: zoom-out;
75            /* Allow vertical panning and pinch-zoom */
76            touch-action: pan-y pan-x pinch-zoom;
77            transition: width 0.3s ease, height 0.3s ease, transform 0.1s ease-out;
78            position: fixed;
79            top: 0;
80            left: 0;
81            width: 100vw;
82            height: 100dvh;
83            object-fit: contain;
84            min-width: 100%;
85            transform-origin: center;
86        }
87    `;P([C()],d.prototype,"src",2);P([C()],d.prototype,"alt",2);P([m()],d.prototype,"maxed",2);d=P([x("oum-zoomable-img")],d);var R=Object.defineProperty,B=Object.getOwnPropertyDescriptor,p=(t,e,a,s)=>{for(var i=s>1?void 0:s?B(e,a):e,r=t.length-1,n;r>=0;r--)(n=t[r])&&(i=(s?n(e,a,i):n(i))||i);return s&&i&&R(e,a,i),i};let h=class extends O{constructor(){super(...arguments),this.topPrograms=[],this.loopPrograms=[],this.programTitle="",this.progTab=new Map}connectedCallback(){super.connectedCallback(),b.initWA(this),this.classList.add(u.mobile?"mob":"desk"),!(l.dataMain&&!l.dataMain.publik&&!$.isAdminOf(l.dataMain.id.id))&&(l.dataDef?this.programTitle=y.programNameTranslated(y.get(l.dataDef.sportId)):this.programTitle=c("Program"),X(l.shortie).then(t=>{if(this.compProgram=t,console.log("program program",t),t)if(t.programs.length==0)this.topPrograms=[],this.topProgram=void 0,this.loopPrograms=[],this.loopProgram=void 0;else if(t.programs.length==1){const e=t.programs[0];this.topPrograms=[],this.topProgram=void 0,e.nodes?this.loopPrograms=e.nodes:this.loopPrograms=[e],this.loopProgram=this.loopPrograms[0]}else{const e=t.programs[0];e.nodes?(this.topPrograms=t.programs,this.topProgram=e,this.loopPrograms=e.nodes,this.loopProgram=this.loopPrograms[0]):(this.topPrograms=[],this.topProgram=void 0,this.loopPrograms=t.programs,this.loopProgram=this.loopPrograms[0])}}))}update(t){if(super.update(t),t.has("loopProgram")){const e=this.loopPrograms.indexOf(this.loopProgram);this.loopGpx=this.compProgram?.gpxDownload!==void 0?this.compProgram.gpxDownload[e]:void 0}}render(){return l.dataMain&&!l.dataMain.publik&&!$.isAdminOf(l.dataMain.id.id)?z.renderPrivateEvent():this.compProgram?o`
88            <flex-r id="page-top-bar"
89                    stuck
90                    style="padding:var(--space-s) var(--space-s) 0 var(--space-s);">
91                <design-centered class="not-maxed"
92                                 style="flex:1">
93                    <flex-c>
94                        <h1>${this.programTitle}</h1>
95                        ${(this.topPrograms?.length??0)>1?o`
96                            <wa-tab-group style="min-height:50px;width:100%">
97                                ${this.topPrograms.map(t=>o`
98                                    <wa-tab ?active=${this.topProgram?.id.id.id===t.id.id.id}
99                                            @click=${()=>{this.topProgram=t,this.loopPrograms=t.nodes,this.loopProgram=this.loopPrograms[0]}}>${t.id.name}
100                                    </wa-tab>
101                                `)}
102                            </wa-tab-group>
103                        `:null}
104                    </flex-c>
105                </design-centered>
106            </flex-r>
107            <flex-c style="align-items:center;flex:1;padding-bottom:var(--space-mobile-menu-bottom-dynamic);width:100%">
108                <design-centered class="not-maxed"
109                                 style="width:100%">
110                    <flex-r style="align-items:center;justify-content:space-between;padding:var(--space-sl) 0;width:100%">
111                        ${this.loopPrograms.length>1?o`
112                            <wa-button appearance="plain"
113                                       aria-label="Previous"
114                                       @click="${t=>this.prev()}">
115                                <wa-icon name="chevron-left" label="Previous"></wa-icon>
116                            </wa-button>
116
117                        `:null}
118                        <h2>${this.loopProgram?.id.name}</h2>
119                        ${this.loopPrograms.length>1?o`
120                            <wa-button appearance="plain"
121                                       aria-label="Next"
122                                       @click="${t=>this.next()}">
123                                <wa-icon name="chevron-right" label="Next"></wa-icon>
124                            </wa-button>
125                        `:null}
126                    </flex-r>
127                </design-centered>
128                ${u.mobile?this.renderContentM():this.renderContentD()}
129            </flex-c>
130        `:b.loadingHtml()}renderContentM(){return o`
131            <wa-carousel loop
132                         slides-per-page="1"
133                         slides-per-move="1"
134                         @wa-slide-change="${t=>{const e=t.detail.index;this.loopProgram=this.loopPrograms[e]}}"
135                         style="flex:1;width:100%">
136                ${this.loopPrograms.map(t=>o`
137                        <wa-carousel-item style="height:100%;width:100%">
138                            ${this.renderContentOne(t)}
139                        </wa-carousel-item>
140                    `)}
141            </wa-carousel>
142        `}renderContentD(){return o`
143            <design-centered style="flex:1;padding:0 var(--space-sl) var(--space-sl) var(--space-sl);width:100%">
144                ${this.loopProgram?this.renderContentOne(this.loopProgram):o`
145                    <p>${c("The program is a secret")}</p>
146                `}
147            </design-centered>
148        `}renderContentOne(t){const e=[];if(t.desc&&e.push("desc"),t.imageId&&t.imageId.length>0&&e.push("image"),this.loopGpx&&e.push("gpx"),e.length===0)return o`
149                <div class="d-card">${c("There is no description yet")}</div>
150            `;let a=this.progTab.get(t.id.id.id)??e[0];return a==="desc"&&!t.desc&&(a="image"),a==="image"&&(!t.imageId||t.imageId.length<1)&&(a="gpx"),o`
151            <flex-c style="height:100%;width:${u.mobile?"var(--slide-size)":"100%"}">
152                ${e.length>1?o`
153                    <wa-tab-group>
154                        ${e.map(s=>o`
155                            <wa-tab ?active=${a==s}
156                                    @click=${()=>{this.progTab.set(t.id.id.id,s),this.requestUpdate("progTab")}}>
157                                ${s=="desc"?c("Description"):s=="image"?c("Images"):c("Map")}
158                            </wa-tab>
159                        `)}
160                    </wa-tab-group>
161                `:null}
162                ${M(a,[["desc",()=>o`
163                        <div class="d-card" style="overflow-y:auto">${_(t.desc)}</div>
164                    `],["image",()=>o`
165                        <div style="flex:1;overflow:auto">
166                            ${t.imageId?.map(s=>o`
167                                <oum-zoomable-img src="${I.path_Full(s)}"
168                                                  alt="Program description image">
169                                </oum-zoomable-img>
170                            `)}
171                        </div>
172                    `],["gpx",()=>o`
173                        <oum-map .gpxDownloads="${this.loopGpx?[this.loopGpx]:[]}"
174                                 .includeDownloadBtn="${!0}"
175                                 style="flex:1">
176                        </oum-map>
177
178                    `]],()=>o`WRONG TAB: ${a}`)}
179            </flex-c>
180        `}prev(){let e=this.loopPrograms.indexOf(this.loopProgram)-1;e<0&&(e=this.loopPrograms.length-1),this.loopProgram=this.loopPrograms[e];const a=this.renderRoot.querySelector("wa-carousel");a&&a.goToSlide(e)}next(){let e=this.loopPrograms.indexOf(this.loopProgram)+1;e>=this.loopPrograms.length&&(e=0),this.loopProgram=this.loopPrograms[e];const a=this.renderRoot.querySelector("wa-carousel");a&&a.goToSlide(e)}};h.styles=[Y,D`
181        :host {
182            width: 100%;
183            height: 100%;
184            display: flex;
185            flex-direction: column;
186        }
187
188        .no-program {
189            width: 90%;
190            padding: var(--space-m);
191        }
192
193        #d-wrap {
194            position: relative;
195            width: 100%;
196            max-width: var(--desktop-center-width-small);
197        }
198
199        #d-top {
200            width: 100%;
201            justify-content: space-between;
202        }
203
204        #d-content {
205            width: 100%;
206        }
207
208        #d-content img {
209            width: 100%;
210            margin-top: var(--space-m);
211        }
212
213        div.d-card {
214            margin-top: var(--space-m);
215            padding: var(--space-m);
216            min-height: 20vh;
217        }
218
219    `];p([m()],h.prototype,"topPrograms",2);p([m()],h.prototype,"topProgram",2);p([m()],h.prototype,"loopPrograms",2);p([m()],h.prototype,"loopProgram",2);p([m()],h.prototype,"loopGpx",2);h=p([x("comp-program")],h);var q=Object.getOwnPropertyDescriptor,G=(t,e,a,s)=>{for(var i=s>1?void 0:s?q(e,a):e,r=t.length-1,n;r>=0;r--)(n=t[r])&&(i=n(i)||i);return i};let T=class extends A{render(){return o`
220            ${M(f.atType,[[S.Competition,()=>o`
221                            <comp-program></comp-program>`]],()=>o`
222                        A special empty program for @${f.atType}
223                    `)}
224
225        `}};T=G([x("at-program")],T);export{T as AtProgram};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.