{"version":3,"sources":["llms.js"],"names":["LLMS","window","$","Achievements","init","self","this","document","on","bind","maybe_open","each","create_modal","$this","id","attr","$modal","length","iziModal","$el","append","headerColor","group","history","loop","overlayColor","transitionIn","transitionOut","width","onOpening","modal","setTitle","find","html","setSubtitle","setContent","onClosing","pushState","title","location","pathname","search","hash","indexOf","first","trigger","Ajax","url","ajaxurl","llms","type","data","cache","dataType","async","response","obj","_ajax_nonce","wp_ajax_data","nonce","$R","Rest","query_vars","get_query_vars","post_id","post","val","call","settings","request","ajax","Donut","options","extend","element","percent","circle","stroke_width","parseInt","css","radius","angle","i","Math","round","animate","timer","setInterval","d","radians","PI","x","cos","y","sin","clearInterval","draw","path","donut","Instructors","hasClass","wait_for_matchHeight","matchHeight","l10n","translate","string","strings","replace","replacements","str","token","value","toString","LessonPreview","$els","$locked","match_height","$tip","msg","get_tooltip","setTimeout","addClass","removeClass","Loops","OutlineCollapse","$outlines","$outline","$headers","e","preventDefault","$toggle","$section","closest","state","get_section_state","open_section","close_section","$btn","action","opposite_action","PasswordStrength","$pass","$conf","$meter","$form","interval","counter","console","log","wp","passwordStrength","submit","add","check_strength","$pass_field","$conf_field","pass_length","conf_length","get_current_strength_status","show","get_current_strength","hide","checkout","callback","get_blacklist","blacklist","userInputBlacklist","format","pass","conf","meter","get_strength_slug","get_strength_text","curr","min","get_strength_value","get_minimum_strength","strength_val","slugs","-1","1","2","3","4","5","texts","strength_slug","values","too-short","very-weak","weak","medium","strong","mismatch","off","scrollTop","offset","top","fadeIn","Pricing_Tables","wait_for_popover","bind_locked","webuiPopover","animation","closeable","content","$content","$element","clone","placement","style","Review","click","jQuery","review_title","review_text","pageID","success","error","jqXHR","textStatus","errorThrown","change","Spinner","get","size","$spinner","start","stop","factory","registeredInModuleLoader","define","amd","exports","module","OldCookies","Cookies","api","noConflict","result","arguments","attributes","key","decode","s","decodeURIComponent","converter","set","defaults","expires","Date","toUTCString","JSON","stringify","test","write","encodeURIComponent","String","escape","stringifiedAttributes","attributeName","split","cookie","json","jar","cookies","parts","slice","join","charAt","name","read","parse","getJSON","remove","withConverter","CookieStore","Storage","store","clearAll","clear","getAll","default_val","StudentDashboard","screen","meter_exists","get_screen","bind_orders","curr_text","text","curr_action","new_action","new_text","password_toggle","removeAttr","order_cancel_warning","slideToggle","confirm","$pwds","Tracking","addEvent","addEventListener","onBeforeUnload","onUnload","onVisibilityChange","removeEventListener","event","hidden","args","events","makeEventObj","all","push","_temp","llms-tracking","xhr","status","r","code","message","getSettings","href","time","getTime","tracking","is_path","path_exists","vars","hashes","func","undefined","is_touch_device","prefixes","mq","query","matchMedia","matches","DocumentTouch","cb","wait_for","fn"],"mappings":"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","file":"../../js/llms.min.js","sourcesContent":["/****************************************************************\n *\n * Contributor's Notice\n * \n * This is a compiled file and should not be edited directly!\n * The uncompiled script is located in the \"assets/private\" directory\n * \n ****************************************************************/\n\n/**\n * Main LLMS Namespace\n *\n * @type {Object}\n * @since 1.0.0\n * @version 3.24.3\n */\nvar LLMS = window.LLMS || {};\n(function($){\n\n\t'use strict';\n\n\t/**\n\t * load all app modules\n\t */\n\t/**\n\t * Front End Achievements\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since 3.14.0\n\t * @version 3.14.0\n\t */\n\t\n\tLLMS.Achievements = {\n\t\n\t\t/**\n\t\t * Init\n\t\t *\n\t\t * @return void\n\t\t * @since 3.14.0\n\t\t * @version 3.14.0\n\t\t */\n\t\tinit: function() {\n\t\n\t\t\tvar self = this;\n\t\n\t\t\tif ( $( '.llms-achievement' ) ) {\n\t\t\t\t$( document ).on( 'ready', function() {\n\t\t\t\t\tself.bind();\n\t\t\t\t\tself.maybe_open();\n\t\t\t\t} );\n\t\t\t}\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Bind DOM events\n\t\t *\n\t\t * @return void\n\t\t * @since 3.14.0\n\t\t * @version 3.14.0\n\t\t */\n\t\tbind: function() {\n\t\n\t\t\tvar self = this;\n\t\n\t\t\t$( '.llms-achievement' ).each( function() {\n\t\n\t\t\t\tself.create_modal( $( this ) );\n\t\n\t\t\t} );\n\t\n\t\t\t$( '.llms-achievement' ).on( 'click', function() {\n\t\n\t\t\t\tvar $this = $( this ),\n\t\t\t\t\tid = 'achievement-' + $this.attr( 'data-id' ),\n\t\t\t\t\t$modal = $( '#' + id );\n\t\n\t\t\t\tif ( ! $modal.length ) {\n\t\t\t\t\tself.create_modal( $this );\n\t\t\t\t}\n\t\n\t\t\t\t$modal.iziModal( 'open' );\n\t\n\t\t\t} );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Creates modal a modal for an achievement\n\t\t *\n\t\t * @param obj $el jQuery selector for the modal card\n\t\t * @return void\n\t\t * @since 3.14.0\n\t\t * @version 3.14.0\n\t\t */\n\t\tcreate_modal: function( $el ) {\n\t\n\t\t\tvar id = 'achievement-' + $el.attr( 'data-id' ),\n\t\t\t\t$modal = $( '#' + id );\n\t\n\t\t\tif ( ! $modal.length ) {\n\t\t\t\t$modal = $( '
' );\n\t\t\t\t$( 'body' ).append( $modal );\n\t\t\t}\n\t\n\t\t\t$modal.iziModal( {\n\t\t\t\theaderColor: '#3a3a3a',\n\t\t\t\tgroup: 'achievements',\n\t\t\t\thistory: true,\n\t\t\t\tloop: true,\n\t\t\t\toverlayColor: 'rgba( 0, 0, 0, 0.6 )',\n\t\t\t\ttransitionIn: 'fadeInDown',\n\t\t\t\ttransitionOut: 'fadeOutDown',\n\t\t\t\twidth: 340,\n\t\t\t\tonOpening: function( modal ) {\n\t\n\t\t\t\t\tmodal.setTitle( $el.find( '.llms-achievement-title' ).html() );\n\t\t\t\t\tmodal.setSubtitle( $el.find( '.llms-achievement-date' ).html() );\n\t\t\t\t\tmodal.setContent( '
' + $el.html() + '
' );\n\t\n\t\t\t\t},\n\t\n\t\t\t\tonClosing: function() {\n\t\t\t\t\twindow.history.pushState( '', document.title, window.location.pathname + window.location.search );\n\t\t\t\t},\n\t\n\t\t\t} );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * On page load, opens a modal if the URL contains an achievement in the location hash\n\t\t *\n\t\t * @return void\n\t\t * @since 3.14.0\n\t\t * @version 3.14.0\n\t\t */\n\t\tmaybe_open: function() {\n\t\n\t\t\tvar hash = window.location.hash;\n\t\t\tif ( hash && -1 !== hash.indexOf( 'achievement-' ) ) {\n\t\t\t\t$( 'a[href=\"' + hash + '\"]' ).first().trigger( 'click' );\n\t\t\t}\n\t\n\t\t}\n\t\n\t};\n\t\n\t\t/**\n\t * Main Ajax class\n\t * Handles Primary Ajax connection\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since Unknown\n\t * @version Unknown\n\t */\n\t\n\tLLMS.Ajax = {\n\t\n\t\t/**\n\t\t * Url\n\t\t *\n\t\t * @type {String}\n\t\t */\n\t\turl: window.ajaxurl || window.llms.ajaxurl,\n\t\n\t\t/**\n\t\t * Type\n\t\t *\n\t\t * @type {[type]}\n\t\t */\n\t\ttype: 'post',\n\t\n\t\t/**\n\t\t * Data\n\t\t *\n\t\t * @type {[type]}\n\t\t */\n\t\tdata: [],\n\t\n\t\t/**\n\t\t * Cache\n\t\t *\n\t\t * @type {[type]}\n\t\t */\n\t\tcache: false,\n\t\n\t\t/**\n\t\t * DataType\n\t\t * defaulted to json\n\t\t *\n\t\t * @type {String}\n\t\t */\n\t\tdataType: 'json',\n\t\n\t\t/**\n\t\t * Async\n\t\t * default to false\n\t\t *\n\t\t * @type {Boolean}\n\t\t */\n\t\tasync: true,\n\t\n\t\tresponse:[],\n\t\n\t\t/**\n\t\t * Initialize Ajax methods\n\t\t * loads class methods\n\t\t */\n\t\tinit: function(obj) {\n\t\n\t\t\t// if obj is not of type object or null return false;\n\t\t\tif ( obj === null || typeof obj !== 'object' ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\t// set object defaults if values are not supplied\n\t\t\tobj.url = 'url' in obj ? obj.url : this.url;\n\t\t\tobj.type = 'type' \t\tin obj ? obj.type : this.type;\n\t\t\tobj.data = 'data' \t\tin obj ? obj.data : this.data;\n\t\t\tobj.cache = 'cache' \t\tin obj ? obj.cache : this.cache;\n\t\t\tobj.dataType = 'dataType'\tin obj ? obj.dataType : this.dataType;\n\t\t\tobj.async = 'async'\t\tin obj ? obj.async : this.async;\n\t\n\t\t\t// add nonce to data object\n\t\t\tobj.data._ajax_nonce = wp_ajax_data.nonce;\n\t\n\t\t\t// add post id to data object\n\t\t\tvar $R = LLMS.Rest,\n\t\t\tquery_vars = $R.get_query_vars();\n\t\t\tobj.data.post_id = 'post' in query_vars ? query_vars.post : null;\n\t\t\tif ( ! obj.data.post_id && $( 'input#post_ID' ).length ) {\n\t\t\t\tobj.data.post_id = $( 'input#post_ID' ).val();\n\t\t\t}\n\t\n\t\t\treturn obj;\n\t\t},\n\t\n\t\t/**\n\t\t * Call\n\t\t * Called by external classes\n\t\t * Sets up jQuery Ajax object\n\t\t *\n\t\t * @param {[object]} [object of ajax settings]\n\t\t * @return {[mixed]} [false if not object or this]\n\t\t */\n\t\tcall: function(obj) {\n\t\n\t\t\t// get default variables if not included in call\n\t\t\tvar settings = this.init( obj );\n\t\n\t\t\t// if init return a response of false\n\t\t\tif ( ! settings) {\n\t\t\t\treturn false;\n\t\t\t} else {\n\t\t\t\tthis.request( settings );\n\t\t\t}\n\t\n\t\t\treturn this;\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Calls jQuery Ajax on settings object\n\t\t *\n\t\t * @return {[object]} [this]\n\t\t */\n\t\trequest: function(settings) {\n\t\n\t\t\t$.ajax( settings );\n\t\n\t\t\treturn this;\n\t\n\t\t}\n\t\n\t};\n\t\n\t\t/**\n\t * Create a Donut Chart\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since 3.9.0\n\t * @version 3.9.0\n\t *\n\t * @link https://gist.github.com/joeyinbox/8205962\n\t *\n\t * @param obj $el jQuery element to draw a chart within\n\t */\n\t\n\tLLMS.Donut = function( $el ) {\n\t\n\t\tfunction Donut(options) {\n\t\n\t\t\tthis.settings = $.extend( {\n\t\t\t\telement: options.element,\n\t\t\t\tpercent: 100\n\t\t\t}, options );\n\t\n\t\t\tthis.circle = this.settings.element.find( 'path' );\n\t\t\tthis.settings.stroke_width = parseInt( this.circle.css( 'stroke-width' ) );\n\t\t\tthis.radius = ( parseInt( this.settings.element.css( 'width' ) ) - this.settings.stroke_width ) / 2;\n\t\t\tthis.angle = -97.5; // Origin of the draw at the top of the circle\n\t\t\tthis.i = Math.round( 0.75 * this.settings.percent );\n\t\t\tthis.first = true;\n\t\n\t\t\tthis.animate = function() {\n\t\t\t\tthis.timer = setInterval( this.loop.bind( this ), 10 );\n\t\t\t};\n\t\n\t\t\tthis.loop = function() {\n\t\t\t\tthis.angle += 5;\n\t\t\t\tthis.angle %= 360;\n\t\t\t\tvar radians = ( this.angle / 180 ) * Math.PI,\n\t\t\t\t\tx = this.radius + this.settings.stroke_width / 2 + Math.cos( radians ) * this.radius,\n\t\t\t\t\ty = this.radius + this.settings.stroke_width / 2 + Math.sin( radians ) * this.radius,\n\t\t\t\t\td;\n\t\t\t\tif (this.first === true) {\n\t\t\t\t\td = this.circle.attr( 'd' ) + ' M ' + x + ' ' + y;\n\t\t\t\t\tthis.first = false;\n\t\t\t\t} else {\n\t\t\t\t\td = this.circle.attr( 'd' ) + ' L ' + x + ' ' + y;\n\t\t\t\t}\n\t\t\t\tthis.circle.attr( 'd', d );\n\t\t\t\tthis.i--;\n\t\n\t\t\t\tif (this.i <= 0) {\n\t\t\t\t\tclearInterval( this.timer );\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\n\t\tfunction draw( $el ) {\n\t\t\tvar path = '';\n\t\t\t$el.append( '' + path + '' );\n\t\t\tvar donut = new Donut( {\n\t\t\t\telement: $el,\n\t\t\t\tpercent: $el.attr( 'data-perc' )\n\t\t\t} );\n\t\t\tdonut.animate();\n\t\t}\n\t\n\t\tdraw( $el );\n\t\n\t};\n\t\n\t\t/**\n\t * Instructors List\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since Unknown\n\t * @version Unknown\n\t */\n\t\n\tLLMS.Instructors = {\n\t\n\t\t/**\n\t\t * Init\n\t\t */\n\t\tinit: function() {\n\t\n\t\t\tvar self = this;\n\t\n\t\t\tif ( $( 'body' ).hasClass( 'wp-admin' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tif ( $( '.llms-instructors' ).length ) {\n\t\n\t\t\t\tLLMS.wait_for_matchHeight( function() {\n\t\t\t\t\tself.bind();\n\t\t\t\t} );\n\t\n\t\t\t}\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Bind Method\n\t\t * Handles dom binding on load\n\t\t *\n\t\t * @return {[type]} [description]\n\t\t */\n\t\tbind: function() {\n\t\n\t\t\t$( '.llms-instructors .llms-author' ).matchHeight();\n\t\n\t\t},\n\t\n\t};\n\t\n\t\t/**\n\t * Localization functions for LifterLMS Javascript\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since 2.7.3\n\t * @version 2.7.3\n\t *\n\t * @todo we need more robust translation functions to handle sprintf and pluralization\n\t * at this moment we don't need those and haven't stubbed them out\n\t * those will be added when they're needed\n\t */\n\t\n\tLLMS.l10n = LLMS.l10n || {};\n\t\n\tLLMS.l10n.translate = function ( string ) {\n\t\n\t\tvar self = this;\n\t\n\t\tif ( self.strings[string] ) {\n\t\n\t\t\treturn self.strings[string];\n\t\n\t\t} else {\n\t\n\t\t\treturn string;\n\t\n\t\t}\n\t\n\t};\n\t\n\t/**\n\t * Translate and replace placeholders in a string\n\t *\n\t * @example LLMS.l10n.replace( 'This is a %2$s %1$s String', {\n\t * \t'%1$s': 'cool',\n\t * \t\t\t'%2$s': 'very'\n\t * \t\t} );\n\t * \t\tOutput: \"This is a very cool String\"\n\t *\n\t * @param string string text string\n\t * @param object replacements object containing token => replacement pairs\n\t * @return string\n\t * @since 3.16.0\n\t * @version 3.16.0\n\t */\n\tLLMS.l10n.replace = function( string, replacements ) {\n\t\n\t\tvar str = this.translate( string );\n\t\n\t\t$.each( replacements, function( token, value ) {\n\t\n\t\t\tif ( -1 !== token.indexOf( 's' ) ) {\n\t\t\t\tvalue = value.toString();\n\t\t\t} else if ( -1 !== token.indexOf( 'd' ) ) {\n\t\t\t\tvalue = value * 1;\n\t\t\t}\n\t\n\t\t\tstr = str.replace( token, value );\n\t\n\t\t} );\n\t\n\t\treturn str;\n\t\n\t};\n\t\n\t\t/**\n\t * Handle Lesson Preview Elements\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since 3.0.0\n\t * @version 3.16.12\n\t */\n\t\n\tLLMS.LessonPreview = {\n\t\n\t\t/**\n\t\t * A jQuery object of all outlines present on the current screen\n\t\t *\n\t\t * @type obj\n\t\t */\n\t\t$els: null,\n\t\n\t\t/**\n\t\t * Initialize\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tinit: function() {\n\t\n\t\t\tvar self = this;\n\t\n\t\t\tthis.$locked = $( 'a[href=\"#llms-lesson-locked\"]' );\n\t\n\t\t\tif ( this.$locked.length ) {\n\t\n\t\t\t\tself.bind();\n\t\n\t\t\t}\n\t\n\t\t\tif ( $( '.llms-course-navigation' ).length ) {\n\t\n\t\t\t\tLLMS.wait_for_matchHeight( function() {\n\t\n\t\t\t\t\tself.match_height();\n\t\n\t\t\t\t} );\n\t\n\t\t\t}\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Bind DOM events\n\t\t *\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.16.12\n\t\t */\n\t\tbind: function() {\n\t\n\t\t\tvar self = this;\n\t\n\t\t\tthis.$locked.on( 'click', function() {\n\t\t\t\treturn false;\n\t\t\t} );\n\t\n\t\t\tthis.$locked.on( 'mouseenter', function() {\n\t\n\t\t\t\tvar $tip = $( this ).find( '.llms-tooltip' );\n\t\t\t\tif ( ! $tip.length ) {\n\t\t\t\t\tvar msg = $( this ).attr( 'data-tooltip-msg' );\n\t\t\t\t\tif ( ! msg ) {\n\t\t\t\t\t\tmsg = LLMS.l10n.translate( 'You do not have permission to access this content' );\n\t\t\t\t\t}\n\t\t\t\t\t$tip = self.get_tooltip( msg );\n\t\t\t\t\t$( this ).append( $tip );\n\t\t\t\t}\n\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t$tip.addClass( 'show' );\n\t\t\t\t}, 10 );\n\t\n\t\t\t} );\n\t\n\t\t\tthis.$locked.on( 'mouseleave', function() {\n\t\n\t\t\t\tvar $tip = $( this ).find( '.llms-tooltip' );\n\t\t\t\t$tip.removeClass( 'show' );\n\t\n\t\t\t} );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Match the height of lesson preview items in course navigation blocks\n\t\t *\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tmatch_height: function() {\n\t\n\t\t\t$( '.llms-course-navigation .llms-lesson-link' ).matchHeight();\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Get a tooltip element\n\t\t *\n\t\t * @param string msg message to display inside the tooltip\n\t\t * @return obj\n\t\t * @since 3.0.0\n\t\t * @version 3.2.4\n\t\t */\n\t\tget_tooltip: function( msg ) {\n\t\t\tvar $el = $( '
' );\n\t\t\t$el.append( '
' + msg + '
' );\n\t\t\treturn $el;\n\t\t},\n\t\n\t};\n\t\n\t\t/**\n\t * LifterLMS Loops JS\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since 3.0.0\n\t * @version 3.14.0\n\t */\n\t\n\tLLMS.Loops = {\n\t\n\t\t/**\n\t\t * Initialize\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tinit: function() {\n\t\n\t\t\tvar self = this;\n\t\n\t\t\tif ( $( '.llms-loop' ).length ) {\n\t\n\t\t\t\tLLMS.wait_for_matchHeight( function() {\n\t\n\t\t\t\t\tself.match_height();\n\t\n\t\t\t\t} );\n\t\n\t\t\t}\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Match the height of .llms-loop-item\n\t\t *\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.14.0\n\t\t */\n\t\tmatch_height: function() {\n\t\n\t\t\t$( '.llms-loop-item .llms-loop-item-content' ).matchHeight();\n\t\t\t$( '.llms-achievement-loop-item .llms-achievement' ).matchHeight();\n\t\t\t$( '.llms-certificate-loop-item .llms-certificate' ).matchHeight();\n\t\n\t\t},\n\t\n\t};\n\t\n\t\t/**\n\t * Handle the Collapsible Syllabus Widget / Shortcode\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since Unknown\n\t * @version Unknown\n\t */\n\t\n\tLLMS.OutlineCollapse = {\n\t\n\t\t/**\n\t\t * A jQuery object of all outlines present on the current screen\n\t\t *\n\t\t * @type obj\n\t\t */\n\t\t$outlines: null,\n\t\n\t\t/**\n\t\t * Initialize\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tinit: function() {\n\t\n\t\t\tthis.$outlines = $( '.llms-widget-syllabus--collapsible' );\n\t\n\t\t\tif ( this.$outlines.length ) {\n\t\n\t\t\t\tthis.bind();\n\t\n\t\t\t}\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Bind DOM events\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tbind: function() {\n\t\n\t\t\tvar self = this;\n\t\n\t\t\tthis.$outlines.each( function() {\n\t\n\t\t\t\tvar $outline = $( this ),\n\t\t\t\t\t$headers = $outline.find( '.llms-section .section-header' );\n\t\n\t\t\t\t// bind header clicks\n\t\t\t\t$headers.on( 'click', function( e ) {\n\t\n\t\t\t\t\te.preventDefault();\n\t\n\t\t\t\t\tvar $toggle = $( this ),\n\t\t\t\t\t\t$section = $toggle.closest( '.llms-section' ),\n\t\t\t\t\t\tstate = self.get_section_state( $section );\n\t\n\t\t\t\t\tswitch ( state ) {\n\t\n\t\t\t\t\t\tcase 'closed':\n\t\t\t\t\t\t\tself.open_section( $section );\n\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\tcase 'opened':\n\t\t\t\t\t\t\tself.close_section( $section );\n\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t}\n\t\n\t\t\t\t} );\n\t\n\t\t\t\t// bind optional toggle \"buttons\"\n\t\t\t\t$outline.find( '.llms-collapse-toggle' ).on( 'click', function( e ) {\n\t\n\t\t\t\t\te.preventDefault();\n\t\n\t\t\t\t\tvar $btn = $( this ),\n\t\t\t\t\t\taction = $btn.attr( 'data-action' ),\n\t\t\t\t\t\topposite_action = ( 'close' === action ) ? 'opened' : 'closed';\n\t\n\t\t\t\t\t$headers.each( function() {\n\t\n\t\t\t\t\t\tvar $section = $( this ).closest( '.llms-section' ),\n\t\t\t\t\t\t\tstate = self.get_section_state( $section );\n\t\n\t\t\t\t\t\tif ( opposite_action !== state ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tswitch ( state ) {\n\t\n\t\t\t\t\t\t\tcase 'closed':\n\t\t\t\t\t\t\t\tself.close_section( $section );\n\t\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\t\tcase 'opened':\n\t\t\t\t\t\t\t\tself.open_section( $section );\n\t\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t$( this ).trigger( 'click' );\n\t\n\t\t\t\t\t} );\n\t\n\t\t\t\t} );\n\t\n\t\t\t} );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Close an outline section\n\t\t *\n\t\t * @param obj $section jQuery selector of a '.llms-section'\n\t\t * @return void\n\t\t */\n\t\tclose_section: function( $section ) {\n\t\n\t\t\t$section.removeClass( 'llms-section--opened' ).addClass( 'llms-section--closed' );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Open an outline section\n\t\t *\n\t\t * @param obj $section jQuery selector of a '.llms-section'\n\t\t * @return void\n\t\t */\n\t\topen_section: function( $section ) {\n\t\n\t\t\t$section.removeClass( 'llms-section--closed' ).addClass( 'llms-section--opened' );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Get the current state (open or closed) of an outline section\n\t\t *\n\t\t * @param obj $section jQuery selector of a '.llms-section'\n\t\t * @return string 'opened' or 'closed'\n\t\t */\n\t\tget_section_state: function( $section ) {\n\t\n\t\t\treturn $section.hasClass( 'llms-section--opened' ) ? 'opened' : 'closed';\n\t\n\t\t}\n\t\n\t};\n\t\n\t\t/**\n\t * Handle Password Strength Meter for registration and password update fields\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since 3.0.0\n\t * @version 3.7.0\n\t */\n\t\n\t$.extend( LLMS.PasswordStrength, {\n\t\n\t\t$pass: $( '.llms-password' ),\n\t\t$conf: $( '.llms-password-confirm' ),\n\t\t$meter: $( '.llms-password-strength-meter' ),\n\t\t$form: null,\n\t\n\t\t/**\n\t\t * Init\n\t\t * loads class methods\n\t\t *\n\t\t * @since 3.0.0\n\t\t * @version 3.7.0\n\t\t */\n\t\tinit: function() {\n\t\n\t\t\tif ( $( 'body' ).hasClass( 'wp-admin' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tif ( this.$meter.length ) {\n\t\n\t\t\t\tthis.$form = this.$pass.closest( 'form' );\n\t\n\t\t\t\t// our asset enqueue is all screwed up and I'm too tired to fix it\n\t\t\t\t// so we're going to run this little dependency check\n\t\t\t\t// and wait for matchHeight to be available before binding\n\t\t\t\tvar self = this,\n\t\t\t\t\tcounter = 0,\n\t\t\t\t\tinterval;\n\t\n\t\t\t\tinterval = setInterval( function() {\n\t\n\t\t\t\t\t// if we get to 30 seconds log an error message\n\t\t\t\t\t// and really who cares if the element heights aren't matched\n\t\t\t\t\tif ( counter >= 300 ) {\n\t\n\t\t\t\t\t\tconsole.log( 'cannot do password strength meter.' );\n\t\n\t\t\t\t\t\t// if we can't access ye, increment and wait...\n\t\t\t\t\t} else if ( 'undefined' === typeof wp && 'undefined' === typeof wp.passwordStrength ) {\n\t\n\t\t\t\t\t\tcounter++;\n\t\t\t\t\t\treturn;\n\t\n\t\t\t\t\t\t// bind the events, we're good!\n\t\t\t\t\t} else {\n\t\n\t\t\t\t\t\tself.bind();\n\t\t\t\t\t\tself.$form.trigger( 'llms-password-strength-ready' );\n\t\n\t\t\t\t\t}\n\t\n\t\t\t\t\tclearInterval( interval );\n\t\n\t\t\t\t}, 100 );\n\t\n\t\t\t}\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Bind Method\n\t\t * Handles dom binding on load\n\t\t *\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t */\n\t\tbind: function() {\n\t\n\t\t\tvar self = this;\n\t\n\t\t\t// add submission event handlers when not on a checkout form\n\t\t\tif ( ! this.$form.hasClass( 'llms-checkout' ) ) {\n\t\t\t\tthis.$form.on( 'submit', self, self.submit );\n\t\t\t}\n\t\n\t\t\t// check password strength on keyup\n\t\t\tself.$pass.add( self.$conf ).on( 'keyup', function() {\n\t\t\t\tself.check_strength();\n\t\t\t} );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Check the strength of a user entered password\n\t\t * and update elements depending on the current strength\n\t\t *\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tcheck_strength: function() {\n\t\n\t\t\tvar $pass_field = this.$pass.closest( '.llms-form-field' ),\n\t\t\t\t$conf_field = this.$conf.closest( '.llms-form-field' ),\n\t\t\t\tpass_length = this.$pass.val().length,\n\t\t\t\tconf_length = this.$conf.val().length;\n\t\n\t\t\t// hide the meter if both fields are empty\n\t\t\tif ( ! pass_length && ! conf_length ) {\n\t\t\t\t$pass_field.removeClass( 'valid invalid' );\n\t\t\t\t$conf_field.removeClass( 'valid invalid' );\n\t\t\t\tthis.$meter.hide();\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tif ( this.get_current_strength_status() ) {\n\t\t\t\t$pass_field.removeClass( 'invalid' ).addClass( 'valid' );\n\t\t\t\tif ( conf_length ) {\n\t\t\t\t\t$conf_field.removeClass( 'invalid' ).addClass( 'valid' );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t$pass_field.removeClass( 'valid' ).addClass( 'invalid' );\n\t\t\t\tif ( conf_length ) {\n\t\t\t\t\t$conf_field.removeClass( 'valid' ).addClass( 'invalid' );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tthis.$meter.removeClass( 'too-short very-weak weak medium strong mismatch' );\n\t\t\tthis.$meter.show().addClass( this.get_current_strength( 'slug' ) );\n\t\t\tthis.$meter.html( this.get_current_strength( 'text' ) );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Form submission action called during registration on checkout screen\n\t\t *\n\t\t * @param obj self instance of this class\n\t\t * @param Function callback callback function, passes error message or success back to checkout handler\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tcheckout: function( self, callback ) {\n\t\n\t\t\tif ( self.get_current_strength_status() ) {\n\t\n\t\t\t\tcallback( true );\n\t\n\t\t\t} else {\n\t\n\t\t\t\tcallback( LLMS.l10n.translate( 'There is an issue with your chosen password.' ) );\n\t\n\t\t\t}\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Get the list of blacklisted strings\n\t\t * We'll add a filter to this later so that developers can add their own blacklist to the default WP list\n\t\t *\n\t\t * @return array\n\t\t * @since 3.0.0\n\t\t */\n\t\tget_blacklist: function() {\n\t\t\tvar blacklist = wp.passwordStrength.userInputBlacklist();\n\t\t\treturn blacklist;\n\t\t},\n\t\n\t\t/**\n\t\t * Retrieve current strength as a number, a slug, or a translated text string\n\t\t *\n\t\t * @param string format derived return format [int|slug|text] defaults to int\n\t\t * @return mixed\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tget_current_strength: function( format ) {\n\t\n\t\t\tformat = format || 'int';\n\t\t\tvar pass = this.$pass.val(),\n\t\t\t\tconf = this.$conf.val(),\n\t\t\t\tval;\n\t\n\t\t\t// enforce custom length requirement\n\t\t\tif ( pass.length < 6 ) {\n\t\t\t\tval = -1;\n\t\t\t} else {\n\t\t\t\tval = wp.passwordStrength.meter( pass, this.get_blacklist(), conf );\n\t\t\t\t// 0 & 1 are both very-weak\n\t\t\t\tif ( 0 === val ) {\n\t\t\t\t\tval = 1;\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tif ( 'slug' === format ) {\n\t\t\t\treturn this.get_strength_slug( val );\n\t\t\t} else if ( 'text' === format ) {\n\t\t\t\treturn this.get_strength_text( val );\n\t\t\t} else {\n\t\t\t\treturn val;\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Determines if the current password strength meets the user-defined\n\t\t * minimum password strength requirements\n\t\t *\n\t\t * @return boolean\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tget_current_strength_status: function() {\n\t\t\tvar curr = this.get_current_strength(),\n\t\t\t\tmin = this.get_strength_value( this.get_minimum_strength() );\n\t\t\treturn ( 5 === curr ) ? false : ( curr >= min );\n\t\t},\n\t\n\t\t/**\n\t\t * Get the slug associated with a strength value\n\t\t *\n\t\t * @param int strength_val strength value number\n\t\t * @return string\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tget_strength_slug: function( strength_val ) {\n\t\n\t\t\tvar slugs = {\n\t\t\t\t'-1': 'too-short',\n\t\t\t\t1: 'very-weak',\n\t\t\t\t2: 'weak',\n\t\t\t\t3: 'medium',\n\t\t\t\t4: 'strong',\n\t\t\t\t5: 'mismatch',\n\t\t\t};\n\t\n\t\t\treturn ( slugs[ strength_val ] ) ? slugs[ strength_val ] : slugs[5];\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Gets the translated text associated with a strength value\n\t\t *\n\t\t * @param int strength_val strength value\n\t\t * @return string\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tget_strength_text: function( strength_val ) {\n\t\n\t\t\tvar texts = {\n\t\t\t\t'-1': LLMS.l10n.translate( 'Too Short' ),\n\t\t\t\t1: LLMS.l10n.translate( 'Very Weak' ),\n\t\t\t\t2: LLMS.l10n.translate( 'Weak' ),\n\t\t\t\t3: LLMS.l10n.translate( 'Medium' ),\n\t\t\t\t4: LLMS.l10n.translate( 'Strong' ),\n\t\t\t\t5: LLMS.l10n.translate( 'Mismatch' ),\n\t\t\t};\n\t\n\t\t\treturn ( texts[ strength_val ] ) ? texts[ strength_val ] : texts[5];\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Get the value associated with a strength slug\n\t\t *\n\t\t * @param string strength_slug a strength slug\n\t\t * @return int\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tget_strength_value: function( strength_slug ) {\n\t\n\t\t\tvar values = {\n\t\t\t\t'too-short': -1,\n\t\t\t\t'very-weak': 1,\n\t\t\t\tweak: 2,\n\t\t\t\tmedium: 3,\n\t\t\t\tstrong: 4,\n\t\t\t\tmismatch: 5,\n\t\t\t};\n\t\n\t\t\treturn ( values[ strength_slug ] ) ? values[ strength_slug ] : values.mismatch;\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Form submission handler for registration and update forms\n\t\t *\n\t\t * @param obj e event data\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tsubmit: function( e ) {\n\t\n\t\t\tvar self = e.data;\n\t\t\te.preventDefault();\n\t\t\tself.$pass.trigger( 'keyup' );\n\t\n\t\t\tif ( self.get_current_strength_status() ) {\n\t\t\t\tself.$form.off( 'submit', self.submit );\n\t\t\t\tself.$form.trigger( 'submit' );\n\t\t\t} else {\n\t\t\t\t$( 'html, body' ).animate( {\n\t\t\t\t\tscrollTop: self.$meter.offset().top - 100,\n\t\t\t\t}, 200 );\n\t\t\t\tself.$meter.hide();\n\t\t\t\tsetTimeout( function() {\n\t\t\t\t\tself.$meter.fadeIn( 400 );\n\t\t\t\t}, 220 );\n\t\t\t}\n\t\t}\n\t\n\t} );\n\t\n\t\t/**\n\t * Pricing Table UI\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since Unknown.\n\t * @version Unknown.\n\t */\n\t\n\tLLMS.Pricing_Tables = {\n\t\n\t\t/**\n\t\t * Init\n\t\t */\n\t\tinit: function() {\n\t\n\t\t\tvar self = this;\n\t\n\t\t\tif ( $( 'body' ).hasClass( 'wp-admin' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tif ( $( '.llms-access-plans' ).length ) {\n\t\n\t\t\t\tLLMS.wait_for_matchHeight( function() {\n\t\t\t\t\tself.bind();\n\t\t\t\t} );\n\t\n\t\t\t\tthis.$locked = $( 'a[href=\"#llms-plan-locked\"]' );\n\t\n\t\t\t\tif ( this.$locked.length ) {\n\t\n\t\t\t\t\tLLMS.wait_for_popover( function() {\n\t\t\t\t\t\tself.bind_locked();\n\t\t\t\t\t} );\n\t\n\t\t\t\t}\n\t\n\t\t\t}\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Bind Method\n\t\t * Handles dom binding on load\n\t\t *\n\t\t * @return {[type]} [description]\n\t\t */\n\t\tbind: function() {\n\t\n\t\t\t$( '.llms-access-plan-content' ).matchHeight();\n\t\t\t$( '.llms-access-plan-pricing.trial' ).matchHeight();\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Setup a popover for members-only restricted plans\n\t\t *\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.9.1\n\t\t */\n\t\tbind_locked: function() {\n\t\n\t\t\tthis.$locked.each( function() {\n\t\n\t\t\t\t$( this ).webuiPopover( {\n\t\t\t\t\tanimation: 'pop',\n\t\t\t\t\tcloseable: true,\n\t\t\t\t\tcontent: function( e ) {\n\t\t\t\t\t\tvar $content = $( '
' );\n\t\t\t\t\t\t$content.append( e.$element.closest( '.llms-access-plan' ).find( '.llms-access-plan-restrictions ul' ).clone() );\n\t\t\t\t\t\treturn $content;\n\t\t\t\t\t},\n\t\t\t\t\tplacement: 'top',\n\t\t\t\t\tstyle: 'inverse',\n\t\t\t\t\ttitle: LLMS.l10n.translate( 'Members Only Pricing' ),\n\t\t\t\t\twidth: '280px',\n\t\t\t\t} );\n\t\n\t\t\t} );\n\t\n\t\t},\n\t\n\t};\n\t\n\t\t/**\n\t * LifterLMS Reviews JS\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since Unknown\n\t * @version Unknown\n\t */\n\t\n\tLLMS.Review = {\n\t\t/**\n\t\t * Init\n\t\t * loads class methods\n\t\t */\n\t\tinit: function() {\n\t\t\t// console.log('Initializing Review ');\n\t\t\tthis.bind();\n\t\t},\n\t\n\t\t/**\n\t\t * This function binds actions to the appropriate hooks\n\t\t */\n\t\tbind: function() {\n\t\t\t$( '#llms_review_submit_button' ).click(function()\n\t\t\t\t{\n\t\t\t\tif ($( '#review_title' ).val() !== '' && $( '#review_text' ).val() !== '') {\n\t\t\t\t\tjQuery.ajax({\n\t\t\t\t\t\ttype : 'post',\n\t\t\t\t\t\tdataType : 'json',\n\t\t\t\t\t\turl : window.llms.ajaxurl,\n\t\t\t\t\t\tdata : {\n\t\t\t\t\t\t\taction : 'LLMSSubmitReview',\n\t\t\t\t\t\t\treview_title: $( '#review_title' ).val(),\n\t\t\t\t\t\t\treview_text: $( '#review_text' ).val(),\n\t\t\t\t\t\t\tpageID : $( '#post_ID' ).val()\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsuccess: function()\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tconsole.log( 'Review success' );\n\t\t\t\t\t\t\t$( '#review_box' ).hide( 'swing' );\n\t\t\t\t\t\t\t$( '#thank_you_box' ).show( 'swing' );\n\t\t\t\t\t\t},\n\t\t\t\t\t\terror: function(jqXHR, textStatus, errorThrown )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tconsole.log( jqXHR );\n\t\t\t\t\t\t\tconsole.log( textStatus );\n\t\t\t\t\t\t\tconsole.log( errorThrown );\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tif ($( '#review_title' ).val() === '') {\n\t\t\t\t\t\t$( '#review_title_error' ).show( 'swing' );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$( '#review_title_error' ).hide( 'swing' );\n\t\t\t\t\t}\n\t\t\t\t\tif ($( '#review_text' ).val() === '') {\n\t\t\t\t\t\t$( '#review_text_error' ).show( 'swing' );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$( '#review_text_error' ).hide( 'swing' );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tif ( $( '#_llms_display_reviews' ).attr( 'checked' ) ) {\n\t\t\t\t$( '.llms-num-reviews-top' ).addClass( 'top' );\n\t\t\t\t$( '.llms-num-reviews-bottom' ).show();\n\t\n\t\t\t} else {\n\t\t\t\t$( '.llms-num-reviews-bottom' ).hide();\n\t\t\t}\n\t\t\t$( '#_llms_display_reviews' ).change(function() {\n\t\t\t\tif ( $( '#_llms_display_reviews' ).attr( 'checked' ) ) {\n\t\t\t\t\t$( '.llms-num-reviews-top' ).addClass( 'top' );\n\t\t\t\t\t$( '.llms-num-reviews-bottom' ).show();\n\t\t\t\t} else {\n\t\t\t\t\t$( '.llms-num-reviews-top' ).removeClass( 'top' );\n\t\t\t\t\t$( '.llms-num-reviews-bottom' ).hide();\n\t\t\t\t}\n\t\t\t});\n\t\n\t\t},\n\t};\n\t\n\t\t/**\n\t * Add Spinners for AJAX events\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since 3.0.0\n\t * @version 3.0.0\n\t */\n\t\n\tLLMS.Spinner = {\n\t\n\t\t/**\n\t\t * Get an exiting spinner element or create a new one\n\t\t *\n\t\t * @param obj $el jQuery selector of the parent element that should hold and be mased by a spinner\n\t\t * @param string size size or the spinner [default|small]\n\t\t * default is 40px\n\t\t * small is 20px\n\t\t * @return obj\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tget: function( $el, size ) {\n\t\n\t\t\t// look for an existing spinner\n\t\t\tvar $spinner = $el.find( '.llms-spinning' ).first();\n\t\n\t\t\t// no spinner inside $el\n\t\t\tif ( ! $spinner.length ) {\n\t\n\t\t\t\tsize = ( size ) ? size : 'default';\n\t\n\t\t\t\t// create the spinner\n\t\t\t\t$spinner = $( '
' );\n\t\n\t\t\t\t// add it to the dom\n\t\t\t\t$el.append( $spinner );\n\t\n\t\t\t}\n\t\n\t\t\t// return it\n\t\t\treturn $spinner;\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Start spinner(s) inr=side a given element\n\t\t * Creates them if they don't exist!\n\t\t *\n\t\t * @param obj $el jQuery selector of the parent element that should hold and be mased by a spinner\n\t\t * @param string size size or the spinner [default|small]\n\t\t * default is 40px\n\t\t * small is 20px\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tstart: function( $el, size ) {\n\t\n\t\t\tvar self = this;\n\t\n\t\t\t$el.each( function() {\n\t\n\t\t\t\tself.get( $( this ), size ).show();\n\t\n\t\t\t} );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Store spinners within an element\n\t\t *\n\t\t * @param obj $el jQuery selector of the parent element that should hold and be mased by a spinner\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tstop: function( $el ) {\n\t\n\t\t\tvar self = this;\n\t\n\t\t\t$el.each( function() {\n\t\n\t\t\t\tself.get( $( this ) ).hide();\n\t\n\t\t\t} );\n\t\n\t\t}\n\t\n\t};\n\t\n\t\t/* global LLMS, $ */\n\t\n\t/*!\n\t * JavaScript Cookie v2.2.1\n\t * https://github.com/js-cookie/js-cookie\n\t *\n\t * Copyright 2006, 2015 Klaus Hartl & Fagner Brack\n\t * Released under the MIT license\n\t */\n\t;(function (factory) {\n\t\tvar registeredInModuleLoader;\n\t\tif (typeof define === 'function' && define.amd) {\n\t\t\tdefine(factory);\n\t\t\tregisteredInModuleLoader = true;\n\t\t}\n\t\tif (typeof exports === 'object') {\n\t\t\tmodule.exports = factory();\n\t\t\tregisteredInModuleLoader = true;\n\t\t}\n\t\tif (!registeredInModuleLoader) {\n\t\t\tvar OldCookies = window.Cookies;\n\t\t\tvar api = window.Cookies = factory();\n\t\t\tapi.noConflict = function () {\n\t\t\t\twindow.Cookies = OldCookies;\n\t\t\t\treturn api;\n\t\t\t};\n\t\t}\n\t}(function () {\n\t\tfunction extend () {\n\t\t\tvar i = 0;\n\t\t\tvar result = {};\n\t\t\tfor (; i < arguments.length; i++) {\n\t\t\t\tvar attributes = arguments[ i ];\n\t\t\t\tfor (var key in attributes) {\n\t\t\t\t\tresult[key] = attributes[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t\n\t\tfunction decode (s) {\n\t\t\treturn s.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent);\n\t\t}\n\t\n\t\tfunction init (converter) {\n\t\t\tfunction api() {}\n\t\n\t\t\tfunction set (key, value, attributes) {\n\t\t\t\tif (typeof document === 'undefined') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\tattributes = extend({\n\t\t\t\t\tpath: '/'\n\t\t\t\t}, api.defaults, attributes);\n\t\n\t\t\t\tif (typeof attributes.expires === 'number') {\n\t\t\t\t\tattributes.expires = new Date(new Date() * 1 + attributes.expires * 864e+5);\n\t\t\t\t}\n\t\n\t\t\t\t// We're using \"expires\" because \"max-age\" is not supported by IE\n\t\t\t\tattributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';\n\t\n\t\t\t\ttry {\n\t\t\t\t\tvar result = JSON.stringify(value);\n\t\t\t\t\tif (/^[\\{\\[]/.test(result)) {\n\t\t\t\t\t\tvalue = result;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\t\n\t\t\t\tvalue = converter.write ?\n\t\t\t\t\tconverter.write(value, key) :\n\t\t\t\t\tencodeURIComponent(String(value))\n\t\t\t\t\t\t.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\n\t\n\t\t\t\tkey = encodeURIComponent(String(key))\n\t\t\t\t\t.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent)\n\t\t\t\t\t.replace(/[\\(\\)]/g, escape);\n\t\n\t\t\t\tvar stringifiedAttributes = '';\n\t\t\t\tfor (var attributeName in attributes) {\n\t\t\t\t\tif (!attributes[attributeName]) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tstringifiedAttributes += '; ' + attributeName;\n\t\t\t\t\tif (attributes[attributeName] === true) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// Considers RFC 6265 section 5.2:\n\t\t\t\t\t// ...\n\t\t\t\t\t// 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n\t\t\t\t\t// character:\n\t\t\t\t\t// Consume the characters of the unparsed-attributes up to,\n\t\t\t\t\t// not including, the first %x3B (\";\") character.\n\t\t\t\t\t// ...\n\t\t\t\t\tstringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n\t\t\t\t}\n\t\n\t\t\t\treturn (document.cookie = key + '=' + value + stringifiedAttributes);\n\t\t\t}\n\t\n\t\t\tfunction get (key, json) {\n\t\t\t\tif (typeof document === 'undefined') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\tvar jar = {};\n\t\t\t\t// To prevent the for loop in the first place assign an empty array\n\t\t\t\t// in case there are no cookies at all.\n\t\t\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\t\t\t\tvar i = 0;\n\t\n\t\t\t\tfor (; i < cookies.length; i++) {\n\t\t\t\t\tvar parts = cookies[i].split('=');\n\t\t\t\t\tvar cookie = parts.slice(1).join('=');\n\t\n\t\t\t\t\tif (!json && cookie.charAt(0) === '\"') {\n\t\t\t\t\t\tcookie = cookie.slice(1, -1);\n\t\t\t\t\t}\n\t\n\t\t\t\t\ttry {\n\t\t\t\t\t\tvar name = decode(parts[0]);\n\t\t\t\t\t\tcookie = (converter.read || converter)(cookie, name) ||\n\t\t\t\t\t\t\tdecode(cookie);\n\t\n\t\t\t\t\t\tif (json) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tcookie = JSON.parse(cookie);\n\t\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tjar[name] = cookie;\n\t\n\t\t\t\t\t\tif (key === name) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (e) {}\n\t\t\t\t}\n\t\n\t\t\t\treturn key ? jar[key] : jar;\n\t\t\t}\n\t\n\t\t\tapi.set = set;\n\t\t\tapi.get = function (key) {\n\t\t\t\treturn get(key, false /* read as raw */);\n\t\t\t};\n\t\t\tapi.getJSON = function (key) {\n\t\t\t\treturn get(key, true /* read as json */);\n\t\t\t};\n\t\t\tapi.remove = function (key, attributes) {\n\t\t\t\tset(key, '', extend(attributes, {\n\t\t\t\t\texpires: -1\n\t\t\t\t}));\n\t\t\t};\n\t\n\t\t\tapi.defaults = {};\n\t\n\t\t\tapi.withConverter = init;\n\t\n\t\t\treturn api;\n\t\t}\n\t\n\t\treturn init(function () {});\n\t}));\n\t\n\t/**\n\t * Create a no conflict reference to JS Cookies.\n\t *\n\t * @type {Object}\n\t */\n\tLLMS.CookieStore = Cookies.noConflict();\n\t\n\t/**\n\t * Store information in Local Storage by group.\n\t *\n\t * @since 3.36.0\n\t * @since 3.37.14 Use persistent reference to JS Cookies.\n\t *\n\t * @param string group Storage group id/name.\n\t */\n\tLLMS.Storage = function( group ) {\n\t\n\t\tvar self = this,\n\t\t\tstore = LLMS.CookieStore;\n\t\n\t\t/**\n\t\t * Clear all data for the group.\n\t\t *\n\t\t * @since 3.36.0\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tthis.clearAll = function() {\n\t\t\tstore.remove( group );\n\t\t};\n\t\n\t\t/**\n\t\t * Clear a single item from the group by key.\n\t\t *\n\t\t * @since 3.36.0\n\t\t *\n\t\t * @return obj\n\t\t */\n\t\tthis.clear = function( key ) {\n\t\t\tvar data = self.getAll();\n\t\t\tdelete data[ key ];\n\t\t\treturn store.set( group, data );\n\t\t};\n\t\n\t\t/**\n\t\t * Retrieve (and parse) all data stored for the group.\n\t\t *\n\t\t * @since 3.36.0\n\t\t *\n\t\t * @return obj\n\t\t */\n\t\tthis.getAll = function() {\n\t\t\treturn store.getJSON( group ) || {};\n\t\t}\n\t\n\t\t/**\n\t\t * Retrieve an item from the group by key.\n\t\t *\n\t\t * @since 3.36.0\n\t\t *\n\t\t * @param string key Item key/name.\n\t\t * @param mixed default_val Item default value to be returned when item not found in the group.\n\t\t * @return mixed\n\t\t */\n\t\tthis.get = function( key, default_val ) {\n\t\t\tvar data = self.getAll();\n\t\t\treturn data[ key ] ? data[ key ] : default_val;\n\t\t}\n\t\n\t\t/**\n\t\t * Store an item in the group by key.\n\t\t *\n\t\t * @since 3.36.0\n\t\t *\n\t\t * @param string key Item key name.\n\t\t * @param mixed val Item value\n\t\t * @return obj\n\t\t */\n\t\tthis.set = function( key, val ) {\n\t\t\tvar data = self.getAll();\n\t\t\tdata[ key ] = val;\n\t\t\treturn store.set( group, data );\n\t\t};\n\t\n\t}\n\t\n\t\t/**\n\t * Student Dashboard related JS\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since 3.7.0\n\t * @version 3.10.0\n\t */\n\t\n\tLLMS.StudentDashboard = {\n\t\n\t\t/**\n\t\t * Slug for the current screen/endpoint\n\t\t *\n\t\t * @type {String}\n\t\t */\n\t\tscreen: '',\n\t\n\t\t/**\n\t\t * Will show the number of meters on the page\n\t\t * Used to conditionally bind meter-related events only when meters\n\t\t * actually exist\n\t\t *\n\t\t * @type int\n\t\t */\n\t\tmeter_exists: 0,\n\t\n\t\t/**\n\t\t * Init\n\t\t *\n\t\t * @return void\n\t\t * @since 3.7.0\n\t\t * @version 3.10.0\n\t\t */\n\t\tinit: function() {\n\t\n\t\t\tif ( $( '.llms-student-dashboard' ).length ) {\n\t\n\t\t\t\tthis.meter_exists = $( '.llms-password-strength-meter' ).length;\n\t\t\t\tthis.bind();\n\t\n\t\t\t\tif ( 'orders' === this.get_screen() ) {\n\t\n\t\t\t\t\tthis.bind_orders();\n\t\n\t\t\t\t}\n\t\n\t\t\t}\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Bind DOM events\n\t\t *\n\t\t * @return void\n\t\t * @since 3.7.0\n\t\t * @version 3.7.4\n\t\t */\n\t\tbind: function() {\n\t\n\t\t\tvar self = this,\n\t\t\t\t$toggle = $( '.llms-student-dashboard a[href=\"#llms-password-change-toggle\"]' );\n\t\n\t\t\t// click event for the change password link\n\t\t\t$toggle.on( 'click', function( e ) {\n\t\n\t\t\t\te.preventDefault();\n\t\n\t\t\t\tvar $this = $( this ),\n\t\t\t\t\tcurr_text = $this.text(),\n\t\t\t\t\tcurr_action = $this.attr( 'data-action' ),\n\t\t\t\t\tnew_action = 'hide' === curr_action ? 'show' : 'hide',\n\t\t\t\t\tnew_text = $this.attr( 'data-text' );\n\t\n\t\t\t\tself.password_toggle( curr_action );\n\t\n\t\t\t\t// prevent accidental cancels when users tab out of the confirm password field\n\t\t\t\t// and expect to hit submit with enter key immediately after\n\t\t\t\tif ( 'show' === curr_action ) {\n\t\t\t\t\t$this.attr( 'tabindex', '-777' );\n\t\t\t\t} else {\n\t\t\t\t\t$this.removeAttr( 'tabindex' );\n\t\t\t\t}\n\t\n\t\t\t\t$this.attr( 'data-action', new_action ).attr( 'data-text', curr_text ).text( new_text );\n\t\n\t\t\t} );\n\t\n\t\t\t// this will remove the required by default without having to mess with\n\t\t\t// conditionals in PHP and still allows the required * to show in the label\n\t\n\t\t\tif ( this.meter_exists ) {\n\t\n\t\t\t\t$( '.llms-person-form.edit-account' ).on( 'llms-password-strength-ready', function() {\n\t\t\t\t\tself.password_toggle( 'hide' );\n\t\t\t\t} );\n\t\n\t\t\t} else {\n\t\n\t\t\t\tself.password_toggle( 'hide' );\n\t\n\t\t\t}\n\t\n\t\t\t$( '.llms-donut' ).each( function() {\n\t\t\t\tLLMS.Donut( $( this ) );\n\t\t\t} );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Bind events related to the orders screen on the dashboard\n\t\t *\n\t\t * @return void\n\t\t * @since 3.10.0\n\t\t * @version 3.10.0\n\t\t */\n\t\tbind_orders: function() {\n\t\n\t\t\t$( '#llms-cancel-subscription-form' ).on( 'submit', this.order_cancel_warning );\n\t\t\t$( '#llms_update_payment_method' ).on( 'click', function() {\n\t\t\t\t$( 'input[name=\"llms_payment_gateway\"]:checked' ).trigger( 'change' );\n\t\t\t\t$( this ).closest( 'form' ).find( '.llms-switch-payment-source-main' ).slideToggle( '200' );\n\t\t\t} );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Get the current dashboard endpoint/tab slug\n\t\t *\n\t\t * @return void\n\t\t * @since 3.10.0\n\t\t * @version 3.10.0\n\t\t */\n\t\tget_screen: function() {\n\t\t\tif ( ! this.screen ) {\n\t\t\t\tthis.screen = $( '.llms-student-dashboard' ).attr( 'data-current' );\n\t\t\t}\n\t\t\treturn this.screen;\n\t\t},\n\t\n\t\t/**\n\t\t * Show a confirmation warning when Cancel Subscription form is submitted\n\t\t *\n\t\t * @param obj e JS event data\n\t\t * @return void\n\t\t * @since 3.10.0\n\t\t * @version 3.10.0\n\t\t */\n\t\torder_cancel_warning: function( e ) {\n\t\t\te.preventDefault();\n\t\t\tvar msg = LLMS.l10n.translate( 'Are you sure you want to cancel your subscription?' );\n\t\t\tif ( window.confirm( LLMS.l10n.translate( msg ) ) ) {\n\t\t\t\t$( this ).off( 'submit', this.order_cancel_warning );\n\t\t\t\t$( this ).submit();\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Toggle password related fields on the account edit page\n\t\t *\n\t\t * @param string action [show|hide]\n\t\t * @return void\n\t\t * @since 3.7.0\n\t\t * @version 3.7.4\n\t\t */\n\t\tpassword_toggle: function( action ) {\n\t\n\t\t\tif ( ! action ) {\n\t\t\t\taction = 'show';\n\t\t\t}\n\t\n\t\t\tvar self = this,\n\t\t\t\t$pwds = $( '#password, #password_confirm, #current_password' ),\n\t\t\t\t$form = $( '#password' ).closest( 'form' );\n\t\n\t\t\t// hide or show the fields\n\t\t\t$( '.llms-change-password' )[ action ]();\n\t\n\t\t\tif ( 'show' === action ) {\n\t\t\t\t// make passwords required\n\t\t\t\t$pwds.attr( 'required', 'required' );\n\t\n\t\t\t\tif ( self.meter_exists ) {\n\t\t\t\t\t// add the strength check on form submission\n\t\t\t\t\t$form.on( 'submit', LLMS.PasswordStrength, LLMS.PasswordStrength.submit );\n\t\t\t\t}\n\t\n\t\t\t} else {\n\t\t\t\t// remove requirement so form can be submitted while fields are hidden\n\t\t\t\t// and clear the password out of the fields if typing started\n\t\t\t\t$pwds.removeAttr( 'required' ).val( '' );\n\t\n\t\t\t\tif ( self.meter_exists ) {\n\t\n\t\t\t\t\t// remove the password strength submission check\n\t\t\t\t\t$form.off( 'submit', LLMS.PasswordStrength.submit );\n\t\t\t\t\t// clears the meter\n\t\t\t\t\tLLMS.PasswordStrength.check_strength();\n\t\n\t\t\t\t}\n\t\n\t\t\t}\n\t\n\t\t},\n\t\n\t};\n\t\n\t\t/* global LLMS, $ */\n\t\n\t/**\n\t * User event/interaction tracking.\n\t *\n\t * @since 3.36.0\n\t * @since 3.36.2 Fix JS error when settings aren't loaded.\n\t * @since 3.37.2 When adding an event to the storae also make sure the nonce is set for server-side verification.\n\t * @since 3.37.9 Fix IE compatibility issue related to usage of `Object.assign()`.\n\t * @since 3.37.14 Persist the tracking events via ajax when reaching the cookie size limit.\n\t */\n\tLLMS.Tracking = function( settings ) {\n\t\n\t\tvar self = this,\n\t\t\tstore = new LLMS.Storage( 'llms-tracking' );\n\t\n\t\tsettings = 'string' === typeof settings ? JSON.parse( settings ) : settings;\n\t\n\t\t/**\n\t\t * Initialize / Bind all tracking event listeners.\n\t\t *\n\t\t * @since 3.36.0\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tfunction init() {\n\t\n\t\t\t// Set the nonce for server-side verification.\n\t\t\tstore.set( 'nonce', settings.nonce );\n\t\n\t\t\tself.addEvent( 'page.load' );\n\t\n\t\t\twindow.addEventListener( 'beforeunload', onBeforeUnload );\n\t\t\twindow.addEventListener( 'unload', onUnload );\n\t\n\t\t\tdocument.addEventListener( 'visibilitychange', onVisibilityChange );\n\t\n\t\t};\n\t\n\t\t/**\n\t\t * Add an event.\n\t\t *\n\t\t * @since 3.36.0\n\t\t * @since 3.36.2 Fix error when settings aren't loaded.\n\t\t * @since 3.37.2 Always make sure the nonce is set for server-side verification.\n\t\t * @since 3.37.14 Persist the tracking events via ajax when reaching the cookie size limit.\n\t\t *\n\t\t * @param string|obj event Event Id (type.event) or a full event object from `this.makeEventObj()`.\n\t\t * @param int args Optional additional arguments to pass to `this.makeEventObj()`.\n\t\t * @return {void}\n\t\t */\n\t\tthis.addEvent = function( event, args ) {\n\t\n\t\t\targs = args || {};\n\t\t\tif ( 'string' === typeof event ) {\n\t\t\t\targs.event = event;\n\t\t\t}\n\t\n\t\t\t// If the event isn't registered in the settings don't proceed.\n\t\t\tif ( !settings.events || -1 === settings.events.indexOf( args.event ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\t// Make sure the nonce is set for server-side verification.\n\t\t\tstore.set( 'nonce', settings.nonce );\n\t\n\t\t\tevent = self.makeEventObj( args );\n\t\n\t\t\tvar all = store.get( 'events', [] );\n\t\t\tall.push( event );\n\t\t\tstore.set( 'events', all );\n\t\n\t\t\t// If couldn't store the latest event because of size limits.\n\t\t\tif ( all.length > store.get( 'events', [] ).length ) {\n\t\n\t\t\t\t// Copy the cookie in a temporary variable.\n\t\t\t\tvar _temp = store.getAll();\n\t\t\t\t// Clear the events from the cookie.\n\t\t\t\tstore.clear('events');\n\t\n\t\t\t\t// Add the latest event to the temporary variable.\n\t\t\t\t_temp['events'].push( event );\n\t\n\t\t\t\t// Send the temporary variable as string via ajax.\n\t\t\t\tLLMS.Ajax.call( {\n\t\t\t\t\tdata: {\n\t\t\t\t\t\taction: 'persist_tracking_events',\n\t\t\t\t\t\t'llms-tracking': JSON.stringify(_temp)\n\t\t\t\t\t},\n\t\n\t\t\t\t\terror: function( xhr, status, error ) {\n\t\n\t\t\t\t\t\tconsole.log( xhr, status, error );\n\t\n\t\t\t\t\t},\n\t\t\t\t\tsuccess: function( r ) {\n\t\n\t\t\t\t\t\tif ( 'error' === r.code ) {\n\t\t\t\t\t\t\tconsole.log(r.code, r.message);\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t}\n\t\n\t\t\t\t} );\n\t\n\t\t\t}\n\t\n\t\t}\n\t\n\t\t/**\n\t\t * Retrieve initialization settings.\n\t\t *\n\t\t * @since 3.36.0\n\t\t *\n\t\t * @return obj\n\t\t */\n\t\tthis.getSettings = function() {\n\t\t\treturn settings;\n\t\t}\n\t\n\t\t/**\n\t\t * Create an event object suitable to save as an event.\n\t\t *\n\t\t * @since 3.36.0\n\t\t * @since 3.37.9 Use `$.extend()` in favor of `Object.assign()`.\n\t\t *\n\t\t * @param obj event {\n\t\t * Event hash\n\t\t *\n\t\t * @param {string} event (Required) Event ID, eg: \"page.load\".\n\t\t * @param {url} url Event URL. (Optional, added automatically) Stored as metadata and used to infer an object_id for post events.\n\t\t * @param {time} float (Optional, added automatically) Timestamp (in milliseconds). Used for the event creation date.\n\t\t * @param {int} obj_id (Optional). The object ID. Inferred automatically via `url` if not provided.\n\t\t * @param {obj} meta (Optional) Hash of metadata to store with the event.\n\t\t * }\n\t\t * @return obj\n\t\t */\n\t\tthis.makeEventObj = function( event ) {\n\t\t\treturn $.extend( event, {\n\t\t\t\turl: window.location.href,\n\t\t\t\ttime: Math.round( new Date().getTime() / 1000 ),\n\t\t\t} );\n\t\t}\n\t\n\t\n\t\t/**\n\t\t * Remove the visibility change event listener on window.beforeunload\n\t\t *\n\t\t * Prevents actual unloading from recording a blur event from the visibility change listener\n\t\t *\n\t\t * @param obj e JS event object.\n\t\t * @return void\n\t\t */\n\t\tfunction onBeforeUnload( e ) {\n\t\t\tdocument.removeEventListener( 'visibilitychange', onVisibilityChange );\n\t\t}\n\t\n\t\t/**\n\t\t * Record a `page.exit` event on window.unload.\n\t\t *\n\t\t * @since 3.36.0\n\t\t *\n\t\t * @param obj e JS event object.\n\t\t * @return void\n\t\t */\n\t\tfunction onUnload( e ) {\n\t\t\tself.addEvent( 'page.exit' );\n\t\t}\n\t\n\t\t/**\n\t\t * Record `page.blur` and `page.focus` events via document.visilibitychange events.\n\t\t *\n\t\t * @since 3.36.0\n\t\t *\n\t\t * @param obj e JS event object.\n\t\t * @return void\n\t\t */\n\t\tfunction onVisibilityChange( e ) {\n\t\n\t\t\tvar event = document.hidden ? 'page.blur' : 'page.focus';\n\t\t\tself.addEvent( event );\n\t\n\t\t}\n\t\n\t\t// Initialize on the frontend only.\n\t\tif ( ! $( 'body' ).hasClass( 'wp-admin' ) ) {\n\t\t\tinit();\n\t\t}\n\t\n\t};\n\t\n\tllms.tracking = new LLMS.Tracking( llms.tracking );\n\t\n\t\t/**\n\t * Rest Methods\n\t * Manages URL and Rest object parsing\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since Unknown\n\t * @version Unknown\n\t */\n\t\n\tLLMS.Rest = {\n\t\n\t\t/**\n\t\t * Init\n\t\t * loads class methods\n\t\t */\n\t\tinit: function() {\n\t\t\tthis.bind();\n\t\t},\n\t\n\t\t/**\n\t\t * Bind Method\n\t\t * Handles dom binding on load\n\t\t *\n\t\t * @return {[type]} [description]\n\t\t */\n\t\tbind: function() {\n\t\t},\n\t\n\t\t/**\n\t\t * Searches for string matches in url path\n\t\t *\n\t\t * @param {Array} strings [Array of strings to search for matches]\n\t\t * @return {Boolean} [Was a match found?]\n\t\t */\n\t\tis_path: function( strings ) {\n\t\n\t\t\tvar path_exists = false,\n\t\t\t\turl = window.location.href;\n\t\n\t\t\tfor ( var i = 0; i < strings.length; i++ ) {\n\t\n\t\t\t\tif ( url.search( strings[i] ) > 0 && ! path_exists ) {\n\t\n\t\t\t\t\tpath_exists = true;\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\treturn path_exists;\n\t\t},\n\t\n\t\t/**\n\t\t * Retrieves query variables\n\t\t *\n\t\t * @return {[Array]} [array object of query variable key=>value pairs]\n\t\t */\n\t\tget_query_vars: function() {\n\t\n\t\t\tvar vars = [], hash,\n\t\t\t\thashes = window.location.href.slice( window.location.href.indexOf( '?' ) + 1 ).split( '&' );\n\t\n\t\t\tfor (var i = 0; i < hashes.length; i++) {\n\t\t\t\thash = hashes[i].split( '=' );\n\t\t\t\tvars.push( hash[0] );\n\t\t\t\tvars[hash[0]] = hash[1];\n\t\t\t}\n\t\n\t\t\treturn vars;\n\t\t}\n\t\n\t};\n\t\n\n\t/**\n\t * Initializes all classes within the LLMS Namespace\n\t *\n\t * @return {[type]} [description]\n\t */\n\tLLMS.init = function() {\n\n\t\tfor (var func in LLMS) {\n\n\t\t\tif ( typeof LLMS[func] === 'object' && LLMS[func] !== null ) {\n\n\t\t\t\tif ( LLMS[func].init !== undefined ) {\n\n\t\t\t\t\tif ( typeof LLMS[func].init === 'function') {\n\t\t\t\t\t\tLLMS[func].init();\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\t/**\n\t * Determine if the current device is touch-enabled\n\t *\n\t * @see https://stackoverflow.com/a/4819886/400568 [2018 Update]\n\t * @return {Boolean}\n\t * @since 3.24.3\n\t * @version 3.24.3\n\t */\n\tLLMS.is_touch_device = function() {\n\n\t\tvar prefixes = ' -webkit- -moz- -o- -ms- '.split( ' ' );\n\t\tvar mq = function( query ) {\n\t\t\treturn window.matchMedia( query ).matches;\n\t\t}\n\n\t\tif ( ( 'ontouchstart' in window ) || window.DocumentTouch && document instanceof DocumentTouch ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// include the 'heartz' as a way to have a non matching MQ to help terminate the join\n\t\t// https://git.io/vznFH\n\t\tvar query = ['(', prefixes.join( 'touch-enabled),(' ), 'heartz', ')'].join( '' );\n\t\treturn mq( query );\n\n\t};\n\n\t/**\n\t * Wait for matchHeight to load\n\t *\n\t * @param {Function} cb callback function to run when matchheight is ready\n\t * @return void\n\t * @since 3.0.0\n\t * @version 3.16.6\n\t */\n\tLLMS.wait_for_matchHeight = function( cb ) {\n\t\tthis.wait_for( function() {\n\t\t\treturn ( undefined !== $.fn.matchHeight );\n\t\t}, cb );\n\t}\n\n\t/**\n\t * Wait for webuiPopover to load\n\t *\n\t * @param {Function} cb callback function to run when matchheight is ready\n\t * @return void\n\t * @since 3.9.1\n\t * @version 3.16.6\n\t */\n\tLLMS.wait_for_popover = function( cb ) {\n\t\tthis.wait_for( function() {\n\t\t\treturn ( undefined !== $.fn.webuiPopover );\n\t\t}, cb );\n\t}\n\n\t/**\n\t * Wait for a dependency to load and then run a callback once it has\n\t * Temporary fix for a less-than-optimal assets loading function on the PHP side of things\n\t *\n\t * @param {Function} test a function that returns a truthy if the dependency is loaded\n\t * @param {Function} cb a callback function executed once the dependency is loaded\n\t * @return void\n\t * @since 3.9.1\n\t * @version 3.9.1\n\t */\n\tLLMS.wait_for = function( test, cb ) {\n\n\t\tvar counter = 0,\n\t\t\tinterval;\n\n\t\tinterval = setInterval( function() {\n\n\t\t\t// if we get to 30 seconds log an error message\n\t\t\tif ( counter >= 300 ) {\n\n\t\t\t\tconsole.log( 'could not load dependency' );\n\n\t\t\t\t// if we can't access ye, increment and wait...\n\t\t\t} else {\n\n\t\t\t\t// bind the events, we're good!\n\t\t\t\tif ( test() ) {\n\n\t\t\t\t\tcb();\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.log( 'waiting...' );\n\t\t\t\t\tcounter++;\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tclearInterval( interval );\n\n\t\t}, 100 );\n\n\t};\n\n\tLLMS.init( $ );\n\n})( jQuery );\n\n//# sourceMappingURL=../maps/js/llms.js.map\n"],"sourceRoot":"../../js"}