| /*! |
| Name: Reading Time |
| Dependencies: jQuery |
| Author: Michael Lynch |
| Author URL: http://michaelynch.com |
| Date Created: August 14, 2013 |
| Date Updated: July 11, 2016 |
| Licensed under the MIT license |
| */ |
| |
| ;(function($) { |
| |
| var totalReadingTimeSeconds; |
| |
| $.fn.readingTime = function(options) { |
| |
| //define default parameters |
| var defaults = { |
| readingTimeTarget: '.eta', |
| readingTimeAsNumber: false, |
| wordCountTarget: null, |
| wordsPerMinute: 270, |
| round: true, |
| lang: 'en', |
| lessThanAMinuteString: '', |
| prependTimeString: '', |
| prependWordString: '', |
| remotePath: null, |
| remoteTarget: null, |
| success: function() {}, |
| error: function() {} |
| }, |
| plugin = this, |
| el = $(this); |
| |
| //merge defaults and options |
| plugin.settings = $.extend({}, defaults, options); |
| |
| //define vars |
| var s = plugin.settings; |
| |
| //if no element was bound |
| if(!this.length) { |
| |
| //run error callback |
| s.error.call(this); |
| |
| //return so chained events can continue |
| return this; |
| } |
| |
| //if s.lang is set to italian |
| if(s.lang == 'it') { |
| |
| var lessThanAMinute = s.lessThanAMinuteString || "Meno di un minuto"; |
| |
| var minShortForm = 'min'; |
| |
| //if s.lang is set to french |
| } else if(s.lang == 'fr') { |
| |
| var lessThanAMinute = s.lessThanAMinuteString || "Moins d'une minute"; |
| |
| var minShortForm = 'min'; |
| |
| //if s.lang is set to german |
| } else if(s.lang == 'de') { |
| |
| var lessThanAMinute = s.lessThanAMinuteString || "Weniger als eine Minute"; |
| |
| var minShortForm = 'min'; |
| |
| //if s.lang is set to spanish |
| } else if(s.lang == 'es') { |
| |
| var lessThanAMinute = s.lessThanAMinuteString || "Menos de un minuto"; |
| |
| var minShortForm = 'min'; |
| |
| //if s.lang is set to dutch |
| } else if(s.lang == 'nl') { |
| |
| var lessThanAMinute = s.lessThanAMinuteString || "Minder dan een minuut"; |
| |
| var minShortForm = 'min'; |
| |
| //if s.lang is set to slovak |
| } else if(s.lang == 'sk') { |
| |
| var lessThanAMinute = s.lessThanAMinuteString || "Menej než minútu"; |
| |
| var minShortForm = 'min'; |
| |
| //if s.lang is set to czech |
| } else if(s.lang == 'cz') { |
| |
| var lessThanAMinute = s.lessThanAMinuteString || "Méně než minutu"; |
| |
| var minShortForm = 'min'; |
| |
| //if s.lang is set to Hungarian |
| } else if(s.lang == 'hu') { |
| |
| var lessThanAMinute = s.lessThanAMinuteString || "Kevesebb mint egy perc"; |
| |
| var minShortForm = 'perc'; |
| |
| // if s.lang is set to Russian |
| } else if (s.lang == 'ru') { |
| |
| var lessThanAMinute = s.lessThanAMinuteString || "Меньше минуты"; |
| |
| var minShortForm = 'мин'; |
| |
| //if s.lang is set to Arabic |
| } else if (s.lang == 'ar') { |
| |
| var lessThanAMinute = s.lessThanAMinuteString || "أقل من دقيقة"; |
| |
| var minShortForm = 'دقيقة'; |
| |
| //if s.lang is set to Danish |
| } else if(s.lang == 'da') { |
| var lessThanAMinute = s.lessThanAMinuteString || "Mindre end et minut"; |
| var minShortForm = 'min'; |
| |
| //if s.lang is set to Icelandic |
| } else if(s.lang == 'is') { |
| var lessThanAMinute = s.lessThanAMinuteString || "Minna en eina mínútu"; |
| var minShortForm = 'min'; |
| |
| //if s.lang is set to Norwegian |
| } else if(s.lang == 'no') { |
| var lessThanAMinute = s.lessThanAMinuteString || "Mindre enn ett minutt"; |
| var minShortForm = 'min'; |
| |
| //if s.lang is set to Polish |
| } else if(s.lang == 'pl') { |
| var lessThanAMinute = s.lessThanAMinuteString || "Mniej niż minutę"; |
| var minShortForm = 'min'; |
| |
| //if s.lang is set to Russian |
| } else if(s.lang == 'ru') { |
| var lessThanAMinute = s.lessThanAMinuteString || "Меньше минуты"; |
| var minShortForm = 'мой'; |
| |
| //if s.lang is set to Swedish |
| } else if(s.lang == 'sv') { |
| var lessThanAMinute = s.lessThanAMinuteString || "Mindre än en minut"; |
| var minShortForm = 'min'; |
| |
| //if s.lang is set to Turkish |
| } else if(s.lang == 'tr') { |
| var lessThanAMinute = s.lessThanAMinuteString || "Bir dakikadan az"; |
| var minShortForm = 'dk'; |
| |
| //default s.lang is english |
| } else { |
| |
| var lessThanAMinute = s.lessThanAMinuteString || 'Less than a minute'; |
| |
| var minShortForm = 'min'; |
| |
| } |
| |
| var setTime = function(text) { |
| |
| if(text !== '') { |
| |
| //split text by spaces to define total words |
| var totalWords = text.trim().split(/\s+/g).length; |
| |
| //define words per second based on words per minute (s.wordsPerMinute) |
| var wordsPerSecond = s.wordsPerMinute / 60; |
| |
| //define total reading time in seconds |
| totalReadingTimeSeconds = totalWords / wordsPerSecond; |
| |
| //define reading time in minutes |
| //if s.round is set to true |
| if(s.round === true) { |
| |
| var readingTimeMinutes = Math.round(totalReadingTimeSeconds / 60); |
| |
| //if s.round is set to false |
| } else { |
| |
| var readingTimeMinutes = Math.floor(totalReadingTimeSeconds / 60); |
| |
| } |
| |
| //define remaining reading time seconds |
| var readingTimeSeconds = Math.round(totalReadingTimeSeconds - readingTimeMinutes * 60); |
| |
| //if s.round is set to true |
| if(s.round === true) { |
| |
| //if minutes are greater than 0 |
| if(readingTimeMinutes > 0) { |
| |
| //set reading time by the minute |
| $(s.readingTimeTarget).text(s.prependTimeString + readingTimeMinutes + ((!s.readingTimeAsNumber) ? ' ' + minShortForm : '')); |
| |
| } else { |
| |
| //set reading time as less than a minute |
| $(s.readingTimeTarget).text((!s.readingTimeAsNumber) ? s.prependTimeString + lessThanAMinute : readingTimeMinutes); |
| |
| } |
| |
| //if s.round is set to false |
| } else { |
| |
| //format reading time |
| var readingTime = readingTimeMinutes + ':' + readingTimeSeconds; |
| |
| //set reading time in minutes and seconds |
| $(s.readingTimeTarget).text(s.prependTimeString + readingTime); |
| |
| } |
| |
| //if word count container isn't blank or undefined |
| if(s.wordCountTarget !== '' && s.wordCountTarget !== undefined) { |
| |
| //set word count |
| $(s.wordCountTarget).text(s.prependWordString + totalWords); |
| |
| } |
| |
| //run success callback |
| s.success.call(this); |
| |
| } else { |
| |
| //run error callback |
| s.error.call(this, 'The element is empty.'); |
| } |
| |
| }; |
| |
| //for each element |
| el.each(function() { |
| |
| //if s.remotePath and s.remoteTarget aren't null |
| if(s.remotePath != null && s.remoteTarget != null) { |
| |
| //get contents of remote file |
| $.get(s.remotePath, function(data) { |
| |
| //set time using the remote target found in the remote file |
| setTime($('<div>').html(data).find(s.remoteTarget).text()); |
| |
| }); |
| |
| } else { |
| |
| //set time using the targeted element |
| setTime(el.text()); |
| } |
| }); |
| |
| return totalReadingTimeSeconds; |
| } |
| |
| |
| })(jQuery); |