var Fse; if (!Fse) Fse = {}; Fse._initializationSteps = []; // Fse._initializing = new $.Deferred(); /* Fse.ready = function( onReady ) { return Fse._initializing.done( onReady ) }; */ Fse.waitingFor = function( waitFor ) { if( typeof waitFor.deferred === "function" ) { Fse._initializationSteps.push( waitFor.deferred() ) ; } }; Fse.toUpperCase = function( str ) { if( ! str ) return str; return str.toUpperCase(); } Fse.toLowerCase = function( str ) { if( ! str ) return str; return str.toLowerCase(); } Fse.capitalize = function( str ) { if( ! str ) return str; return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase(); } Fse.initialize = function() { let d = new $.Deferred(); if( Fse._initializationSteps.length ) { let _completeCount = Fse._initializationSteps.length; d.progress( function() { _completeCount = _completeCount - 1; if( _completeCount == 0 ) { d.resolve(); } }) Fse._initializationSteps.forEach( function( step ) { step.done( function() { d.notify() }) }) } else { d.resolve(); } return d; } /* Fse.wait = function() { Fse.initialize(); } */ if (!Fse.Util) Fse.Util = {}; Fse.Util.deepCopy = function( data, options ) { let copy = $.extend( true, {}, data ); if( options && options.properties ) { let properties = options.properties; if( ! Array.isArray( properties )) { properties = properties.split( "," ); } let propertiesToKeep = {}; properties.forEach( function( p ) { propertiesToKeep[p] = true; }) Object.keys( copy ).forEach( function( k ) { if( ! propertiesToKeep[k] ) { delete copy[k]; } }) } return copy; }; Fse.Util.$ = function( ele ) { if( typeof ele == "string" ) { ele = $(`#${ele}`); } else { ele = $( ele ); } return ele; }; Fse.Util.batch = function( a, f ) { a.forEach( function( e ) { f(e) }) } Fse.Util.getElementsBy = function( fn, tag, root ) { tag = tag ? tag : "*"; let elements = null; if( root ) { root = Fse.Util.$( root ); elements = root.find( tag ); } else { elements = $(tag); } let result = []; elements.each( function( idx ) { let ele = this; if( fn( ele ) ) { result.push( ele ); } }) return result; } Fse.Util.getElementsByClassName = function( cls, tag, root ) { let hasClass = function( e ) { return Fse.Util.hasClass( e, cls ); } return Fse.Util.getElementsBy( hasClass, tag, root ); } Fse.Util._getAncestorBy = function( fn, ele ) { ele = Fse.Util.$( ele ); let parents = ele.parents(); let result = null; parents.each( function( index ) { let e = this; if( result ) return; if( fn( e ) && ! result ) { result = e; } } ) return result; } Fse.Util.getAncestorByTagName = function( ele, tag ) { let tagTest = function( e ) { return e.tagName && e.tagName.toUpperCase() === tag.toUpperCase(); } return Fse.Util._getAncestorBy( tagTest, ele ); } Fse.Util.getAncestorByClassName = function( ele, cls ) { let classTest = function( e ) { return Fse.Util.hasClass( e, cls ); } return Fse.Util._getAncestorBy( classTest, ele ); } Fse.Util.getFirstChild = function( ele ) { return Fse.Util.$( ele ).first()[0]; } Fse.Util.get = function( ele ) { return Fse.Util.$( ele )[0]; } Fse.Util.setXY = function( ele, xy ) { let x = xy[0]; let y = xy[1]; Fse.Util.$(ele).offset({ top: y, left: x }); } Fse.Util.setStyle = function( ele, v, a ) { Fse.Util.$( ele ).css( v, a ); } Fse.Util.insertAfter = function( ele, after ) { Fse.Util.$( ele ).insertAfter( Fse.Util.$( after ) ); } Fse.Util.getChildrenBy = function( ele, fn ) { ele = Fse.Util.$( ele ); let children = []; ele.children().each( function( index ) { if( fn( this )) { children.push( this ); } }) return children; } Fse.Util.getChildren = function( ele ) { return Fse.Util.getChildrenBy( ele, function( e ) { return true } ); } Fse.Util.getPreviousSibling = function( ele ) { return Fse.Util.$(ele).prev()[0]; } Fse.Util.getNextSibling = function( ele ) { return Fse.Util.$(ele).next()[0]; } Fse.Util.hasClass = function ( sElement, sClass ) { return Fse.Util.$( sElement ).hasClass( sClass ); }; Fse.Util.addClassName = function( sElement, sClass ) { Fse.Util.addClass( sElement, sClass ); } Fse.Util.addClass = function ( sElement, sClass ) { let e = Fse.Util.$(sElement); e.addClass( sClass ); }; Fse.Util.removeClassName = function( sElement, sClass ) { Fse.Util.removeClass( sElement, sClass ); }; Fse.Util.removeClass = function( sElement, sClass ) { let e = Fse.Util.$(sElement); e.removeClass( sClass ); }; Fse.Util.replaceClass = function( ele, cls1, cls2 ) { ele = Fse.Util.$( ele ); ele.removeClass( cls1 ); ele.addClass( cls2 ); }; Fse.Util.addListener = function( ele, event, listener, obj ) { let e = Fse.Util.$( ele ); let wrapper = function( _e ) { listener( _e.originalEvent, obj ) } e.on( event, wrapper ); return true; } Fse.Util.isNotEmpty = function (value) { return value !== undefined && value !== null && value !== ""; } Fse.Util.getURLParam = function( sParam ) { let sPageURL = window.location.search.substring(1); let sURLVariables = sPageURL.split('&'); for (let i = 0; i < sURLVariables.length; i++) { let sParameterName = sURLVariables[i].split('='); if (sParameterName[0] == sParam) { return sParameterName[1]; } } } Fse.Util.validateFileType = function( fileInput ) { let accept = fileInput.getAttribute( "accept" ); if( ! accept || accept == "" ) { return true; } else { let bValid = true; let allowedExtensionREStrs = []; let allowedExtensions = accept.split( "," ); allowedExtensions.forEach( function( item ) { allowedExtensionREStrs.push( "\\" + item ); }) allowedExtensions = new RegExp( allowedExtensionREStrs.join( "|" ), "i" ); let filePath = fileInput.value; if (!allowedExtensions.exec(filePath)) { alert('Invalid file type'); fileInput.value = ''; bValid = false; } return bValid; } } Fse.Util.getURLParams = function( sURL ) { let oParams = {}; let sQueryString = sURL.replace( /^.*\?/, "" ); let aPairs = sQueryString.split( "&" ); for( let x = 0; x < aPairs.length; x++ ) { let avp = aPairs[x].split( "=" ); let a = avp[0]; if( avp.length == 2 ) { let v = avp[1]; oParams[a] = decodeURIComponent( v ); } } return oParams; } Fse.Util.updateURL2 = function( sURL, oNewParameters ) { let oParams = {}; let sQueryString = sURL.replace( /^.*\?/, "" ); let aPairs = sQueryString.split( "&" ); for( let x = 0; x < aPairs.length; x++ ) { let avp = aPairs[x].split( "=" ); let a = avp[0]; if( avp.length == 2 ) { let v = avp[1]; oParams[a] = decodeURIComponent( v ); } } for( let sParam in oNewParameters ) { let sValue = oNewParameters[sParam]; oParams[sParam] = sValue; } let aParams = []; for( let sParam in oParams ) { if( oParams[sParam] != null ) { aParams.push( sParam + "=" + encodeURIComponent( oParams[sParam] )); } } if( aParams.length ) { sQueryString = aParams.join( "&" ); sURL = sURL.replace( /\?.*$/, "" ) + "?" + sQueryString; } else { sURL = sURL.replace( /\?.*$/, "" ); } return sURL; }; Fse.Util.updateURL = Fse.Util.updateURL2; Fse.Util.updateURL_obsolete = function( sURL, oNewParameters ) { for( var sParam in oNewParameters ) { var sValue = oNewParameters[sParam]; var sQueryStringParam = sParam + "=" + encodeURIComponent( sValue ); var reParamSearch = new RegExp( sParam + "=", "i" ); if( sURL.search( reParamSearch ) >= 0 ) { var rParam = new RegExp ( sParam + "=[^&]*", "i" ); sURL = sURL.replace( rParam, sQueryStringParam ); } else { if( sURL.length > 0 ) { if( sURL.search( /\?/ ) >= 0 ) { sURL = sURL + "&" + sQueryStringParam; } else { sURL = sURL + "?" + sQueryStringParam; } } else { sURL = sQueryStringParam; } } } return sURL; }; Fse.Util._stpVersion = null; Fse.Util.getSTPVersion = function() { if( ! Fse.Util._stpVersion ) { let meta = $("meta[name='stp-version']"); if( meta.length ) { Fse.Util._stpVersion = meta.attr( "content" ); } } return Fse.Util._stpVersion; } Fse.Util.loadJS = function( sScriptURL ) { let src = Fse.Util.updateURL2( sScriptURL, { v : Fse.Util.getSTPVersion() } ); if( $( "script[src='" + src + "']").length == 0 ) { $("head").append( $("