Fse.Portal._widgetFactories = {}; Fse.Portal.addWidgetFactory = function( key, factory ) { Fse.Portal._widgetFactories[key] = factory; } Fse.Portal.createWidget = function( widgetDef ) { let factory = Fse.Portal._widgetFactories[widgetDef.portletId]; if( ! factory ) { return null; } let widget = factory( widgetDef ); let widgetElement = null; try { widgetElement = widget.element(); } catch( x ) { console.log( x ); } if( ! widgetElement ) { return; } // let portletTitle = $("

").addClass( "portletTitle" ).append( widgetDef.portletName ); let headerBarItems = [ { location : "before", text : widgetDef.portletName } ] headerBarItems.push( { location : "after", template : function() { return $("
").addClass( "widgetHelp" ) .append( $("").addClass( "dx-icon-help" ).on( "click", function( e ){ Fse.Portal.showQuickHelp( widgetDef.portletId ) } ).attr( "title", "help")); } }); if( widget.edit ) { headerBarItems.push( { location : "after", template : function() { let preferencesElement = $("").addClass( "dx-icon-preferences" ) // let preferencesIconCSSColor = "inherit"; let updatePreferencesElement = function( widgetDefConfig ) { if( widget.getDefaultConfig ) { let defaultConfig = widget.getDefaultConfig(); if( ! defaultConfig ) { defaultConfig = {}; } let combinedConfigKeys = $.extend( {}, defaultConfig, widgetDefConfig ); let usingDefaults = true; for( let dp in combinedConfigKeys ) { let dv = defaultConfig[dp]; if( dv !== null ) { // non null default let wdcv = widgetDefConfig[dp]; if( Array.isArray( wdcv ) ) { wdcv = wdcv.sort().join( "," ); } if( widgetDefConfig.hasOwnProperty( dp ) ){ if( Array.isArray( dv ) ) { dv = dv.sort().join( "," ); } // console.log( `${dp} : ${wdcv} == ${dv}` ); if( wdcv !== dv ) { usingDefaults = false; // console.log( `config difference ${dp} : ${wdcv} == ${dv}` ); break; } } else { // console.log( "missing property on config " + dp ); //usingDefaults = false; //break; } } else { // null default if( widgetDefConfig.hasOwnProperty( dp ) ) { if( widgetDefConfig[dp] !== null ) { // console.log( "not null config " + dp ); usingDefaults = false; break; } } } } if( ! usingDefaults ){ preferencesElement .css( { "color" : "#FF6B00" } ) // purple //.addClass( "dx-icon-sun" ) //.removeClass( "dx-icon-preferences" ); } else { preferencesElement .css( { "color" : "inherit" } ) //.removeClass( "dx-icon-sun" ) //.addClass( "dx-icon-preferences" ); } } } updatePreferencesElement( widgetDef.config ); return $("
").addClass( "portletPreferences" ).append( preferencesElement.on( "click", function( e ) { //XXX let targetWidget = widgetDef.dashboard.widgetInstances[widgetDef.portletId]; let targetWidget = widgetDef.dashboard.widgetInstances[widgetDef.widgetId]; targetWidget.edit( function ( preferences ) { let saveURL = $("link#PortalDocRootURL").attr("href") + "/apps/CRM/index.cfm?do=saveWidgetPreferences&mode=direct"; let userDashboard = widgetDef.dashboard.dashboardOptions.dashboard; if( widgetDef.dashboard.currentUserDashboard ) { userDashboard = widgetDef.dashboard.currentUserDashboard.dashboard; } $.post( saveURL, $.param( { widgetId : widgetDef.widgetId, dashboard : userDashboard, portletId : widgetDef.portletId, preferences : JSON.stringify( preferences) } ), function(response) { let loadAll = false; if( loadAll ) { // load them all because it's easy widgetDef.dashboard.loadDashboard(); } else { // just reload this one // update the config widgetDef.config = $.extend( true, {}, preferences ); updatePreferencesElement( widgetDef.config ); // find the content let portletContent = widgetDef.portlet.find( ".portletContent" ); if( portletContent.length ) { let contentHeightPx = portletContent.height(); portletContent.empty(); // get rid of the old one let newWidget = factory( widgetDef ); // create a new one //XXX widgetDef.dashboard.widgetInstances[widgetDef.portletId] = newWidget; widgetDef.dashboard.widgetInstances[widgetDef.widgetId] = newWidget; portletContent.append( newWidget.element() ); // append the content if( newWidget.onDashboardLayout ) { newWidget.onDashboardLayout( { portletContent : portletContent, portletContentHeight : contentHeightPx } ); } } } } ); } ); } )); } } ); } let headerBar = $("
").dxToolbar( { items : headerBarItems }).addClass( "portletTitle" ) let portletContent = $("
").addClass( "portletContent"); widgetDef.portletContent = portletContent; let portlet = $("
").addClass( "portlet3" ).addClass( widgetDef.portletId ) .append( headerBar ) .append( portletContent.append( widgetElement )) widgetDef.portlet = portlet; widget.getPortlet = function() { return portlet; } widget.getWidgetDefinition = function() { return widgetDef; } widget.getPortletContent = function() { return portletContent; } return widget; } WideNarrowDashboardLayout = function( dashboard, element ) { this.dashboard = dashboard; this.rootElement = element; this.widgetCount = 0; this.wideElement = $("
"); this.narrowElement = $( "
" ); this.rootElement.addClass( "portalDashboard" ) this.rootElement.css( { "display" : "grid", "grid-template-columns" : "1fr 300px" }) this.rootElement.append( this.wideElement ) this.rootElement.append( this.narrowElement ) } WideNarrowDashboardLayout.prototype.constructor = WideNarrowDashboardLayout; WideNarrowDashboardLayout.prototype.element = function() { return this.rootElement; } WideNarrowDashboardLayout.prototype.prepareWidget = function( widget ) { } WideNarrowDashboardLayout.prototype.displayWidget = function( widget ) { let layoutManager = this; layoutManager.prepareWidget( widget ); layoutManager.widgetCount++; let container = layoutManager.wideElement; if( layoutManager.widgetCount % 2 ) { container = layoutManager.narrowElement; } container.append( widget.getPortlet() ); //XXX layoutManager.dashboard.widgetInstances[widget.getWidgetDefinition().portletId] = widget; layoutManager.dashboard.widgetInstances[widget.getWidgetDefinition().widgetId] = widget; } WideNarrowDashboardLayout.prototype.empty = function() { this.narrowElement.empty(); this.wideElement.empty(); } DefaultDashboardLayout = function( dashboard, element ) { this.dashboard = dashboard; this.rootElement = element; this.rootElement.addClass( "portalDashboard" ) this.rootElement.addClass( "default" ) } DefaultDashboardLayout.prototype.constructor = DefaultDashboardLayout; DefaultDashboardLayout.prototype.element = function() { return this.rootElement; } DefaultDashboardLayout.prototype.empty = function() { this.rootElement.empty(); } DefaultDashboardLayout.prototype.prepareWidget = function( widget ) { let widgetDef = widget.getWidgetDefinition(); let portlet = widget.getPortlet(); let portletContent = widget.getPortletContent(); let goWide = false; let goTall = false; let width = 1; let height = 1; let heightPx = 0; if( widgetDef.displayMode && widgetDef.displayMode != "" ) { switch ( widgetDef.displayMode ) { case "wide" : goWide = true; width = 2; break; case "tall" : goTall = true; height = 2; break; case "wideAndTall" : goTall = true; goWide = true; width = 2; height = 2; break; case "normal" : goTall = false; goWide = false; break; default : //wxh as 1x1, 3x1, 1x3, 3x3 let parts = widgetDef.displayMode.split( 'x' ); width = parts[0] * 1; height = parts[1] * 1; break; } } else { if( widget.getDefaultSize ) { let defaultSize = widget.getDefaultSize(); width = defaultSize.width; height = defaultSize.height; } else { if( !goWide && widget.isWide ) { goWide = widget.isWide(); if( goWide ) { width = 2; } } if( !goTall && widget.isTall ) { goTall = widget.isTall(); if( goTall ) { height = 2; } } } } if( width > 1 && width <= 3 ) { portlet.css( { "grid-column-start" : `span ${width}` }); goWide = false; } heightPx = height * 220; let contentHeightPx = heightPx - 30; switch ( height ) { case 2: portlet.css( { "grid-row-start" : "span 2" } )//.css( { "height" : "440px" } ); portletContent.css( { "height" : `${contentHeightPx}px` }); //"410px" goTall = false; break; case 3: portlet.css( "grid-row-start", "span 3" ) //.css( { "height" : `${heightPx}px` }); portletContent.css( { "height" : `${contentHeightPx}px` }); goTall = false; break; } if( widget.onDashboardLayout ) { widget.onDashboardLayout( { portletContent : portletContent, portletContentHeight : contentHeightPx } ); } if( goWide ) { portlet .css( "grid-column-start", "span 2" ) //.css( "grid-area", "auto / right") //.css( "grid-column-start", "1" ) } if( goTall ) { portlet.css( "grid-row-start", "span 2" ).css( "height:440px" ); portletContent.css( "height", "410px"); } if( widget.onContentResized ) { let observer = new ResizeObserver( function( resizeData ) { let rect = resizeData[0].contentRect; if( rect.width && rect.height ) { widget.onContentResized( rect ) } }) observer.observe( portletContent[0] ); } // this.resizeObserver.observe( portletContent[0] ); } DefaultDashboardLayout.prototype.displayWidget = function( widget ) { let layoutManager = this; layoutManager.prepareWidget( widget ); layoutManager.dashboard.element.append( widget.getPortlet() ); //XXX layoutManager.dashboard.widgetInstances[widget.getWidgetDefinition().portletId] = widget; layoutManager.dashboard.widgetInstances[widget.getWidgetDefinition().widgetId] = widget; } PortalDashboard = function( dashboardOptions ) { let instance = this; let dashboardOptionDefaults = { actionItems : [], analyzers : [] } instance.dashboardOptions = $.extend( true, {}, dashboardOptionDefaults, dashboardOptions ); instance.appDataURL = $("#appDataURL").attr( "href" ); instance.preferencesPopup = null; instance.widgetList = null; instance.element = null; instance.container = null; instance.layout = null; let urlParams = window.location.href.split( "&" ); urlParams.forEach( function( avp ) { if( avp == "myDashboard" ) { instance.layout = new WideNarrowDashboardLayout( instance, $("#" + instance.dashboardOptions.id ) ); } }) if( ! instance.layout ) { instance.layout = new DefaultDashboardLayout( instance, $("#" + instance.dashboardOptions.id ) ); } instance.widgets = null; instance.widgetInstances = {}; instance.actionItems = this.dashboardOptions.actionItems; instance.analyzers = this.dashboardOptions.analyzers; instance.tabPanel = null; instance.baseTabHeight = 705; instance.currentFilterPreferences = {}; instance.breadcrumbsElement = null; instance.breadcrumbTooltipsElement = null; instance.statusDiv = $("
").css( { 'padding-left' : "5px", "font-style" : "italic", "color" : "#dadce0" }); instance.filterPreferencesEditor = null; instance.filterPreferences = new UserPreferences( this.dashboardOptions.dashboard + ".filterPreferences" ); instance.filterPreferences.addListener( function( newFilterPreferences ) { //console.log( instance.currentFilterPreferences ); //console.log( newFilterPreferences ); let preferencesChanged = false; for( let f in newFilterPreferences ) { if( ! instance.currentFilterPreferences.hasOwnProperty( f ) ) { preferencesChanged = true; } else if( instance.currentFilterPreferences[f] == null && newFilterPreferences[f] == null ) { // both null, not changed } else { let c = instance.currentFilterPreferences[f]; if( c && Array.isArray( c ) ) { c = c.join( "," ); } let n = newFilterPreferences[f]; if( n && Array.isArray( n ) ) { n = n.join( "," ); } if( n !== c ) { preferencesChanged = true; } } if( preferencesChanged ) { // console.log( "Difference on " + f ); break; } } instance.currentFilterPreferences = newFilterPreferences; if( preferencesChanged ) { instance.loadDashboard(); instance.applyFilterPreferencesToAnalyzers(); } }) let ready = $.Deferred(); let filterPreferencesLoaded = false; let userDashboardsLoaded = false; instance.userDashboards = []; instance.currentUserDashboard = null; ready.progress( function() { if( filterPreferencesLoaded && userDashboardsLoaded ) { ready.resolve(); } }) ready.done( function() { instance.create(); }) instance.filterPreferences.loading.done( function( storedFilterPreferences ) { instance.currentFilterPreferences = storedFilterPreferences; filterPreferencesLoaded = true; ready.notify(); }); let userDashboardsDS = Fse.Data.newDataSource( { object : "STP.userDashboards", keyField : "dashboard", objectParams : { dashboard : instance.dashboardOptions.dashboard } } ); userDashboardsDS.load().done( function( userDashboards ) { instance.userDashboards = userDashboards; instance.currentUserDashboard = instance.userDashboards[0]; userDashboardsLoaded = true; ready.notify(); }) } PortalDashboard.prototype.constructor = PortalDashboard; PortalDashboard.prototype.create = function() { let instance = this; let useBox = true; if( useBox ) { instance.create2(); } else { instance.create1(); } } PortalDashboard.prototype.create2 = function() { let instance = this; let dashboardOptions = instance.dashboardOptions; let useBox = true; let boxItems = []; let boxElement = $("
").insertBefore( instance.layout.element() ); boxElement.parent().css( { "height" : "100%" }) let mainToolbarItems = []; instance.userDashboardSelectBox = null; instance.userDashboardAdded = false; instance.loadDashboardOnChange = true; if( instance.userDashboards.length ) { instance.userDashboardSelectBox = $("
").dxSelectBox( { width : 300, dataSource : { store : { type : "array", data : instance.userDashboards, key : "dashboard" } }, displayExpr : "dashboardName", valueExpr : "dashboard", disabled : true, value : instance.currentUserDashboard.dashboard, onSelectionChanged : function( e ) { let selectedUserDashboard = e.component.option( "selectedItem" ); // console.log( "SELECTED USER DASHBOARD" ); // console.log( selectedUserDashboard ); if( ! selectedUserDashboard ) { return; } instance.currentUserDashboard = selectedUserDashboard; if( instance.loadDashboardOnChange ) { instance.loadDashboard() } } }).dxSelectBox("instance"); mainToolbarItems.push( { location : "before", template : function() { return instance.userDashboardSelectBox.element(); } }) } mainToolbarItems.push( { location : "before", template : function() { return instance.statusDiv; } }, { location : "after", widget : "dxButton", options : { icon : "plus", hint : "New Dashboard View", onClick : function( e ) { instance.showPreferencesPopup( { newDashboard: true } ); } } }, { location : "after", widget : "dxButton", options : { icon : "contentlayout", hint : "Manage Dashboard Views", onClick : function( e ) { instance.manageUserDashboards(); } } }, { location : "after", template : function() { return $("
").css( { "width" : "5px" }) } }, { location : "after", widget : "dxButton", options : { icon : "preferences", hint : "Configure This Dashboard View", onClick : function( e ) { instance.showPreferencesPopup(); } }}, { location : "after", widget : "dxButton", options : { icon : "refresh", hint : "Refresh", onClick : function( e ) { instance.loadDashboard(); } }}, { location : "after", widget : "dxButton", options : { text : "Reset All", onClick : function( e ) { instance.loadDashboard( true ); } } }, { location : "after", template : function() { return $("
").css( { "width" : "5px" }) } }, { widget: "dxButton", location: "after", options : { type : "normal", icon :"help", hint : "View Help", onClick : function( e ) { Fse.Portal.showQuickHelp( "GeneralDashboardHelp" ); } }} ) let mainToolbar = $("
").dxToolbar( { items : mainToolbarItems }).addClass( "portalDashboardToolbar" ).dxToolbar( "instance" ); // boxItems.push( { // baseSize : 30, // template : function() { // return mainToolbar.element(); // } // }) instance.element = instance.layout.element(); // $("#" + dashboard.dashboardOptions.id ).addClass( "portalDashboard" ); let hidden = $("
").css( "display", "none" ).insertAfter( instance.element ); instance.container = $("
").addClass( "portalDashboardContainer" ); instance.element.remove(); instance.container.append( instance.element ); if( instance.dashboardOptions.analyzers.length ) { let preferenceToolbar = null; let showPreferencesToolbar = true; if( showPreferencesToolbar ) { instance.breadcrumbsElement = $("
").addClass( "fx-breadcrumbs"); instance.breadcrumbTooltipsElement = $("
").addClass( "fx-breadcrumb-tooltips" ); preferenceToolbar = $("
").dxToolbar( { items : [ { location : "before", widget : "dxButton", options : { icon : "filter", elementAttr : { "data-intercom-target" : "i360-global-filter" }, hint : "Dashboard Global Filter Preferences", onClick : function( e ) { intercom_track_event( e ); instance.editFilterPreferences(); } } }, { location : "before", template : function() { return instance.breadcrumbsElement; } } ] }).addClass( "portalDashboardToolbar" ).dxToolbar( "instance" ); boxItems.push( { baseSize : 30, template : function() { return preferenceToolbar.element(); } }) } instance.tabPanel = $("
").addClass( "portalDashboardTabs" ); let tabs = [ { title : "Dashboard", template : function() { return $("
").dxBox( { direction : "col", height : "100%", items : [ { baseSize : 30, template : function() { return mainToolbar.element().css( { "padding-top" : "5px", "padding-right" : "9px", "padding-left" : "9px"})} }, { ratio : 1, template : function() { return $("
").append( instance.container ).dxScrollView( { showScrollbar : "always" } ); // return instance.container } } ] }) } } ]; let selectedTab = null; instance.dashboardOptions.analyzers.forEach( function( analyzerItem ) { let tab = { title : analyzerItem.title, instance : analyzerItem.instance, template : function() { let contentHeight = instance.baseTabHeight + 10; if( analyzerItem.instance.setContentHeight ) { analyzerItem.instance.setContentHeight( contentHeight ); } if( analyzerItem.instance.setDashboard ) { analyzerItem.instance.setDashboard( instance ); } if( analyzerItem.instance.setFilterPreferences ) { analyzerItem.instance.setFilterPreferences( instance.currentFilterPreferences ); } //return $("
").append( analyzerItem.instance.element() ).css( "height", contentHeight + "px" ).addClass( "fx-analyzerTab" ); return $("
").append( analyzerItem.instance.element() ).css( { "height": "100%", "width" : "auto", "padding" : "5px" } ).addClass( "fx-analyzerTab" ); } }; if( analyzerItem.id ) { tab.id = analyzerItem.id; } if( analyzerItem.selectedAnalyzer ) { selectedTab = tab; } tabs.push( tab ); }) instance.tabPanel.dxTabPanel( { deferRendering : true, items : tabs, selectedItem : selectedTab, height : "100%", onSelectionChanged : function( e ) { if( e.addedItems.length != 1 ) { return; } let itemData = e.addedItems[0]; if( itemData.instance && itemData.instance.isDataVisible && itemData.instance.applyFilters ) { if( ! itemData.instance.isDataVisible() ) { itemData.instance.applyFilters(); } } } }) boxItems.push( { ratio : 1, template : function() { return instance.tabPanel; } }) } else { boxItems.push( { baseSize : 30, template : function() { return mainToolbar.element(); } }, { ratio : 1, template : function() { return instance.container; } }) } if( instance.breadcrumbTooltipsElement ) { instance.breadcrumbTooltipsElement.insertAfter( boxElement ); } boxElement.dxBox( { direction : "col", items : boxItems, width : "100%", height : "100%" }) } PortalDashboard.prototype.create1 = function() { let dashboard = this; let dashboardOptions = this.dashboardOptions; dashboard.element = dashboard.layout.element(); // $("#" + dashboard.dashboardOptions.id ).addClass( "portalDashboard" ); let hidden = $("
").css( "display", "none" ).insertAfter( dashboard.element ); dashboard.container = $("
").addClass( "portalDashboardContainer" ).addClass( "fse-hidden" ).insertBefore( dashboard.element ); dashboard.container.append( dashboard.element ); let mainToolbarItems = []; dashboard.userDashboardSelectBox = null; dashboard.userDashboardAdded = false; dashboard.loadDashboardOnChange = true; if( dashboard.userDashboards.length ) { dashboard.userDashboardSelectBox = $("
").dxSelectBox( { width : 300, dataSource : { store : { type : "array", data : dashboard.userDashboards, key : "dashboard" } }, displayExpr : "dashboardName", valueExpr : "dashboard", disabled : true, value : dashboard.currentUserDashboard.dashboard, onSelectionChanged : function( e ) { let selectedUserDashboard = e.component.option( "selectedItem" ); // console.log( "SELECTED USER DASHBOARD" ); // console.log( selectedUserDashboard ); if( ! selectedUserDashboard ) { return; } dashboard.currentUserDashboard = selectedUserDashboard; if( dashboard.loadDashboardOnChange ) { dashboard.loadDashboard() } } }).dxSelectBox("instance"); mainToolbarItems.push( { location : "before", template : function() { return dashboard.userDashboardSelectBox.element(); } }) } mainToolbarItems.push( { location : "after", widget : "dxButton", options : { icon : "plus", hint : "New Dashboard View", onClick : function( e ) { dashboard.showPreferencesPopup( { newDashboard: true } ); } } }, { location : "after", widget : "dxButton", options : { icon : "contentlayout", hint : "Manage Dashboard Views", onClick : function( e ) { dashboard.manageUserDashboards(); } } }, /* { location : "after", widget : "dxButton", options : { icon : "preferences", hint : "Configure Dashboard", onClick : function( e ) { dashboard.showPreferencesPopup(); } }}, */ { location : "after", template : function() { return $("
").css( { "width" : "5px" }) } }, { location : "after", widget : "dxButton", options : { icon : "preferences", hint : "Configure This Dashboard View", onClick : function( e ) { dashboard.showPreferencesPopup(); } }}, { location : "after", widget : "dxButton", options : { icon : "refresh", hint : "Refresh", onClick : function( e ) { dashboard.loadDashboard(); } }}, { location : "after", widget : "dxButton", options : { text : "Reset All", onClick : function( e ) { dashboard.loadDashboard( true ); } } }, { location : "after", template : function() { return $("
").css( { "width" : "5px" }) } }, { widget: "dxButton", location: "after", options : { type : "normal", icon :"help", hint : "View Help", onClick : function( e ) { Fse.Portal.showQuickHelp( "GeneralDashboardHelp" ); } }} ) let mainToolbar = $("
").dxToolbar( { items : mainToolbarItems }).insertBefore( dashboard.element ).addClass( "portalDashboardToolbar" ).dxToolbar( "instance" ); if( dashboard.dashboardOptions.analyzers.length ) { let preferenceToolbar = null; let showPreferencesToolbar = true; if( showPreferencesToolbar ) { dashboard.breadcrumbsElement = $("
").addClass( "fx-breadcrumbs"); dashboard.breadcrumbTooltipsElement = $("
").addClass( "fx-breadcrumb-tooltips" ); preferenceToolbar = $("
").dxToolbar( { items : [ { location : "before", widget : "dxButton", options : { icon : "filter", hint : "Dashboard Global Filter Preferences", onClick : function( e ) { dashboard.editFilterPreferences(); } } }, { location : "before", template : function() { return dashboard.breadcrumbsElement; } } ] }).addClass( "portalDashboardToolbar" ).dxToolbar( "instance" ); } dashboard.tabPanel = $("
").addClass( "portalDashboardTabs" ).insertBefore( dashboard.container ); if( preferenceToolbar ) { preferenceToolbar.element().insertBefore( dashboard.tabPanel ); } let tabs = [ { title : "Dashboard", template : function() { dashboard.container.removeClass( "fse-hidden" ); return dashboard.container; } } ]; let selectedTab = null; dashboard.dashboardOptions.analyzers.forEach( function( analyzerItem ) { let tab = { title : analyzerItem.title, instance : analyzerItem.instance, template : function() { let contentHeight = dashboard.baseTabHeight + 10; if( analyzerItem.instance.setContentHeight ) { analyzerItem.instance.setContentHeight( contentHeight ); } if( analyzerItem.instance.setDashboard ) { analyzerItem.instance.setDashboard( dashboard ); } if( analyzerItem.instance.setFilterPreferences ) { analyzerItem.instance.setFilterPreferences( dashboard.currentFilterPreferences ); } return $("
").append( analyzerItem.instance.element() ).css( "height", contentHeight + "px" ).addClass( "fx-analyzerTab" ); } }; if( analyzerItem.id ) { tab.id = analyzerItem.id; } if( analyzerItem.selectedAnalyzer ) { selectedTab = tab; } tabs.push( tab ); }) dashboard.tabPanel.dxTabPanel( { deferRendering : true, items : tabs, selectedItem : selectedTab, onSelectionChanged : function( e ) { if( e.addedItems.length != 1 ) { return; } let itemData = e.addedItems[0]; if( itemData.instance && itemData.instance.isDataVisible && itemData.instance.applyFilters ) { if( ! itemData.instance.isDataVisible() ) { itemData.instance.applyFilters(); } } } }) } else { dashboard.container.removeClass( "fse-hidden") } if( dashboard.breadcrumTooltipsElement ) { dashboard.breadcrumbTooltipsElement.insertAfter( dashboard.container ); } } PortalDashboard.prototype.manageUserDashboards = function() { let mudp = new ManageUserDashboardsPopup( this ); mudp.show(); return; } PortalDashboard.prototype.applyFilterPreferencesToAnalyzers = function() { // loop through the analyzers and setFilterPreferences let instance = this; let tabPanelItems = instance.tabPanel.dxTabPanel( "instance" ).option( "items" ); tabPanelItems.forEach( function( tpi ) { if(tpi.instance && tpi.instance.setFilterPreferences ) { tpi.instance.setFilterPreferences( $.extend( true, {}, instance.currentFilterPreferences )); } }) } PortalDashboard.prototype.addActionItem = function( actionItem ) { this.actionItems.push( actionItem ); } PortalDashboard.prototype.getFilterPreferences = function() { return this.filterPreferences.getAll(); } PortalDashboard.prototype.getBreadcrumbDisplayParams = function( paramName ) { let breadcrumbDisplayParams = { "territoryPath" : { hint : "Territory", multipleDisplay : "Multiple Territories", object : "TER.salesTerritories", key : "territoryPath", displayExpr : "territoryPath" }, "clientSegPath" : { hint : "Operator Segment", multipleDisplay : "Multiple Operator Segments", object : "OPR.segments", key : "clientSegPath", displayExpr : "clientSegPath" }, "productHierarchyPath" : { hint : "Product", multipleDisplay : "Multiple Products", object : "PRD.productHierarchyPaths", key : "productHierarchyPath", displayExpr : "productHierarchyPath" }, "salesRepId" : { hint : "Sales Rep", multipleDisplay : "Multiple Sales Reps", object : "CRM.salesRepList", key : "fspro_userId", displayExpr : "fullName" }, "budgetCategoryId" : { hint : "Budget Category", multipleDisplay : "Multiple Budget Categories", object : "PRD.budgetCategories", key : "budgetCategoryId", displayExpr : "budgetCategory" }, "mfr_id" : { hint : "Manufacturer", multipleDisplay : "Multiple Manufacturers", object : "PRD.manufacturers", key : "mfr_id", displayExpr : "mfr_name" }, "productSetTags" : { hint : "Product Set", multipleDisplay : "Multiple Product Sets", object : "PRD.productSets", key : "productSetTag", displayExpr : "productSetName" }, "staffType" : { hint : "Staff Type"} } return breadcrumbDisplayParams[paramName] } PortalDashboard.prototype.updateBreadcrumbs = function() { if( ! this.breadcrumbsElement ) { return; } let instance = this; let filterPreferences = instance.currentFilterPreferences instance.breadcrumbsElement.empty(); instance.breadcrumbTooltipsElement.empty(); let breadcrumbAdded = false; for( let p in filterPreferences ) { let paramValues = []; if( filterPreferences[p] ) { paramValues = filterPreferences[p]; if( ! Array.isArray( paramValues ) ) { if( typeof paramValues === 'string') { paramValues = paramValues.split( "," ); } else { paramValues = [ paramValues ]; } } if( paramValues.length === 0 ) { // nothing to show continue; } let crumbHint = p; let bread = $("
").dxButton( { onClick : function( e ) { // let the user change the preferences instance.editFilterPreferences(); // alternately we could remove just one like we do for the analyzers /* todo - do something with the delete to remove the filter let copySearchParams = $.extend( true, {}, _searchParams ); copySearchParams[p] = null; instance.search( copySearchParams ); */ } }).css( { "max-width" : "300px", "white-space" : "nowrap", "overflow" : "hidden", "text-overflow" : "ellipsis", "background-color" : "#d9ebf7", "margin-right" : "5px" }) let breadButton = bread.dxButton( "instance" ); let dataStore = null; let displayExpr = null; let crumbDisplay = crumbHint; let bcrp = null; switch ( p ) { case "focusProduct" : crumbDisplay = "Focus Products Only"; break; case "staffType" : if(paramValues[0] == 'MFR') crumbDisplay = "Manufacturer Staff Only"; else if(paramValues[0] == 'BRO') crumbDisplay = "Broker Staff Only"; break; default: bcrp = instance.getBreadcrumbDisplayParams( p ); // console.log( `breadcrumb for ${p}`); // console.log( bcrp ); if( bcrp ) { displayExpr = bcrp.displayExpr; dataStore = Fse.Data.createCustomStore( { dataURL : instance.appDataURL, object : bcrp.object, key : bcrp.key }) } break; } let tooltipContent = $("
"); if( dataStore ) { let tooltipOptions = { target : bread, showEvent : "mouseenter", hideEvent : "mouseleave", contentTemplate : function( container ) { container.append( tooltipContent ); } }; if( paramValues.length == 1 ) { tooltipContent.append( $("
").append( bcrp.hint )) dataStore.byKey( paramValues[0] ).done( function( result ) { if( ! Array.isArray( result ) ) { result = [result]; } let crumbDisplay = result[0][displayExpr]; if( p.endsWith( "Path" ) ) { crumbDisplay = crumbDisplay.replace( /.*\//, ".../" ); } breadButton.option( { text : crumbDisplay, hint : bcrp.hint }); // no close icon }) } else { breadButton.option( { text : bcrp.multipleDisplay } ); // no close icon tooltipOptions.contentTemplate = function( container ) { container.append( tooltipContent ); for( let pvx = 0; pvx < paramValues.length; pvx ++ ) { dataStore.byKey( paramValues[pvx] ).done( function( result ) { if( ! Array.isArray( result ) ) { result = [result]; } let crumbDisplay = result[0][displayExpr]; if( p.endsWith( "Path" ) ) { crumbDisplay = crumbDisplay.replace( /.*\//, ".../" ); } tooltipContent.append( $("
").append( crumbDisplay )); }) } } // for( let pvx = 0; pvx < paramValues.length; pvx ++ ) { // dataStore.byKey( paramValues[pvx] ).done( function( result ) { // if( ! Array.isArray( result ) ) { // result = [result]; // } // let crumbDisplay = result[0][displayExpr]; // if( p.endsWith( "Path" ) ) { // crumbDisplay = crumbDisplay.replace( /.*\//, ".../" ); // } // tooltipContent.append( $("
").append( crumbDisplay )); // }) // } } $("
").dxTooltip( tooltipOptions ).appendTo( instance.breadcrumbTooltipsElement ).addClass( "fx-breadcrumb-tooltip" ); } else { breadButton.option( { text : crumbDisplay, hint : crumbHint } ); // no close icon } instance.breadcrumbsElement.append( bread ); breadcrumbAdded = true; } } } PortalDashboard.prototype.editFilterPreferences = function( onSave ) { if( ! this.filterPreferencesEditor ) { this.filterPreferencesEditor = new FilterPreferencesEditor(); } this.filterPreferencesEditor.show( this.filterPreferences, onSave ); } PortalDashboard.prototype.actionItemsFor = function( data, analyzers ) { let dashboard = this; let a = this.actionItems; let r = []; for( let ax = 0; ax < a.length; ax++ ) { let i = a[ax]; if( i.test( data ) ) { r.push( { text : i.text, onItemClick : function( e ) { i.execute( data, e ); } }) } } let analyzersToSearch = []; if( analyzers ) { if( ! Array.isArray( analyzers ) ) { analyzers = [ analyzers ]; } let analyzersInScope = {}; analyzers.forEach( function( a ) { analyzersInScope[a] = true; } ) this.analyzers.forEach( function( a ) { if( analyzersInScope[a.id] ) { analyzersToSearch.push( a ); } }) } else { this.analyzers.forEach( function( a ) { analyzersToSearch.push( a ); }) }; //console.log( "AnalyzersToSearch" ); //console.log( analyzersToSearch ); //console.log( "End AnalyzersToSearch") for( let ax = 0; ax < analyzersToSearch.length; ax++ ) { if( ! analyzersToSearch[ax].instance.getActions ) { continue; } let analyzer = analyzersToSearch[ax].instance; a = analyzer.getActions(); for( let aax = 0; aax < a.length; aax++ ) { let i = a[aax]; if( i.test( data ) ) { r.push( { text : i.text, onItemClick : function( e ) { i.execute( data, e ); dashboard.selectTab( analyzersToSearch[ax].id ); // dashboard.tabPanel.dxTabPanel("instance").option( "selectedIndex", ax + 1 ); } }) } } } return r; } PortalDashboard.prototype.selectTab = function( tabId ) { if( ! this.tabPanel ) { return; } let tabPanel = this.tabPanel.dxTabPanel("instance"); let tabs = tabPanel.option( "items" ); for( let tx = 0; tx < tabs.length; tx++ ) { let tab = tabs[tx]; if( tab.id == tabId ) { tabPanel.option( "selectedIndex", tx ); } } } PortalDashboard.prototype.tabSearch = function( tabId, searchParams ) { if( ! this.tabPanel ) { return; } let tabPanel = this.tabPanel.dxTabPanel("instance"); let tabs = tabPanel.option( "items" ); for( let tx = 0; tx < tabs.length; tx++ ) { let tab = tabs[tx]; if( tab.id == tabId ) { if( tab.instance && tab.instance.search && typeof tab.instance.search === "function" ) { tab.instance.search( searchParams ); tabPanel.option( "selectedIndex", tx ); } break; } } } PortalDashboard.prototype.hasTab = function( tabId ) { if( ! this.tabPanel ) { return false; } let tabPanel = this.tabPanel.dxTabPanel("instance"); let tabs = tabPanel.option( "items" ); let hasTab = false; for( let tx = 0; tx < tabs.length; tx++ ) { let tab = tabs[tx]; if( tab.id == tabId ) { if( tab.instance && tab.instance.search && typeof tab.instance.search === "function" ) { hasTab = true; } } } return hasTab; } WidgetLoadAction = function( widgetDef ) { this.widgetDef = widgetDef; this.createTime = (new Date()).getTime(); this.startTime = null; this.simulated = false; this.defaultLoadDelay = 300; // .3 of a second } WidgetLoadAction.prototype.constructor = WidgetLoadAction; WidgetLoadAction.prototype.perform = function() { let instance = this; instance.startTime = ( new Date()).getTime(); // console.log( `WidgetLoadAction.perform for ${instance.widgetDef.portletId}` ); let widget = Fse.Portal.createWidget( this.widgetDef ); if( widget ) { instance.widgetDef.dashboard.layout.displayWidget( widget ); if( widget.ready ) { // console.log( `Using ready for ${instance.widgetDef.portletId}`); return widget.ready(); } } let d = $.Deferred(); this.simulated = true; let simulatedDelay = 300 + Math.floor(Math.random() * 2000 ); console.log( `Simulated delay for ${instance.widgetDef.portletId}: ${simulatedDelay}ms` ); window.setTimeout( function() { d.resolve(); }, simulatedDelay ) return d; } WidgetLoadManager = function( queueLength, statusDiv ) { let instance = this; instance.loadQueue = []; instance.loadThreads = queueLength > 1 ? queueLength : 1; instance.loadingCount = 0; instance.loadMonitor = $.Deferred(); instance.startTime = ( new Date() ).getTime(); instance.statusDiv = statusDiv; instance.statusDiv.empty(); instance.widgetsToLoad = 0; instance.widgetsLoaded = 0; instance.loadMonitor.progress( function( wla ) { let t = (new Date()).getTime(); let delayTime = wla.startTime - wla.createTime; let waitTime = t - wla.startTime; if( ! wla.simulated ) { // console.log( `ACTUAL: WidgetLoadManager.loadMontitor.progress is ${wla.widgetDef.portletId} (queue time : ${delayTime}, run time : ${waitTime})`); } else { // console.log( `SIMULATED: WidgetLoadManager.loadMontitor.progress is ${wla.widgetDef.portletId} (queue time : ${delayTime}, run time : ${waitTime})`); } instance.loadingCount--; instance.widgetsLoaded++; if( instance.loadingCount == 0 ) { let endTime = ( new Date() ).getTime(); // console.log( `***load time is ${endTime - instance.startTime} ms`); instance.loadMonitor.resolve(); } instance.updateStatus(); instance.process(); }) } WidgetLoadManager.prototype.constructor = WidgetLoadManager; WidgetLoadManager.prototype.load = function( widgetDef ) { this.widgetsToLoad++; this.loadQueue.push( new WidgetLoadAction( widgetDef ) ); this.process(); } WidgetLoadManager.prototype.updateStatus = function() { let instance = this; if( instance.widgetsToLoad == instance.widgetsLoaded ) { instance.statusDiv.empty(); } else { let message = `Loading ${instance.widgetsLoaded + 1} of ${instance.widgetsToLoad}...`; instance.statusDiv.text( message ); } } WidgetLoadManager.prototype.process = function() { let instance = this; let now = new Date(); if( instance.loadQueue.length == 0 ) { //console.log( `Nothing to do, loadQueue.length is ${instance.loadQueue.length}`); //console.log( ` loadingCount is ${instance.loadingCount}`); return; } if( instance.loadingCount >= instance.loadThreads ) { //console.log( `Already busy, loadQueue.length is ${instance.loadQueue.length} >= ${instance.loadThreads}`); //console.log( ` loadingCount is ${instance.loadingCount}`); return; } instance.loadingCount++; let loadAction = instance.loadQueue.shift(); //console.log( `Loading ${loadAction.widgetDef.portletId}... (queueLength = ${instance.loadQueue.length} loadingCount = ${instance.loadingCount}) @ ${now}` ); loadAction.perform().done( function() { instance.loadMonitor.notify( loadAction ); }) } WidgetLoadManager.prototype.complete = function() { let instance = this; return instance.loadMonitor; } PortalDashboard.prototype.displayWidget = function( widgetDef, widget ) { let dashboard = this; dashboard.element.append( widget.getPortlet() ); // widget.appendTo ( dashboard.element ); //XXX dashboard.widgetInstances[widgetDef.portletId] = widget; dashboard.widgetInstances[widgetDef.widgetId] = widget; } PortalDashboard.prototype.loadDashboard = function( resetAll ) { let dashboard = this; let deferred = $.Deferred(); if( resetAll ) { // execute the reset here and when complete load the dashboard let saveURL = $("link#PortalDocRootURL").attr("href") + "/apps/CRM/index.cfm?do=resetDashboardWidgets&mode=direct"; let dashboardToLoad = dashboard.dashboardOptions.dashboard; if( dashboard.currentUserDashboard ) { dashboardToLoad = dashboard.currentUserDashboard.dashboard; //console.log( "Loading..." ) //console.log( dashboard.currenUserDashboard ); } $.post( saveURL, $.param( { dashboard : dashboardToLoad } ), function(response) { dashboard.loadDashboard( false ).done( function() { deferred.resolve(); }); } ); return deferred; } dashboard.layout.empty(); // dashboard.element.empty(); dashboard.widgetInstances = {}; let useLoadManager = true; let loadManager = null; if( useLoadManager ) { loadManager = new WidgetLoadManager(10, dashboard.statusDiv ); if( dashboard.userDashboardSelectBox ) { // console.log( "userDashboardSelectBox DISABLED" ); dashboard.userDashboardSelectBox.option( { disabled : true } ); } // dashboard.statusDiv.text( "" ); // let seconds = 0; // let interval = setInterval( function() { // seconds++; // dashboard.statusDiv.text( `loading(${seconds})...`); // }, 1000 ) loadManager.complete().done( function() { if( dashboard.userDashboardSelectBox ) { // console.log( "userDashboardSelectBox ENABLED" ); dashboard.userDashboardSelectBox.option( { disabled : false } ); } // console.log( "**** ALL WIDGETS HAVE BEEN LOADED ****" ); // clearInterval( interval ); // dashboard.statusDiv.text( "" ); }) } let userDashboard = dashboard.dashboardOptions.dashboard; if( dashboard.currentUserDashboard ) { userDashboard = dashboard.currentUserDashboard.dashboard; } //console.log( 'CURRENT USER DASHBOARD' ); //console.log( dashboard.currentUserDashboard ); let useDashboardWidgetsDataSource = Fse.Data.newDataSource( { paginate : false, object : "STP.userDashboardWidgets", objectParams : { dashboard : userDashboard }}) useDashboardWidgetsDataSource.load().done( function( data ) { dashboard.widgets = data; let widgetsLoaded = 0; dashboard.widgets.forEach( function( dashboardWidget ) { widgetsLoaded++; if( false && widgetsLoaded > 8 ) { return; } if( dashboardWidget.config ) { dashboardWidget.config = JSON.parse( dashboardWidget.config ); } else { dashboardWidget.config = {}; } dashboardWidget.filterPreferences = $.extend( true, {}, dashboard.getFilterPreferences()); dashboardWidget.dashboard = dashboard; if( loadManager ) { loadManager.load( dashboardWidget ); } else { let widget = Fse.Portal.createWidget( dashboardWidget ); if( widget ) { dashboard.element.append( widget.getPortlet() ); // widget.appendTo ( dashboard.element ); dashboard.widgetInstances[dashboardWidget.portletId] = widget; } } }) if( loadManager ) loadManager.updateStatus(); dashboard.updateBreadcrumbs(); deferred.resolve(); }) return deferred; } PortalDashboard.prototype.applyPreferences = function( preferenceOptions ) { if( ! preferenceOptions ) { preferenceOptions = {}; } let dashboard = this; let selectedPortlets = []; let items = dashboard.userWidgetsDataGrid.getVisibleRows(); items.forEach( function( item ) { if( item.removed ) return; selectedPortlets.push( { portletId : item.data.portletId, widgetId : item.data.widgetId ? item.data.widgetId : 0, portletName : item.data.portletName, displayMode : item.data.displayMode } ); }) //console.log( selectedPortlets ); let formData = dashboard.dashboardForm.option( "formData" ); let saveURL = $("link#PortalDocRootURL").attr("href") + "/apps/CRM/index.cfm?do=saveDashboardPreferences&mode=direct"; $.post( saveURL, $.param( { dashboard : formData.dashboard, dashboardName : formData.dashboardName, portlets : JSON.stringify(selectedPortlets) } ), function(saveResponse) { if( ! preferenceOptions.afterApply ) { let userDashboardsDS = Fse.Data.newDataSource( { object : "STP.userDashboards", keyField : "dashboard", objectParams : { dashboard : dashboard.dashboardOptions.dashboard } } ); userDashboardsDS.load().done( function( userDashboards ) { dashboard.userDashboards = userDashboards; // instance.currentUserDashboard = instance.userDashboards[0]; let selectOptions = { dataSource : { store : { type : "array", data : dashboard.userDashboards, key : "dashboard" } }, value : saveResponse.dashboard } // dashboard.userDashboardAdded = true; if( preferenceOptions.newDashboard ) { dashboard.loadDashboardOnChange = false; } dashboard.userDashboardSelectBox.option( selectOptions ); if( preferenceOptions.newDashboard ) { setTimeout( function() { dashboard.loadDashboard().done( function() { dashboard.loadDashboardOnChange = true; }); }, 50 ); } }) } else { preferenceOptions.afterApply( preferenceOptions.newDashboard, saveResponse ) } } ); } PortalDashboard.prototype.showPreferencesPopup = function( preferenceOptions ) { let dpp = new DashboardPreferencesPopup( this, preferenceOptions ); dpp.show(); return; } Fse.Portal.createDashboard = function( oOptions ) { return new PortalDashboard( oOptions ); } Fse.Portal.createPortlet = function( oOptions ) { if( ! oOptions.dashboardId ) { oOption.dashboard = "userDashboard"; } var dashboard = $( "#" + oOptions.dashboardId ); if( dashboard.length == 0 ) { // no dashboard, see if we can get the id from the if( oOptions.portletId ) { let portletContainer = $("#" + oOptions.portletId ); if( portletContainer.length ) { dashboard = portletContainer.parent(); } } } if( dashboard.length == 0 ) { // no dashboard found return; } if( ! oOptions.title ) { oOptions.title = "" } var portlet; var alreadyThere = true; if( ! oOptions.portletId ) { portlet = $("
"); alreadyThere = false; } else { portlet = $( "#" + oOptions.portletId ); if( portlet.length == 0 ) { alreadyThere = false; portlet = $("
").attr( { id : oOptions.portletId } ); } } portlet.addClass( "portlet3") .append( $("

").addClass( "portletTitle" ).append( oOptions.title )) .append( $("
") .addClass( "portletContent" ) .append( oOptions.contentTemplate() ) ); if( ! alreadyThere ) { dashboard.append( portlet ); } return portlet; }; Fse.Portal.suggestFullScreen = function() { var bSlideNav = $("body" ).hasClass( "slide-nav-on" ); var bFullWidth = $("body" ).hasClass( "full-width" ) var bFullScreen = bSlideNav && bFullWidth; if( $("#toastContainer").length == 0 ) { $("body").append( $("
").attr( "id", "toastContainer" )); } $("#toastContainer").dxToast({ message : "This application works best when the full screen is enabled. Go to Account Profile User Preferences to make changes.", type : "info", displayTime : 3000, height: 100, position : "top center" }); if( ! bFullScreen ) { $("#toastContainer").dxToast("show"); } } Fse.Portal._navigationDrawer = null; Fse.Portal.initNavigation = function() { let navigationURL = Fse.Util.updateURL( $("link#appDataURL").attr( "href"), { mode : "direct", object : "STP.userNavigation" } ); let drawerElement = $("
"); let displayElement = $("#display"); drawerElement.insertBefore( displayElement ); drawerElement.append( displayElement ); const $menu = $("
").css( "width", "auto" ); $menu.dxMenu({ cssClass : "fx-navigation", hideSubmenuOnMouseLeave: false, showFirstSubmenuMode: { name: "onHover", delay: { show: 0, hide: 0 } }, orientation : "vertical", onItemClick( e ) { Fse.Portal._navigationDrawer.hide(); const itemData = e.itemData; if( itemData.uri != '' ) { let targetURL = null if ( ( new RegExp( "^http", "i" )).test( itemData.uri )) { targetURL = itemData.uri } else if ( ( new RegExp( "^/" )).test( itemData.uri )) { targetURL = $("link#PortalDocRootURL").attr( "href" ) + itemData.uri } let targetWindow = "_self"; if( e.itemData.hrefTarget != '' ) { targetWindow = e.itemData.hrefTarget; } if( targetURL ) { window.open( targetURL, targetWindow ); return; } } else if ( itemData.clickJS != '' ) { let clickJS = itemData.clickJS.replace( new RegExp( 'javascript:', 'i' ), '' ); if( clickJS != '' ) { try { eval( clickJS ) } catch( t ) { } } } }, }); ( new DevExpress.data.DataSource( navigationURL ) ).load().done( function( navigationItems ) { $menu.dxMenu("instance").option( "items", navigationItems ); let foundNavigation = false; for( let nx = 0; nx < navigationItems.length && ! foundNavigation; nx++ ) { let item = navigationItems[nx]; if( /^re:/.test( item.menuSelectionCode ) ) { try { let menuSelectionRegExp = new RegExp( item.menuSelectionCode.replace( /^re:/, '' ), "i" ); if( menuSelectionRegExp.test( window.location.href ) ) { // this is the current matching menu item $("#titleContainer #title").html( item.text ); foundNavigation = true; } } catch( t ) { } } } }) Fse.Portal._navigationDrawer = drawerElement.dxDrawer({ elementAttr : { id : "drawer" }, openedStateMode : "overlap", position : "left", revealMode : "slide", closeOnOutsideClick: true, template : function() { const $scrollView = $("
").append( $menu ); $scrollView.dxScrollView({ scrollByContent: true, scrollByThumb: true, height : "100%", width : 300, showScrollbar: 'onScroll', //onReachBottom: updateBottomContent, //reachBottomText: 'Updating...', }); return $scrollView; } }).dxDrawer('instance'); } Fse.Portal.toggleNavigationDrawer = function() { if( Fse.Portal._navigationDrawer ) { Fse.Portal._navigationDrawer.toggle(); } } Fse.Portal._userPermissions = null; Fse.Portal.checkPermission = function( sPermission ) { if( ! Fse.Portal._userPermissions ) { let sURL = $("link#PortalDocRootURL").attr("href") + "/data.cfm?object=permissionList"; $.ajax({ type: "GET", async: false, url: sURL, success: function(response) { Fse.Portal._userPermissions = {}; for( var x = 0; x <= response.length; x++ ) { Fse.Portal._userPermissions[response[x]] = true; } } }); } if( Fse.Portal._userPermissions[sPermission] ) { return true; } else { return false; } } Fse.Portal.togglePanel = function( oIcon ) { // var sCookiePath = window.location.href.replace( /https?:\/\/[^\/]*/g, "" ); var oPanel = _$(oIcon.getAttribute( "panelId" )); if( oPanel ) { //var sCookieValue; if( oPanel.className.match( "hidden-element" )) { // turn it on Spry.Utils.removeClassName( oPanel, "hidden-element" ); //oIcon.src = oIcon.src.replace( "_off.gif", "_on.gif" ); //sCookieValue = "visible"; } else { // turn it off Spry.Utils.addClassName( oPanel, "hidden-element" ); //oIcon.src = oIcon.src.replace( "_on.gif", "_off.gif" ); //sCookieValue = "hidden"; } //var sCookieName = oIcon.panelPosition + "_panel_state"; //var sCookiePath = window.location.href.replace( /https?:\/\/[^\/]*|\u003F.*/g, "" ); //var oCookieExpires = new Date( (new Date()).getTime() + 604800000 ); // 1 week from now //oCookieExpires = null; //Fse.Portal.setCookie( sCookieName, sCookieValue, oCookieExpires, sCookiePath ); } }; Fse.Portal._searchCenterSocketContentBusy = false; Fse.Portal.activateNavigation = function( bNow ) { console.log( "activateNavigation", bNow ); } Fse.Portal.deactivateNavigation = function() { console.log( "deactivateNavigation" ) } Fse.Portal.toggleNavigation = function(){ console.log( "toggleNavigation" ); } Fse.Portal.panelOff = function( sPanelName ) { console.log( "panelOff", sPanelName ); } Fse.Portal.panelOn = function( sPanelName ) { console.log( "panelOn", sPanelName ) } Fse.Portal.togglePanelByName = function( sPanelName ) { console.log( "togglePanelByName", sPanelName ); } var Fse; if (!Fse) Fse = {}; if( !Fse.Portal ) Fse.Portal = {}; // YAHOO.namespace("Fse.Portal"); window.addEventListener('mouseup', function(e) { var x = document.querySelector('#report-center-options-container'); if (event.target != document.querySelector("#reportCenterViewOptions-portlet-view-control-icon")) { Fse.Portal.hideReportCenterViewOptions(); } }); Fse.Portal.getPortalDocRootURL = function() { var oLink = document.getElementById( "PortalDocRootURL" ); return oLink.getAttribute( "href" ); }; Fse.Portal.setUserPreferrence = function( sLabel, oData ) { if( document.forms.frm_setUserPreferrence ) { var sData = Fse.Util.updateURL( "?", oData ); sData = sData.substr( 2, sData.length - 2 ); // remove ?& oForm = document.forms.frm_setUserPreferrence; oForm.elements.label.value = sLabel; oForm.elements.data.value = sData; Fse.Ajax.sendForm( oForm ); } }; Fse.Portal._dialogPortlets = {}; Fse.Portal._docRoot; Fse.Portal._loggedIn; Fse.Portal._usePopupIcon = false; Fse.Portal.init = function() { var fnOnScroll = function( e ) { let useNewLogic = true; if( useNewLogic ){ let $body = $("body"); let scrollTopThresholdOn = 68; let scrollMode = $body.hasClass( "scroll" ); if( ! scrollMode ) { if (document.body.scrollTop > scrollTopThresholdOn || document.documentElement.scrollTop > scrollTopThresholdOn ) { $body.addClass( "scroll" ); } } else { if( document.documentElement.scrollTop < scrollTopThresholdOn ) { $body.removeClass( "scroll" ); } } } else { let scrollTopThreshold = 91; let $body = $("body"); if( $body.hasClass( "canopy" ) ) { scrollTopThreshold = 68; } if (document.body.scrollTop > scrollTopThreshold || document.documentElement.scrollTop > scrollTopThreshold ) { $body.addClass( "scroll" ); } else { $body.removeClass( "scroll" ); } } } window.onscroll = fnOnScroll; var oPopupOptions = Fse.Util.get( "popupOptions" ); // YAHOO.util.Dom.get( "popupOptions" ); var oOptions = Fse.Util.get( "options" ); // YAHOO.util.Dom.get( "options" ); if( oOptions && oPopupOptions) { var fnOptionCheck = function( oNode ) { var bMatch = Fse.Util.hasClass( oNode, "option" ); // YAHOO.util.Dom.hasClass( oNode, "option" ); return bMatch; }; var aOptions = Fse.Util.getChildrenBy( oOptions, fnOptionCheck ); // YAHOO.util.Dom.getChildrenBy( oOptions, fnOptionCheck ); for( var i = 0; i < aOptions.length; i++ ) { if( Fse.Util.hasClass( aOptions[i], "searchCenter" ) ) { // YAHOO.util.Dom.hasClass( aOptions[i], "searchCenter" ) var oOption = aOptions[i]; var oSpan = document.createElement( "span" ); var oSpanIcon = document.createElement( "span" ); oSpanIcon.setAttribute( "class", "ico search" ); oSpan.appendChild( oSpanIcon ); oSpanIcon.setAttribute( "title", oOption.innerHTML ); var sActivationScript = "oSpanIcon._activate = function( oEvent, oObject ) { " + oOption.getAttribute( "fse:onclick" ) + "; };" try { eval( sActivationScript ); YAHOO.util.Event.addListener( oSpanIcon, "click", oSpanIcon._activate, oSpanIcon ); } catch ( x ) { } oInsertPoint = Fse.Util.getFirstChild( "specialLinks" ); // YAHOO.util.Dom.getFirstChild( "specialLinks" ); let specialLinksElement = document.getElementById( "specialLinks" ); if( specialLinksElement ) { if( oInsertPoint ) { specialLinksElement.insertBefore( oSpan, oInsertPoint ); } else { specialLinksElement.appendChild( oSpan ); } } } else if ( Fse.Util.hasClass( aOptions[i], "reportCenter" ) ) { // YAHOO.util.Dom.hasClass( aOptions[i], "reportCenter" ) var oOption = aOptions[i]; var oReportCenterIcon = document.getElementById( "report-center-icon" ); if( oReportCenterIcon ) { var sActivationScript = "oReportCenterIcon._activate = function( oEvent, oObject ) { " + oOption.getAttribute( "fse:onclick" ) + "; };" try { eval( sActivationScript ); // YAHOO.util.Event.addListener( oReportCenterIcon, "click", oReportCenterIcon._activate, oOptionIcon ); } catch ( x ) { } } } else if ( Fse.Util.hasClass( aOptions[i], "profileActions" ) ) { // YAHOO.util.Dom.hasClass( aOptions[i], "profileActions" ) var oOption = aOptions[i]; var oOptionIcon = Fse.Util.get( "option-icon-profileActions" ); // YAHOO.util.Dom.get( "option-icon-profileActions" ); var oApplicationTitle = Fse.Util.get( "title" ); // YAHOO.util.Dom.get( "title" ); if( oApplicationTitle ) { oOptionIcon.setAttribute( "title", oApplicationTitle.firstChild.nodeValue + " Actions" ); } else { oOptionIcon.setAttribute( "title", "Profile Actions" ); } oOptionIcon.setAttribute( "title", oOption.innerHTML ); var sActivationScript = "oOptionIcon._activate = function( oEvent, oObject ) { " + oOption.getAttribute( "fse:onclick" ) + "; };" try { eval( sActivationScript ); YAHOO.util.Event.addListener( oOptionIcon, "click", oOptionIcon._activate, oOptionIcon ); Fse.Util.removeClass( oOptionIcon, "hidden" ); // YAHOO.util.Dom.removeClass( oOptionIcon, "hidden" ); if( ! Fse.Portal._usePopupIcon ) { Fse.Util.addClass( oOptionIcon, "text" ); // YAHOO.util.Dom.addClass( oOptionIcon, "text" ); oOptionIcon.innerHTML = "Actions"; } YAHOO.util.Event.addListener( oOptionIcon, "mouseover", _showProfileActions, oOption ); YAHOO.util.Event.addListener( oOptionIcon, "mouseout", _hideProfileActions, oOption ); } catch ( x ) { } } else if( Fse.Util.hasClass( aOptions[i], "searchCenterKeyword" ) ) { // YAHOO.util.Dom.hasClass( aOptions[i], "searchCenterKeyword" ) var oOption = aOptions[i]; var oInput = document.createElement( "input" ); oInput.setAttribute( "title", oOption.innerHTML ); oInput.setAttribute( "id", oOption.getAttribute( "fse:fieldName" ) ); oInput.setAttribute( "name", oOption.getAttribute( "fse:fieldName" ) ); oInput.setAttribute( "value", "" ); oInput.setAttribute( "class", "quick search" ); oInput.setAttribute( "placeholder", "quick search" ); var sActivationScript = "oInput._activate = function( oEvent, oObject ) { " + oOption.getAttribute( "fse:onChange" ) + "; };" try { eval( sActivationScript ); YAHOO.util.Event.addListener( oInput, "change", oInput._activate, oInput ); } catch ( x ) { } oInsertPoint = Fse.Util.getFirstChild( "specialLinks" ); // YAHOO.util.Dom.getFirstChild( "specialLinks" ); let specialLinksElement = document.getElementById( "specialLinks" ); if( specialLinksElement ) { if( oInsertPoint ) { specialLinksElement.insertBefore( oInput, oInsertPoint ); } else { specialLinksElement.appendChild( oInput ); } } } else { } } var fnDialogPortletCheck = function( oNode ) { var bMatch = Fse.Util.hasClass( oNode, "dialog" ) && Fse.Util.hasClass( oNode, "portlet" ); // YAHOO.util.Dom.hasClass( oNode, "dialog" ) && YAHOO.util.Dom.hasClass( oNode, "portlet" ); return bMatch; }; var aDialogPortlets = Fse.Util.getChildrenBy( oOptions, fnDialogPortletCheck ); // YAHOO.util.Dom.getChildrenBy( oOptions, fnDialogPortletCheck ); if( aDialogPortlets ) { var oSearchCenter; var bOptionsFound = false; for( var pIdx = 0; pIdx < aDialogPortlets.length; pIdx ++ ) { var oDialogPortlet = aDialogPortlets[pIdx]; var bMoveOption = false; if( !oSearchCenter && Fse.Util.hasClass( oDialogPortlet, "searchCenter" )) { // YAHOO.util.Dom.hasClass( oDialogPortlet, "searchCenter" )) { alert( `Notify Support with this value: '${window.href}'` ); oSearchCenter = oDialogPortlet; bOptionsFound = true; bMoveOption = true; } else if ( false ) { // follow this model to support other options } if( bMoveOption ) { oDialogPortlet.parentNode.removeChild( oDialogPortlet ); oPopupOptions.appendChild( oDialogPortlet ); } } if( bOptionsFound ) { var fnActivateOption = function( oEvent, oObj ) { if( oObj ) { if( ! oObj.visibleState ) { var defaultX = YAHOO.util.Event.getPageX( oEvent ); var defaultY = YAHOO.util.Event.getPageY( oEvent ); var sId = oObj.element.getAttribute( "id" ) var x = YAHOO.util.Cookie.get( sId + "_xPos" ); if( ! x ) { x = defaultX - oObj.element.offsetWidth; } var y = YAHOO.util.Cookie.get( sId + "_yPos" ); if( ! y ) { y = defaultY; } oObj.moveTo( x, y ); oObj.show(); } else { oObj.hide(); } } }; var fnHideListener = function() { this.visibleState = false; }; var fnShowListener = function() { this.visibleState = true; }; var oOptionIcons = Fse.Util.get( "option-icons" ); // YAHOO.util.Dom.get( "option-icons" ); if( oSearchCenter ) { var sSearchCenterId = oSearchCenter.getAttribute("id"); var oSearchCenterHeader = Fse.Util.getElementsByClassName( "header", "div", oSearchCenter ); // YAHOO.util.Dom.getElementsByClassName( "header", "div", oSearchCenter ); if( ! oSearchCenterHeader.id ) { oSearchCenterHeader.id = oSearchCenter.id + "-header"; } var dialogOptions = {}; dialogOptions.visible = false; dialogOptions.constraintoviewport = true; var x = YAHOO.util.Cookie.get( sSearchCenterId + "_xPos" ); var y = YAHOO.util.Cookie.get( sSearchCenterId + "_yPos" ); if( x != null && y != null ) { dialogOptions.xy = [ x * 1, y * 1 ]; } YAHOO.Fse.Portal.searchCenter = new YAHOO.widget.Overlay( oSearchCenter, dialogOptions ); Fse.Util.removeClass( oSearchCenter, "hidden" ); // YAHOO.util.Dom.removeClass( oSearchCenter, "hidden" ); YAHOO.Fse.Portal.searchCenter.render(); YAHOO.Fse.Portal.searchCenter.visibleState = false; YAHOO.Fse.Portal.searchCenter.hideEvent.subscribe( fnHideListener ); YAHOO.Fse.Portal.searchCenter.showEvent.subscribe( fnShowListener ); Fse.Portal._dialogPortlets[sSearchCenterId] = YAHOO.Fse.Portal.searchCenter; var oOptionIcon = Fse.Util.get( "option-icon-searchCenter" ); // YAHOO.util.Dom.get( "option-icon-searchCenter" ); var oApplicationTitle = Fse.Util.get( "title" ); // YAHOO.util.Dom.get( "title" ); if( oApplicationTitle ) { oOptionIcon.setAttribute( "title", oApplicationTitle.firstChild.nodeValue + " Search Center" ); } else { oOptionIcon.setAttribute( "title", "Search Center" ); } YAHOO.util.Dom.removeClass( oOptionIcon, "hidden" ); YAHOO.util.Event.addListener( oOptionIcon, "click", fnActivateOption, YAHOO.Fse.Portal.searchCenter ); YAHOO.Fse.Portal.searchCenter.DD = function(id, sGroup, config) { YAHOO.Fse.Portal.searchCenter.DD.superclass.constructor.apply(this, arguments); }; YAHOO.extend ( YAHOO.Fse.Portal.searchCenter.DD, YAHOO.util.DD, { endDrag: function(e) { var x = YAHOO.util.Dom.getX( oSearchCenter ); YAHOO.util.Cookie.set( sSearchCenterId + "_xPos", x ); var y = YAHOO.util.Dom.getY( oSearchCenter ); YAHOO.util.Cookie.set( sSearchCenterId + "_yPos", y ); } } ); var dd = new YAHOO.Fse.Portal.searchCenter.DD( oSearchCenter ); dd.setHandleElId( oSearchCenterHeader ); /* var aHeader = YAHOO.util.Dom.getElementsByClassName( "header", "div", oSearchCenter ); if( ! aHeader.id ) { aHeader.id = oSearchCenter.id + "-header"; } */ // search center moved content var oMoved = document.getElementById( "searchCenter-option-moved-message" ); if( oMoved ) { Fse.Util.removeClass( oMoved, "hidden" ); // YAHOO.util.Dom.removeClass( oMoved, "hidden" ); } } Fse.Util.insertBefore( oOptionIcons, oSpecialLinks ); // YAHOO.util.Dom.insertBefore( oOptionIcons, oSpecialLinks ); } } } if( ! window.frameElement ) { if( Fse.Portal._loggedIn ) { Fse.Portal.startAutoLogoffTimer(); } } var _popupReportCenter = function() { var oReportCenterIcon = Fse.Util.get( "option-icon-reportCenter" ); // YAHOO.util.Dom.get( "option-icon-reportCenter" ); if( ! oReportCenterIcon || Fse.Util.hasClass( oReportCenterIcon, "fse-hidden" )) { // YAHOO.util.Dom.hasClass( oReportCenterIcon, "fse-hidden" ) return; } oReportCenterIcon._activate(); }; if( document.getElementById( "searchCenterSocketContent" ) && document.getElementById( "searchCenterSocketContent" ).getAttribute( "fse:src" )) { Fse.Portal._searchCenterSocketContentBusy = true; var fnFinished = function() { Fse.Portal._searchCenterSocketContentBusy = false; } Fse.Ajax.updateSocket("searchCenterSocketContent", fnFinished, null, null, true ); } /* bind hot keys */ Fse.Portal.bindHotKeys(); }; Fse.Portal.bindHotKeys = function() { // unbind existing listeners if present if( window._hotKeyListeners ) { for( var sKey in window._hotKeyListeners ) { var oListener = window._hotKeyListeners[sKey]; if( oListener ) { window._hotKeyListeners[sKey] = null; oListener.disable(); } } window._hotKeyListeners = null; } window._hotKeyListeners = Fse.UI.bindHotKeys( document, true ); } Fse.Portal.hidePortlet = function( sPortletId ) { var oDialog = Fse.Portal._dialogPortlets[sPortletId]; if( oDialog ) { oDialog.hide(); } }; Fse.Portal.supportCenter = function() { document.frm_ssoRouter.setAttribute( "target", "support.fsenablers.com" ); document.frm_ssoRouter.provider.value = "support.fsenablers.com"; document.frm_ssoRouter.target.value = "http://dev.fsenablers.com/fse/fse-supportcenter/index.cfm"; document.frm_ssoRouter.submit(); }; // TSE-537 MWG - updated SSO route to not use DevX Fse.Portal.ssoRoute = function( sProvider, sTarget, bNewWindow ) { if( bNewWindow ) { document.frm_ssoRouter.setAttribute( "target", "_blank" ); document.frm_ssoRouter.setAttribute( "target", sProvider ); } else { document.frm_ssoRouter.setAttribute( "target", "_self" ); } document.frm_ssoRouter.provider.value = sProvider; document.frm_ssoRouter.target.value = sTarget; let showDialog = true; let ssoAcks = $("meta[name=ssoAcks]"); if( ssoAcks.length ) { let providers = ssoAcks.attr( "content" ); if( providers.indexOf( sProvider ) >= 0 ) { showDialog = false; } } if( showDialog ) { let portalFullName = $("meta[name=stp-name]").attr( "content" ); let anotherWebsite = sTarget; let ssoConfirmDialog = $("
").dxPopup( { height : "auto", width : 600, title : `Leaving ${portalFullName}`, showCloseButton : false, hideOnOutsideClick : false, contentTemplate : function() { let content = $("
").addClass( "sso-confirm-dialog" ); $("

") .append( `You are leaving the ${portalFullName} and going to another website (` ) .append( $("").addClass( "website-reference" ).text( anotherWebsite )) .append( ") that requires your contact information including email address." ) .appendTo( content ); $("

    ") .append( $("
  • " ).css( { "margin-bottom" : ".5em" } ).append( "Click YES to send my content information and continue. You will not be asked again." ) ) .append( $( "
  • " ) .append( "Click NO to NOT send my contact information and do NOT continued to " ) .append( $("").addClass( "website-reference" ).text( anotherWebsite ) ) .append( "." ) ) .appendTo( content ); return content; }, onHidden : function( e ) { e.component.element().remove(); e.component.dispose(); }, toolbarItems : [ { toolbar : "bottom", location : "after", widget : "dxButton", options : { text : "NO", type : "normal", onClick : function( e ) { ssoConfirmDialog.hide(); } } }, { toolbar : "bottom", location : "after", widget : "dxButton", options : { text : "YES", type : "normal", onClick : function( e ) { ssoConfirmDialog.hide(); let providers = ssoAcks.attr( "content" ); if( providers ) { providers = `${providers},${sProvider}`; } else { providers = sProvider; } ssoAcks.attr( "content", providers ); document.frm_ssoRouter.submit(); } } } ] }).dxPopup( "instance" ) $("body").append( ssoConfirmDialog.element() ); ssoConfirmDialog.show(); } else { document.frm_ssoRouter.submit(); } }; Fse.Portal.showLogoutPrompt = function() { let portalFullName = $("head>meta[name='stp-name").attr( "content" ); let secondsRemaining = 30; let secondsElement = $("").text( secondsRemaining ); let countdownInterval = null; let prompt = $("
    ").dxPopup( { title : `Session Ending for ${portalFullName}`, width : "auto", height : "auto", hideOnOutsideClick : false, hideOnParentScroll : false, showCloseButton : false, onHidden : function( e ) { if( countdownInterval ) { clearInterval( countdownInterval ); } e.component.element().remove(); e.component.dispose(); }, contentTemplate : function() { let content = $("
    ") .append( $("

    ") .append( "Your session will timeout in " ) .append( secondsElement ) .append( " seconds and you will be logged out.")) .append( $("

    ") .text( `To extend your session and continue using ${portalFullName} click the "Continue" button below.`)) return content; }, toolbarItems : [ { toolbar : "bottom", location : "after", widget : "dxButton", options : { text : "Continue", type : "default", onClick : function( e ) { let continueAction = $("link#PortalDocRootURL").attr( "href" ) + "/public/actions/continue.cfm"; $.ajax( { method : "GET", url : continueAction }).done( function() { prompt.hide(); }) } } } ] ,onShown : function( e ) { countdownInterval = setInterval( function() { secondsRemaining--; secondsElement.text( secondsRemaining ); if( secondsRemaining == 0 ){ clearInterval( countdownInterval ); Fse.Portal.doAutoLogoff(); } }, 1000) } }).appendTo( $("body")).dxPopup( "instance" ); prompt.show(); } Fse.Portal.doAutoLogoff = function() { let logoutURL = $("link#PortalDocRootURL").attr( "href" ) + "/public/actions/logoff.cfm?reason=auto"; window.location.href= logoutURL; }; Fse.Portal.startAutoLogoffTimer = function( timeoutMinutes) { let timeout = 600 * 60 * 1000; // 600 minutes (ten hours) if( timeoutMinutes ) { timeout = timeoutMinutes * 60 * 1000; } setInterval( Fse.Portal.showLogoutPrompt, timeout ); }; Fse.Portal.setEmailDialogFocus = function() { var oForm = document.getElementById( "frm_stpSendMail" ); if( oForm ) { var fnCheck = function( e ) { return "true" == e.getAttribute( "focus" ); } var aElements = YAHOO.util.Dom.getElementsBy( fnCheck, null, oForm ); if( aElements.length ) { var e = aElements[0]; // e.focus(); } } }; var sBodySrcData3EmailPortal; Fse.Portal.showEmailDialog = function( oTag, sFile, aScope, sBodySrcURL, oBodySrcData ) { let emailSenderOptions = { title : "Send Email", allowSendCopy : true, allowImportant : true, allowReadReceipt : true, allowAttachments : true } if( oTag ) { let sHref = oTag.getAttribute( "href" ); if( sHref ) { let sOptions; let iQps = sHref.indexOf( "?" ); if( iQps >= 0 ) { sURL = sHref.substring( 0, iQps ); sOptions = sHref.substr( iQps + 1, sHref.length - iQps ); } else { sURL = sHref; } let sAddress; let iEmailPs = sURL.indexOf( ":" ); if( iEmailPs ) { sAddress = sURL.substr( iEmailPs + 1, sURL.length - iEmailPs ); // only used in obsolete apps /MKT and /MAC // var sProtocol = sURL.substr( 0, iEmailPs ); // if( sProtocol == "fsemailto" ) { // sAddress = sAddress + "&encTo=true"; // } } if( sOptions ) { sOptions.split( "&" ).forEach( function( avp ) { let parts = avp.split( "=" ); let a = parts[0]; let v = parts.length == 2 ? parts[1] : null; switch( a ) { case "subject": case "to" : emailSenderOptions[a] = v; break; default : alert( `${a}=${v}`); break; } }) // if( sQueryString ) { // sQueryString = sQueryString + "&" + sOptions; // } else { // sQueryString = sOptions; // } } // this is after the opions to ensure that the options don't overwrite the to if( sAddress ) { // sQueryString = "to=" + sAddress; emailSenderOptions.to = sAddress; } } } if( ! emailSenderOptions["trackingCode"] ) { emailSenderOptions.trackingCode = "GEN001" } let emailSender = new EmailSender( emailSenderOptions ); emailSender.show(); return; var oOptions = {}; oOptions.title = "Send Email"; var sPortalDocRootURL = Fse.Portal.getPortalDocRootURL(); oOptions.src = sPortalDocRootURL + "/utilities/email/handler.cfm"; /* 4/7/14 - Change oOptions.src to a dynamic generated url */ //oOptions.src = "../../utilities/email/handler.cfm"; var sQueryString; if( oTag ) { var sHref = oTag.getAttribute( "href" ); if( sHref ) { var sOptions; var iQps = sHref.indexOf( "?" ); if( iQps >= 0 ) { sURL = sHref.substring( 0, iQps ); sOptions = sHref.substr( iQps + 1, sHref.length - iQps ); } else { sURL = sHref; } var sAddress; var iEmailPs = sURL.indexOf( ":" ); if( iEmailPs ) { sAddress = sURL.substr( iEmailPs + 1, sURL.length - iEmailPs ); var sProtocol = sURL.substr( 0, iEmailPs ); // only used in obsolete apps /MKT and /MAC // if( sProtocol == "fsemailto" ) { // sAddress = sAddress + "&encTo=true"; // } } if( sAddress ) { sQueryString = "to=" + sAddress; } if( sOptions ) { if( sQueryString ) { sQueryString = sQueryString + "&" + sOptions; } else { sQueryString = sOptions; } } } } if( sBodySrcURL ) { if( ! sQueryString ) { sQueryString = "bodysrc=true"; } else { sQueryString = sQueryString + "&bodysrc=true"; } } var sBodySrcData = null; if( typeof( oBodySrcData ) == "function" ) { sBodySrcData = oBodySrcData(); } else if ( typeof( oBodySrcData ) == "string" ) { sBodySrcData = oBodySrcData; } //do not add var, meant to be global having var will not work sBodySrcData3EmailPortal = sBodySrcData; var sFilePath; /* Multiple File Attachment Support 8/7/13 - MJD */ if ( sFile ) { if ( typeof sFile == "string" ){ if( sFile ) { sFilePath = "file=" + encodeURIComponent(sFile); if ( sQueryString ) sQueryString = sQueryString + "&" + sFilePath; else sQueryString = sFilePath; } } else { var files = new Array(); for(i = 0; i < sFile.length; i++){ if( sFile[i].checked ){ files.push(encodeURIComponent(sFile[i].value)); } } if ( files.length == 0 ) { alert("No files selected for emailing."); return false; } var _isFirstIt = true; if ( sQueryString ) { sQueryString = sQueryString + "&files="; var _fileArrLen = files.length; for (var i = 0; i < _fileArrLen; i++) { if (_isFirstIt) { sQueryString = sQueryString + files[i]; _isFirstIt = false; } else { sQueryString = sQueryString + "*" + files[i]; } } } else { sQueryString = "files="; var _fileArrLen = files.length; for (var i = 0; i < _fileArrLen; i++) { if (_isFirstIt) { sQueryString = sQueryString + files[i]; _isFirstIt = false; } else { sQueryString = sQueryString + "*" + files[i]; } } } } } // When on an individual contact files tab, pass in the contactId if( oTag ) { // this syntax is only used in REP/displays/salesteamportal/inc_repository.cfm var aSendTo = oTag.getAttribute( "fse:sendTo" ); if ( aSendTo ) { if ( sQueryString ) sQueryString = sQueryString + "&to=" + aSendTo + "&disable=false"; else sQueryString = "to=" + aSendTo + "&disable=false"; } } // Pass in the current scope if ( aScope ) { if ( sQueryString ) sQueryString = sQueryString + "&scope=" + aScope; else sQueryString = "scope=" + aScope; } if( sQueryString ) { oOptions.src = oOptions.src + "?" + sQueryString; // + encodeURI( sQueryString ); oOptions.src = Fse.Util.updateURL( oOptions.src, { bodySrcURL : sBodySrcURL }); if( typeof( sBodySrcData ) == "string" ) { //KA removed because the character url limit was being exceeded when interactions had many items //oOptions.src = Fse.Util.updateURL( oOptions.src, { bodySrcData : sBodySrcData } ); } } var _fnOnRender = function() { // Fse.Ajax.updateSocket( "Popup_Email_Message_socket" ); var oSocket = document.getElementById( "Popup_Email_Message_socket"); if( ! oSocket ) { return; } var sBodySrcURL = oSocket.getAttribute( "fse:src" ); if( ! sBodySrcURL ) { return; } //KA, 9/30/16, SCRUM:18303 var sBodySrcData2 = sBodySrcData3EmailPortal; //oSocket.getAttribute( "fse:data" ); var fnApplyContent = function( oRequest ) { oSocket.innerHTML = oRequest.responseText; } if ( sBodySrcData2 ){ Fse.Ajax.postURL( Fse.Util.updateURL( sBodySrcURL, { ts : (new Date()).getTime() } ), sBodySrcData2, fnApplyContent ); } else { // Fse.Ajax.updateContent( sBodySrcURL, "Popup_Email_Message_socket" ); Fse.Ajax.updateSocket( "Popup_Email_Message_socket" ); } } /* if( sBodySrcData ) { oOptions.renderEvent = _fnOnRender; } */ oOptions.renderEvent = _fnOnRender; Fse.DialogManager.show( "_stpEmailDailog", oOptions ); return false; }; Fse.Portal.showEmailDialog_obsolete = function( oTag, sFile, aScope, sBodySrcURL, oBodySrcData ) { var oOptions = {}; oOptions.title = "Send Email"; switch( window.location.pathname.split( '/' ).length ){ case 7: oOptions.src = "../../utilities/email/handler.cfm"; break; case 6: oOptions.src = "../utilities/email/handler.cfm"; break; case 5: oOptions.src = "utilities/email/handler.cfm"; break; default: oOptions.src = "../../utilities/email/handler.cfm"; break; } var sPortalDocRootURL = Fse.Portal.getPortalDocRootURL(); oOptions.src = sPortalDocRootURL + "/utilities/email/handler.cfm"; /* 4/7/14 - Change oOptions.src to a dynamic generated url */ //oOptions.src = "../../utilities/email/handler.cfm"; var sQueryString; if( oTag ) { var sHref = oTag.getAttribute( "href" ); if( sHref ) { var sOptions; var iQps = sHref.indexOf( "?" ); if( iQps >= 0 ) { sURL = sHref.substring( 0, iQps ); sOptions = sHref.substr( iQps + 1, sHref.length - iQps ); } else { sURL = sHref; } var sAddress; var iEmailPs = sURL.indexOf( ":" ); if( iEmailPs ) { sAddress = sURL.substr( iEmailPs + 1, sURL.length - iEmailPs ); var sProtocol = sURL.substr( 0, iEmailPs ); if( sProtocol == "fsemailto" ) { sAddress = sAddress + "&encTo=true"; } } if( sAddress ) { sQueryString = "to=" + sAddress; } if( sOptions ) { if( sQueryString ) { sQueryString = sQueryString + "&" + sOptions; } else { sQueryString = sOptions; } } } } if( sBodySrcURL ) { if( ! sQueryString ) { sQueryString = "bodysrc=true"; } else { sQueryString = sQueryString + "&bodysrc=true"; } } var sBodySrcData = null; if( typeof( oBodySrcData ) == "function" ) { sBodySrcData = oBodySrcData(); } else if ( typeof( oBodySrcData ) == "string" ) { sBodySrcData = oBodySrcData; } //do not add var, meant to be global having var will not work sBodySrcData3EmailPortal = sBodySrcData; var sFilePath; /* Multiple File Attachment Support 8/7/13 - MJD */ if ( sFile ) { if ( typeof sFile == "string" ){ if( sFile ) { sFilePath = "file=" + encodeURIComponent(sFile); if ( sQueryString ) sQueryString = sQueryString + "&" + sFilePath; else sQueryString = sFilePath; } } else { var files = new Array(); for(i = 0; i < sFile.length; i++){ if( sFile[i].checked ){ files.push(encodeURIComponent(sFile[i].value)); } } if ( files.length == 0 ) { alert("No files selected for emailing."); return false; } var _isFirstIt = true; if ( sQueryString ) { sQueryString = sQueryString + "&files="; var _fileArrLen = files.length; for (var i = 0; i < _fileArrLen; i++) { if (_isFirstIt) { sQueryString = sQueryString + files[i]; _isFirstIt = false; } else { sQueryString = sQueryString + "*" + files[i]; } } } else { sQueryString = "files="; var _fileArrLen = files.length; for (var i = 0; i < _fileArrLen; i++) { if (_isFirstIt) { sQueryString = sQueryString + files[i]; _isFirstIt = false; } else { sQueryString = sQueryString + "*" + files[i]; } } } } } // When on an individual contact files tab, pass in the contactId if( oTag ) { var aSendTo = oTag.getAttribute( "fse:sendTo" ); if ( aSendTo ) { if ( sQueryString ) sQueryString = sQueryString + "&to=" + aSendTo + "&disable=false"; else sQueryString = "to=" + aSendTo + "&disable=false"; } } // Pass in the current scope if ( aScope ) { if ( sQueryString ) sQueryString = sQueryString + "&scope=" + aScope; else sQueryString = "scope=" + aScope; } if( sQueryString ) { oOptions.src = oOptions.src + "?" + sQueryString; // + encodeURI( sQueryString ); oOptions.src = Fse.Util.updateURL( oOptions.src, { bodySrcURL : sBodySrcURL }); if( typeof( sBodySrcData ) == "string" ) { //KA removed because the character url limit was being exceeded when interactions had many items //oOptions.src = Fse.Util.updateURL( oOptions.src, { bodySrcData : sBodySrcData } ); } } var _fnOnRender = function() { // Fse.Ajax.updateSocket( "Popup_Email_Message_socket" ); var oSocket = document.getElementById( "Popup_Email_Message_socket"); if( ! oSocket ) { return; } var sBodySrcURL = oSocket.getAttribute( "fse:src" ); if( ! sBodySrcURL ) { return; } //KA, 9/30/16, SCRUM:18303 var sBodySrcData2 = sBodySrcData3EmailPortal; //oSocket.getAttribute( "fse:data" ); var fnApplyContent = function( oRequest ) { oSocket.innerHTML = oRequest.responseText; } if ( sBodySrcData2 ){ Fse.Ajax.postURL( Fse.Util.updateURL( sBodySrcURL, { ts : (new Date()).getTime() } ), sBodySrcData2, fnApplyContent ); } else { // Fse.Ajax.updateContent( sBodySrcURL, "Popup_Email_Message_socket" ); Fse.Ajax.updateSocket( "Popup_Email_Message_socket" ); } } /* if( sBodySrcData ) { oOptions.renderEvent = _fnOnRender; } */ oOptions.renderEvent = _fnOnRender; Fse.DialogManager.show( "_stpEmailDailog", oOptions ); return false; }; Fse.Portal.doLogoff = function( sLogoff ) { window.location.href = sLogoff; }; Fse.Portal.showReportCenter = function( reportCenterOptions, sTitle ) { let prepareURL = $.Deferred(); if( typeof reportCenterOptions == "string" ) { prepareURL.resolve( reportCenterOptions ); } else { Fse.Ajax.performAction( { object : "RPT.buildReportCenterURL", data : { applicationCode : reportCenterOptions.applicationCode, reportCode : reportCenterOptions.reportCode, params : reportCenterOptions.params } }).done( function( result ) { console.log( "buildReportCenterURL" ); console.log( result ); prepareURL.resolve( result.reportCenterURL ); }); } prepareURL.done( function( reportCenterURL ) { let rc = new ReportCenter(); rc.showPopup( reportCenterURL, sTitle ); }); }; Fse.Portal.showReportCenter_obsolete = function( reportCenterOptions, sTitle ) { let oLink = document.getElementById( "sysReportCenterHandler" ); if( oLink ) { let prepareURL = $.Deferred(); if( typeof reportCenterOptions == "string" ) { prepareURL.resolve( reportCenterOptions ); } else { Fse.Ajax.performAction( { object : "RPT.buildReportCenterURL", data : { applicationCode : reportCenterOptions.applicationCode, reportCode : reportCenterOptions.reportCode, params : reportCenterOptions.params } }).done( function( result ) { console.log( "buildReportCenterURL" ); console.log( result ); prepareURL.resolve( result.reportCenterURL ); }); } prepareURL.done( function( sURL ) { let sHref = oLink.getAttribute( "href" ); sHref = sHref + "?app=" + encodeURIComponent( sURL ); let oOptions = { src : sHref }; if( sTitle ) { oOptions.title = sTitle; } oOptions.onSuccess = Fse.Portal.reportSubmitted; let sysReportCenterDialog = $("#sysReportCenterDialog" ); if( sysReportCenterDialog.length == 0 ) { $("

    ") .addClass( "fse-hidden" ) .attr( { "id" : "sysReportCenterDialog", "fse:title" : "Report Center", "fse:width" : "550px" // ,"fse:init" : "Fse.Portal.initReportCenterDialog" } ) .append( $("
    ").addClass("bd") ) .appendTo( $("body" )); } // Fse.DialogManager.show1( "sysReportCenterDialog", oOptions ); oOptions.renderEvent = function() { Fse.Portal.initReportCenterDialog(); } Fse.DialogManager.show( "sysReportCenterDialog", oOptions ); }) } }; Fse.Portal.reportSubmitted = function( oRequest ) { var nUserReportRequest = Fse.Ajax.getResponseHeader( oRequest, "x-fse-deferred-report" ); if( nUserReportRequest ) { Fse.RPT.showWaitingForReportDialog( nUserReportRequest ); } else { var sLocation = Fse.Ajax.getResponseHeader( oRequest, "Location" ); if( sLocation ) { window.location.href = sLocation; } } }; Fse.Portal.initReportCenterDialog = function() { var oReportCenterDialog = YAHOO.Fse.Dialogs["sysReportCenterDialog"]; var fnHideLikelyRecipients = function() { var oDialog = YAHOO.Fse.Dialogs["sysReportCenterDialog"]; if( oDialog && oDialog.likelyRecipientsOverlay ) { oDialog.likelyRecipientsOverlay.hide(); } }; var aTabViews = YAHOO.util.Dom.getElementsByClassName( "yui-navset", "div", "sysReportCenterDialog" ); if( aTabViews && aTabViews.length ) { oReportCenterDialog.tabView = new YAHOO.widget.TabView( aTabViews[0] ); var oCriteriaTab = oReportCenterDialog.tabView.getTab(0); // criteria oCriteriaTab.addListener( "click", fnHideLikelyRecipients ); var oOutputTab = oReportCenterDialog.tabView.getTab(1); // the output tab oOutputTab.addListener( "click", Fse.Portal.configurePopupReportCenterOutputTab ); var oHelpTab = oReportCenterDialog.tabView.getTab(2); // helo oHelpTab.addListener( "click", fnHideLikelyRecipients ); } // oReportCenterDialog.hideEvent.subscribe( fnHideLikelyRecipients ); var sAppHandler = document.frm_reportCenter.rc_handler.value; var sReportSelectURL = sAppHandler + "&rc_action=build&rc_part=reportSelect"; var oReportField = document.frm_reportCenter.rc_report; if( oReportField.value != "?" ) { sReportSelectURL = sReportSelectURL + "&rc_report=" + encodeURIComponent( oReportField.value ); if( oReportField.getAttribute( "fse:rc_defaults" )) { sReportSelectURL = sReportSelectURL + "&rc_defaults=" + encodeURIComponent( oReportField.getAttribute( "fse:rc_defaults" )); } } var sCriteriaURL = sAppHandler + "&rc_action=build&rc_part=criteriaFields"; var sHelpURL = sAppHandler + "&rc_action=build&rc_part=helpContent"; var fnCriteriaChanged = function( e ) { Fse.DialogManager.initializePopupCalendarHandler( document.frm_reportCenter ); var oMobile = document.getElementById( "rc_mobile" ); var bMobile = (oMobile.value == "true"); if( bMobile ) { if( oMobile.form.rc_method_download.checked ) { oMobile.form.setAttribute( "target", "_blank" ); } else { oMobile.form.setAttribute( "target", null ); } } if( document.getElementById( "rc_preview_btn" ) ) { if( document.frm_reportCenter.rc_report.value == "?" ) { document.getElementById( "rc_preview_btn" ).disabled = true; } else { document.getElementById( "rc_preview_btn" ).disabled = false; } } Fse.Portal.configurePopupReportCenterOutputTab(); }; var fnChangeHandler = function( oTarget ) { //alert("hi"); var oOption = oTarget.options[oTarget.selectedIndex]; var sFormats = oOption.getAttribute( "fse:formats" ); if( ! sFormats || sFormats == "" ) { sFormats = "pdf,txt"; } var sMethods = oOption.getAttribute( "fse:methods" ); if( ! sMethods || sMethods == "" ) { sMethods = "download,email"; } if( oOption.value == "?" ) { sFormats = ""; sMethods = ""; } var oFormatPDF = document.getElementById( "rc_format_pdf" ); var oFormatTXT = document.getElementById( "rc_format_txt" ); var oFormatXLS = document.getElementById( "rc_format_xls" ); var oMethodDOWNLOAD = document.getElementById( "rc_method_download" ); var oMethodEMAIL = document.getElementById( "rc_method_email" ); var oRecipients = document.getElementById( "rc_recipients" ); var oRecipientsCc = document.getElementById( "rc_recipients_cc" ); var oImportant = document.getElementById( "rc_important" ); var oSendCopy = document.getElementById( "rc_sendcopy" ); var oReceipt = document.getElementById( "rc_receipt" ); var oSubject = document.getElementById( "rc_subject" ); var oMessage = document.getElementById( "rc_message" ); var oReferenceName = document.getElementById( "rc_referenceName" ); if( oReferenceName ) { oReferenceName.value = ""; } oFormatPDF.checked = false; oFormatPDF.disabled = true; oFormatTXT.checked = false; oFormatTXT.disabled = true; oFormatXLS.checked = false; oFormatXLS.disabled = true; oMethodDOWNLOAD.checked = false; oMethodDOWNLOAD.disabled = true; oMethodEMAIL.checked = false; oMethodEMAIL.disabled = true; if( oTarget.form.getAttribute( "fse:defaultMethod" ) == "email" ) { } // oRecipients.value = "" oRecipients.disabled = true; oRecipientsCc.disabled = true; oImportant.disabled = true; oSendCopy.disabled = true; oReceipt.disabled = true; // oMessage.value = ""; oMessage.disabled = true; // oSubject.value = ""; oSubject.disabled = true; var aFormats = sFormats.split( "," ); for( var x = 0; x < aFormats.length; x++ ) { var sFormat = aFormats[x].toLowerCase(); if( sFormat == "pdf" ) { oFormatPDF.disabled = false; if( x == 0 ) { oFormatPDF.checked = true; } } else if ( sFormat == "txt" ) { oFormatTXT.disabled = false; if( x == 0 ) { oFormatTXT.checked = true; } } else if ( sFormat == "xls" || sFormat == "xlsx" || sFormat == 'xlsm' || sFormat == 'xlsb' ) { oFormatXLS.disabled = false; oFormatXLS.value = sFormat; if( x == 0 ) { oFormatXLS.checked = true; } } } if( oTarget.form.getAttribute( "fse:defaultFormat" ) != "" ) { var sDefaultFormat = oTarget.form.getAttribute( "fse:defaultFormat" ).toLowerCase(); for( var x = 0; x < aFormats.length; x++ ) { if( aFormats[x].toLowerCase() == sDefaultFormat ) { var sFormat = aFormats[x].toLowerCase(); if( sFormat == "pdf" && !oFormatPDF.disabled ) { oFormatPDF.checked = true; } else if ( sFormat == "txt" && ! oFormatTXT.disabled ) { oFormatTXT.checked = true; } else if (( sFormat == "xls" || sFormat == "xlsx" || sFormat == 'xlsm' || sFormat == 'xlsb' ) && ! oFormatXLS.disabled ) { oFormatXLS.checked = true; } break; } } } var aMethods = sMethods.split( "," ); if( oTarget.form.getAttribute( "fse:defaultMethod" ) == "email" ) { aMethods = ["email","download"]; } for( var x = 0; x < aMethods.length; x++ ) { var sMethod = aMethods[x].toLowerCase(); if( sMethod == "download" ) { oMethodDOWNLOAD.disabled = false; if( x == 0 ) { oMethodDOWNLOAD.checked = true; } } else if ( sMethod == "email" ) { oMethodEMAIL.disabled = false; if( x == 0 ) { oMethodEMAIL.checked = true; oRecipients.disabled = false; oRecipientsCc.disabled = false; oImportant.disabled = false; oSendCopy.disabled = false; oReceipt.disabled = false; oMessage.disabled = false; oSubject.disabled = false; } } } // clear recipients oRecipients.value = ""; oRecipientsCc.value = ""; var sCriteriaTabURL = sCriteriaURL + "&rc_report=" + encodeURIComponent( oTarget.value ); var sRcDefaults = oTarget.options[oTarget.selectedIndex].getAttribute( "fse:rc_defaults"); if( sRcDefaults ) { sCriteriaTabURL = sCriteriaTabURL + "&rc_defaults=" + encodeURIComponent( sRcDefaults ); } if( aMethods[0] == "email" ) { var oAnchor = document.getElementById( "outputTabAnchor" ); if( YAHOO.util.Dom.hasClass( oAnchor.parentNode, "selected" )) { oRecipients.focus(); } } Fse.Ajax.updateSocket( "rc_txtLayout_socket", null, { reportCode : oTarget.value }); Fse.Ajax.updateContent( sCriteriaTabURL, "rc_criteriaTab", null, fnCriteriaChanged ); Fse.Ajax.updateContent( sHelpURL + "&rc_report=" + encodeURIComponent( oTarget.value ), "rc_helpTab" ); }; var fnChanged = function( e ) { var oTarget = YAHOO.util.Event.getTarget( e ); fnChangeHandler( oTarget ); } var fnSelectLoaded = function() { var oSelect = document.getElementById( "rc_report" ); if( oSelect.value != "?" ) { fnChangeHandler( oSelect ); } YAHOO.util.Event.addListener( oSelect, "change", fnChanged ); }; Fse.Ajax.updateContent( sReportSelectURL, "rc_reportSelectSocket", null, fnSelectLoaded ); if( oReportField.value == "?") { Fse.Ajax.updateContent( sCriteriaURL, "rc_criteriaTab" ); Fse.Ajax.updateContent( sHelpURL, "rc_helpTab" ); } }; Fse.Portal.configurePopupReportCenterOutputTab = function() { var oReportCenterDialog = YAHOO.Fse.Dialogs["sysReportCenterDialog"]; if( oReportCenterDialog && oReportCenterDialog.likelyRecipientsOverlay ) { oReportCenterDialog.likelyRecipientsOverlay.hide(); } var bEnabled = document.getElementById( "rc_method_email" ).checked; var aLikelyRecipients = YAHOO.util.Dom.getElementsByClassName( "likelyRecipient", "div", document.frm_reportCenter ); bEnabled = bEnabled && aLikelyRecipients.length > 0; var aPickLinks = YAHOO.util.Dom.getElementsByClassName( "email-picker", "a", document.frm_reportCenter ); for( var x = 0; x < aPickLinks.length; x++ ) { if( bEnabled ) { YAHOO.util.Dom.removeClass( aPickLinks[x], "fse-hidden" ); } else { YAHOO.util.Dom.addClass( aPickLinks[x], "fse-hidden" ); } } }; Fse.Portal.reportCenterPreSubmit = function( oForm ) { var bSubmit = false; var aLink = YAHOO.util.Dom.getElementsBy( function( e ) { return "postValidateHandler" == e.getAttribute( "id" ) }, "link", oForm ); if( aLink.length == 1 ) { bSubmit = eval( aLink[0].getAttribute( "href" ) + "(oForm)" ); } else { bSubmit = true; } return bSubmit; }; Fse.Portal.reportCenterMethodChanged = function() { var oDownloadRadio = document.getElementById( "rc_method_download" ); var oMobile = document.getElementById( "rc_mobile" ); var bMobile = (oMobile.value == "true"); var oRecipients = document.getElementById( "rc_recipients" ); var oRecipientsCc = document.getElementById( "rc_recipients_cc" ); var oImportant = document.getElementById( "rc_important" ); var oSendCopy = document.getElementById( "rc_sendcopy" ); var oReceipt = document.getElementById( "rc_receipt" ); var oMessage = document.getElementById( "rc_message" ); var oSubject = document.getElementById( "rc_subject" ); // SCRUM 24152 - Added ReplyTo var oReplyTo = document.getElementById( "rc_replyTo" ); if( oDownloadRadio.checked ) { oRecipients.disabled = true; oRecipientsCc.disabled = true; oImportant.disabled = true; oSendCopy.disabled = true; oReceipt.disabled = true; oMessage.disabled = true; oSubject.disabled = true; oReplyTo.disabled = true; if( bMobile ) { oDownloadRadio.form.setAttribute( "target", "_blank" ); } } else { oRecipients.disabled = false; oRecipientsCc.disabled = false; oImportant.disabled = false; oSendCopy.disabled = false; oReceipt.disabled = false; oMessage.disabled = false; oSubject.disabled = false; oReplyTo.disabled = false; if( bMobile ) { oDownloadRadio.form.setAttribute( "target", null ); } } Fse.Portal.configurePopupReportCenterOutputTab(); }; Fse.Portal.previewReport = function() { if( Fse.FormManager.submit( document.frm_reportCenter, false )) { var oForm = document.frm_reportCenter; var data = []; var item = 0; /****/ // Iterate over the form elements collection to construct the // label-value pairs. for (i=0,len=oForm.elements.length; i -1) { opt = oElement.options[oElement.selectedIndex]; data[item++] = oName + encodeURIComponent( (opt.attributes.value && opt.attributes.value.specified) ? opt.value : opt.text); } break; case 'select-multiple': if (oElement.selectedIndex > -1) { for(j=oElement.selectedIndex, jlen=oElement.options.length; j" ); oSlideSearch.fseReady = 2; } if( fnInit ) { fnInit(); } var oForm = Fse.Portal.getSearchForm(); if( oForm ) { if( oForm.getAttribute( "fse:sizes" )) { var aSizes = oForm.getAttribute( "fse:sizes" ).split( "," ); YAHOO.util.Dom.addClass( "searchSlide", aSizes[0] ); } Fse.DialogManager.initializePopupCalendarHandler( oForm ) if( fnOnSubmit ) { oForm.fnOnSubmit = fnOnSubmit; } } if( oForm && oForm.getAttribute("fse:reset")) { // enable the reset link $("#searchCenterResetLink").removeClass( "fse-hidden" ); $("#searchCenterResetLink2").removeClass( "fse-hidden" ); $("#searchCenterResetLink3").removeClass( "fse-hidden" ); // YAHOO.util.Dom.removeClass( ["searchCenterResetLink","searchCenterResetLink2"], "fse-hidden" ); } YAHOO.util.Dom.replaceClass( oSlideSearch, "loading", "open" ); } if( Fse.Portal._searchCenterSocketContentBusy || bReload) { if( document.getElementById( "searchCenterSocketContent" )) { document.getElementById( "searchCenterSocketContent" ).innerHTML = ""; } Fse.Ajax.updateContent( sSearchSourceURL, "searchCenterSocket", null, fnOpen ); } else if( document.getElementById( "searchCenterSocket" ).innerHTML != "" ) { fnOpen(); return; } else if( document.getElementById( "searchCenterSocketContent" )) { var oContent = document.getElementById( "searchCenterSocketContent" ); if( oContent.innerHTML != "" ){ var sInnerHTML = oContent.innerHTML; oContent.innerHTML = ""; document.getElementById( "searchCenterSocket" ).innerHTML = sInnerHTML; fnOpen(); } else { Fse.Ajax.updateContent( sSearchSourceURL, "searchCenterSocket", null, fnOpen ); } } else { Fse.Ajax.updateContent( sSearchSourceURL, "searchCenterSocket", null, fnOpen ); } }; Fse.Portal.manageFilters = function( sContainerId, fnOnFilterUpdate ) { var fnFilterTest = function( e ) { return YAHOO.util.Dom.hasClass( e, "stp-filter" ) && YAHOO.util.Dom.hasClass( e, "removable" ); } // var aFilters = YAHOO.util.Dom.getElementsByClassName( "stp-filter", "div", sContainerId ); var aFilters = YAHOO.util.Dom.getElementsBy( fnFilterTest, "div", sContainerId ); if( aFilters.length == 0 ) { return; } // give them all an id if they don't already have them for ( var x = 0; x < aFilters.length; x++ ) { var e = aFilters[x]; if( e.getAttribute( "id" ) == null ) { e.setAttribute( "id", sContainerId + "_" + x ); } } var sManageFiltersDialogID = "manageFiltersDialog"; // add the dialog container to the document if needed if( ! document.getElementById( sManageFiltersDialogID )) { oContainer = document.createElement( "div" ); oContainer.setAttribute( "class", sManageFiltersDialogID + "_0 fse-hidden" ); oContainer.setAttribute( "id", sManageFiltersDialogID ); document.body.appendChild( oContainer ); oContainer.innerHTML = "
    "; } var oDialogElement = document.getElementById( sManageFiltersDialogID ); /* var oFilterList = document.getElementById( "manageFiltersDialogFilterList" ); */ if(! YAHOO.Fse.Dialogs[sManageFiltersDialogID] ) { YAHOO.Fse.Dialogs[sManageFiltersDialogID] = new YAHOO.widget.Dialog( oDialogElement, { width:"600px", fixedcenter: true, visible: false, modal: false, xunderlay:"none", zindex:50000, hideaftersubmit: true, constraintoviewport: true, close:true, draggable: true, buttons: [ { text:"Ok", handler: function() { this.hide(); }, isDefault:true } ] } ); } // add new elements for current invocation var oFilterList2 = document.createElement( "div" ); oFilterList2.setAttribute( "id", "manageFiltersDialogFilterList" ); var oUnspecifiedFilterSet = document.createElement( "div" ); oUnspecifiedFilterSet.setAttribute( "class", "filterSet" ); // oFilterList2.appendChild( oUnspecifiedFilterSet ); // this will be appended to the bottom of this list only if there are filters in it var filterSets = {}; filterSets["unspecified"] = oUnspecifiedFilterSet; var bCategorized = false var bUnspecifiedFilters = false for( var x = 0; x < aFilters.length; x++ ) { var flt = document.createElement( "div" ); var chk = document.createElement( "input" ); chk.setAttribute( "type", "checkbox" ); chk.setAttribute( "value", aFilters[x].getAttribute("id")); if( ! YAHOO.util.Dom.hasClass( aFilters[x], "fse-hidden" )) { chk.setAttribute( "checked", "checked" ); } // oFilterList2.appendChild( chk ); chk.setAttribute( "id", "ZZZZ_" + x ); var lbl = document.createElement( "label" ); lbl.setAttribute( "for", "ZZZZ_" + x ); var txt = document.createTextNode(aFilters[x].getAttribute( "title" )); lbl.appendChild( txt ); if( aFilters[x].getAttribute( "fse:searchHelp" )) { lbl.setAttribute( "title", aFilters[x].getAttribute( "fse:searchHelp" )); } flt.appendChild( chk ); flt.appendChild( lbl ); var sCategory = aFilters[x].getAttribute( "fse:searchCategory" ); if( sCategory ) { bCategorized = true; if( ! filterSets[sCategory] ) { oFilterSet = document.createElement( "div" ); oFilterSet.setAttribute( "class", "filterSet" ); var oSetHeading = document.createElement( "h1" ); var oHeadingText = document.createTextNode( sCategory ); oSetHeading.appendChild( oHeadingText ); // oFilterSet.appendChild( oSetHeading ); filterSets[sCategory] = oFilterSet; oFilterSection = document.createElement( "div" ); oFilterSection.appendChild( oSetHeading ); oFilterSection.appendChild( oFilterSet ); oFilterList2.appendChild( oFilterSection ); } } else { sCategory = "unspecified"; bUnspecifiedFilters = true; } oFilterSet = filterSets[sCategory]; // oFilterList2.appendChild( flt ); oFilterSet.appendChild( flt ); } if( bUnspecifiedFilters ) { oFilterSection = document.createElement( "div" ); if( bCategorized ) { var oSetHeading = document.createElement( "h1" ); var oHeadingText = document.createTextNode( "Miscellaneous" ); oSetHeading.appendChild( oHeadingText ); oFilterSection.appendChild( oSetHeading ); } oFilterSection.appendChild( oUnspecifiedFilterSet ); oFilterList2.appendChild( oFilterSection ); } YAHOO.Fse.Dialogs[sManageFiltersDialogID].setHeader( "Manage Filters" ); YAHOO.Fse.Dialogs[sManageFiltersDialogID].setBody( oFilterList2 ); YAHOO.Fse.Dialogs[sManageFiltersDialogID].render( document.body ); YAHOO.util.Dom.removeClass( oDialogElement, "fse-hidden" ); var fnFilterClicked = function( e, o ) { var oTarget = YAHOO.util.Event.getTarget( e ); var oSocket = document.getElementById( oTarget.value ); if( oTarget.checked ) { oFilterContent = document.createElement( "div" ); oFilterContent.setAttribute( "class", "stp-removable-filter" ); oContentSocket = document.createElement( "div" ); oContentSocket.setAttribute( "id", oSocket.getAttribute("id") + "_content" ); oContentSocket.setAttribute( "class", "stp-filter-content" ); // oContentSocket.innerHTML = "Adding filter..."; oFilterContent.appendChild( oContentSocket ); oControl = document.createElement( "span" ); oControl.setAttribute( "class", "stp-filter-control" ); oControl.setAttribute( "for", oTarget.value ); oControl.setAttribute( "from", oTarget.getAttribute("id") ); oControl.setAttribute( "title", "remove this filter "); oFilterContent.appendChild( oControl ); oSocket.appendChild( oFilterContent ); YAHOO.util.Event.on( oControl, "click", Fse.Portal.removeFilter ); var sURL = oSocket.getAttribute( "fse:src" ); Fse.Ajax.updateContent( sURL, oSocket.getAttribute( "id" ) + "_content", null, fnOnFilterUpdate, false, true ); YAHOO.util.Dom.removeClass( oSocket, "fse-hidden" ); } else { oSocket.innerHTML = ""; YAHOO.util.Dom.addClass( oSocket, "fse-hidden" ); if( fnOnFilterUpdate ) { fnOnFilterUpdate(); } } }; var aCheckboxes = YAHOO.util.Dom.getElementsBy( function(e){return true}, "input",oFilterList2 ); for( var x = 0; x < aCheckboxes.length; x++ ) { YAHOO.util.Event.on( aCheckboxes[x], "click", fnFilterClicked ); } YAHOO.Fse.Dialogs[sManageFiltersDialogID].show(); }; Fse.Portal.removeFilter = function( e ) { var oTarget = YAHOO.util.Event.getTarget( e ); var sFor = oTarget.getAttribute( "for" ); if( sFor ) { var oFilter = document.getElementById( sFor ); if( oFilter ) { oFilter.innerHTML = ""; YAHOO.util.Dom.addClass( oFilter, "fse-hidden" ); } var sFrom = oTarget.getAttribute( "from" ); if( sFrom ) { document.getElementById( sFrom ).checked = false; } } }; Fse.Portal.appConfiguration = {} $( function() { $(document).on( "ajaxError", function(event, jqxhr, settings, thrownError ) { if( jqxhr.status == 400 ) { //&& jqxhr.responseText if( jqxhr.statusText.match(/^Error 86/ )) { //jqxhr.responseText.match(/^Error 86/ ) let toast = $("
    ").dxToast( { message : "Blocked by firewall, please revise the submission or contact customer support", type : "error", displayTime : 4000, onHidden : function( e ) { e.component.element().remove(); e.component.dispose(); }, hideOnOutsideClick : true }).dxToast( "instance" ); $("body").append( toast.element() ); toast.show(); } } }) }) $( function() { Fse.Portal.init(); Fse.UI._initActionMenus(); let loginStatus = $("link#loginStatus").attr( "rel" ) === "true"; if( loginStatus ) { let appConfigLoader = { _deferred : new $.Deferred(), deferred : function() { return this._deferred; } } let ds = new DevExpress.data.DataSource( Fse.Util.updateURL( $("link#appDataURL").attr( "href" ), { mode : "direct", object : "STP.appConfiguration" })); ds.load().done( function( data ) { Fse.Portal.appConfiguration = data[0]; Fse.Portal._appConfigurationIndex = {}; let flatten = function( item, prefix ) { for( key in item ) { let v = item[key]; let qualifiedKey = key.toLowerCase(); if( prefix ) { qualifiedKey = `${prefix}.${qualifiedKey}`; } Fse.Portal._appConfigurationIndex[qualifiedKey] = v; if( typeof v == "object" ) { flatten( v, qualifiedKey ); } } } flatten( Fse.Portal.appConfiguration ); Fse.Portal.getConfiguration = function( qualifiedKey ) { return Fse.Portal._appConfigurationIndex[qualifiedKey.toLowerCase()]; } appConfigLoader._deferred.resolve(); }) Fse.waitingFor( appConfigLoader ); let permissionLoader = { _deferred : new $.Deferred(), deferred : function() { return this._deferred; } } Fse.waitingFor( permissionLoader ); let permissionURL = $("link#PortalDocRootURL").attr("href") + "/data.cfm?object=permissionList"; $.ajax({ type: "GET", async: false, url: permissionURL, success: function(response) { Fse.Portal._userPermissions = {}; for( var x = 0; x <= response.length; x++ ) { Fse.Portal._userPermissions[response[x]] = true; } permissionLoader._deferred.resolve(); } }); } }) $(function(){ let sMyRelationshipsDataURL = $("link#PortalDocRootURL").attr("href") + "/data.cfm?object=crm.myRelationships"; let myRelationshipsDataSource = new DevExpress.data.DataSource( sMyRelationshipsDataURL ); $("#myRelationships.myRelationships").append( $("
    ").css( "display", "inline-block" ).css( "margin-top", "1px" ).dxSelectBox( { placeholder : "-- Select Account --", dataSource : myRelationshipsDataSource, width : 250, height : 21, displayExpr : "text", valueExpr : "value", onSelectionChanged : function( e ) { if( e.selectedItem.value != "?" ) { window.location.href = e.selectedItem.value; } } } ) ) $("
    ").dxFileUploader( { selectButtonText: 'Select Photo', dialogTrigger : "#profilePhotoUploadLink", labelText: '', accept: 'image/*', uploadMode: "useForm", visible : false, onValueChanged : function( e ) { let file = e.value[0]; if( file ) { let reader = new FileReader(); reader.addEventListener("load", function () { // convert image file to base64 string $("img#profilePhoto").attr( "src", reader.result ); $("input#profilePhotoUpload").attr( "value", reader.result ); $("input#profilePhotoFile").attr( "value", file.name ); }, false); reader.readAsDataURL(file); } } } ).appendTo( $("body") ); })