Last active
March 4, 2024 16:37
-
-
Save jithurjacob/4af5e9e8d231d79f17f6e553ba166864 to your computer and use it in GitHub Desktop.
Revisions
-
jithurjacob revised this gist
Oct 22, 2017 . 1 changed file with 2 additions and 0 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,3 +1,5 @@ //credits - https://greasyfork.org/en/scripts/28295-udemy-show-section-time // greasyfonrk was throwing me an error so I created this gist (function() { $.getScript("https://greasyfork.org/scripts/5392-waitforkeyelements/code/WaitForKeyElements.js?version=115012", function(){ -
jithurjacob revised this gist
Oct 22, 2017 . 1 changed file with 6 additions and 10 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,11 +1,9 @@ (function() { $.getScript("https://greasyfork.org/scripts/5392-waitforkeyelements/code/WaitForKeyElements.js?version=115012", function(){ // waits for the cards to be loaded waitForKeyElements(selectors.sectionCard, run, true); }); var selectors = { sectionCard: 'curriculum-navigation-section', sectionName: '.curriculum-navigation__section__title', @@ -22,9 +20,7 @@ document.getElementsByTagName('head')[0].appendChild(jq); }; // run(); /** Gets total and remaining time for each section. -
jithurjacob created this gist
Oct 21, 2017 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,264 @@ //credits - https://greasyfork.org/en/scripts/28295-udemy-show-section-time // greasyfonrk was throwing me an error so I created this gist var jq = document.createElement('script'); jq.src = "https://greasyfork.org/scripts/5392-waitforkeyelements/code/WaitForKeyElements.js?version=115012"; document.getElementsByTagName('head')[0].appendChild(jq); (function() { var selectors = { sectionCard: 'curriculum-navigation-section', sectionName: '.curriculum-navigation__section__title', // class needed by this user script sectionTime: '.section-time', lectureItem: '.lecture__item', lectureTime: '.lecture__item__link__time', lectureStatus: '.cur-status', lectureCheck: '.udi-check', lectureProgress : '#top-detail > div.detail__progress > div > div.fx', }; // run(); // waits for the cards to be loaded waitForKeyElements(selectors.sectionCard, run, true); /** Gets total and remaining time for each section. Displays these per section. Display the total of all sections */ function run() { var sections = $(selectors.sectionCard); var totalLectureTime = 0; var remainingLectureTime = 0; $.each(sections, function(index, section) { // remove previous time display $(section).find(selectors.sectionTime).remove(); // get the section title var title = $(section).find(selectors.sectionName).text(); // get the total times var totalTimeTexts = getTimeTexts(section, false); var totalTimeSeconds = textTimesToSeconds(totalTimeTexts); var totalTime = secondsToTextTime(totalTimeSeconds); // update the lecture time totalLectureTime += totalTimeSeconds; // initialize the text to display with the total time var textToDisplay = totalTime; // check if we need to display partial time if (checkPartialTime(section)) { // sum the partial times var partialTimeTexts = getTimeTexts(section, true); var partialTimeSeconds = textTimesToSeconds(partialTimeTexts); var partialTime = secondsToTextTime(partialTimeSeconds); // update the lecture time remainingLectureTime += partialTimeSeconds; // prepend partial time textToDisplay = partialTime + ' / ' + textToDisplay; } // check if we need to add up the total time to remaining time if (getRemainingParts(section) === 0) { remainingLectureTime += totalTimeSeconds; } // display the section text displaySectionTime(section, textToDisplay); }); // display lecture totals displayLectureTimeProgress(totalLectureTime, remainingLectureTime); // stops the script from running continuously return false; } function displayLectureTimeProgress(totalLectureTime, remainingLectureTime) { // start with total var displayText = secondsToTextTime(totalLectureTime); // conditional add remaining if (remainingLectureTime) { displayText = secondsToTextTime(remainingLectureTime) + ' / ' + displayText; } // surround in parens displayText = '(' + displayText + ')'; // add to DOM var lectureProgressClass = 'lecture-progress-time'; var lectureProgressSpans = $(selectors.lectureProgress).find('.' + lectureProgressClass); if (lectureProgressSpans.length > 0) { $(lectureProgressSpans[0]).text(displayText); } else { $(selectors.lectureProgress + ' > div').before( '<span' + ' class="'+ lectureProgressClass + '"' + ' style="margin-left: 1em;"' +'">' + displayText + '</span>' ); } return displayText; } /* Gets the section parts and checks if it's not 0 or the total parts */ function checkPartialTime(section) { // get the section parts var sectionParts = getSectionParts(section); // determine what times to get var totalSections = sectionParts[1]; var sectionsToGo = sectionParts[0]; return sectionsToGo !== 0 && sectionsToGo != totalSections; } function getRemainingParts(section) { // get the section parts var sectionParts = getSectionParts(section); // determine what times to get return sectionParts[0]; } /** Get the section's time. Whether partial or total is determined by the passed in parameter. */ function getTimeTexts(section, isPartialTime) { // get the times var $lectures = $(section).find(selectors.lectureItem); // Check for partial time if (isPartialTime) { // filter down to just the non-completed ones $lectures = $lectures.filter(':not(.completed)'); } // get the time spans var timeSpans = $lectures.find(selectors.lectureTime); // convert to timeTexts and return return convertTimeSpansToTexts(timeSpans); } function displaySectionTime(section, displayText) { var sectionTimeClass = 'section-time'; // prepend to lecture status var totalTimeSpan = $(section).find(selectors.lectureStatus).find(sectionTimeClass); // check to see if we've already added the time to the DOM if (totalTimeSpan.length > 0) { $(totalTimeSpan[0]).text(displayText); } else { // we haven't, so create the element and add it $(section).find(selectors.lectureStatus) .prepend('<span class="' + sectionTimeClass + '" style="margin-right:1em">'+ displayText + '</span>'); } } function getSectionParts(section) { return $(section).find(selectors.lectureStatus).text() // split up the parts by "/" .split('/') // trim up the space .map(function(text) { return text.trim(); }); } function convertTimeSpansToTexts(timeSpans) { var timeTexts = []; for (var i=0; i<timeSpans.length; i++) { timeTexts.push($(timeSpans[i]).text()); } return timeTexts; } function convertTextToSeconds(textTime) { var timeParts = textTime.split(':'); var seconds = parseInt(timeParts[1]); seconds += parseInt(timeParts[0]) * 60; return seconds; } // get the summation of the times function textTimesToSeconds(textTimes) { var totalSeconds = 0; // get total minutes $.each(textTimes, function(index, textTime) { totalSeconds += convertTextToSeconds(textTime); }); return totalSeconds; } function secondsToTextTime(totalSeconds) { // convert back to hh:mm var hours = Math.floor(totalSeconds / 60 / 60); var remainingTime = totalSeconds - hours * 60 * 60; var minutes = Math.floor(remainingTime / 60); remainingTime = remainingTime - minutes * 60; var seconds = remainingTime; return getTime(hours, minutes, seconds); } // get the time in the following format -> hh:mm:ss function getTime(hours, minutes, seconds) { var result = ''; // get the hours part if (hours > 0) { result += hours + ':'; result += timePad(minutes); } else { // we didn't have any hours result += minutes; } // check for minutes if (minutes > 0) { result += ':' + timePad(seconds); } else { // we didn't have any minutes, but we should say 0 result += '0:' + timePad(seconds); } return result; } // time should be a length of 2, so prepend with 0 function timePad(timeSegment) { var result = timeSegment + ''; while (result.length < 2) { result = '0' + result; } return result; } })();