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.
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 < 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> Showing 161 to 163 of 163 entries.