PageSourceSearch

https://www.speedsolving.com/js/8wayrun/porta/portal.js?_v=cf52ec22

js speedsolving.com collected 2026-10-01 10:29:32 UTC 6,829 bytes, 283 lines download raw bytes

1var EWRporta = window.EWRporta || {};
2
3!function($, window, document)
4{
5	// ################################## --- ###########################################
6	
7	EWRporta.Upload = XF.Element.newHandler(
8	{
9		$upload: null,
10		
11		init: function()
12		{
13			$upload = this.$target.find('input[name=upload]');
14			$upload.on('change', $upload, $.proxy(this, 'filecheck'));
15		},
16		
17		filecheck: function()
18		{
19			if (XF.config.uploadMaxFilesize > 0 && $upload[0].files[0].size > XF.config.uploadMaxFilesize)
20			{
21				XF.alert(XF.phrase('file_too_large_to_upload'));
22				$upload.val('');
23			}
24		},
25	});
26	
27	// ################################## --- ###########################################
28	
29	EWRporta.Masonry = XF.Element.newHandler(
30	{
31		init: function()
32		{
33			var $grid = this.$target.masonry(
34			{
35				itemSelector: '.porta-article-item',
36			});
37			
38			$grid.imagesLoaded().progress( function()
39			{
40				$grid.masonry('layout');
41			});
42			
43			if (window.twttr)
44			{
45				twttr.ready(XF.proxy(function(twttr)
46				{
47					twttr.events.bind('loaded', function (event)
48					{
49						setTimeout(function()
50						{
51							$grid.masonry('layout');
52						}, 1000);
53					});
54
55				}, this));
56			}
57		},
58	});
59	
60	// ################################## --- ###########################################
61	
62	EWRporta.Infinite = XF.Element.newHandler(
63	{
64		init: function()
65		{
66			$grid = this.$target;
67			
68			var $scroller = $grid.infiniteScroll({
69				outlayer: $grid.data('masonry'),
70				button: '.porta-article-button',
71				append: '.porta-article-item',
72				hideNav: '.porta-article-pager',
73				path: '.porta-article-pager .pageNav-jump--next',
74				status: '.porta-article-status',
75				history: $grid.data('history') ? 'replace' : false,
76			});
77			
78			$scroller.on('last.infiniteScroll', function()
79			{
80				$('.porta-article-status').hide();
81				$('.porta-article-loader').hide();
82			});
83			
84			if ($grid.data('click'))
85			{
86				if ($grid.data('after'))
87				{
88					$scroller.on('load.infiniteScroll', function onPageLoad()
89					{
90						if ($scroller.data('infiniteScroll').loadCount == $grid.data('after'))
91						{
92							$('.porta-article-loader').show();
93							$scroller.infiniteScroll('option', { loadOnScroll: false });
94							$scroller.off('load.infiniteScroll', onPageLoad);
95						}
96					});
97				}
98				else
99				{
100					$('.porta-article-loader').show();
101					$scroller.infiniteScroll('option', { loadOnScroll: false });
102				}
103			}
104		},
105	});
106	
107	// ################################## --- ###########################################
108	
109	EWRporta.Features = XF.Element.newHandler(
110	{
111		init: function()
112		{
113			var $slider = this.$target,
114				players = [],
115				ytDeferred = $.Deferred();
116				
117			if ($slider.data('relocate'))
118			{
119				$slider.detach().insertBefore($slider.data('relocate'));
120			}
121			
122			$.getScript('https://www.youtube.com/player_api');
123			window.onYouTubeIframeAPIReady = function()
124			{
125				ytDeferred.resolve(window.YT);
126			};
127	
128			ytDeferred.done(function()
129			{
130				$slider.find('.porta-features-media').each(function()
131				{
132					var slide = $(this).data('slide');
133					var index = 'youTube' + slide;
134					var $elem = $slider.find('.feature-' + slide);
135					
136					$elem.addClass('has-media');
137					
138					players[index] = new YT.Player(index,
139					{
140						videoId: $(this).data('media'),
141						width: "100%",
142						height: "100%",
143						playerVars:
144						{
145							playlist: $(this).data('media'),
146							enablejsapi: 1,
147							autoplay: 0,
148							controls: 0,
149							showinfo: 0,
150							disablekb: 1,
151							modestbranding: 1,
152							cc_load_policy: 0,
153							iv_load_policy: 3,
154							loop: 1,
155							rel: 0,
156							fs: 0
157						},
158						events:
159						{
160							onReady: function(e)
161							{
162								e.target.mute();
163								
164								$elem.find('.bx-unmute').click(function(v)
165								{
166									v.preventDefault();
167									e.target.unMute();
168									bxSlider.stopAuto();
169								
170									$elem.find('.bx-unmute').addClass('active');
171									$elem.find('.bx-mute').removeClass('active');
172								});
173								$elem.find('.bx-mute').click(function(v)
174								{
175									v.preventDefault();
176									e.target.mute();
177									
178									$elem.find('.bx-mute').addClass('active');
179									$elem.find('.bx-unmute').removeClass('active');
180								});
181							}
182						}
183					});
184				});
185			});
186			
187			var bxProgressStart = function()
188			{
189				$slider.find('.bx-progress').stop().css({ width: '0%' }).animate({ width: '100%' },
190				{
191					duration: ($slider.data('auto') - ($slider.data('speed') / 2)),
192					easing: 'linear'
193				});
194			}
195			var bxProgressStop = function()
196			{
197				$slider.find('.bx-progress').stop().animate({ width: '0%' },
198				{
199					duration: ($slider.data('speed') / 2),
200					easing: 'linear',
201					complete: function ()
202					{
203						$slider.find('.bx-progress').hide();
204					}
205				});
206			}
207			var bxProgressShow = function()
208			{
209				$slider.find('.bx-progress').show();
210				bxProgressStart();
211			}
212			
213			var bxSlider = $slider.find('.porta-features-container').bxSlider(
214			{
215				autoHover: true,
216				autoDelay: 4000,
217				auto: $slider.data('auto'),
218				mode: $slider.data('mode'),
219				speed: $slider.data('speed'),
220				pause: $slider.data('auto'),
221				pager: $slider.data('pager') ? true : false,
222				controls: $slider.data('controls') ? true : false,
223				autoControls: $slider.data('autocontrols') ? true : false,
224				onAutoChange: function(auto)
225				{
226					auto ? bxProgressShow() : bxProgressStop();
227				},
228				onSlideBefore: function(slide, oldIndex, newIndex)
229				{
230					newPlayer = 'youTube' + (newIndex + 1);
231					if (newPlayer in players)
232					{
233						players[newPlayer].playVideo();
234					}
235					bxProgressStart();
236				},
237				onSlideAfter: function(slide, oldIndex, newIndex)
238				{
239					oldPlayer = 'youTube' + (oldIndex + 1);
240					if (oldPlayer in players)
241					{
242						players[oldPlayer].stopVideo();
243					}
244				},
245				onSliderLoad: function(newIndex)
246				{
247					setTimeout(function()
248					{
249						newPlayer = "youTube" + (newIndex + 1);
250						if (newPlayer in players)
251						{
252							players[newPlayer].playVideo();
253						}
254					}, 4000);
255				},
256			});
257		},
258	});
259	
260	// ################################## --- ###########################################
261	
262	EWRporta.Showtext = XF.Click.newHandler(
263	{
264		eventNameSpace: 'EWRportaShowtext',
265		
266		click: function(e)
267		{
268			e.preventDefault();
269			$('.porta-block-hide').hide();
270			$('.porta-block-show').slideDown();
271		},
272	});
273	
274	// ################################## --- ###########################################
275
276	XF.Element.register('porta-upload', 'EWRporta.Upload');
277	XF.Element.register('porta-masonry', 'EWRporta.Masonry');
278	XF.Element.register('porta-infinite', 'EWRporta.Infinite');
279	XF.Element.register('porta-features', 'EWRporta.Features');
280	
281	XF.Click.register('porta-showtext', 'EWRporta.Showtext');
282}
283(window.jQuery, window, document);

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.