1BX.namespace("Aspro"); 2BX.Aspro.Utils = { 3isFunction: (func) => { 4return typeof func == "function" || typeof window[func] === "function";},readyDOM: (callback) => { 5if(document.readyState !== "loading"){callback();}else{document.addEventListener("DOMContentLoaded", callback);} 6},};BX.namespace("Aspro.Loader"); 7BX.namespace("Aspro.Observer"); 8(() => { 9/** 10* class JAsproLoader 11*/ 12const addedCss = []; 13const addedJs = []; 14const addedExt = []; 15class JAsproLoader { 16constructor(){} 17addCss(...items){return new Promise((resolve, reject) => { 18items = items.filter((css) => { 19return BX.type.isString(css) && !~addedCss.indexOf(css);}); 20if(items.length){BX.loadCSS(items, () => { 21items.forEach((css) => { 22addedCss.push(css);}); 23resolve();});}else{resolve();} 24});} 25addJs(...items){return new Promise((resolve, reject) => { 26items = items.filter((js) => { 27return BX.type.isString(js) && !~addedJs.indexOf(js);}); 28if(items.length){BX.loadScript(items, () => { 29items.forEach((js) => { 30addedJs.push(js);}); 31resolve();});}else{resolve();} 32});} 33addExt(...extensions){return new Promise((resolve, reject) => { 34extensions = extensions.map((extension) => { 35return `aspro_${extension}`;}); 36extensions = extensions.filter((extension) => { 37return BX.type.isString(extension) && !~addedExt.indexOf(extension);}); 38if(extensions.length){BX.loadExt(extensions).then(() => { 39extensions.forEach((extension) => { 40addedExt.push(extension);}); 41resolve();});}else{resolve();} 42});} 43added(item){if(BX.type.isString(item) && item) { 44return !!~addedCss.indexOf(item) || !!~addedJs.indexOf(item) || !!~addedExt.indexOf(`aspro_${item}`);}else{return { 45ext: addedExt,css: addedCss, 46js: addedJs,};} 47} 48add(params){params = BX.type.isObject(params) ? params : {};let extensions = params.ext ? (BX.type.isArray(params.ext) ? params.ext : [params.ext]) : []; 49let cssItems = params.css ? (BX.type.isArray(params.css) ? params.css : [params.css]) : []; 50let jsItems = params.js ? (BX.type.isArray(params.js) ? params.js : [params.js]) : []; 51return new Promise((resolve, reject) => { 52this.addExt(...extensions).then(() => { 53this.addCss(...cssItems).then(() => { 54this.addJs(...jsItems).then(() => { 55resolve();}); 56});}); 57});} 58once(params){params = BX.type.isObject(params) ? params : {};params.appear = BX.type.isString(params.appear) 59? [params.appear] 60: BX.type.isArray(params.appear) 61? params.appear 62: null; 63params.add = BX.type.isObject(params.add) ? params.add : null; 64return new Promise((resolve, reject) => { 65if(params.appear){BX.Aspro.Observer.appear(...params.appear).then(() => { 66if(params.add){this.add(params.add).then(resolve);}else{resolve();} 67});} else if(params.add){this.add(params.add).then(resolve);}else{resolve();} 68});} 69} 70BX.Aspro.Loader = new JAsproLoader(); 71/** 72* class JAsproObserver 73*/ 74const intersectionConfig = { 75root: null,rootMargin: "0px", 76threshold: 0,};class JAsproObserver { 77constructor(){this.mkIntersectionConfig();} 78mkIntersectionConfig(config){if(BX.type.isObject(config)) { 79intersectionConfig.root = config.root; 80intersectionConfig.rootMargin = config.rootMargin; 81intersectionConfig.threshold = config.threshold;}else{intersectionConfig.rootMargin = "0px";} 82} 83appear(node, config){config = BX.type.isObject(config) && config ? config : intersectionConfig; 84return new Promise((resolve, reject) => { 85if(BX.type.isString(node)){let nodes = document.querySelectorAll(node); 86if(nodes.length){let observer = new IntersectionObserver((entries, observer) => { 87entries.forEach((entry) => { 88if(entry.isIntersecting){observer.unobserve(entry.target); 89resolve();} 90});}, config); 91nodes.forEach((node) => { 92observer.observe(node);});}else{resolve();} 93} else if(BX.type.isDomNode(node)){new IntersectionObserver((entries, observer) => { 94entries.forEach((entry) => { 95if(entry.isIntersecting){observer.unobserve(entry.target); 96resolve();} 97});}, config).observe(node);}else{resolve();} 98});} 99} 100BX.Aspro.Observer = new JAsproObserver();})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.