Podcast Banner

The PowerScore LSAT Podcast

About the Podcast

PowerScore CEO and LSAT Bible author Dave Killoran and PowerScore VP Jon Denning are two of the world’s foremost experts on the LSAT and law school admissions, and they’ve created the PowerScore LSAT Podcast to share their knowledge and experience with you! Topics range from specific LSAT concepts and strategies, to breaking LSAT news and changes, to law school application advice, and listener-submitted questions.

Subscribe to the Podcast:
Follow Us:
Breadcrumb
Asset Publisher
An error occurred while processing the template.
The string doesn't match the expected date/time/date-time format. The string to parse was: "November 30, 2024". The expected format was: "EEE, dd MMM yyyy HH:mm:ss Z".
The nested reason given follows:
Unparseable date: "November 30, 2024"

----
FTL stack trace ("~" means nesting-related):
	- Failed at: parsedDate = pubDate?datetime("EEE, d...  [in template "20096#20121#101427" at line 18, column 33]
----
1<section class="section podcast_episode pt-5 pb-1"> 
2    <div class="container"> 
3        <div class="default-heading subtitle_h2"> 
4                <h2> Episodes </h2> 
5            </div> 
6		 
7<#if entries?has_content> 
8    <#list entries as curEntry> 
9			<#assign 
10		    entry = curEntry 
11		    assetRenderer = curEntry.getAssetRenderer() 
12		    entryTitle = htmlUtil.escape(assetRenderer.getTitle(locale)) 
13		    viewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, assetRenderer, entry, !stringUtil.equals(assetLinkBehavior, "showFullContent")) 
14	      /> 
15				<#assign docXml=saxReaderUtil.read(curEntry.getAssetRenderer().getArticle().getContentByLocale(locale.toString())) 
16				title=docXml.valueOf("//dynamic-element[@field-reference='Text62743630' ]/dynamic-content") 
17				pubDate=docXml.valueOf("//dynamic-element[@field-reference='Text44181818' ]/dynamic-content") 
18				parsedDate = pubDate?datetime("EEE, dd MMM yyyy HH:mm:ss Z") 
19				formattedDate = parsedDate?string("EEE, dd MMM yyyy") 
20				podcastImage=docXml.valueOf("//dynamic-element[@field-reference='Text64639435' ]/dynamic-content") 
21				description=docXml.valueOf("//dynamic-element[@field-reference='RichText94527332' ]/dynamic-content") 
22				extractedDescription = description?replace('<[^>]+>','','r') 
23				podcastURL=docXml.valueOf("//dynamic-element[@field-reference='Text68555789' ]/dynamic-content") 
24				duration=docXml.valueOf("//dynamic-element[@field-reference='Text81553976' ]/dynamic-content") 
25				episodeTimestamp=docXml.valueOf("//dynamic-element[@field-reference='RichText24629768' ]/dynamic-content") 
26				audioPlayer=docXml.valueOf("//dynamic-element[@field-reference='Text71794597' ]/dynamic-content") 
27				applePodcast=docXml.valueOf("//dynamic-element[@field-reference='Text69908893' ]/dynamic-content") 
28				spotifyPodcast=docXml.valueOf("//dynamic-element[@field-reference='Text82589801' ]/dynamic-content") 
29				padoraPodcast=docXml.valueOf("//dynamic-element[@field-reference='Text51026635' ]/dynamic-content") 
30			  /> 
31			  <#assign lowerCaseString = title?lower_case> 
32			  <!--<#assign dynamicURL = lowerCaseString?replace(" ", "-", "r")>--> 
33				<#assign dynamicURL = curEntry.getAssetRenderer().getArticle().getUrlTitle(locale)> 
34 
35        <div class="views-row"> 
36            <div class="card"> 
37                <div class="card-body"> 
38                    <div class="row justify-content-between align-items-start"> 
39                        <div class="col-12 col-sm-12 col-lg-12 col-xl-8"> 
40                            <h3> 
41                                <a href="/lsat/resources/podcast/-/detail/title/${dynamicURL}">${title}</a> 
42                            </h3> 
43                            <div class="row justify-content-between align-items-center"> 
44                                <div class="col-12 col-md-2 col-lg-3 col-xl-2 pr-0"> 
45                                    <div class="podcast_thumbnail"> 
46                                        <img src="/documents/d/powerscore/podcast-social-square-png" alt="thumbnail"/> 
47                                    </div> 
48                                </div> 
49                                <div class="col-12 col-md-10 col-lg-9 col-xl-10 pr-xl-5"> 
50                                    <div class="audioPlyer"> 
51                                        <div class="row justify-content-between align-items-center date_area_episode_lengths"> 
52                                            <div class="col-12 col-sm-6 col-md-6 col-xl-auto"> 
53                                                <div class="date_area"> 
54                                                    <i class="web-calendar"></i> Air Date : ${formattedDate} 
55                                                </div> 
56                                            </div> 
57                                            <div class="col-12 col-sm-6 col-md-6 col-xl-auto"> 
58                                                <div class="episode_lengths"> 
59                                                    <i class="web-time"></i> Episode Length : <span class="audioLength">${duration}</span> 
60                                                </div> 
61                                            </div> 
62                                        </div> 
63                                        <div class="row justify-content-start align-items-center player_area"> 
64                                            <div class="col-2 col-sm-1 col-md-1 col-lg-1 col-xl-1 pr-1"> 
65                                                <button class="play play_icon"> 
66													<i class="cust-icon web-play-btn"></i> 
67                                                </button> 
68                                            </div> 
69                                            <div class="col-10 col-sm-11 col-md-11 col-lg-11 col-xl-11 pl-sm-4 audio-container"> 
70                                                <div class="progress"> 
71                                                    <div class="progress-bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100"></div> 
72                                                </div> 
73                                                <audio class="audioPlayer myaudio" controls="controls" preload="auto" src="${podcastURL}"> Audio Player example </audio> 
74                                            </div> 
75                                        </div> 
76                                        <div class="row justify-content-between align-items-center next_previous_time"> 
77                                            <div class="col-4 col-sm-4 col-md-auto"> 
78                                                <button class="btn pc_theme_btn btn-secondary backward"> 
79                                                <i class="web-double-arrow-left"></i>30 S<span class="d-none d-sm-inline-block">econds</span></button> 
80                                            </div> 
81											<div class="col-4 col-sm-4 col-md-auto"><span class="audio_timing">00:00:00</span></div> 
82                                            <div class="col-4 col-sm-4 col-md-auto"> 
83                                                <button class="btn pc_theme_btn btn-secondary forward">30 S<span class="d-none d-sm-inline-block">econds</span><i class="web-double-arrow-right"></i> </button> 
84                                            </div> 
85                                        </div> 
86                                    </div> 
87                                </div> 
88                            </div> 
89                        </div> 
90                        <div class="col-12 col-sm-12 col-lg-12 col-xl-4 moreAndless"> 
91													<h4>Episode Description</h4> 
92                            <div class="paragraph_area"> 
93															  <#assign minititle=(extractedDescription!"")> 
94																<#if minititle?length &lt; 280> 
95																${extractedDescription} 
96																<#else> 
97																${extractedDescription?substring(0,279)}... 
98																</#if> 
99                            </div> 
100																	<div class="paragraph_area paraBg active"> 
101														<a href="/lsat/resources/podcast/-/detail/title/${dynamicURL}" class="btn pc_theme_btn btn-secondary w-100"> 
102														  <span class="expand_des w-100"> View Full Description & Timestamps </span> 
103																		</a></div> 
104                        </div> 
105                    </div> 
106                </div> 
107            </div> 
108        </div> 
109		</#list> 
110</#if> 
111		   
112					 
113    </div> 
114</section> 
115 
116<script type="text/javascript"> 
117		 
118		 
119		//Play-Pause 
120		$(".play").on("click", function() { 
121			console.log("Play Audio"); 
122			if (window.HTMLAudioElement) { 
123				try { 
124					var oAudio = $(this).closest('.audioPlyer').find('.myaudio'); 
125					if (oAudio[0].paused) { 
126						$(this).find('i.cust-icon').removeClass('web-play-btn'); 
127						$(this).find('i.cust-icon').addClass('web-stop-btn'); 
128						oAudio[0].play(); 
129						oAudio.on('timeupdate', (e) => { 
130							const { duration, currentTime } = oAudio[0]; 
131							let progressPercent = (currentTime / duration) * 100; 
132							$(this).closest('.audioPlyer').find('.progress-bar').width(progressPercent+"%"); 
133							$(this).parents('.audioPlyer').find('.audio_timing').html(formatTime(Math.floor(currentTime))); 
134						}); 
135					} else { 
136						$(this).find('i.cust-icon').addClass('web-play-btn'); 
137						$(this).find('i.cust-icon').removeClass('web-stop-btn'); 
138						oAudio[0].pause(); 
139
140				} catch (e) { 
141					if (window.console && console.error("Error:" + e)); 
142
143
144		}); 
145		 
146		function formatTime(seconds) { 
147			const h = Math.floor(seconds / 3600); 
148			const m = Math.floor((seconds % 3600) / 60); 
149			const s = seconds % 60; 
150			const formattedH = h < 10 ? '0' + h : h; 
151			const formattedM = m < 10 ? '0' + m : m; 
152			const formattedS = s < 10 ? '0' + s : s; 
153			return (formattedH+':'+formattedM+':'+formattedS); 
154
155		 
156		//Forward 
157		$(".forward").on("click", function() { 
158			console.log("Forward Calling"); 
159			if (window.HTMLAudioElement) { 
160				try { 
161					var oAudio = $(this).closest('.audioPlyer').find('.myaudio'); 
162					oAudio[0].currentTime += 30.0; 
163				} catch (e) { 
164					if (window.console && console.error("Error:" + e)); 
165
166
167		}); 
168		 
169		//Backward 
170		$(".backward").on("click", function() { 
171			console.log("Backward Calling"); 
172			if (window.HTMLAudioElement) { 
173				try { 
174					var oAudio = $(this).closest('.audioPlyer').find('.myaudio'); 
175					oAudio[0].currentTime -= 30.0; 
176				} catch (e) { 
177					if (window.console && console.error("Error:" + e)); 
178
179
180		}); 
181		 
182		function setProgress(e) { 
183			var oAudio = e.target.closest('.audio-container').querySelector('.myaudio'); 
184			var audioFile = $(this).closest('.audioPlyer').find('.myaudio'); 
185			const width = e.target.clientWidth; 
186			console.log("width>>> ", width); 
187			const clickX = e.offsetX; 
188			console.log("clickX>>> ", clickX); 
189			const duration = oAudio.duration; 
190			oAudio.currentTime = (clickX / width) * duration; 
191
192 
193		// Get all elements with the class name 'progress' and attach event listeners 
194		const progressElements = document.getElementsByClassName('progress'); 
195		for (let i = 0; i < progressElements.length; i++) { 
196			progressElements[i].addEventListener('click', setProgress); 
197
198	 
199	 
200	//add the go to page in Pagination 
201	document.addEventListener("DOMContentLoaded", function () { 
202		// Build the "Go to Page" form 
203    const goToPageForm = ` 
204        <form id="goToPageForm" class="row justify-content-center justify-content-sm-end align-items-center mt-3"> 
205           <label for="pageInput" class="col-12 col-sm-12 col-md-12 col-lg-12 col-xl-auto Go_to_page pl-lg-0"> Go to page </label>  
206           <div class="col-4 col-sm-6 col-md-6 col-lg-5 col-xl-3 pl-0 pr-3">  
207              <input type="text" class="form-control" id="pageInput" placeholder="Enter page"  
208                     oninput="this.value = this.value.replace(/[^0-9]/g, '');">  
209           </div> 
210           <div class="col-4 col-sm-6 col-md-6 col-lg-5 col-xl-3 pl-0">  
211              <input type="button" class="form-control" id="goToPage" value="Go">  
212           </div> 
213        </form> 
214    `; 
215    // Append into Liferay pagination bar 
216    $(".pagination-bar").append(goToPageForm); 
217		 
218		   $('#pageInput').on('keypress', function (e) { 
219     if (e.which === 13) {  
220
221    }); 
222		 
223		 
224		 $("#goToPage").on("click", function () { 
225        let page = parseInt($("#pageInput").val(), 10); 
226        if (page > 0) { 
227            let portletId = $("section.portlet[id^='portlet_com_liferay_asset_publisher_web_portlet_AssetPublisherPortlet']").attr("id"); 
228            let p_p_id = portletId.replace(/^portlet_/, ""); 
229            let portletNamespace = "_" + p_p_id + "_"; 
230 
231            let url = new URL(window.location.href); 
232 
233            // Always make sure required params are there 
234            url.searchParams.set("p_p_id", p_p_id); 
235            url.searchParams.set("p_p_lifecycle", "0"); 
236            url.searchParams.set("p_p_state", "normal"); 
237            url.searchParams.set("p_p_mode", "view"); 
238            url.searchParams.set(portletNamespace + "redirect", "/lsat/resources/podcasts"); 
239            url.searchParams.set(portletNamespace + "delta", "10"); 
240            url.searchParams.set("p_r_p_resetCur", "false"); 
241 
242            // Dynamic page number 
243            url.searchParams.set(portletNamespace + "cur", page); 
244 
245            // Redirect with updated page number 
246            window.location.href = url.toString(); 
247
248	}); 
249}); 
250</script> 
251			 
252<style> 
253	.progress { 
254		cursor: pointer; 
255
256	.player_area .play { 
257		position: relative; 
258		height: 48px; 
259		width: 48px; 
260		display: block; 
261
262	.player_area .play i { 
263		font-size: 50px; 
264		position: absolute; 
265		left: 0; 
266		top: 50%; 
267		transform: translateY(-50%); 
268		background: linear-gradient(to right, #235ba8 0%, #1c75d4 100%); 
269		-webkit-text-fill-color: transparent; 
270		-webkit-background-clip: text; 
271
272	.player_area .progress .progress-bar { 
273		pointer-events: none; 
274
275/* Pagination Styling */ 
276.pagination-bar { 
277    max-width: 1312px; 
278    width: 100%; 
279    margin-left: auto; 
280    margin-right: auto; 
281    padding-left: calc(24px* 0.5); 
282    padding-right: calc(24px* 0.5); 
283	  margin-bottom: 20px; 
284
285.pagination .page-link, .pagination .page-link span, .pagination .lfr-portal-tooltip.page-link { 
286    color: #464f57; 
287    text-decoration: none; 
288    font-weight: 500; 
289    font-size: inherit; 
290    margin-left: 0; 
291    padding: 0; 
292    border-radius: 4px; 
293    height: auto; 
294    line-height: inherit; 
295    display: block; 
296    background-color: inherit; 
297    border: 0; 
298
299.pagination .page-link span.c-inner, .pagination a.page-link, .pagination button.page-link { 
300    padding: 10px 15px; 
301
302.pagination .page-item:hover button.page-link span, .pagination .page-item:hover .page-link span.c-inner { 
303	  background-color: #2a5488; 
304    border-color: #2a5488; 
305    color: #fff; 
306
307.page-item:last-child .page-link, .page-link-last { 
308    border-radius: 0 .25rem .25rem 0 !important; 
309
310</style>