define(['ko','jquery','Magento_Ui/js/lib/knockout/template/loader','mage/template'],function(ko,$,templateLoader,template){'use strict';var blockLoaderTemplatePath='ui/block-loader',blockContentLoadingClass='_block-content-loading',blockLoader,blockLoaderClass,blockLoaderElement=$.Deferred(),loaderImageHref=$.Deferred();templateLoader.loadTemplate(blockLoaderTemplatePath).done(function(blockLoaderTemplate){loaderImageHref.done(function(loaderHref){blockLoader=template(blockLoaderTemplate.trim(),{loaderImageHref:loaderHref});blockLoader=$(blockLoader);blockLoaderClass='.'+blockLoader.attr('class');blockLoaderElement.resolve();});});function isLoadingClassRequired(element){var position=element.css('position');if(position==='absolute'||position==='fixed'){return false;} return true;} function addBlockLoader(element){element.find(':focus').trigger('blur');element.find('input:disabled, select:disabled').addClass('_disabled');element.find('input, select').prop('disabled',true);if(isLoadingClassRequired(element)){element.addClass(blockContentLoadingClass);} element.append(blockLoader.clone());} function removeBlockLoader(element){if(!element.has(blockLoaderClass).length){return;} element.find(blockLoaderClass).remove();element.find('input:not("._disabled"), select:not("._disabled")').prop('disabled',false);element.find('input:disabled, select:disabled').removeClass('_disabled');element.removeClass(blockContentLoadingClass);} return function(loaderHref){loaderImageHref.resolve(loaderHref);ko.bindingHandlers.blockLoader={update:function(element,displayBlockLoader){element=$(element);if(ko.unwrap(displayBlockLoader())){blockLoaderElement.done(addBlockLoader(element));}else{blockLoaderElement.done(removeBlockLoader(element));}}};};});