PageSourceSearch

https://www.playmaker.de/wp-content/themes/playmaker/assets/js/lineup.js?ver=1.3.4

js playmaker.de collected 2026-10-07 07:32:42 UTC 6,334 bytes, 291 lines download raw bytes

1(function(){
2	
3
4var Categories = {
5
6	init: function(){
7
8		var slideshows = document.querySelectorAll( '.category-films' );
9
10		if( ! slideshows || ! slideshows.length ) return;
11
12		for( var slideshow of slideshows ) {
13			Categories.initSlideshow( slideshow );
14		}
15
16	},
17
18	initSlideshow: function( slideshow ){
19
20		var slides = slideshow.querySelectorAll( '.slide' );
21
22		if( slides.length <= 2 ) return;
23
24		slideshow.classList.add('inited');
25
26		var tinySlider = tns({
27			container: slideshow,
28			nav: true,
29			controlsPosition: 'bottom',
30			controlsText: [ 'zurück', 'weiter' ],
31			lazyload: false,
32			items: 2,
33			center: true,
34			gutter: 10,
35			responsive: {
36				680: {
37					items: 3,
38					gutter: 20
39				}
40			}
41		});
42
43	}
44
45};
46
47
48var Timetable = {
49
50	init: function(){
51
52		var timetable = document.getElementById( 'timetable' );
53
54		if( ! timetable ) return;
55
56		var prev = document.createElement( 'div' );
57			prev.classList.add( 'timetable-nav', 'prev' );
58		var next = document.createElement( 'div' );
59			next.classList.add( 'timetable-nav', 'next' );
60
61		prev.addEventListener( 'click', Timetable.scroll );
62		next.addEventListener( 'click', Timetable.scroll );
63
64		timetable.appendChild( prev );
65		timetable.appendChild( next );
66
67		Timetable.updateArrows();
68
69		timetable.querySelector( '.timetable-container' ).addEventListener( 'scroll', Timetable.updateArrows);
70
71	},
72
73	scroll: function(e){
74		var scrollDistance = 300,
75			direction = 1;
76
77		if( window.innerWidth <= 680 ) scrollDistance = 260;
78
79		if( this.classList.contains('prev') ) {
80			direction = -1;
81		}
82
83		scrollDistance *= direction;
84
85		var container = document.getElementById( 'timetable' ).querySelector( '.timetable-container' );
86		if( ! container ) return;
87
88		container.scrollLeft += scrollDistance;
89
90	},
91
92	updateArrows: function(){
93
94		var timetable = document.getElementById( 'timetable' );
95		if( ! timetable ) return;
96
97		var container = document.getElementById( 'timetable' ).querySelector( '.timetable-container' );
98		if( ! container ) return;
99
100		var leftArrow = timetable.querySelector('.prev'),
101			rightArrow = timetable.querySelector('.next');
102
103
104		var maxScroll = parseInt(container.querySelector('.timetable-days').style.maxWidth, 10) - window.innerWidth;
105
106		if( maxScroll < 10 ) {
107			leftArrow.classList.add('hidden');
108			rightArrow.classList.add('hidden');
109		}
110
111		var scrollLeft = container.scrollLeft;
112
113		if( scrollLeft > 50 ) {
114			leftArrow.classList.remove('hidden');
115		} else {
116			leftArrow.classList.add('hidden');
117		}
118
119		if( scrollLeft > maxScroll - 100 ) {
120			rightArrow.classList.add('hidden');
121		} else {
122			rightArrow.classList.remove('hidden');
123		}
124
125	}
126
127};
128
129
130var Lineup = {
131
132	init: function(){
133
134		var wrapper = document.querySelector( '.block.current-lineup' );
135
136		if( ! wrapper ) return;
137
138		var overlay = wrapper.querySelector('#pdf-generator-overlay'),
139			overlayButton = wrapper.querySelector('#open-overlay');
140
141		if( ! overlay || ! overlayButton) return;
142
143		overlayButton.addEventListener( 'click', function(e){
144			overlay.classList.remove('hidden');
145			e.preventDefault();
146		});
147
148		var overlayCloseButton = overlay.querySelector( '.close-button' );
149		if( overlayCloseButton ) {
150			overlayCloseButton.addEventListener( 'click', function(e){
151				overlay.classList.add('hidden');
152				e.preventDefault();
153			});
154		}
155
156		var allFilmsButton = overlay.querySelector('#check_all');
157		if( allFilmsButton ) {
158			allFilmsButton.addEventListener( 'click', function(e){
159				var button = this;
160
161				var checkboxes = overlay.querySelectorAll( 'input[type="checkbox"]' );
162				if( ! checkboxes || ! checkboxes.length ) return;
163
164				for( var checkbox of checkboxes ) {
165					if( checkbox.id == 'check_all' ) continue;
166
167					checkbox.checked = button.checked;
168				}
169
170			});
171		}
172
173		var filmsCheckboxes = overlay.querySelectorAll('input[name^="film_"]');
174		for( var filmsCheckbox of filmsCheckboxes ) {
175			filmsCheckbox.addEventListener( 'click', function(e){
176				var button = this;
177
178				if( button.checked ) {
179					var checked = true;
180					for( var testBox of filmsCheckboxes ) {
181						if( ! testBox.checked ) {
182							checked = false;
183							break;
184						}
185					}
186					if( checked ) {
187						allFilmsButton.checked = true;
188					}
189				} else {
190					allFilmsButton.checked = false;
191				}
192			});
193		}
194
195		var generatorButton = overlay.querySelector( '#pdf-generator-button' );
196		if( generatorButton ) {
197			generatorButton.addEventListener( 'click', Lineup.generate );
198		}
199
200		overlay.addEventListener( 'click', function(e){
201			if( e.target.id != 'pdf-generator-overlay' ) return;
202			overlay.classList.add('hidden');
203		}, false );
204
205	},
206
207	generate: function(e){
208		e.preventDefault();
209
210		var wrapper = document.querySelector( '.block.current-lineup' ),
211			overlay = wrapper.querySelector('#pdf-generator-overlay'),
212			checkboxes = overlay.querySelectorAll( 'input[type="checkbox"]' );
213
214		var films = [];
215
216		for( var checkbox of checkboxes ) {
217			if( checkbox.id == 'check_all' ) continue;
218			if( ! checkbox.checked ) continue;
219			if( ! checkbox.name ) continue;
220
221			films.push(checkbox.name);
222		}
223
224
225		overlay.classList.add('loading');
226
227
228		// AJAX call
229
230		var formData = new FormData();
231
232		formData.set( 'films', films );
233		formData.append( 'ajax_nonce', Playmaker.ajax_nonce );
234		formData.append( 'action', 'lineup_generate_pdf' );
235
236
237		fetch( Playmaker.ajax_url, {
238			method: 'POST',
239			body: formData
240		} ).then( function( response ){
241
242			if( ! response.ok ) return Promise.reject( response );
243
244			return response.json();
245
246		} ).then( function( data ){
247
248			overlay.classList.remove('loading');
249
250			if( ! data.success || ! data.data ) {
251				// something went wrong with the query
252				console.warn(data);
253				return;
254			}
255
256			// success!
257
258			var filename = data.data,
259				download_filename = 'Playmaker_Lineup.pdf',
260				url = Playmaker.pdf_baseurl+filename;
261
262			// force download:
263			const a = document.createElement('a');
264			a.style.display = 'none';
265			a.href = url;
266			a.download = download_filename;
267			document.body.appendChild(a);
268			a.click();
269
270		} ).catch( function( error ){
271
272			overlay.classList.remove('loading');
273
274			// something went wrong with the ajax call (or return value was not json)
275			console.warn(error);
276
277		} );
278
279	}
280
281};
282
283
284function init(){
285	Categories.init();
286	Timetable.init();
287	Lineup.init();
288}
289document.addEventListener( 'DOMContentLoaded', init, false );
290
291})();

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.