Help
RSS
API
Feed
Maltego
Contact
Domain > supportme123.com
×
Welcome!
Right click nodes and scroll the mouse to navigate the graph.
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2013-12-20
38.109.219.30
(
ClassC
)
2024-08-02
13.82.88.75
(
ClassC
)
Port 80
HTTP/1.1 302 RedirectContent-Type: text/html; charsetUTF-8Location: https://supportme123.com/Server: Microsoft-IIS/10.0Date: Fri, 02 Aug 2024 23:45:28 GMTContent-Length: 148 head>title>Document Moved/title>/head>body>h1>Object Moved/h1>This document may be found a HREFhttps://supportme123.com/>here/a>/body>
Port 443
HTTP/1.1 200 OKCache-Control: privateContent-Length: 193351Content-Type: text/html; charsetutf-8Server: ScreenConnect/24.1.9.8915-4154066500 Microsoft-HTTPAPI/2.0Strict-Transport-Security: max-age31536000X-Frame-Options: denyReferrer-Policy: originP3P: CPNON CUR OUR STP STA PREDate: Fri, 02 Aug 2024 23:45:28 GMT !DOCTYPE html>html>head>meta http-equivX-UA-Compatible contentIEedge />meta nameviewport contentwidthdevice-width, initial-scale1, maximum-scale1, user-scalableno /> script> function setTaggedSessionInfo(tag, taggedSessionInfo) { var oldTaggedSessionInfo window._taggedSessionInfostag; window._taggedSessionInfostag taggedSessionInfo; if (!oldTaggedSessionInfo || taggedSessionInfo.SessionID ! oldTaggedSessionInfo.SessionID || taggedSessionInfo.Code ! oldTaggedSessionInfo.Code) SC.livedata.notifyDirty(); } // backwards compatibility with extensions function setTaggedSessionID(tag, sessionID) { window.setTaggedSessionInfo(tag, { SessionID: sessionID }); } function getTaggedSessionInfo(tag) { return window._taggedSessionInfostag; } function getSessionInfo() { var liveData SC.livedata.get(); return liveData && liveData.ResponseInfoMap && liveData.ResponseInfoMapGuestSessionInfo } /script>script srcScript.ashx?__Cachef98b163d-2ffc-4ef4-88e3-fdfe9a8be103 iddefaultScript>/script>link hrefApp_Themes/SolidWithBlue/Default.css?__Cache5d13cab6-543c-4fc8-aadc-0db5361a9982 typetext/css relstylesheet />link hrefFavIcon.axd?__Cache0d2f37a6-e1c2-43ee-b846-4f5c2b483192 relshortcut icon />script>SC.util.mergeIntoContext({focusedControlID:null,userName:,userDisplayName:,isUserAuthenticated:false,antiForgeryToken:hLLl81zXu/XBdEbANX3bZGII1p5pMfMsXoNBJRPnBeYBAABCRTLNfrwtQg,isUserAdministrator:false,canManageSharedToolbox:false,pageBaseFileName:Guest,notifyActivityFrequencyMilliseconds:600000,loginAfterInactivityMilliseconds:36000000,canChangePassword:false,controlPanelUrl:null,pageType:GuestPage,processType:2,userAgentOverride:null,sessionTypeInfos:});/script>script>SC.extension.addInitializeProc(fa369545-ba27-4670-b053-a9f65f3269b0, function (extensionContext) {if (SC.context.pageType AdministrationPage && SC.context.isUserAuthenticated) SC.service.GetThemeInfo(function (themeInfo) { SC.util.includeStyleSheet(extensionContext.baseUrl + css/Style.css); });SC.event.addGlobalHandler(SC.event.ExecuteCommand, function (eventArgs) { switch (eventArgs.commandName) { case WebConfigSave: SC.dialog.showModalButtonDialog( Prompt, SC.resAdvancedConfig.ApplyChanges, OK, Default, function (container) { SC.ui.setContents(container, eventArgs.commandArgument WebConfigRestore ? $p(SC.resAdvancedConfig.RestoreDefaults.WebConfigWarning) : $p(SC.resAdvancedConfig.RestartInstanceWarning) ); }, function () { var appSettings JSON.parse(sessionStorage.getItem(WebConfigAppSettings)); var pageSettings JSON.parse(JSON.stringify(appSettings.location)); delete appSettings.location; SC.service.WriteChangesToWebConfig(appSettings, pageSettings, function (result) { if (result OK) { sessionStorage.removeItem(WebConfigAppSettings); SC.dialog.showModalActivityAndReload(Save, true, window.location.href.split(#)0); } else { SC.dialog.showModalMessageBox(SC.resAdvancedConfig.SaveError.Title, SC.resAdvancedConfig.SaveError.WebConfigDescription + + result); } }); } ); break; case AppConfigSave: SC.dialog.showModalButtonDialog( Prompt, SC.resAdvancedConfig.ApplyChanges, OK, Default, function (container) { SC.ui.setContents(container, eventArgs.commandArgument AppConfigRestore ? $p(SC.resAdvancedConfig.RestoreDefaults.AppConfigWarning) : $p(SC.resAdvancedConfig.ReinstallWarning) ); }, function () { var applicationSettings JSON.parse(sessionStorage.getItem(AppConfigAppSettings)); SC.service.WriteChangesToAppConfigNew(applicationSettings, AppConfigDefaults, function (result) { if (result OK) { sessionStorage.removeItem(AppConfigAppSettings); window.location.reload(); } else { SC.dialog.showModalMessageBox(SC.resAdvancedConfig.SaveError.Title, SC.resAdvancedConfig.SaveError.AppConfigDescription + + result); } }); } ); break; }});});/script>script>SC.extension.addInitializeProc(cb60a397-c936-483b-9111-d3462faeaa25, function (extensionContext) {/* Advanced Security - HSTS v1.0.0.0 */var extensionId extensionContext.baseUrl.split(/).slice(-2)0;/***** Extension Options *****/SC.event.addGlobalHandler(SC.event.QueryCommandButtonState, function(eventArgs){ switch(eventArgs.commandName) { case EditExtensionSettings: if (eventArgs.commandContext.extensionInfo.ExtensionID extensionId && eventArgs.commandElement._commandName EditExtensionSettings){ SC.ui.addElement(eventArgs.target.parentElement,A,{ href:#, _commandName:aboutHSTS_ + extensionId, _innerText:SC.resExtension.HSTS.About.CommandText }); } break; }});SC.event.addGlobalHandler(SC.event.ExecuteCommand, function(eventArgs){ switch (eventArgs.commandName) { case aboutHSTS_ + extensionId: window.open(https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security, _blank); break; }});/*********************************/});/script>script>SC.extension.addInitializeProc(c42e9fe5-f4aa-4698-bb71-ae68b8a23890, function (extensionContext) {/** Advanced SMTP Settings (1.2.3.0) **/var extensionId extensionContext.baseUrl.split(/).slice(-2)0;IS_CLOUD /^.*\.(screenconnect|hostedrmm)\.com$/.test(SC.context.clp.h);EMPTY_PASSWORD \ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd;/***** Extension Help Option *****/var helpLink https://help.screenconnect.com/Extension:Advanced_SMTP_Settings;var extensionResourceID EditSMTPSettings;SC.event.addGlobalHandler(SC.event.QueryCommandButtonState, function (eventArgs) { switch (eventArgs.commandName) { case EditExtensionSettings: if (eventArgs.commandContext.extensionInfo.ExtensionID extensionId && eventArgs.commandElement._commandName EditExtensionSettings) SC.ui.addElement(eventArgs.target.parentElement, A, { href: #, _commandName: (SC.context.scriptBaseUrl.indexOf(https://) helpLink.indexOf(https://) ? ShowHelpLink_ : OpenHelpLink_) + extensionId, _innerText: SC.resCommand.Help.Text.replace( ▽, ) }); break; }});SC.event.addGlobalHandler(SC.event.ExecuteCommand, function (eventArgs) { switch (eventArgs.commandName) { case ShowHelpLink_ + extensionId: SC.dialog.showModalPage(SC.resCommand.Help.Text.replace( ▽, ), helpLink, null); break; case OpenHelpLink_ + extensionId: window.open(helpLink, _blank); break; }});/*********************************/SC.service.GetMailConfigurationInfo SC.service.GetAdvancedMailConfigurationInfo;SC.resCommand.EditAdvancedMailConfiguration.Text SC.resCommand.EditMailConfiguration.Text;SC.event.addGlobalHandler(SC.event.PageDataRefreshed, function () { if (SC.context.pageType AdministrationPage && SC.context.tabKeysSC.context.tabIndex Mail) { var mailConfiguration SC.pagedata.get(); SC.types.SmtpDeliveryMethod mailConfiguration.SmtpDeliveryMethod; SC.ui.setContents($(.MailPanel), $dt( $h3({_textResource: MailPanel.MailTitle}), $p({className: CommandList}, SC.command.createCommandButtons({commandName: EditAdvancedMailConfiguration})), ), $dd( $dl( $dt({_textResource: MailPanel.MailDeliveryText}), $dd(mailConfiguration.smtpDeliveryMethod SC.types.SmtpDeliveryMethod.Network ? SC.util.isNullOrEmpty(mailConfiguration.smtpRelayServerHostName) ? SC.resMailPanel.SmtpDirectRadioButtonText : SC.util.formatString(SC.resExtension.SMTPSettings.MailPanel.RelaySettingsTextFormat, mailConfiguration.smtpRelayServerHostName, mailConfiguration.smtpRelayServerPort 25 ? null : : + mailConfiguration.smtpRelayServerPort, mailConfiguration.enableSSL ? SC.resExtension.SMTPSettings.MailPanel.UseSSLText : null, mailConfiguration.smtpUseDefaultCredentials ? SC.util.formatString( SC.resExtension.SMTPSettings.MailPanel.UsingDefaultCredentialsTextFormat, (!SC.util.isNullOrEmpty(mailConfiguration.smtpNetworkTargetName) ? SC.util.formatString(SC.resExtension.SMTPSettings.MailPanel.SPNLabelTextFormat, mailConfiguration.smtpNetworkTargetName) : ) ) : !SC.util.isNullOrEmpty(mailConfiguration.smtpNetworkUserName) && !SC.util.isNullOrEmpty(mailConfiguration.smtpNetworkPassword) ? SC.util.formatString(SC.resExtension.SMTPSettings.MailPanel.UsernameLabelTextFormat, mailConfiguration.smtpNetworkUserName) : null ) : mailConfiguration.smtpDeliveryMethod SC.types.SmtpDeliveryMethod.PickupDirectoryFromIis ? SC.resExtension.SMTPSettings.MailPanel.UsingIISPickupDirectoryText : SC.util.formatString(SC.resExtension.SMTPSettings.MailPanel.UsingSpecifiedPickupDirectoryTextFormat, mailConfiguration.smtpPickupDirectoryLocation) ), $dt({_textResource: MailPanel.DefaultFromAddressLabelText}), $dd(mailConfiguration.defaultMailFromAddress || SC.resMailPanel.UnsetLabelText), $dt({_textResource: MailPanel.DefaultToAddressLabelText}), $dd(mailConfiguration.defaultMailToAddress || SC.resMailPanel.UnsetLabelText), ), ), ); }});SC.event.addGlobalHandler(SC.event.ExecuteCommand, function (eventArgs) { switch (eventArgs.commandName) { case EditAdvancedMailConfiguration: var mailConfiguration SC.pagedata.get(); function getControlsForDeliveryMethod(deliveryMethodName) { var setRadioButtonChecked function () { SC.dialog.getModalDialog().querySelector(. + deliveryMethodName + RadioButton).checked true; }; var setBothRadioButtonsChecked function (eventArgs) { setRadioButtonChecked(); SC.ui.findDescendantBreadthFirst(SC.ui.findAncestorByTag(eventArgs.target, DD), function (_) { return _.name SmtpAuthenticationType }).checked true; }; switch (deliveryMethodName) { case Relay: // this isnt a value of SmtpDeliveryMethod, just Network with extra parameters return $dl({className: SmtpRelaySettingsList}, $dt(SC.resExtension.SMTPSettings.NetworkSettingsLabelText), $dd( $label( $span(SC.resExtension.SMTPSettings.RelayServerLabelText), $input({ type: text, className: SmtpRelayServerBox, value: mailConfiguration.smtpRelayServerHostName, _eventHandlerMap: {focus: setRadioButtonChecked}, }), ), ), $dd( $label( $span(SC.resExtension.SMTPSettings.RelayServerPortLabelText), $input({ type: number, className: SmtpRelayServerPortBox, value: mailConfiguration.smtpRelayServerPort, _eventHandlerMap: {focus: setRadioButtonChecked}, _attributeMap: { max: 65535, min: 1, placeholder: 25, }, }), ), ), $dd( $label( $input({ type: checkbox, className: SmtpRelayServerEnableSSLCheckbox, checked: mailConfiguration.enableSSL, _eventHandlerMap: {focus: setRadioButtonChecked}, }), $span(SC.resExtension.SMTPSettings.UseSSLLabelText), ), ), $dt(SC.resExtension.SMTPSettings.AuthenticationSettingsLabelText), $dd( $label( $input({ type: radio, name: SmtpAuthenticationType, value: None, checked: (SC.util.isNullOrEmpty(mailConfiguration.smtpNetworkUserName) || SC.util.isNullOrEmpty(mailConfiguration.smtpNetworkPassword)) && !mailConfiguration.smtpUseDefaultCredentials, _eventHandlerMap: {focus: setRadioButtonChecked}, }), $span(SC.resExtension.SMTPSettings.AnonymousCredentialsLabelText), ), ), $dd( $label( $input({ type: radio, name: SmtpAuthenticationType, value: Windows, checked: mailConfiguration.smtpUseDefaultCredentials, _eventHandlerMap: {focus: setRadioButtonChecked}, }), $span(SC.resExtension.SMTPSettings.DefaultCredentialsLabelText), ), $label( $span(SC.resExtension.SMTPSettings.NetworkTargetNameLabelText), $input({ type: text, className: SmtpAuthSPNBox, value: mailConfiguration.smtpNetworkTargetName, _eventHandlerMap: {focus: setBothRadioButtonsChecked}, }), ), ), $dd( $label( $input({ type: radio, name: SmtpAuthenticationType, value: Credentials, checked: !mailConfiguration.smtpUseDefaultCredentials && !SC.util.isNullOrEmpty(mailConfiguration.smtpNetworkUserName) && !SC.util.isNullOrEmpty(mailConfiguration.smtpNetworkPassword), _eventHandlerMap: {focus: setBothRadioButtonsChecked}, }), $span(SC.resExtension.SMTPSettings.AccountCredentialsLabelText), ), $label( $span(SC.resExtension.SMTPSettings.UsernameLabelText), $input({ type: text, className: SmtpAuthUsernameBox, value: mailConfiguration.smtpNetworkUserName, _eventHandlerMap: {focus: setBothRadioButtonsChecked}, }), ), $label( $span(SC.resExtension.SMTPSettings.PasswordLabelText), $input({ type: password, className: SmtpAuthPasswordBox, value: mailConfiguration.smtpNetworkPassword, _eventHandlerMap: {focus: setBothRadioButtonsChecked}, }), ), $label( $span(SC.resExtension.SMTPSettings.ConfirmPasswordLabelText), $input({ type: password, className: SmtpAuthConfirmPasswordBox, value: mailConfiguration.smtpNetworkPassword, _eventHandlerMap: {focus: setBothRadioButtonsChecked}, }), ), ), ); case SpecifiedPickupDirectory: return $input({ type: text, className: SmtpPickupDirectoryLocationBox, value: mailConfiguration.smtpPickupDirectoryLocation, _eventHandlerMap: {focus: setRadioButtonChecked}, }); default: // network, iispickup return null; } } SC.dialog.showModalDialog(EditMailConfiguration, { titleResourceName: EditMailConfigurationPanel.Title, content: $dl( $dt({_textResource: MailPanel.MailDeliveryText}), $dd( Network, PickupDirectoryFromIis, SpecifiedPickupDirectory, Relay.filter(function (_) { return !IS_CLOUD || _ Network || _ Relay }).map(function (_) { return $label( $input({ type: radio, name: MailDelivery, className: _ + RadioButton, value: _, checked: _ Relay ? !SC.util.isNullOrEmpty(mailConfiguration.smtpRelayServerHostName) : mailConfiguration.smtpDeliveryMethod SC.types.SmtpDeliveryMethod_, }), $span({_textResource: MailPanel.Smtp + (_ Network ? Direct : _) + RadioButtonText}), ), getControlsForDeliveryMethod(_), ; }) ), $dt({_textResource: MailPanel.DefaultFromAddressLabelText}), $dd( $input({ type: text, className: DefaultMailFromAddressBox, value: mailConfiguration.defaultMailFromAddress, }), ), $dt({_textResource: MailPanel.DefaultToAddressLabelText}), $dd( $div( $input({ type: text, className: DefaultMailToAddressBox, value: mailConfiguration.defaultMailToAddress, }), $button({ className: SecondaryButton, _textResource: MailPanel.SendTestMailButtonText, _commandName: SendAdvancedTestEmail, }), ), ), ), $p({className: ResultPanel}), , buttonTextResourceName: EditMailConfigurationPanel.ButtonText, onExecuteCommandProc: function (dialogEventArgs, dialog, closeDialogProc, setDialogErrorProc) { var authenticationMethod SC.ui.getSelectedRadioButtonValue(dialog.querySelector(.SmtpRelaySettingsList)); var smtpDeliveryMethodName SC.ui.getSelectedRadioButtonValue(dialog); var useExtraNetworkSettings false; if (smtpDeliveryMethodName Relay) { smtpDeliveryMethodName Network; // convert to valid SmtpDeliveryMethod value useExtraNetworkSettings true; } var defaultMailFromAddress dialog.querySelector(.DefaultMailFromAddressBox).value.trim(); var defaultMailToAddress dialog.querySelector(.DefaultMailToAddressBox).value.trim(); var smtpRelayServerHostName useExtraNetworkSettings ? dialog.querySelector(.SmtpRelayServerBox).value.trim() || null : null; var smtpRelayServerPort useExtraNetworkSettings ? dialog.querySelector(.SmtpRelayServerPortBox).value.trim() || null : null; var enableSSL useExtraNetworkSettings ? dialog.querySelector(.SmtpRelayServerEnableSSLCheckbox).checked : null; var smtpPickupDirectoryLocation smtpDeliveryMethodName SpecifiedPickupDirectory ? dialog.querySelector(.SmtpPickupDirectoryLocationBox).value.trim() || null : null; var smtpUseDefaultCredentials useExtraNetworkSettings && authenticationMethod Windows || null; var smtpNetworkTargetName useExtraNetworkSettings && authenticationMethod Windows ? dialog.querySelector(.SmtpAuthSPNBox).value.trim() || null : null; var smtpNetworkUserName useExtraNetworkSettings && authenticationMethod Credentials ? dialog.querySelector(.SmtpAuthUsernameBox).value.trim() || null : null; var smtpNetworkPassword useExtraNetworkSettings && authenticationMethod Credentials ? dialog.querySelector(.SmtpAuthPasswordBox).value.trim() || null : null; var resultPanel dialog.querySelector(.ResultPanel); function validateSettings(forSave) { if (smtpDeliveryMethodName Network && useExtraNetworkSettings) { if (!smtpRelayServerHostName) { setDialogErrorProc({message: SC.resExtension.SMTPSettings.EmptyRelayServerBoxErrorText}); return false; } else if (authenticationMethod Credentials) { if (SC.util.isNullOrEmpty(smtpNetworkUserName) || SC.util.isNullOrEmpty(smtpNetworkPassword)) { setDialogErrorProc({message: SC.resExtension.SMTPSettings.MissingCredentialsErrorText}); return false; } if (smtpNetworkPassword ! dialog.querySelector(.SmtpAuthConfirmPasswordBox).value.trim()) { setDialogErrorProc({message: SC.resExtension.SMTPSettings.PasswordMismatchErrorText}); return false; } } } else if (smtpDeliveryMethodName SpecifiedPickupDirectory) { if (SC.util.isNullOrEmpty(smtpPickupDirectoryLocation)) { setDialogErrorProc({message: SC.resExtension.SMTPSettings.EmptyPickupDirectoryBoxErrorText}); return false; } } return true; } switch (dialogEventArgs.commandName) { case Default: if (validateSettings(true)) SC.service.SaveAdvancedMailConfiguration( defaultMailFromAddress, defaultMailToAddress, smtpRelayServerHostName, smtpRelayServerPort, enableSSL, smtpDeliveryMethodName, smtpPickupDirectoryLocation, smtpUseDefaultCredentials, smtpNetworkTargetName, smtpNetworkUserName, smtpNetworkPassword, function () { SC.dialog.showModalActivityAndReload(Save, true, window.location.href); }, setDialogErrorProc ); break; case SendAdvancedTestEmail: if (validateSettings(false)) { SC.service.SendAdvancedTestEmail( defaultMailFromAddress, smtpRelayServerHostName, defaultMailToAddress, smtpDeliveryMethodName, smtpPickupDirectoryLocation, smtpRelayServerPort, enableSSL, smtpUseDefaultCredentials, smtpNetworkTargetName, smtpNetworkUserName, smtpNetworkPassword, function () { SC.css.ensureClass(resultPanel, Success, true); SC.css.ensureClass(resultPanel, Failure, false); SC.ui.setContents(resultPanel, SC.resCommand.SendEmail.SuccessMessage); setTimeout(function () { SC.css.ensureClass(resultPanel, Success, false); }, 3000); }, function (error) { SC.css.ensureClass(resultPanel, Failure, true); SC.css.ensureClass(resultPanel, Success, false); SC.ui.setContents(resultPanel, error.message); setTimeout(function () { SC.css.ensureClass(resultPanel, Failure, false); }, 30000); } ); } break; } }, }); }});SC.event.addGlobalHandler(SC.event.PreRender, function (eventArgs) { if (SC.context.pageType AdministrationPage && SC.context.tabKeysSC.context.tabIndex Mail) SC.util.includeStyleSheet(extensionContext.baseUrl + AdvancedMailStyle.css);});});/script>script>SC.extension.addInitializeProc(07979477-b058-44c4-9829-035b041eeb01, function (extensionContext) {/*http://forum.screenconnect.com/yaf_postsm33047_Extension--Command-Toolbox.aspx#post33047multi line saved commandsdemand administer permission to modify settings*/SC.event.addGlobalHandler(SC.event.PreRender, function (eventArgs) { if (SC.context.pageType HostPage) { SC.util.includeStyleSheet(extensionContext.baseUrl + CommandToolboxStyle.css); }});SC.event.addGlobalHandler(SC.event.QueryCommandButtons, function (eventArgs) { switch (eventArgs.area) { case HostDetailPopoutPanel: eventArgs.buttonDefinitions.push( { commandName: Select, commandArgument: OpenCommandToolbox, text: SC.resCommandToolbox.DetailPopout.Modal } ); break; }});SC.event.addGlobalHandler(SC.event.ExecuteCommand, function (eventArgs) { switch (eventArgs.commandName) { case SaveCommandSettings: console.log(within setting save); $(saveStatus).innerHTML SC.resCommandToolbox.Modal.Saving; var position $(commandSelector).selectedIndex + 1; var commandName $(commandSelector).options$(commandSelector).selectedIndex.text; SC.service.SaveExtensionCommandSetting(commandName, position, commandText.value, function (ret) { $(saveStatus).innerHTML SC.resCommandToolbox.Modal.Saved; $(saveStatus).className Success; }); break; } switch (eventArgs.commandArgument) { case OpenCommandToolbox: SC.dialog.showModalButtonDialog(CommandToolbox, SC.resCommandToolbox.Modal.Title, SC.resCommandToolbox.Modal.RunCommand, Default, function (container) { SC.ui.addElement(container, P, SC.resCommandToolbox.Modal.Instruction); var selector SC.ui.createElement(SELECT, { id: commandSelector }); var commandText SC.ui.createElement(TextArea, { id: commandText }); var commandIndex ; SC.service.GetCommandNamesAndValues(function (commands) { var saveCommand SC.ui.createElement(INPUT, { id: saveCommand, type: BUTTON, value: SC.resCommandToolbox.Modal.SaveButton }); var saveStatusField SC.ui.createElement(SPAN, { id: saveStatus }); Array.prototype.forEach.call(commands, function (c) { var option document.createElement(option); option.value c.CommandValue.toString(); option.text c.CommandName; commandIndex.push(c.Index.toString()); selector.appendChild(option); }); selector.onchange function () { commandText.value getSelectedItemText(); }; if (commands0) commandText.value commands0.CommandValue; SC.ui.addContent(container, selector); SC.ui.addContent(container, commandText); //this could be used to enforce pagedata update to recreate extensioncontext settings after setting change //SC.command.createCommandButtons(container, SaveExtensionSettings); /* SC.ui.addContent( container, SC.command.createCommandButtons( { commandName: SaveCommandSettings, text: SC.resCommandToolbox.Modal.SaveButton, } ) ); */ SC.ui.addContent(container, saveCommand); SC.ui.addContent(container, saveStatusField); saveCommand.onclick function () { $(saveStatus).innerHTML SC.resCommandToolbox.Modal.Saving; var position commandIndex$(commandSelector).selectedIndex; var commandName $(commandSelector).options$(commandSelector).selectedIndex.text; SC.service.SaveExtensionCommandSetting(commandName, position, commandText.value, function (ret) { $(saveStatus).innerHTML SC.resCommandToolbox.Modal.Saved; $(saveStatus).className Success; }); }; }); }, function (eventArgs) { var allRows ; if ($(.DetailTable) null) allRows $(detailTable).rows; else allRows $(.DetailTable).rows; var commandRows Array.prototype.filter.call(allRows, function (r) { return SC.ui.isChecked(r) || SC.ui.isSelected(r); }); var sessions Array.prototype.map.call(commandRows, function (r) { return r._dataItem; }); var sessionIDs Array.prototype.map.call(sessions, function (s) { return s.SessionID; }); var chosenCommand $(commandText).value; window.addEventToSessions(window.getSessionGroupUrlPart()0, SC.types.SessionType.Access, sessionIDs, SC.types.SessionEventType.QueuedCommand, null, chosenCommand, false, false, true ); SC.dialog.hideModalDialog(); }); break; }});function getSelectedItemText() { return $(commandSelector).options$(commandSelector).selectedIndex.value;}//this is atrocious, just us a js object or somethingfunction getCommandNamesAndValues() { var commandsToReturn ; var commands { name: extensionContext.settingValues.CommandName1, value: extensionContext.settingValues.Command1, index: 1 }, { name: extensionContext.settingValues.CommandName2, value: extensionContext.settingValues.Command2, index: 2 }, { name: extensionContext.settingValues.CommandName3, value: extensionContext.settingValues.Command3, index: 3 }, { name: extensionContext.settingValues.CommandName4, value: extensionContext.settingValues.Command4, index: 4 }, { name: extensionContext.settingValues.CommandName5, value: extensionContext.settingValues.Command5, index: 5 }, { name: extensionContext.settingValues.CommandName6, value: extensionContext.settingValues.Command6, index: 6 }, { name: extensionContext.settingValues.CommandName7, value: extensionContext.settingValues.Command7, index: 7 }, { name: extensionContext.settingValues.CommandName8, value: extensionContext.settingValues.Command8, index: 8 }, { name: extensionContext.settingValues.CommandName9, value: extensionContext.settingValues.Command9, index: 9 }, { name: extensionContext.settingValues.CommandName10, value: extensionContext.settingValues.Command10, index: 10 }, { name: extensionContext.settingValues.CommandName11, value: extensionContext.settingValues.Command11, index: 11 }, { name: extensionContext.settingValues.CommandName12, value: extensionContext.settingValues.Command12, index: 12 }, { name: extensionContext.settingValues.CommandName13, value: extensionContext.settingValues.Command13, index: 13 }, { name: extensionContext.settingValues.CommandName14, value: extensionContext.settingValues.Command14, index: 14 }, { name: extensionContext.settingValues.CommandName15, value: extensionContext.settingValues.Command15, index: 15 }, { name: extensionContext.settingValues.CommandName16, value: extensionContext.settingValues.Command16, index: 16 }, { name: extensionContext.settingValues.CommandName17, value: extensionContext.settingValues.Command17, index: 17 }, { name: extensionContext.settingValues.CommandName18, value: extensionContext.settingValues.Command18, index: 18 }, { name: extensionContext.settingValues.CommandName19, value: extensionContext.settingValues.Command19, index: 19 }, { name: extensionContext.settingValues.CommandName20, value: extensionContext.settingValues.Command20, index: 20 } ; Array.prototype.forEach.call(commands, function (c) { if (c.value ! ) { commandsToReturn.push(c); } }); return commandsToReturn;}});/script>script>SC.extension.addInitializeProc(2baab7c5-9ea7-4cfe-8907-626536af1b17, function (extensionContext) {SC.event.addGlobalHandler(SC.event.PageDataRefreshed, function (eventArgs) { if (SC.context.pageType AdministrationPage && SC.context.tabKeysSC.context.tabIndex Audit) { SC.util.includeStyleSheet(extensionContext.baseUrl + DownloadAuditLogAsCSVStyle.css) $(.QueryAuditLogButton).insertAdjacentElement(afterend, $input({ className: DownloadAuditLogButton, type: submit, _commandName: DownloadAuditLogAsCSV, value: SC.resExtension.DownloadAuditLogAsCSV.CommandText, }) ).insertAdjacentElement(afterend, $span({ id: csvStatus }) ); }});SC.event.addGlobalHandler(SC.event.ExecuteCommand, function (eventArgs) { if (SC.context.pageType AdministrationPage && SC.context.tabKeysSC.context.tabIndex Audit) { switch (eventArgs.commandName) { case DownloadAuditLogAsCSV: var downloadButton $(.DownloadAuditLogButton); var statusField $(#csvStatus); var minTime SC.util.fromDateAndTimeValueStrings($(.MinDateBox).value, $(.MinTimeBox).value); var maxTime SC.util.fromDateAndTimeValueStrings($(.MaxDateBox).value, $(.MaxTimeBox).value); var sessionNameFilter $(sessionNameBox).value; var sessionEventTypesFilter ( function (_) { return ( _.includedOrExcluded ? _.includedOrExcludedValues : SC.util.difference(_.includedOrExcludedValues, Object.values(window._sessionEventTypesFilterOptions)) ); } )(SC.ui.getValuesFromMultiselectBox($(.MultiselectBox))); var updateStatus function (message, shouldDisableButton, isError, resetTime) { statusField.innerText message; downloadButton.disabled shouldDisableButton; SC.css.ensureClass(statusField, Failure, isError); if (typeof resetTime number) window.setTimeout( function () { statusField.innerText ; statusField.className ; }, resetTime ); }; downloadButton.disabled true; SC.service.GetSessionAuditEntriesCount(minTime, maxTime, sessionNameFilter, sessionEventTypesFilter, function (recordCount) { if (recordCount > 0) { updateStatus(SC.util.formatString(SC.resExtension.DownloadAuditLogAsCSV.ProcessingEntriesTextFormat, recordCount), true); SC.service.GetSessionAuditEntriesInCSV(minTime, maxTime, sessionNameFilter, sessionEventTypesFilter, function (csvFileContent) { updateStatus(SC.resExtension.DownloadAuditLogAsCSV.PreparingDownloadText, true); var csvMimeType text/csv; var dlFileName (SC.resExtension.DownloadAuditLogAsCSV.DownloadFile.BaseName + (SC.resExtension.DownloadAuditLogAsCSV.DownloadFile.IncludeTimestamp true ? + minTime + - + maxTime : ) + . + SC.resExtension.DownloadAuditLogAsCSV.DownloadFile.Extension).replace(/^a-z0-9.,_\-\s/gi, -); var dataUri SC.ui.createDataUri(csvMimeType, csvFileContent); var dataBinaryString atob(csvFileContent); var dataBuffer new ArrayBuffer(dataBinaryString.length); var dataIntArray new Uint8Array(dataBuffer); for (var i 0; i dataIntArray.length; i++) { dataIntArrayi dataBinaryString.charCodeAt(i); } var blobFile; // The semicolon after non-empty catch statements are intentional, // found that Javascript would not run the code in the Catch block in some browsers without it. try { blobFile new Blob(dataIntArray, { type: csvMimeType }); } catch (e) { try { window.BlobBuilder window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder; if (e.name TypeError && window.BlobBuilder) { var bb new window.BlobBuilder(); bb.append(dataBuffer); blobFile bb.getBlob(csvMimeType); } else if (e.name InvalidStateError) { blobFile new Blob(dataBuffer, { type: csvMimeType }); } } catch (e2) { } }; navigator.saveBlob navigator.saveBlob || navigator.msSaveBlob || navigator.mozSaveBlob || navigator.webkitSaveBlob; window.URL window.URL || window.webkitURL || window.mozURL || window.msURL; window.saveAs window.saveAs || window.webkitSaveAs || window.mozSaveAs || window.msSaveAs; // Download attribute on anchors not supported in all browsers - notify the user if appropriate that the file will not be named correctly. if (!(download in document.createElement(a)) && extensionContext.settingValues.ShowBrowserAlerts true && !navigator.saveBlob) { SC.dialog.showModalDialog( DownloadAttributeNotSupported, SC.resExtension.DownloadAuditLogAsCSV.AlertTitle.DownloadAttributeNotSupported, $div( $p(SC.resExtension.DownloadAuditLogAsCSV.AlertText.DownloadAttributeNotSupported), $p(dlFileName), $p(SC.resExtension.DownloadAuditLogAsCSV.AlertText.DisableAlertInfo) ) ); // This is most likely Safari, so Im gonna check for it here and correct corse accordingly. // Safari can use Blobs, but due to Mime Type issues, wont download the file that way... // Safari also will open the csv file inline if it is the text/csv datatype if (SC.util.isCapable(SC.util.Caps.Safari)) { dataUri SC.ui.createDataUri(attachment/csv, csvFileContent); if (typeof blobFile ! undefined && blobFile ! null) { blobFile null; } } } if (typeof blobFile ! undefined && blobFile ! null) { if (navigator.saveBlob) { navigator.msSaveBlob(blobFile, dlFileName); } else if (window.saveAs) { window.saveAs(blobFile, dlFileName); } else { try { fileUrl window.URL.createObjectURL(blobFile); } catch (e) { fileUrl dataUri; }; } } else { fileUrl dataUri; } if (fileUrl ! ) { var file SC.ui.createElement(A, { id: CSVDLLink_2baab7c59ea74cfe8907626536af1b17, download: dlFileName, href: fileUrl }); try { document.body.appendChild(file); file.click(); } catch (e) { try { window.location.href fileUrl; } catch (e2) { alert(SC.resExtension.DownloadAuditLogAsCSV.AlertText.BrowserNotCompatible + \n1: + e + \n2: + e2); }; }; if (blobFile ! null) { window.URL.revokeObjectURL(fileUrl); } } else { // fileUrl is blank, neither Blob nor DataUri works... try another browser. alert(SC.resExtension.DownloadAuditLogAsCSV.AlertText.BrowserNotCompatible); } updateStatus(, false); }, function (error) { updateStatus(SC.util.formatString(SC.resExtension.DownloadAuditLogAsCSV.CSVGenerationErrorTextFormat, error), false, true, 5000); } ); } else { // no records updateStatus(SC.resExtension.DownloadAuditLogAsCSV.NoRecordsErrorText, false, true, 5000); } }, function (error) { updateStatus(SC.util.formatString(SC.resExtension.DownloadAuditLogAsCSV.QueryCountErrorTextFormat, error), false, true, 5000); } ); break; } }});});/script>script>SC.extension.addInitializeProc(75fe3a74-43ba-45eb-9eab-12ff335b91cb, function (extensionContext) {/** Edit App.Config Settings 1.3.1.0 **//** Global Extension Variables **/var extensionId extensionContext.baseUrl.split(/).slice(-2)0;const numberRegex new RegExp(/(^0-9$)|(^1-90-9+$)/);/** Custom top modal dialog to show alert type messages in modal dialog on top of existing modal dialogs **/function setupTopModalDialog(disable){ if (!disable) { eval(SC.dialog.showModalDialogRawOnTop + SC.dialog.showModalDialogRaw.toString().replace(SC.dialog.hideModalDialog();,).replace(/hideModalDialog/g,hideTopModalDialog)); eval(SC.dialog.hideTopModalDialog + SC.dialog.hideModalDialog.toString().replace(/getModalDialog/g,getTopModalDialog)); SC.dialog.getTopModalDialog function() { return Array.prototype.map.call(window.document.querySelectorAll(#dialog),function(_){return _;}).pop(); }; } else { delete SC.dialog.showModalDialogRawOnTop; delete SC.dialog.hideTopModalDialog; delete SC.dialog.getTopModalDialog; }}function alertModal(message){ if (!SC.dialog.showModalDialogRawOnTop) setupTopModalDialog(); SC.dialog.showModalDialogRawOnTop( message.subClass || MessageBox, message.titlePanel || SC.dialog.createTitlePanel(message.title || SC.resErrorPanel.Title), message.contentPanel || SC.dialog.createContentPanel($div(message.content || message)), message.buttonPanel || SC.dialog.createButtonPanel(message.button || OK,message.extraButtons || null) , message.onExecProc || function(eventArgs){ SC.dialog.hideTopModalDialog(); }, message.onQueryProc || null, message.onHideProc || function(){ if (SC.dialog.getTopModalDialog() SC.dialog.getModalDialog()) setupTopModalDialog(true); } );}/**********************************************//** Table Sorting Functions **/var sortBy {};function sortTable(table, col) { if (sortBy.table){ var oldSortCol document.querySelector(# + sortBy.table).tHead.rows0.cellssortBy.col || 0; SC.css.ensureClass(oldSortCol,Ascending,false); SC.css.ensureClass(oldSortCol,Descending,false); } if (sortBy.table table.id && sortBy.col col){ sortBy.dir -((+sortBy.dir) || -1); } else { sortBy.table table.id; sortBy.col col; sortBy.dir 1; } if (sortBy.dir ! 0) SC.css.ensureClass(table.tHead.rows0.cellscol,sortBy.dir > 0 ? Ascending : Descending, true); var tb table.tBodies0; var tr Array.prototype.slice.call(tb.rows, 0); tr tr.sort(function (a, b) { var aVal a.cellscol.order ? a.cellscol.order : a.cellscol.textContent; var bVal b.cellscol.order ? b.cellscol.order : b.cellscol.textContent; return sortBy.dir * (typeof aVal number ? aVal - bVal : aVal.localeCompare(bVal)); }); for(var i0; itr.length; ++i){ tb.appendChild(tri); }}function makeSortable(table) { var th table.tHead, i; th && (th th.rows0) && (th th.cells); if (th) i th.length; else return; // if no `thead>` then do nothing while (--i > 0) (function (i) { SC.css.ensureClass(thi,Sortable,true); thi.addEventListener(click, function () {sortTable(table, i)}); }(i));}function makeAllSortable(parent) { parent parent || document.body; var t parent.getElementsByTagName(table), i t.length; while (--i > 0) makeSortable(ti);}/*****************************//** General Extension Functions **/function checkVersion(minVer, curVer) { if (typeof curVer + typeof minVer ! stringstring) return false; var a curVer.split(.), b minVer.split(.), i 0, len Math.max(a.length, b.length); for (; i len; i++) { if ((ai && !bi && parseInt(ai) > 0) || (parseInt(ai) > parseInt(bi))) { return true; } else if ((bi && !ai && parseInt(bi) > 0) || (parseInt(ai) parseInt(bi))) { return false; } } return true;}function checkLongBitmask(flagInput,maskInput) { var maxJSMaskLength 8; flags flagInput.substring(flagInput.length,flagInput.length-(Math.min(maxJSMaskLength,flagInput.length))); mask maskInput.substring(maskInput.length,maskInput.length-(Math.min(maxJSMaskLength,maskInput.length))); if (isNaN(flags) || isNaN(mask)){ return false; } if (parseInt(mask,16) 0) { if (maskInput.length > maxJSMaskLength) { return checkLongBitmask(flagInput.substring(0,flagInput.length - maxJSMaskLength),maskInput.substring(0,maskInput.length - maxJSMaskLength)); } else { return false; } } if ((parseInt(flags,16) & parseInt(mask,16)) parseInt(mask,16)){ return true; }}function setLongBitmask(flags, mask, on) { for (var x mask.length, i; x > 0; x--){ i x-1; if (mask.charAt(i) 0 || mask.charAt(i) x){ continue; } var replChar flags.charAt(i); if (on) { replChar (parseInt(flags.charAt(i),16) | parseInt(mask.charAt(i),16)).toString(); } else { replChar (parseInt(flags.charAt(i),16) & ~parseInt(mask.charAt(i),16)).toString(); } flags flags.substr(0, i) + replChar + flags.substr(i+replChar.length); } return flags;}function clickToSelect(event) { //this event.target event.preventDefault(); var scroll_offset this.parentElement.scrollTop; this.selected !this.selected; this.parentElement.scrollTop scroll_offset;}function disableMouseMoveUnselect(event) { event.preventDefault();}function getValueSetForMaxVersion(settings, maxVersion) { var returnValue ; var maxDVver 0.0; for (var v in settings){ if (checkVersion(v,maxVersion) && checkVersion(maxDVver,v)) { maxDVver v; returnValue settingsv; } } return returnValue;}function addCacheBuster(url) { var cachebuster __CacheBuster + new Date().getTime(); return ( url.indexOf(?) ! -1 ? url.split(?)0 + ? + cachebuster + & + url.split(?)1 : (url.indexOf(#) ! -1 ? url.split(#)0 + ? + cachebuster + # + url.split(#)1 : url + ? + cachebuster ) );}function httpRequestJSONObjectAsync(theUrl, callback){ var xmlHttp new XMLHttpRequest(); xmlHttp.onreadystatechange function() { if (xmlHttp.readyState 4 && xmlHttp.status 200) { callback(JSON.parse(xmlHttp.responseText)); } else if (xmlHttp.readyState 4) { console.warn(Metaquery failed); } }; xmlHttp.open(GET, addCacheBuster(theUrl), true); xmlHttp.send();}/********************/SC.event.addGlobalHandler(SC.event.QueryCommandButtons,function (eventArgs) { switch (eventArgs.area) { case ExtrasPopoutPanel: if (SC.context.pageType AdministrationPage) { eventArgs.buttonDefinitions.push( { commandName: command_ + extensionId, text: SC.resExtension.EditAppConfig.CommandText} ); } break; case resetbutton_ + extensionId: eventArgs.buttonDefinitions.push( { commandName: resetcommand_ + extensionId, text: SC.resExtension.EditAppConfig.ResetDefaultsButtonText} ); break; case restorebutton_ + extensionId: eventArgs.buttonDefinitions.push( { commandName: restorecommand_ + extensionId, text: SC.resExtension.EditAppConfig.RestoreSettingsButtonText} ); break; }});SC.event.addGlobalHandler(SC.event.ExecuteCommand, function (eventArgs) { switch(eventArgs.commandName) { case command_ + extensionId: SC.util.includeStyleSheet(extensionContext.baseUrl + Style.css); SC.service.EditAppConfigSettings_GetAppConfigFileContents(function(AppConfigContents){ httpRequestJSONObjectAsync(extensionContext.baseUrl + Defaults.json?cache + (Math.random()*1000000),function(defaults){ var serverVersion SC.context.productVersion; var dataUri SC.ui.createDataUri(SC.util.isCapable(SC.util.Caps.Safari) ? attachment/config : text/config, AppConfigContents); var settings {}; if (AppConfigContents ! null) { var xmlParser new DOMParser(); var xmlString atob(AppConfigContents); xmlString xmlString.substring(xmlString.indexOf(),xmlString.lastIndexOf(>)+1); if (xmlString ! !-- + SC.resExtension.EditAppConfig.AppConfigFileNotFoundText + -->) { try{ var xmlDoc xmlParser.parseFromString(xmlString,text/xml); var xmlSettings xmlDoc.getElementsByTagName(setting); for (var i 0; i xmlSettings.length; i++) { settingsxmlSettingsi.getAttribute(name).trim() xmlSettingsi.textContent.trim(); } } catch (err) { alertModal(SC.resExtension.EditAppConfig.InvalidAppConfigXML + \n\n + err); settings {}; } } } var masks defaults.DEFAULTS.SCBitmaskDefaults; var usingCustomDefaults false; if (extensionContext.settingValues.AppConfigDefaultsCode ! ){ var newDefaults {}; try { if (extensionContext.settingValues.AppConfigDefaultsCode.startsWith({) && extensionContext.settingValues.AppConfigDefaultsCode.endsWith(})) newDefaults JSON.parse(extensionContext.settingValues.AppConfigDefaultsCode); else newDefaults JSON.parse(atob(extensionContext.settingValues.AppConfigDefaultsCode)); } catch (err) { alertModal(SC.resExtension.EditAppConfig.InvalidDefaultsCode + \n\n + err); }; // This semicolon is NOT un-necessary... Javascript Try/Catch wont run the catch code in some browsers without it. for (var key in newDefaults) { if (keyDEFAULTS) continue; defaultskey newDefaultskey; } if (DEFAULTS in newDefaults) { for (var mask in newDefaults.DEFAULTS.SCBitmaskDefaults) { masksmask newDefaults.DEFAULTS.SCBitmaskDefaultsmask; } } if (Object.keys(newDefaults).length) usingCustomDefaults true; } var enableAdvancedBitmaskEditor extensionContext.settingValues.UseEasyBitmaskEditor true; var enableCommandsSelector extensionContext.settingValues.UseCommandsSelector true; var instructions SC.resExtension.EditAppConfig.DialogInstructions + (usingCustomDefaults ? \n + SC.resExtension.EditAppConfig.CustomDefaultsInstructionNote : ); SC.dialog.showModalButtonDialog( EditAppConfigSettings, SC.resExtension.EditAppConfig.DialogTitle, SC.resExtension.EditAppConfig.DialogButtonText, Default, function (container) { SC.ui.addElement(container, P, instructions); var AppConfigLinksContainer SC.ui.addElement(container, ul,{}); var AppConfigHelpLink SC.ui.createElement(A,{href:SC.resExtension.EditAppConfig.AppConfigSettingsLinkHref,target:_blank, _innerText:SC.resExtension.EditAppConfig.AppConfigSettingsLinkText}); var AppConfigMacHelpLink SC.ui.createElement(A,{href:SC.resExtension.EditAppConfig.AppConfigSettingsLinkHrefForMac,target:_blank, _innerText:SC.resExtension.EditAppConfig.AppConfigSettingsLinkTextMacLinux}); var AppConfigDownloadLink SC.ui.createElement(A,{download:app.config,href:dataUri,_innerText:SC.resExtension.EditAppConfig.AppConfigLinkText}); SC.ui.setDisabled(AppConfigDownloadLink,AppConfigContents null); var AppConfigDeleteLink SC.command.queryAndCreateCommandButtons(resetbutton_ + extensionId); var AppConfigRestoreLink SC.command.queryAndCreateCommandButtons(restorebutton_ + extensionId); SC.ui.addElement(AppConfigLinksContainer,li,AppConfigDownloadLink); SC.ui.addElement(AppConfigLinksContainer,li,AppConfigHelpLink); if (checkVersion(6.1,serverVersion)) // Mac settings only available on 6.1, so only show the help link on 6.1+ SC.ui.addElement(AppConfigLinksContainer,li,AppConfigMacHelpLink); SC.ui.addElement(AppConfigLinksContainer,li,AppConfigDeleteLink); SC.ui.addElement(AppConfigLinksContainer,li,AppConfigRestoreLink); var AppConfigTablesContainer SC.ui.addElement(container, div,{className:AppConfigTablesContainer}); var flagsTable SC.ui.createElement(TABLE,{id:AppConfigFlags,className:AppConfigFlagsTable}); var flagsTableHead SC.ui.addElement(flagsTable,THEAD,{}); var flagsHeaderRow SC.ui.addElement(flagsTableHead,tr, {}); SC.ui.addElement(flagsHeaderRow,th,{_innerText:SC.resExtension.EditAppConfig.FlagColumnTitle}); var flagsTableBody SC.ui.addElement(flagsTable,TBODY,{}); var settingsTable SC.ui.createElement(TABLE,{id:AppConfigSettings,className:AppConfigSettingsTable}); var settingsTableHead SC.ui.addElement(settingsTable,THEAD,{}); var settingsHeaderRow SC.ui.addElement(settingsTableHead,tr, {}); SC.ui.addElement(settingsHeaderRow,th,{_innerText:SC.resExtension.EditAppConfig.KeyColumnTitle}); SC.ui.addElement(settingsHeaderRow,th,{_innerText:SC.resExtension.EditAppConfig.ValueColumnTitle}); var settingsTableBody SC.ui.addElement(settingsTable,TBODY,{}); var bitmasksTable SC.ui.createElement(TABLE,{id:AppConfigBitmasks,className:AppConfigBitmasksTable}); var bitmasksTableHead SC.ui.addElement(bitmasksTable,THEAD,{}); var bitmasksHeaderRow SC.ui.addElement(bitmasksTableHead,tr, {}); SC.ui.addElement(bitmasksHeaderRow,th,{_innerText:SC.resExtension.EditAppConfig.BitmaskColumnTitle}); var bitmasksTableBody SC.ui.addElement(bitmasksTable,TBODY,{}); SC.ui.addElement(AppConfigTablesContainer,div,flagsTable); SC.ui.addElement(AppConfigTablesContainer,div,settingsTable); SC.ui.addElement(AppConfigTablesContainer,div,bitmasksTable); var settingNum 0; for (var key in defaults) { if (key DEFAULTS || !checkVersion(defaultskey.ver,serverVersion)) { continue; } if (defaultskey.removed && checkVersion(defaultskey.removed,serverVersion)) { continue; } var keyDV getValueSetForMaxVersion(defaultskey.dv,serverVersion); var keyValue (key in settings && !eventArgs.loadDefaults) ? settingskey : keyDV; var keyType defaultskey.type; var keyValueEditor ; var valueTip SC.util.formatString(SC.resExtension.EditAppConfig.CurrentValueString,keyValue) + \n + SC.util.formatString(SC.resExtension.EditAppConfig.DefaultValueString,keyDV); var keySide defaultskey.side; var keySideText ; switch(keySide){ case Guest: keySideText SC.util.formatString(SC.resExtension.EditAppConfig.AppliesTo.Format, SC.resExtension.EditAppConfig.AppliesTo.GuestText) + \n; break; case Host: keySideText SC.util.formatString(SC.resExtension.EditAppConfig.AppliesTo.Format, SC.resExtension.EditAppConfig.AppliesTo.HostText) + \n; break; case Host and Guest: keySideText SC.util.formatString(SC.resExtension.EditAppConfig.AppliesTo.Format, SC.resExtension.EditAppConfig.AppliesTo.BothText) + \n; break; } var keyTip defaultskey.tip + \n + keySideText + valueTip; var row SC.ui.createElement(tr, {id:key + Row}); switch (keyType) { case flag: SC.ui.addContent(flagsTableBody,row); break; case bitmask: SC.ui.addContent(bitmasksTableBody,row); break; default: SC.ui.addContent(settingsTableBody,row); break; } settingNum++; switch (keyType) { case flag: keyValueEditor SC.ui.createElement(INPUT,{type:checkbox,id:key,keyType:flag,title:valueTip}); if (keyValue true) keyValueEditor.checked true; var flagLabel SC.ui.createElement(LABEL,{_innerText:key,title:keyTip}); if (keyDV true) { flagLabel.style.fontWeight bold; } SC.ui.addElement(row,td,keyValueEditor, ,flagLabel); break; case commands: if (enableCommandsSelector) { keyValueEditor SC.ui.createElement(SELECT,{id:key,keyType:commands,className:appConfigCommandsSelect,multiple:true,title:valueTip,size:10}); for (var each in defaultskey.commands){ if (!checkVersion(defaultskey.commandseach.ver,serverVersion)) { continue; } if (defaultskey.commandseach.removed && checkVersion(defaultskey.commandseach.removed,serverVersion)) { continue; } var commandOption SC.ui.createElement(OPTION,{value:each,text:each,title:defaultskey.commandseach.tip}); commandOption.onmousedown clickToSelect; commandOption.onmousemove disableMouseMoveUnselect; if (keyValue.match(new RegExp((?:^|,)+each+(?:,|$)))) { commandOption.selected true; } if (keyDV.match(new RegExp((?:^|,)+each+(?:,|$)))) { commandOption.style.fontWeight bold; } keyValueEditor.add(commandOption); } } else { keyValueEditor SC.ui.createElement(INPUT,{id:key,keyType:commands,type:text,value:keyValue,_innerText:keyValue,title:valueTip}); } SC.ui.addElement(row,td, SC.ui.createElement(LABEL,{_innerText:key,title:keyTip})); var ele SC.ui.addElement(row,td,keyValueEditor); ele.order settingNum; break; case directory: keyValueEditor SC.ui.createElement(INPUT,{id:key,keyType:directory,className:appConfigDirectoryInput,type:text,value:keyValue,_innerText:keyValue,title:valueTip}); SC.ui.addElement(row,td, SC.ui.createElement(LABEL,{_innerText:key,title:keyTip})); var ele SC.ui.addElement(row,td,keyValueEditor); ele.order settingNum; break; case bitmask: if (enableAdvancedBitmaskEditor) { keyValueEditor SC.ui.createElement(ul,{id:key,keyType:bitmask,value:keyValue, className:appConfigBitmaskValue,title:valueTip}); for (var mask in masks){ if (!checkVersion(masksmask.ver,serverVersion)) { continue; } if (masksmask.removed && checkVersion(masksmask.removed,serverVersion)) { continue; } var varCheck SC.ui.createElement(INPUT,{type:checkbox,id:key + mask,mask:mask,initChecked:false,keyType:bitmask,className:appConfigBitmaskValue,title:masksmask.tip}); var bitMaskChecked false; if (checkLongBitmask(keyValue,masksmask.mask)){ varCheck.checked true; varCheck.initChecked true; bitMaskChecked true; } var bitmaskLabel SC.ui.createElement(LABEL,{_innerText:mask,className:appConfigBitmaskValue,title:masksmask.tip}); if (checkLongBitmask(keyDV,masksmask.mask)){ bitmaskLabel.style.fontWeight bold; } SC.ui.addElement(keyValueEditor,li,varCheck,bitmaskLabel); } SC.ui.addElement(row,td, SC.ui.createElement(LABEL,{_innerText:key,title:keyTip,className:appConfigBitmaskLabel}),keyValueEditor); } else { keyValueEditor SC.ui.createElement(INPUT,{id:key,keyType:bitmask,type:text,value:keyValue,_innerText:keyValue,title:valueTip}); SC.ui.addElement(row,td, SC.ui.createElement(LABEL,{_innerText:key,title:keyTip}), SC.ui.createElement(BR,{}), keyValueEditor); } break; case selection: keyValueEditor SC.ui.createElement(SELECT,{id:key,keyType:selection,title:valueTip}); var maxOptVer 0; for (var oset in defaultskey.options){ if (checkVersion(oset,serverVersion) && checkVersion(maxOptVer,oset)) { maxOptVer oset; } } if (maxOptVer 0) { continue; } for (var opt in defaultskey.optionsmaxOptVer){ var selectionOption SC.ui.createElement(OPTION,{id:key+-+opt,value:defaultskey.optionsmaxOptVeropt,text:opt}); if (selectionOption.id key + - + keyValue){ selectionOption.selected true; } keyValueEditor.add(selectionOption); } SC.ui.addElement(row,td, SC.ui.createElement(LABEL,{_innerText:key,title:keyTip})); var ele SC.ui.addElement(row,td,keyValueEditor); ele.order settingNum; break; case number: keyValueEditor SC.ui.createElement(INPUT,{id:key,keyType:number,type:number,value:keyValue,_innerText:keyValue,title:valueTip}); for (var cset in defaultskey.constraints) { if (!checkVersion(cset,serverVersion)) { continue; } for (var constraint in defaultskey.constraintscset) { keyValueEditorconstraint defaultskey.constraintscsetconstraint; } } SC.ui.addElement(row,td, SC.ui.createElement(LABEL,{_innerText:key,title:keyTip})); var ele SC.ui.addElement(row,td,keyValueEditor); ele.order settingNum; break; case string: default: keyValueEditor SC.ui.createElement(INPUT,{id:key,keyType:text,type:text,value:keyValue,_innerText:keyValue,title:valueTip}); SC.ui.addElement(row,td, SC.ui.createElement(LABEL,{_innerText:key,title:keyTip})); var ele SC.ui.addElement(row,td,keyValueEditor); ele.order settingNum; } if (keyType ! flag) { keyValueEditor.className + keyValueEditor.className ? AppConfigKeyValueEditor : AppConfigKeyValueEditor; } } }, function (eventArgs) { if (eventArgs.commandName resetcommand_ + extensionId){ SC.event.dispatchEvent(,executecommand,{commandName:command_ + extensionId,loadDefaults:true}); return; } if (eventArgs.commandName restorecommand_ + extensionId){ SC.event.dispatchEvent(,executecommand,{commandName:command_ + extensionId}); return; } var jsObj {}; var bitmaskRegex new RegExp(/(^0x0-7{16}$)/); var scBitmaskMaxValidValue getValueSetForMaxVersion(defaults.ControlPanelIDs.dv,serverVersion); var invalidSettings false; var invalidSettingList ; var nonstandardSettings false; var nonstandardSettingList ; for (var key in defaults){ if (key DEFAULTS || $(key) null || !checkVersion(defaultskey.ver,serverVersion)) { continue; } var newValue $(key).value; var defaultValue getValueSetForMaxVersion(defaultskey.dv,serverVersion);; var oldValue (key in settings) ? settingskey : defaultValue; var saveValue oldValue; var keyType $(key).keyType; switch (keyType){ case flag: if ($(key).checked) { saveValue true; } else { saveValue false; } if (saveValue defaultValue) continue; break; case commands: if (enableCommandsSelector) { saveValue ; for (var i 0; i $(key).length; i++) { if ($(key).optionsi.selected) { if (saveValue ! ){ saveValue saveValue + ,; } saveValue saveValue + $(key).optionsi.value; } } } else { saveValue newValue.replace(/^\w\s/gi, ,).replace(/\s/gi,); } break; case bitmask: if (enableAdvancedBitmaskEditor) { // checkboxes or true var keyCheckboxCollection $(key).getElementsByTagName(INPUT); for (var x0; xkeyCheckboxCollection.length; x++) { if (keyCheckboxCollectionx.type checkbox && (keyCheckboxCollectionx.initChecked ! keyCheckboxCollectionx.checked)) { newValue setLongBitmask(newValue,maskskeyCheckboxCollectionx.mask.mask,keyCheckboxCollectionx.checked); } } } if (newValue ){ // Blank values will indicate using the default value. newValue defaultValue; } if (bitmaskRegex.test(newValue)){ if (setLongBitmask(newValue,scBitmaskMaxValidValue,false) 0x0000000000000000){ saveValue newValue; } else { if (confirm(SC.util.formatString(SC.resExtension.EditAppConfig.QuestionableBitmaskValue,key,newValue,serverVersion))) { saveValue newValue; } else { return; } } } else { alertModal(SC.util.formatString(SC.resExtension.EditAppConfig.InvalidBitmaskValue,key,newValue,0x0000000000000000,0x7777777777777777)); return; } break; case directory: if (newValue ) { // Blank values will indicate using the default value. newValue defaultValue; } saveValue newValue; break; case selection: saveValue $(key).options$(key).selectedIndex.value; break; case number: if (!numberRegex.test(newValue)){ alertModal(SC.util.formatString(SC.resExtension.EditAppConfig.ValueNotANumber,key)); return; } saveValue newValue; break; default: saveValue newValue; } if (saveValue defaultValue) { continue; } jsObjkey saveValue,defaultskey.area; } json JSON.stringify(jsObj); SC.dialog.showModalActivityBox(SC.resExtension.EditAppConfig.SavingModalTitle,SC.resExtension.EditAppConfig.SavingModalMessage); SC.service.EditAppConfigSettings_SetAppConfigSettings( json, function () { SC.event.dispatchEvent(,executecommand,{commandName:command_ + extensionId}); } ); } ); SC.dialog.setButtonPanelError(SC.ui.findDescendent(SC.dialog.getModalDialog(),function(_){return _.className && _.className.indexOf(ButtonPanel) > -1;}),{message:SC.resExtension.EditAppConfig.DialogButtonNotice}); makeAllSortable($(dialog)); }); }); break; }});/** Extend Extension Options **/var extendedExtensionOptions {};/* Option Settings Below */extendedExtensionOptions.helpUrl https://help.screenconnect.com/Extension:Edit_App.Config_Settings;extendedExtensionOptions.extensionResourceID EditAppConfig;/* Option Settings Above */extendedExtensionOptions.extensionIdextensionContext.baseUrl.split(/).slice(-2)0;SC.resHelpPanel.Link+extendedExtensionOptions.extensionId+.UrlextendedExtensionOptions.helpUrl;SC.event.addGlobalHandler(SC.event.QueryCommandButtonState,function(eventArgs){ if(eventArgs.commandNameEditExtensionSettings&&eventArgs.commandContext.extensionInfo.ExtensionIDextendedExtensionOptions.extensionId&&eventArgs.commandElement._commandNameEditExtensionSettings){ if(extendedExtensionOptions.extensionResourceID&&extendedExtensionOptions.extensionResourceID.length) SC.ui.addElement(eventArgs.target.parentElement,A,{_commandName:command_+extensionId,_innerText:SC.resExtension.+extendedExtensionOptions.extensionResourceID+.CommandText}); SC.ui.addElement(eventArgs.target.parentElement,A,{_commandName:NavigateHelpLink,_commandArgument:extendedExtensionOptions.extensionId,_innerText:SC.resCommand.Help.Text.replace( ▽,)}); }});/******************************/});/script>script>SC.extension.addInitializeProc(443da44f-06c7-4a60-bae8-bb4f01f49131, function (extensionContext) {/** Edit Web.Config AppSettings 2.0.3 **//** Global Extension Variables and Constants **/const extensionId extensionContext.baseUrl.split(/).slice(-2)0;var serverEnvironment local;var settingsChanged false;var userIPAddress null;var currentURIs {};var dataUri;var showAdvancedSettings extensionContext.settingValues.ShowAdvancedSettings.toLowerCase() true;const numberRegex new RegExp(/(^0-9$)|(^1-90-9+$)/);const webServerListenUriRegex new RegExp(/^(http|https):\/\/((\+)|((0-9a-z\.-+)\.(a-z{2,63}))|((((250-5)|(20-40-9)|(10-90-9)|(1-9?0-9))\.){3}((250-5)|(20-40-9)|(10-90-9)|(1-9?0-9))))(:0-9{1,5})(\/0-9a-zA-Z-+)?\/$/i);const relayListenUriRegex new RegExp(/^relay:\/\/((\+)|((((250-5)|(20-40-9)|(10-90-9)|(1-9?0-9))\.){3}((250-5)|(20-40-9)|(10-90-9)|(1-9?0-9))))(:0-9{1,5})\/$/i);const webServerAddressableUriRegex new RegExp(/^(http|https):\/\/(((0-9a-z\.-+)\.(a-z{2,63}))|((((250-5)|(20-40-9)|(10-90-9)|(1-9?0-9))\.){3}((250-5)|(20-40-9)|(10-90-9)|(1-9?0-9))))(:0-9{1,5})?(\/0-9a-zA-Z-+)?\/$/i);const relayAddressableUriRegex new RegExp(/^relay:\/\/(((0-9a-z\.-+)\.(a-z{2,63}))|((((250-5)|(20-40-9)|(10-90-9)|(1-9?0-9))\.){3}((250-5)|(20-40-9)|(10-90-9)|(1-9?0-9))))(:0-9{1,5})\/$/i);const regExIPv4 /^((0-9|1-90-9|10-9{2}|20-40-9|250-5)\.){3}(0-9|1-90-9|10-9{2}|20-40-9|250-5)(\/(0-9|1-20-9|30-2))?$/;const regExIPv6 /^s*(((0-9A-Fa-f{1,4}:){7}(0-9A-Fa-f{1,4}|:))|((0-9A-Fa-f{1,4}:){6}(:0-9A-Fa-f{1,4}|((250-5|20-4d|1dd|1-9?d)(.(250-5|20-4d|1dd|1-9?d)){3})|:))|((0-9A-Fa-f{1,4}:){5}(((:0-9A-Fa-f{1,4}){1,2})|:((250-5|20-4d|1dd|1-9?d)(.(250-5|20-4d|1dd|1-9?d)){3})|:))|((0-9A-Fa-f{1,4}:){4}(((:0-9A-Fa-f{1,4}){1,3})|((:0-9A-Fa-f{1,4})?:((250-5|20-4d|1dd|1-9?d)(.(250-5|20-4d|1dd|1-9?d)){3}))|:))|((0-9A-Fa-f{1,4}:){3}(((:0-9A-Fa-f{1,4}){1,4})|((:0-9A-Fa-f{1,4}){0,2}:((250-5|20-4d|1dd|1-9?d)(.(250-5|20-4d|1dd|1-9?d)){3}))|:))|((0-9A-Fa-f{1,4}:){2}(((:0-9A-Fa-f{1,4}){1,5})|((:0-9A-Fa-f{1,4}){0,3}:((250-5|20-4d|1dd|1-9?d)(.(250-5|20-4d|1dd|1-9?d)){3}))|:))|((0-9A-Fa-f{1,4}:){1}(((:0-9A-Fa-f{1,4}){1,6})|((:0-9A-Fa-f{1,4}){0,4}:((250-5|20-4d|1dd|1-9?d)(.(250-5|20-4d|1dd|1-9?d)){3}))|:))|(:(((:0-9A-Fa-f{1,4}){1,7})|((:0-9A-Fa-f{1,4}){0,5}:((250-5|20-4d|1dd|1-9?d)(.(250-5|20-4d|1dd|1-9?d)){3}))|:)))(%.+)?s*(\/(d|dd|10-1d|120-8))?$/;const cloudRegEx new RegExp(/:\/\/.*\.(screenconnect)\.com/i);const hostedrmmRegEx new RegExp(/:\/\/.*\.(hostedrmm)\.com/i);/** JavaScript Libraries **/if (typeof ipaddr undefined) SC.util.includeScript(extensionContext.baseUrl + ipaddr.min.js); // See javascript file for Copyright information and permission notice./**************************//** Custom top modal dialog to show alert type messages in modal dialog on top of existing modal dialogs **/function setupTopModalDialog(disable){ if (!disable) { eval(SC.dialog.showModalDialogRawOnTop + SC.dialog.showModalDialogRaw.toString().replace(SC.dialog.hideModalDialog();,).replace(/hideModalDialog/g,hideTopModalDialog)); eval(SC.dialog.hideTopModalDialog + SC.dialog.hideModalDialog.toString().replace(/getModalDialog/g,getTopModalDialog)); SC.dialog.getTopModalDialog function() { return Array.prototype.map.call(window.document.querySelectorAll(#dialog),function(_){return _;}).pop(); }; } else { delete SC.dialog.showModalDialogRawOnTop; delete SC.dialog.hideTopModalDialog; delete SC.dialog.getTopModalDialog; }}function alertModal(message){ if (!SC.dialog.showModalDialogRawOnTop) setupTopModalDialog(); SC.dialog.showModalDialogRawOnTop( message.subClass || MessageBox, message.titlePanel || SC.dialog.createTitlePanel(message.title || SC.resErrorPanel.Title), message.contentPanel || SC.dialog.createContentPanel($div(message.content || message)), message.buttonPanel || SC.dialog.createButtonPanel(message.button || OK,message.extraButtons || null) , message.onExecProc || function(eventArgs){ SC.dialog.hideTopModalDialog(); }, message.onQueryProc || null, message.onHideProc || function(){ if (SC.dialog.getTopModalDialog() SC.dialog.getModalDialog()) setupTopModalDialog(true); } );}/**********************************************//** Cookie Settings Management Functions **/function loadExtCookieSettings(){ var cookieSettings JSON.parse(SC.util.getCookieValue(extensionId)); for (var cs in cookieSettings) { extensionContext.settingValuescs cookieSettingscs; }}function saveExtCookieSetting(settingName){ var cookieSettings JSON.parse(SC.util.getCookieValue(extensionId)); if (!cookieSettings) cookieSettings {}; cookieSettingssettingName extensionContext.settingValuessettingName; SC.util.setCookieValue(extensionId,JSON.stringify(cookieSettings),3650);}function deleteExtCookieSetting(settingName){ var cookieSettings JSON.parse(SC.util.getCookieValue(extensionId)); if (!cookieSettings) cookieSettings {}; delete cookieSettingssettingName; SC.util.setCookieValue(extensionId,JSON.stringify(cookieSettings),3650);}function clearExtCookieSettings(){ SC.util.setCookieValue(extensionId,,-1);}/******************************************//** Table Sorting Functions **/var sortBy {};function sortTable(table, col) { if (sortBy.table){ var oldSortCol document.querySelector(# + sortBy.table).tHead.rows0.cellssortBy.col || 0; SC.css.ensureClass(oldSortCol,Ascending,false); SC.css.ensureClass(oldSortCol,Descending,false); } if (sortBy.table table.id && sortBy.col col){ sortBy.dir -((+sortBy.dir) || -1); } else { sortBy.table table.id; sortBy.col col; sortBy.dir 1; } if (sortBy.dir ! 0) SC.css.ensureClass(table.tHead.rows0.cellscol,sortBy.dir > 0 ? Ascending : Descending, true); var tb table.tBodies0; var tr Array.prototype.slice.call(tb.rows, 0); tr tr.sort(function (a, b) { var aVal a.cellscol.order ? a.cellscol.order : a.cellscol.textContent; var bVal b.cellscol.order ? b.cellscol.order : b.cellscol.textContent; return sortBy.dir * (typeof aVal number ? aVal - bVal : aVal.localeCompare(bVal)); }); for(var i0; itr.length; ++i){ tb.appendChild(tri); }}function makeSortable(table) { var th table.tHead, i; th && (th th.rows0) && (th th.cells); if (th) i th.length; else return; // if no `thead>` then do nothing while (--i > 0) (function (i) { SC.css.ensureClass(thi,Sortable,true); thi.addEventListener(click, function () {sortTable(table, i)}); }(i));}function makeAllSortable(parent) { parent parent || document.body; var t parent.getElementsByTagName(table), i t.length; while (--i > 0) makeSortable(ti);}/*****************************//** General Extension Functions **/function checkVersion(minVer, curVer) { if (typeof curVer + typeof minVer ! stringstring) return false; var acurVer.split(.), bminVer.split(.), i0, lenMath.max(a.length, b.length); for (; ilen; i++) { if ((ai && !bi && parseInt(ai) > 0) || (parseInt(ai) > parseInt(bi))) return true; else if ((bi && !ai && parseInt(bi) > 0) || (parseInt(ai) parseInt(bi))) return false; } return true;}function browserSupportsNumberInput(){ var i document.createElement(input),r; i.typenumber; i.setAttribute(value, t); return i.value ! i.getAttribute(value);}function addCacheBuster(url) { var cachebuster ?__CacheBuster + new Date().getTime(); if (url.indexOf(?) ! -1) return url.replace(?,cachebuster + &); if (url.indexOf(#) ! -1) return url.replace(#,cachebuster + #); return url + cachebuster;}function httpRequestJSONObjectAsync(theUrl, callback) { var r new XMLHttpRequest(); r.onreadystatechange function() { if (r.readyState 4 && r.status 200) { callback(JSON.parse(r.responseText)); } else if (r.readyState 4) { console.warn(Metaquery failed. (Extension: + extensionId + )); } }; r.open(GET, addCacheBuster(theUrl), true); r.send();}function getValueSetForMaxVersion(settings, maxVersion) { var rv ; var maxDVver 0.0; for (var v in settings){ if (checkVersion(v,maxVersion) && checkVersion(maxDVver,v)) { maxDVver v; rv settingsv; } } return rv;}function checkIPList(str) { var tokens str.split(,); for (var i0; itokens.length; ++i){ if (!regExIPv4.test(tokensi) && !regExIPv6.test(tokensi)) return false; } return true;}function cleanKeyName(keyName){ return keyName.replace(/\./g,_).replace(/\//g,_);}function displayNotice(title,noticeTextOrContentProc,buttonText,buttonCommand,buttonPanelErrorOrContentProc){ var titlePanel SC.dialog.createTitlePanel(title); var mainContentPanel SC.dialog.createContentPanel(typeof noticeTextOrContentProc string ? $div(noticeTextOrContentProc) : null); if (typeof noticeTextOrContentProc function) noticeTextOrContentProc(mainContentPanel); var buttonPanel SC.dialog.createButtonPanel(); var button SC.ui.addElement(buttonPanel, INPUT, { type: button, value: buttonText, _commandName: buttonCommand || Close }); switch (typeof buttonPanelErrorOrContentProc){ case string: SC.dialog.setButtonPanelError(buttonPanel,buttonPanelErrorOrContentProc); break; case function: buttonPanelErrorOrContentProc(buttonPanel); break; } SC.dialog.showModalDialogRaw(MessageBox,titlePanel, mainContentPanel, buttonPanel); button.focus();}function userIPIsInIPList(ipList, userIP) { if (typeof ipaddr ! object) { return null; } var addr ipaddr.parse(userIP); var ips ipList.split(,); for (var i in ips){ var ip ipsi; if (ip.indexOf(/) 0) { var checkIP ipaddr.parse(ip); if (addr.kind() checkIP.kind() && addr.match(checkIP,addr.kind() ipv6 ? 128 : 32)) return true; } else { var subnet ipaddr.parseCIDR(ip); if (addr.kind() subnet0.kind() && addr.match(subnet)) return true; } } return false;}function getValidationClass(element){ var e element; var v e.value, n e.id, s e.getAttribute(savedValue), d e.getAttribute(defaultValue), t e.getAttribute(keyType); if (v s && v d) return IsDefault; if (v s) return Unchanged; if (v d) return ToDefault; switch (t){ case WebServerAddressableUri: if (!webServerAddressableUriRegex.test(v)) return Invalid; break; case RelayAddressableUri: if (!relayAddressableUriRegex.test(v)) return Invalid; break; case WebServerListenUri: case WebServerAlternateListenUri: if (!webServerListenUriRegex.test(v)) return Invalid; break; case RelayListenUri: if (!relayListenUriRegex.test(v)) return Invalid; break; case IPList: if (!checkIPList(v)) return Invalid; else if (userIPIsInIPList(v,userIPAddress) (n.indexOf(Block) > -1)) return PartialValidation; else return Validated; break; case Number: if (!numberRegex.test(v)) return Invalid; break; case DuoIntegrationKey: case DuoSecretKey: case DuoApiHostname: break; } return Changed;}function validateEntry(event){ if (!event.srcElement.getAttribute(keyType)) return; var validationClasses NoValidation, IsDefault, ToDefault, Unchanged, Changed, Validated, PartialValidation, Invalid ; var validation ; validation0 getValidationClass(event.srcElement); for (var cn in validationClasses){ SC.css.ensureClass(event.srcElement,validationClassescn,validation.indexOf(validationClassescn) > -1); }}function addRowsToTable (table,keys,keyInfo,location){ var sectionName location ? location.replace(/^0-9a-zA-Z+/g,-) + _ : ; var rowNum 0; for (var key in keys) { if (keyInfokey.show.indexOf(serverEnvironment) -1) continue; if (keyInfokey.isAdvanced true && !showAdvancedSettings) continue; if (!checkVersion(keyInfokey.minVer,SC.context.productVersion)) continue; var keyValue keyskey #KeyNotPresent ? : keyskey; var keyValueType keyInfokey.valueType; var keyValueEditor ; var keyDV keyInfokey.defaultValue; var keyDVText keyDV && keyInfokey.defaultValueInfo ? keyInfokey.defaultValueInfo : keyDV; var valueTip SC.util.formatString(SC.resExtension.EditWebConfigAppSettings.CurrentValueString,keyValue) + \n + SC.util.formatString(SC.resExtension.EditWebConfigAppSettings.DefaultValueString,keyDVText); var keyTip keyInfokey.toolTip.replace(/\\n/g,\n) + \n + valueTip; rowNum++; switch (keyValueType) { case IPList: valueTip SC.util.formatString(SC.resExtension.EditWebConfigAppSettings.IPListTipMessageFormat,key.indexOf(Block) > -1 ? NOT : ,userIPAddress) + \n + valueTip + \n + SC.resExtension.EditWebConfigAppSettings.IPListTipValidationFormat.replace(/\|/g,\n); keyValueEditor SC.ui.createElement(TEXTAREA,{rows:1}); break; case Number: keyValueEditor SC.ui.createElement(INPUT,{id:sectionName + key,type:number,keyType:keyValueType,min:0}); break; case Select: keyValueEditor SC.ui.createElement(SELECT,{title:valueTip}); if (keyskey #KeyNotPresent) SC.ui.addElement(keyValueEditor,OPTION,{ value:, _innerText:Not Present, selected:true, title:Not Present }); var kvOptions getValueSetForMaxVersion(keyInfokey.validValues,SC.context.productVersion); for(var kvo in kvOptions) { SC.ui.addElement(keyValueEditor,OPTION,{ value:kvo, _innerText:kvo, selected:(keyValuekvo), title:kvOptionskvo }); } break; case CommaSeparatedValues: keyValueEditor SC.ui.createElement(ul,{className:csvEditor}); var validValues getValueSetForMaxVersion(keyInfokey.validValues,SC.context.productVersion); for(var v in validValues) { var varCheck SC.ui.createElement(INPUT,{ type:checkbox, initChecked:false, setting:v, id:sectionName + key+v, keyType:keyValueType }); if (keyValue.split(,).indexOf(v) > 0){ varCheck.checkedtrue; varCheck.initChecked true; } var cbLabel SC.ui.createElement(LABEL,{_innerText: v, title:validValuesv}); if (keyDV.split(,).indexOf(v) > 0) { cbLabel.style.fontWeight bold; } SC.ui.addElement(keyValueEditor, li,varCheck,cbLabel); } break; case WebServerListenUri: case WebServerAlternateListenUri: case RelayListenUri: valueTip valueTip + \n + SC.resExtension.EditWebConfigAppSettings.UriTipValidationFormat.replace(/\|/g,\n); keyValueEditor SC.ui.createElement(INPUT,{type:url}); break; case WebServerAddressableUri: case RelayAddressableUri: valueTip valueTip + \n + SC.resExtension.EditWebConfigAppSettings.UriTipValidationFormat.replace(/\|/g,\n); keyValueEditor SC.ui.createElement(INPUT,{type:url}); break; case CryptoKey: if (!SC.context.enableCryptoKeySetting) continue; keyValueEditor SC.ui.createElement(TEXTAREA,{type:CryptoKey}); keyValueEditor.style.height 100px; break; case DuoIntegrationKey: case DuoSecretKey: case DuoApiHostname: keyValueEditor SC.ui.createElement(INPUT, { type:text }); break; default: keyValueEditor SC.ui.createElement(INPUT,{type:text,disabled:true,title:key + is not expected.}); } keyValueEditor.setAttribute(id,sectionName + key); keyValueEditor.setAttribute(title,valueTip); keyValueEditor.setAttribute(value,keyValue); keyValueEditor.setAttribute(keyType,keyValueType); keyValueEditor.setAttribute(defaultValue,keyDV); keyValueEditor.setAttribute(savedValue,keyValue); if (Select,CommaSeparatedValues.indexOf(keyValueType) 0) SC.ui.setInnerText(keyValueEditor,keyValue); var row SC.ui.addElement(table,tr, {id:sectionName + key + Row}); var keyNameCol SC.ui.addElement(row,td,SC.ui.createElement(LABEL,{_innerText:key,title:keyTip})); var keyValueCol SC.ui.addElement(row,td,keyValueEditor); if (extensionContext.settingValues.ShowDefaultValueColumn true){ var keyDefaultCol SC.ui.addElement(row,td,{_innerText:typeof(keyDV) ! undefined ? keyDV : ,title:valueTip}); } var keyExampleCol SC.ui.addElement(row,td,{ _innerText: (keyskey #KeyNotPresent ? SC.resExtension.EditWebConfigAppSettings.KeyNotPresentText : ) + add key + key + value + (keyValue.length > 100 ? keyValue.replace(keyValue.slice(16,-16),...) : keyValue) + />, title:keyTip }); keyValueCol.order rowNum; }}function getChangedItems (keys, keyInfo, location) { var sectionName ; if (location) sectionName location.replace(/^0-9a-zA-Z+/g,-) + _; var jsObj {}; for (var key in keys){ var keyElement $(sectionName + key); if (keyElement null) { continue; } var newValue keyElement.value; var oldValue keyskey; var keyType keyElement.getAttribute(keyType); var keyName (location ? location + > : ) + key; if (keyType ! CommaSeparatedValues){ if (newValue && oldValue #KeyNotPresent) { continue; } if (newValue oldValue) { continue; } } if (keyInfokey.show.indexOf(serverEnvironment) -1) continue; if (keyInfokey.isAdvancedtrue && !showAdvancedSettings) continue; var isCritical keyInfokey.isCritical true; switch (keyType){ case CommaSeparatedValues: newValue Array.prototype.filter.call(keyElement.querySelectorAll(input),function(i){return i.checked;}).map(function(e){return e.setting;}).join(,); if (newValue oldValue || (newValue && oldValue #KeyNotPresent)) continue; if (newValue ) { isCritical false; newValue #RemoveKey; } break; case Select: var kvOptions getValueSetForMaxVersion(keyInfokey.validValues,SC.context.productVersion); if (!kvOptionsnewValue) { alertModal(SC.util.formatString(SC.resExtension.EditWebConfigAppSettings.InvalidSelectionAlertMessage,keyName,Object.keys(kvOptions).join(, ))); return false; } break; case IPList: if (newValue ) { isCritical false; newValue #BlankValue; break; } if (!checkIPList(newValue)) { alertModal(SC.util.formatString(SC.resExtension.EditWebConfigAppSettings.InvalidIPListAlertMessage,keyName)); return false; } if ((key.indexOf(Block) > -1) userIPIsInIPList(newValue,userIPAddress)) { alertModal(SC.util.formatString(SC.resExtension.EditWebConfigAppSettings.IPListDoesNotContainCurrentIPAlertMessage,keyName,userIPAddress)); return false; } break; case Number: if (!numberRegex.test(newValue)){ alertModal(SC.util.formatString(SC.resExtension.EditWebConfigAppSettings.NumberAlertMessage,keyName)); return false; } break; case WebServerAddressableUri: if (newValue ){ newValue #RemoveKey; isCritical false; break; } if (!webServerAddressableUriRegex.test(newValue)) { alertModal(SC.util.formatString(SC.resExtension.EditWebConfigAppSettings.AddressableUriAlertMessage,keyName,\n + currentURIs.WebServer)); return false; } break; case RelayAddressableUri: if (newValue ){ newValue #RemoveKey; isCritical false; break; } if (!relayAddressableUriRegex.test(newValue)) { alertModal(SC.util.formatString(SC.resExtension.EditWebConfigAppSettings.AddressableUriAlertMessage,keyName,\n + currentURIs.Relay)); return false; } break; case WebServerAlternateListenUri: if (newValue ){ newValue #RemoveKey; isCritical false; break; } case WebServerListenUri: if (newValue || !webServerListenUriRegex.test(newValue)) { alertModal(SC.util.formatString( SC.resExtension.EditWebConfigAppSettings.ListenUriAlertMessage,keyName,\n + currentURIs.WebServerUri.protocol + //+: + (currentURIs.WebServerUri.port ? ( currentURIs.WebServerUri.protocol http: ? 80 : 443 ) : currentURIs.WebServerUri.port ) + /)); return false; } isCritical true; break; case RelayListenUri: if (newValue || !relayListenUriRegex.test(newValue)) { alertModal(SC.util.formatString(SC.resExtension.EditWebConfigAppSettings.ListenUriAlertMessage,keyName,\nrelay://+: + SC.context.clp.p + /)); return false; } isCritical true; break; case CryptoKey: if (!SC.context.enableCryptoKeySetting) return false; isCritical true; if (newValue || newValue #RemoveKey) { alertModal(SC.resExtension.EditWebConfigAppSettings.EmptyAsymmetricKey); return false; } else { if(!confim(SC.resExtension.EditWebConfigAppSettings.ChangeAsymmetricKeyWarning)) { return false; } } break; case DuoIntegrationKey: case DuoSecretKey: case DuoApiHostname: if (newValue ) { newValue #RemoveKey; break; } break; default: alertModal(SC.util.formatString(SC.resExtension.EditWebConfigAppSettings.UnknownTypeAlertMessage,keyName)); return false; } if (isCritical){ if(!confirm(SC.util.formatString(SC.resExtension.EditWebConfigAppSettings.CriticalSettingUpdateConfirmationMessage,keyName,oldValue,newValue).replace(/\\n/g,\n))){ return false; } } jsObjkey newValue; settingsChanged true; } return jsObj;}/***** Event Handlers *****/SC.event.addGlobalHandler(SC.event.QueryCommandButtons,function (eventArgs) { switch (eventArgs.area) { case ExtrasPopoutPanel: if (SC.context.pageType AdministrationPage) { eventArgs.buttonDefinitions.push( { commandName: command_ + extensionId, text: SC.resExtension.EditWebConfigAppSettings.CommandText} ); } break; }});SC.event.addGlobalHandler(SC.event.ExecuteCommand, function (eventArgs) { switch(eventArgs.commandName) { case SelectTab_ + extensionId: var tabcontent document.getElementsByClassName(TabContent); for (i 0; i tabcontent.length; i++) { SC.ui.setVisible(tabcontenti,false); } var tablinks document.getElementsByClassName(TabLink); for (i 0; i tablinks.length; i++) { SC.ui.setSelected(tablinksi,false); } SC.ui.setSelected(eventArgs.commandElement,true); var activeContent document.querySelector(# + eventArgs.commandArgument + .TabContent); SC.ui.setVisible(activeContent,true); break; case command_ + extensionId: loadExtCookieSettings(); if (extensionContext.settingValues.HideServiceRestartNotice ! true) { displayNotice( SC.resExtension.EditWebConfigAppSettings.ServiceRestartNoticeTitle, SC.resExtension.EditWebConfigAppSettings.ServiceRestartNoticeMessage, SC.resExtension.EditWebConfigAppSettings.ServiceRestartNoticeButton, noticeAccepted_ + extensionId, function(buttonPanel){ var checkbox SC.ui.createElement(input,{type:checkbox}); SC.event.addHandler(checkbox,change,function(eventArgs){ buttonPanel.querySelector(inputtypebutton)._commandArgumenteventArgs.target.checked ? true : null; }); SC.ui.addContent(buttonPanel,$span(checkbox,SC.resExtension.EditWebConfigAppSettings.ServiceRestartNoticeDoNotShowText)); } ); break; } case noticeAccepted_ + extensionId: if (eventArgs.commandArgument) { extensionContext.settingValues.HideServiceRestartNotice true; saveExtCookieSetting(HideServiceRestartNotice); } case displaySettings_ + extensionId: SC.util.includeStyleSheet(extensionContext.baseUrl + Style.css); SC.service.EditWebConfigAppSettings_GetUserIPAddress(function(returnedIP){ userIPAddress returnedIP; SC.service.EditWebConfigAppSettings_GetUris(function(uriJSON){ var uris JSON.parse(uriJSON); currentURIs.WebServer uris.WebServerUri; currentURIs.WebServerUri SC.ui.createElement(A,{id:WebServerUri,href:uris.WebServerUri}); currentURIs.Relay uris.RelayUri; currentURIs.RelayUri SC.ui.createElement(A,{id:RelayUri,href:uris.RelayUri}); if (cloudRegEx.test(currentURIs.WebServer) || cloudRegEx.test(currentURIs.Relay)) serverEnvironment hosted; else if (hostedrmmRegEx.test(currentURIs.WebServer) || hostedrmmRegEx.test(currentURIs.Relay)) serverEnvironment hostedrmm; else serverEnvironment local; SC.service.EditWebConfigAppSettings_GetWebConfigFileContents(function(WebConfigContents){ dataUri SC.ui.createDataUri(SC.util.isCapable(SC.util.Caps.Safari) ? attachment/config : text/config, WebConfigContents); httpRequestJSONObjectAsync(extensionContext.baseUrl + Defaults.json,function(keyInfo){ var validKeys Object.keys(keyInfo) .filter(function(x){ return x ! LocationSettings && checkVersion(keyInfox.minVer,SC.context.productVersion) && keyInfox.show.indexOf(serverEnvironment) > 0 && (keyInfox.isAdvanced true ? showAdvancedSettings : true ) && (x ! AsymmetricKey || SC.context.enableCryptoKeySetting); }); SC.service.EditWebConfigAppSettings_GetEditableWebConfigAppSettingKeysAndValues(validKeys,keyInfo.LocationSettings.EditableSettings, function(json){ var allKeys JSON.parse(json); var keys allKeys.AppSettings; var lkeys allKeys.Locations; var showAdvancedSettingsButton SC.ui.createElement(a,{_innerText:SC.resExtension.EditWebConfigAppSettings.ShowAdvancedSettingsText}); showAdvancedSettingsButton.addEventListener(click,function(){ showAdvancedSettings true; SC.event.dispatchEvent(null,SC.event.ExecuteCommand,{commandName:displaySettings_ + extensionId}); }); var instructions $p(SC.resExtension.EditWebConfigAppSettings.DialogInstructions, (browserSupportsNumberInput() ? : + SC.resExtension.EditWebConfigAppSettings.NoNumberSupportMessage), (!showAdvancedSettings ? $span( , showAdvancedSettingsButton, .) : + SC.util.formatString(SC.resExtension.EditWebConfigAppSettings.YourIPAddressMessage,userIPAddress)) ); SC.dialog.showModalButtonDialog( EditWebConfigAppSettings, SC.resExtension.EditWebConfigAppSettings.DialogTitle, SC.resExtension.EditWebConfigAppSettings.DialogButtonText, Default, function (container) { container.addEventListener(keyup,function(event){validateEntry(event);}); container.addEventListener(mouseup,function(event){validateEntry(event);}); SC.ui.addContent(container, instructions); var WebConfigLinksContainer SC.ui.addElement(container, ul,{}); var WebConfigHelpLink SC.ui.createElement(A,{href:SC.resExtension.EditWebConfigAppSettings.WebConfigSettingsLinkHref,target:_blank, _innerText:SC.resExtension.EditWebConfigAppSettings.WebConfigSettingsLinkText}); var WebConfigDownloadLink SC.ui.createElement(A,{download:web.config,href:dataUri,_innerText:SC.resExtension.EditWebConfigAppSettings.WebConfigLinkText}); SC.ui.addElement(WebConfigLinksContainer,li,WebConfigDownloadLink); SC.ui.addElement(WebConfigLinksContainer,li,WebConfigHelpLink); if (showAdvancedSettings) { // Need to add tabs for Main AppSettings and individual Location AppSetting sections var tabs SC.ui.addElement(container,ul,{className:SectionTabs}); SC.ui.addElement(tabs,li,{innerText:AppSettings,id:TabLink_AppSettings,className:TabLink Selected,_commandName:SelectTab_ + extensionId,_commandArgument:AppSettings}); SC.ui.addElement(tabs,li,{innerText:Per-Page Settings,id:TabLink_PerPageSettings,className:TabLink,_commandName:SelectTab_ + extensionId,_commandArgument:PerPageSettings}); var pageSettingContainer SC.ui.addElement(container,dl,{id:PerPageSettings,className:TabContent}); for (var i0; i Object.keys(lkeys).length; i++){ // Avoid find and findIndex being provided as keys in IE when using Object.keys(obj) var lkeyName Object.keys(lkeys)i; var dt SC.ui.addElement(pageSettingContainer,dt,$span({innerText:lkeyName,id:SectionHeader_ + cleanKeyName(lkeyName),className:SectionHeader})); var dd SC.ui.addElement(pageSettingContainer,dd,{}); var dddiv SC.ui.addElement(dd,div,{}); var table SC.ui.addElement(dddiv,TABLE,{id:cleanKeyName(lkeyName)}); var thead SC.ui.addElement(table,thead,{}); var headerRow SC.ui.addElement(thead,tr,{}); SC.ui.addElement(headerRow,th,{_innerText:SC.resExtension.EditWebConfigAppSettings.KeyColumnTitle}); SC.ui.addElement(headerRow,th,{_innerText:SC.resExtension.EditWebConfigAppSettings.ValueColumnTitle}); SC.ui.addElement(headerRow,th,{_innerText:SC.resExtension.EditWebConfigAppSettings.SettingColumnTitle}); var tbody SC.ui.addElement(table,tbody,{}); addRowsToTable( tbody, lkeyslkeyName, keyInfo.LocationSettings.LocationslkeyName.AppSettings, lkeyName ); } SC.ui.setVisible(pageSettingContainer,false); } var tablecontainer SC.ui.addElement(container,DIV,{id:AppSettings,className:TabContent}) var table SC.ui.addElement(tablecontainer,TABLE,{}); var thead SC.ui.addElement(table,thead,{}); var headerRow SC.ui.addElement(thead,tr, {}); SC.ui.addElement(headerRow,th,{_innerText:SC.resExtension.EditWebConfigAppSettings.KeyColumnTitle}); SC.ui.addElement(headerRow,th,{_innerText:SC.resExtension.EditWebConfigAppSettings.ValueColumnTitle}); if (extensionContext.settingValues.ShowDefaultValueColumn true){ SC.ui.addElement(headerRow,th,{_innerText:SC.resExtension.EditWebConfigAppSettings.DefaultColumnTitle}); } SC.ui.addElement(headerRow,th,{_innerText:SC.resExtension.EditWebConfigAppSettings.SettingColumnTitle}); var tbody SC.ui.addElement(table,tbody,{}); addRowsToTable(tbody,keys,keyInfo); SC.ui.setVisible(tablecontainer,true); }, function (eventArgs) { if (eventArgs.commandName SelectTab_ + extensionId) return; var appSettingsJsObj getChangedItems(keys,keyInfo); if (appSettingsJsObj false) return; var locationJsObj {}; for (var i0; i Object.keys(lkeys).length; i++){ var lkeyName Object.keys(lkeys)i; var thisLocObj getChangedItems(lkeyslkeyName,keyInfo.LocationSettings.LocationslkeyName.AppSettings,lkeyName); if (thisLocObj false) return; if (Object.keys(thisLocObj).length > 0) locationJsObjlkeyName thisLocObj; }; if (settingsChanged) { SC.service.EditWebConfigAppSettings_SetWebConfigAppSettingValues( JSON.stringify(appSettingsJsObj), JSON.stringify(locationJsObj), function () { SC.dialog.showModalActivityAndReload(Save, true, window.location.href); } ); } else { SC.dialog.hideModalDialog(); } } ); makeAllSortable($(dialog)); SC.dialog.setButtonPanelError(SC.ui.findDescendent(SC.dialog.getModalDialog(),function(_){return _.className && _.className.indexOf(ButtonPanel) > -1;}),{message:SC.resExtension.EditWebConfigAppSettings.ServiceRestartNoticeTitle}); }); }); }); }); }); break; }});/** Extend Extension Options **/var extendedExtensionOptions {};/* Option Settings Below */extendedExtensionOptions.helpUrl https://help.screenconnect.com/Extension:Edit_Web.Config_AppSettings;extendedExtensionOptions.extensionResourceID EditWebConfigAppSettings;/* Option Settings Above */extendedExtensionOptions.extensionIdextensionContext.baseUrl.split(/).slice(-2)0;SC.resHelpPanel.Link+extendedExtensionOptions.extensionId+.UrlextendedExtensionOptions.helpUrl;SC.event.addGlobalHandler(SC.event.QueryCommandButtonState,function(eventArgs){ if(eventArgs.commandNameEditExtensionSettings&&eventArgs.commandContext.extensionInfo.ExtensionIDextendedExtensionOptions.extensionId&&eventArgs.commandElement._commandNameEditExtensionSettings){ if(extendedExtensionOptions.extensionResourceID&&extendedExtensionOptions.extensionResourceID.length) SC.ui.addElement(eventArgs.target.parentElement,A,{_commandName:command_+extensionId,_innerText:SC.resExtension.+extendedExtensionOptions.extensionResourceID+.CommandText}); SC.ui.addElement(eventArgs.target.parentElement,A,{_commandName:NavigateHelpLink,_commandArgument:extendedExtensionOptions.extensionId,_innerText:SC.resCommand.Help.Text.replace( ▽,)}); }});/******************************/});/script>script>SC.extension.addInitializeProc(3b02f68b-6b56-4df8-b7b2-a215014f69ae, function (extensionContext) {SC.util.includeStyleSheet(extensionContext.baseUrl + Styles.css);SC.event.addGlobalHandler(SC.event.QueryCommandButtons, function (eventArgs) { switch (eventArgs.area) { case ExpandButtons: eventArgs.buttonDefinitions.push( { commandName: Select, commandArgument: ExpandThumbnail, text: SC.resCommand.ExpandThumbnail.Text} ); break; }});SC.event.addGlobalHandler(SC.event.InitializeTab, function(eventArgs){ if (isStartTab(eventArgs.tabName)) { SC.ui.addElement($(.Start > .ScreenshotPanel), div, {id: expandPanel, style: }); SC.command.queryAndAddCommandButtons($(expandPanel), ExpandButtons); }});SC.event.addGlobalHandler(SC.event.ExecuteCommand, function (eventArgs) { switch (eventArgs.commandArgument) { case ExpandThumbnail: var ssPanel $(.Start > .ScreenshotPanel); if (ssPanel ! null) { var image ssPanel.firstChild.firstChild.src; var titlePanel SC.dialog.createTitlePanel(Expanded Thumbnail Preview); var contentPanel SC.dialog.createContentPanel(); SC.ui.addElement(contentPanel, IMG, {src: image, style: }); SC.dialog.showModalDialogRaw(expanded, titlePanel, contentPanel, null, null, null); } break; }});function isStartTab(tabName) { switch (tabName) { case Start: return true; default: return false; }}});/script>script>SC.extension.addInitializeProc(e21779ee-da3f-428f-ad1e-5d5b5fac54ea, function (extensionContext) {SC.event.addGlobalHandler(SC.event.QueryCommandButtons, function (eventArgs) { switch (eventArgs.area) { case ExtrasPopoutPanel: if (SC.context.pageType GuestPage) eventArgs.buttonDefinitions.push( { commandName: ShowBuildInstallerDialog } ); break; }});SC.event.addGlobalHandler(SC.event.ExecuteCommand, function (eventArgs) { switch (eventArgs.commandName) { case ShowBuildInstallerDialog: SC.installer.showBuildDialog(); break; }});});/script>script>SC.extension.addInitializeProc(184b6e5d-0400-42cc-a152-86ad0fcce2ca, function (extensionContext) {SC.util.includeStyleSheet(extensionContext.baseUrl + Styles.css);SC.event.addGlobalHandler(SC.event.QueryCommandButtons, function (eventArgs) { switch (eventArgs.area) { case HostDetailPopoutPanel: eventArgs.buttonDefinitions.push( { commandName: InviteHost } ); break; }});SC.event.addGlobalHandler(SC.event.ExecuteCommand, function (eventArgs) { switch (eventArgs.commandName) { case InviteHost: SC.dialog.showModalDialog(InviteHost, { titleResourceName: InviteHostToSession.Title, content: $p({ _textResource: InviteHostToSession.Message }), $input({ type: text, className: EmailAddressBox }), $button({ className: SecondaryButton, _textResource: InviteHostToSession.SendButton, _commandName: InviteHostToSessionSendEmail }), $p({ className: ResultPanel }), , buttonTextResourceName: InviteHostToSession.ButtonText, onExecuteCommandProc: function (dialogEventArgs, dialog, closeDialogProc, setDialogErrorProc) { switch (dialogEventArgs.commandName) { case InviteHostToSessionSendEmail: var resultPanel dialog.querySelector(.ResultPanel); SC.service.SendEmail( $(.EmailAddressBox).value.trim(), InviteHostToSession., , , InviteHostToSession., , window.location.href, false, function () { SC.css.ensureClass(resultPanel, Success, true); SC.css.ensureClass(resultPanel, Failure, false); SC.ui.setContents(resultPanel, SC.resInviteHostToSession.SuccessMessage); }, function (error) { SC.css.ensureClass(resultPanel, Success, false); SC.css.ensureClass(resultPanel, Failure, true); SC.ui.setContents(resultPanel, error.message); }); break; case Default: SC.dialog.hideModalDialog(); break; } } }); SC.service.GetEmailAddresses().then(function (addresses) { SC.ui.setInputHintValues($(.EmailAddressBox), addresses); }); break; }});});/script>script>SC.extension.addInitializeProc(8fabf97d-7b08-481b-ab06-3f501436e864, function (extensionContext) {// If Report Manager extension is enabled, add help link to extension options dropdownvar reportManagerExtensionId extensionContext.baseUrl.split(/).slice(-2)0;var reportManagerHelpLink https://help.screenconnect.com/Extension:Report_Manager;var currentVersion {major : Number(SC.context.productVersion.split(.)0), minor : Number(SC.context.productVersion.split(.)1)}SC.event.addGlobalHandler(SC.event.QueryCommandButtonState, function (eventArgs) { if (eventArgs.commandName EditExtensionSettings) if (eventArgs.commandContext.extensionInfo.ExtensionID reportManagerExtensionId && eventArgs.commandElement._commandName EditExtensionSettings) SC.ui.addElement( eventArgs.target.parentElement, A, { href: #, _commandName: ShowHelpLink_ + reportManagerExtensionId, innerHTML: Help } );});SC.event.addGlobalHandler(SC.event.ExecuteCommand, function (eventArgs) { if (eventArgs.commandName ShowHelpLink_ + reportManagerExtensionId) window.open(reportManagerHelpLink, _blank);});var ReportManagerMetaTables {}var getMetaTableFromReportManagerMetaTables function(reportType) { if (!(reportType in ReportManagerMetaTables)) { ReportManagerMetaTablesreportType { Items: } } return ReportManagerMetaTablesreportType}var httpGetReportAsync function (theUrl) { return new Promise((resolve, reject) > { var xmlHttp new XMLHttpRequest(); xmlHttp.onreadystatechange function () { if (xmlHttp.readyState 4 && xmlHttp.status 200) { resolve(JSON.parse(xmlHttp.responseText)); } else if (xmlHttp.readyState 4) { console.log(Metaquery failed); } }; xmlHttp.open(GET, theUrl, true); xmlHttp.send(); });};var editReportProc function () { var i; httpGetReportAsync(SC.context.scriptBaseUrl + /Report.json) .then(sessionMetadataResponse > { if (getMetaTableFromReportManagerMetaTables(Session).Items.length 0) { for (i 0; i sessionMetadataResponse.Items.length; i++) { if (sessionMetadataResponse.Itemsi0 ! SessionConnectionEvent || SC.util.isVersion(null, {major: 22, minor : 9}, currentVersion)) { getMetaTableFromReportManagerMetaTables(sessionMetadataResponse.Itemsi0).Items.push(sessionMetadataResponse.Itemsi); } } } return httpGetReportAsync(SC.context.scriptBaseUrl + /Report.json?ReportSecurity); }) .then(securityMetadataResponse > { if (getMetaTableFromReportManagerMetaTables(SecurityEvent).Items.length 0) { for (i 0; i securityMetadataResponse.Items.length; i++) { getMetaTableFromReportManagerMetaTables(SecurityEvent).Items.push(securityMetadataResponse.Itemsi); } } SC.util.includeStyleSheet(extensionContext.baseUrl + Style.css); var ReportDownloadBuilderSelectionPanel; SC.dialog.showModalDialogRaw(ReportDownloadBuilder, SC.dialog.createTitlePanel(SC.resReportDownloadBuilder.Title), $div( $div({ className: CommandPanel }, SC.command.queryAndCreateCommandButtons(ReportDownloadBuilderEditorPanel), ) ), $div( $div({ className: MasterPanel }, ReportDownloadBuilderSelectionPanel $div({ id: ReportDownloadBuilderSelectionPanel, className: MasterSelectionPanel }) ), $div({ id: ReportDownloadBuilderEditorPanel, className: DetailPanel }) ) , null, null, null ); SC.service.GetReportDefinitionStrings(function (reports) { if (reports0 ! ) { var parsedReportString; for (i 0; i reports.length - 1; i++) { parsedReportString reportsi.split(?); // report name, report definition addReportFileProc(decodeURIComponent(parsedReportString0), null, false, true, ? + parsedReportString1); loadReportFileProc(decodeURIComponent(parsedReportString0), parsedReportString1); } tryEditReportFileProc(ReportDownloadBuilderSelectionPanel.childNodes0._commandArgument); } else { updateReportViewProc(); } }); });};var addReportFileProc function (reportName, reportLoadFileName, isDirty, validReport, definition) { var i 0; // maintain lexical order if ($(ReportDownloadBuilderSelectionPanel).childNodes.length > 0) { for (var j 0; j $(ReportDownloadBuilderSelectionPanel).childNodes.length; j++) { if (reportName.toLowerCase() > $(ReportDownloadBuilderSelectionPanel).childNodesj._commandArgument.toLowerCase()) { i++; } else { break; } } } SC.ui.insertChild($(ReportDownloadBuilderSelectionPanel), createReportSelectionLinkFunc(reportName), i); SC.ui.insertChild($(ReportDownloadBuilderEditorPanel), createReportEditPanelFunc(reportName, reportLoadFileName, isDirty, validReport, definition), i); updateReportViewProc();};var loadReportFileProc function (reportName, reportDefinition) { var i; if (reportDefinition ) { $(report + reportName)._validReport false; $(groupFields + reportName).childNodes.length 2 ? SC.ui.removeChildAt($(groupFields + reportName), 1) : null; $(selectFields + reportName).childNodes.length 2 ? SC.ui.removeChildAt($(selectFields + reportName), 1) : null; $(reportDefinitionContent + reportName).style.display none; $(groupFields + reportName).style.display none; $(aggregateFilterDiv + reportName).style.display none; updateReportViewProc(); } else if (reportDefinition.split(&)0.split()0 InvalidGrouped) { $(report + reportName)._validReport false; $(groupFields + reportName).childNodes.length 2 ? SC.ui.removeChildAt($(groupFields + reportName), 1) : null; $(selectFields + reportName).childNodes.length 2 ? SC.ui.removeChildAt($(selectFields + reportName), 1) : null; $(reportDefinitionContent + reportName).style.display block; $(groupFields + reportName).style.display none; $(aggregateFilterDiv + reportName).style.display none; $(filter + reportName).value ; $(aggregateFilter + reportName).value ; var parsedDefinition reportDefinition.split(&); if (parsedDefinition1.search(ReportType) ! -1) { var reportType parsedDefinition1.split()1; for (i 0; i $(reportType + reportName).length; i++) { if ($(reportType + reportName).optionsi.value reportType) { $(reportType + reportName).selectedIndex i; break; } } $(filterExample + reportName).innerHTML SC.resReportDownloadBuilder. + reportType + .Filter.Example; $(aggregateFilterExample + reportName).innerHTML SC.resReportDownloadBuilder. + reportType + .AggregateFilter.Example; } $(reportExplanation + reportName).innerHTML SC.resReportDownloadBuilder. + $(reportType + reportName).options$(reportType + reportName).selectedIndex.value + .Explanation; SC.ui.findDescendent($(reportTypeSelection + reportName), function (e) { return e.type radio && e.value grouped }).checked true; SC.ui.findDescendent($(reportTypeSelection + reportName), function (e) { return e.type radio && e.value ungrouped }).checked false; SC.ui.insertChild($(groupFields + reportName), generateReportFieldPickListDiv(GroupedGroup, $(reportType + reportName), reportName), 1); SC.ui.insertChild($(selectFields + reportName), generateReportFieldPickListDiv(GroupedSelect, $(reportType + reportName), reportName), 1); $(groupFields + reportName).style.display block; $(aggregateFilterDiv + reportName).style.display block; i 2; if (parsedDefinition.length > 2) { var sl SC.ui.findDescendent($(selectFields + reportName), function (e) { return e._listType select }); var pl SC.ui.findDescendent($(selectFields + reportName), function (e) { return e._listType pick }); while (i parsedDefinition.length) { if (parsedDefinitioni.search(SelectFields) ! -1) { var selectField parsedDefinitioni.split()1; var selectIndex sl.selectedIndex; var selectOptions sl.options; var pickOptions pl.options; var pickOptLength pickOptions.length; for (var j 0; j selectOptions.length; j++) { if (selectOptionsj.value selectField) { pickOptionspickOptLength $option(slj.text); pickOptionspickOptLength.value slj.value; pickOptionspickOptLength.title slj.title; pickOptionspickOptLength._index slj._index; selectOptionsj null; break; } } } else if (parsedDefinitioni.search(AggregateFilter) ! -1) { var aggregateFilter parsedDefinitioni.split()1; $(aggregateFilter + reportName).value decodeURIComponent(aggregateFilter); } else if (parsedDefinitioni.search(Filter) ! -1) { var filter parsedDefinitioni.split()1; $(filter + reportName).value decodeURIComponent(filter); } else if (parsedDefinitioni.search(ItemLimit) ! -1) { var itemLimit parsedDefinitioni.split()1; $(itemLimit + reportName).value itemLimit; } i++; } sl.options.length > 0 ? sl.options0.selected true : ; pl.options.length > 0 ? pl.options0.selected true : ; } var gsl SC.ui.findDescendent($(groupFields + reportName), function (e) { return e._listType select }); gsl.options0.selected true; updateReportViewProc(); } else { var encounteredField false; $(groupFields + reportName).childNodes.length 2 ? SC.ui.removeChildAt($(groupFields + reportName), 1) : null; $(selectFields + reportName).childNodes.length 2 ? SC.ui.removeChildAt($(selectFields + reportName), 1) : null; $(reportDefinitionContent + reportName).style.display block; $(groupFields + reportName).style.display none; $(aggregateFilterDiv + reportName).style.display none; $(filter + reportName).value ; $(aggregateFilter + reportName).value ; var parsedDefinition reportDefinition.split(&); if (parsedDefinition0.search(ReportType) ! -1) { var reportType parsedDefinition0.split()1; for (i 0; i $(reportType + reportName).length; i++) { if ($(reportType + reportName).optionsi.value reportType) { $(reportType + reportName).selectedIndex i; break; } } $(filterExample + reportName).innerHTML SC.resReportDownloadBuilder. + reportType + .Filter.Example; $(aggregateFilterExample + reportName).innerHTML SC.resReportDownloadBuilder. + reportType + .AggregateFilter.Example; } $(reportExplanation + reportName).innerHTML SC.resReportDownloadBuilder. + $(reportType + reportName).options$(reportType + reportName).selectedIndex.value + .Explanation; i 1; if (parsedDefinition.length > 1) { while (i parsedDefinition.length) { if (parsedDefinitioni.search(GroupFields) ! -1) { if (!encounteredField) { SC.ui.findDescendent($(reportTypeSelection + reportName), function (e) { return e.type radio && e.value grouped }).checked true; SC.ui.findDescendent($(reportTypeSelection + reportName), function (e) { return e.type radio && e.value ungrouped }).checked false; SC.ui.insertChild($(groupFields + reportName), generateReportFieldPickListDiv(GroupedGroup, $(reportType + reportName), reportName), 1); SC.ui.insertChild($(selectFields + reportName), generateReportFieldPickListDiv(GroupedSelect, $(reportType + reportName), reportName), 1); $(groupFields + reportName).style.display block; $(aggregateFilterDiv + reportName).style.display block; encounteredField true; } var groupField parsedDefinitioni.split()1; var gsl SC.ui.findDescendent($(groupFields + reportName), function (e) { return e._listType select }); var selectIndex gsl.selectedIndex; var selectOptions gsl.options; var gpl SC.ui.findDescendent($(groupFields + reportName), function (e) { return e._listType pick }); var pickOptions gpl.options; var pickOptLength pickOptions.length; for (var j 0; j selectOptions.length; j++) { if (selectOptionsj.value groupField) { pickOptionspickOptLength $option(gslj.text); pickOptionspickOptLength.value gslj.value; pickOptionspickOptLength.title gslj.title; pickOptionspickOptLength._index gslj._index; selectOptionsj null; break; } } } else if (parsedDefinitioni.search(SelectFields) ! -1) { if (!encounteredField) { SC.ui.findDescendent($(reportTypeSelection + reportName), function (e) { return e.type radio && e.value grouped }).checked false; SC.ui.findDescendent($(reportTypeSelection + reportName), function (e) { return e.type radio && e.value ungrouped }).checked true; SC.ui.insertChild($(groupFields + reportName), generateReportFieldPickListDiv(GroupedGroup, $(reportType + reportName), reportName), 1); SC.ui.insertChild($(selectFields + reportName), generateReportFieldPickListDiv(NotGroupedSelect, $(reportType + reportName), reportName), 1); encounteredField true; } var selectField parsedDefinitioni.split()1; var ssl SC.ui.findDescendent($(selectFields + reportName), function (e) { return e._listType select }); var selectIndex ssl.selectedIndex; var selectOptions ssl.options; var spl SC.ui.findDescendent($(selectFields + reportName), function (e) { return e._listType pick }); var pickOptions spl.options; var pickOptLength pickOptions.length; for (var j 0; j selectOptions.length; j++) { if (selectOptionsj.value selectField) { pickOptionspickOptLength $option(sslj.text); pickOptionspickOptLength.value sslj.value; pickOptionspickOptLength.title sslj.title; pickOptionspickOptLength._index sslj._index; selectOptionsj null; break; } } } else if (parsedDefinitioni.search(AggregateFilter) ! -1) { var aggregateFilter parsedDefinitioni.split()1; $(aggregateFilter + reportName).value decodeURIComponent(aggregateFilter); } else if (parsedDefinitioni.search(Filter) ! -1) { var filter parsedDefinitioni.split()1; $(filter + reportName).value decodeURIComponent(filter); } else if (parsedDefinitioni.search(ItemLimit) ! -1) { var itemLimit parsedDefinitioni.split()1; $(itemLimit + reportName).value itemLimit; } i++; } // if have not encountered a single group or select field at this point, then the report is ungrouped with an empty set of select fields if (!encounteredField) { SC.ui.findDescendent($(reportTypeSelection + reportName), function (e) { return e.type radio && e.value grouped }).checked false; SC.ui.findDescendent($(reportTypeSelection + reportName), function (e) { return e.type radio && e.value ungrouped }).checked true; SC.ui.insertChild($(groupFields + reportName), generateReportFieldPickListDiv(GroupedGroup, $(reportType + reportName), reportName), 1); SC.ui.insertChild($(selectFields + reportName), generateReportFieldPickListDiv(NotGroupedSelect, $(reportType + reportName), reportName), 1); } var gsl SC.ui.findDescendent($(groupFields + reportName), function (e) { return e._listType select }); var gpl SC.ui.findDescendent($(groupFields + reportName), function (e) { return e._listType pick }); var ssl SC.ui.findDescendent($(selectFields + reportName), function (e) { return e._listType select }); var spl SC.ui.findDescendent($(selectFields + reportName), function (e) { return e._listType pick }); if (gsl && gsl.options0) { gsl.options0.selected true; } if (gpl && gpl.options0) { gpl.options0.selected true; } if (ssl && ssl.options0) { ssl.options0.selected true; } if (spl && spl.options0) { spl.options0.selected true; } } }};var checkForReportInputChange function (reportName) { return function () { var valid true; // if this is a grouped report, need to check that at least one group field is selected if (SC.ui.findDescendent($(reportTypeSelection + reportName), function (e) { return e.type radio && e.value grouped }).checked true) { valid false; if (SC.ui.findDescendent($(groupFields + reportName), function (e) { return e._listType pick }).options.length > 0) { valid true; } } $(report + reportName)._validReport valid; // check if any changes made to the report since last saved if ($(report + reportName)._reportDefinition ! getReportDefinitionString(reportName)) { $(report + reportName)._isDirty true; } else { $(report + reportName)._isDirty false; } updateReportViewProc(); };};// generate a new group or select field selector based on the type of reportvar generateReportFieldPickListDiv function (fieldSelectionType, reportType, reportName) { // build a group or select field selector var buildPickListDiv function (primaryOrAggregate, fieldType, reportType) { var pickDiv, i; var pickListDivBuilder function (selectList, pickList) { var addButton $button({ className: SecondaryButton }, >); var deleteButton $button({ className: SecondaryButton }, ); var upButton $button({ className: SecondaryButton }, ∧); var downButton $button({ className: SecondaryButton }, ∨); SC.event.addHandler(addButton, click, addOptionToPickList(selectList, pickList)); SC.event.addHandler(deleteButton, click, removeOptionFromPickList(selectList, pickList)); SC.event.addHandler(addButton, click, checkForReportInputChange(reportName)); SC.event.addHandler(deleteButton, click, checkForReportInputChange(reportName)); SC.event.addHandler(upButton, click, function () { var pl pickList; var pickIndex pl.selectedIndex; var pickOptions pl.options; var selectedIndices ; for (var i 0; i pl.length; i++) { if (pickOptionsi.selected) { selectedIndices.push(i); } } if ((selectedIndices.length > 0) && (selectedIndices0 ! 0)) { for (var j 0; j selectedIndices.length; j++) { pl.add($option(plselectedIndicesj.text), selectedIndicesj - 1); pickOptionsselectedIndicesj - 1.value plselectedIndicesj + 1.value; pickOptionsselectedIndicesj - 1.title plselectedIndicesj + 1.title; pickOptionsselectedIndicesj - 1._index plselectedIndicesj + 1._index; pickOptionsselectedIndicesj - 1.selected true; pl.remove(selectedIndicesj + 1); } } }); SC.event.addHandler(upButton, click, checkForReportInputChange(reportName)); SC.event.addHandler(downButton, click, function () { var pl pickList; var pickIndex pl.selectedIndex; var pickOptions pl.options; var selectedIndices ; for (var i 0; i pl.length; i++) { if (pickOptionsi.selected) { selectedIndices.push(i); } } if ((selectedIndices.length > 0) && (selectedIndicesselectedIndices.length - 1 (pl.length - 1))) { for (var j (selectedIndices.length - 1); j > 0; j--) { pl.add($option(plselectedIndicesj.text), selectedIndicesj + 2); pickOptionsselectedIndicesj + 2.value plselectedIndicesj.value; pickOptionsselectedIndicesj + 2.title plselectedIndicesj.title; pickOptionsselectedIndicesj + 2._index plselectedIndicesj._index; pickOptionsselectedIndicesj + 2.selected true; pl.remove(selectedIndicesj); } } }); SC.event.addHandler(downButton, click, checkForReportInputChange(reportName)); return $div( $table( $tr( $td(selectList, $div({ className: pickListDescription }, Available)), $td(addButton, $br(), deleteButton), $td(pickList, $div({ className: pickListDescription }, Selected)), $td(upButton, $br(), downButton) ) ) ); }; var addOptionToPickList function (selectList, pickList) { return function () { var sl selectList; var selectIndex sl.selectedIndex; var selectOptions sl.options; var pl pickList; var pickOptions pl.options; var pickOptLength pickOptions.length; for (var i 0; i pickOptLength; i++) { pickOptionsi.selected false; } while (selectIndex > -1) { pickOptionspickOptLength $option(slselectIndex.text); pickOptionspickOptLength.value slselectIndex.value; pickOptionspickOptLength.title slselectIndex.title; pickOptionspickOptLength._index slselectIndex._index; pickOptionspickOptLength.selected true; selectOptionsselectIndex null; selectIndex sl.selectedIndex; pickOptLength pickOptions.length; } }; }; var removeOptionFromPickList function (selectList, pickList) { return function () { var sl selectList; var selectOptions sl.options; var selectOptLength selectOptions.length; var pl pickList; var pickIndex pl.selectedIndex; var pickOptions pl.options; for (var i 0; i selectOptLength; i++) { selectOptionsi.selected false; } while (pickIndex > -1) { var j 0; while (selectOptionsj && (pickOptionspickIndex._index > selectOptionsj._index)) { j++; } sl.add($option(plpickIndex.text), j); selectOptionsj.value plpickIndex.value; selectOptionsj.title plpickIndex.title; selectOptionsj._index plpickIndex._index; selectOptionsj.selected true; pickOptionspickIndex null; pickIndex pl.selectedIndex; } }; }; var name reportName ! null ? reportName : Array.prototype.find.call($(ReportDownloadBuilderSelectionPanel).childNodes, function (l) { return SC.ui.isSelected(l); })._commandArgument; var pickList $select({ id: primaryOrAggregate + pickList + name, size: 7, multiple: true, _listType: pick }); var selectList $select({ id: primaryOrAggregate + selectList + name, size: 7, multiple: true, _listType: select }); var j 0; var reportTypeValue reportType.optionsreportType.selectedIndex.value; if (reportTypeValue ! SessionConnectionEvent || SC.util.isVersion(null, {major: 22, minor : 9}, currentVersion)) { for (i 0; i getMetaTableFromReportManagerMetaTables(reportTypeValue).Items.length; i++) { if (getMetaTableFromReportManagerMetaTables(reportTypeValue).Itemsi1.toLowerCase() primaryOrAggregate) { SC.ui.addContent(selectList, $option({ label: getMetaTableFromReportManagerMetaTables(reportTypeValue).Itemsi3, value: getMetaTableFromReportManagerMetaTables(reportTypeValue).Itemsi3, title: SC.resreportTypeValue + . + getMetaTableFromReportManagerMetaTables(reportTypeValue).Itemsi3 + .Definition, _index: j }, getMetaTableFromReportManagerMetaTables(reportTypeValue).Itemsi3)); j++; } } selectList.options0.selected true; pickDiv pickListDivBuilder(selectList, pickList); } return pickDiv; }; switch (fieldSelectionType) { case NotGroupedSelect: return buildPickListDiv(primary, selectFields, reportType); case GroupedGroup: return buildPickListDiv(primary, groupFields, reportType); case GroupedSelect: return buildPickListDiv(aggregate, selectFields, reportType); }};var createReportEditPanelFunc function (reportName, reportLoadFileName, isDirty, validReport, definition) { var reportTypeInput, reportTypeSelection, groupFieldSelection, selectFieldsSelection, aggregateFilterContent, aggregateFilterInput, reportDefinitionContent, filterInput, itemLimitInput, filterExample, aggregateFilterExample; var inputs Session, SessionConnection, SessionConnectionEvent, SessionEvent, SecurityEvent; if (SC.util.isVersion({major: 22, minor : 9}, null, currentVersion)) { inputs Session, SessionConnection, SessionEvent, SecurityEvent; } var reportEditPanel $div({ className: reportEditPanel, id: report + reportName, _isDirty: isDirty, _reportDefinition: definition null ? : definition, _validReport: validReport }, $table( $tr( $td( $div({ id: rawReporter + reportName }, $div({ className: reportBuilderSection }, reportTypeSelection $div({ className: aggregationSection, id: reportTypeSelection + reportName }, $label({ className: ReportBuilderHeader }, SC.resReportDownloadBuilder.AggregationType.Label), $table( $tr( $td(SC.ui.createRadioButtonOption(span, SC.resReportDownloadBuilder.UngroupedReport.Label, reportType + reportName, ungrouped, false, true)), $td({ id: ungroupedTooltip }, $dfn({ _textResource: InfoIcon.Text, _dataMap: { tooltip: SC.resReportDownloadBuilder.UngroupedReport.Tooltip } })) ), $tr( $td(SC.ui.createRadioButtonOption(span, SC.resReportDownloadBuilder.GroupedReport.Label, reportType + reportName, grouped, false, true)), $td({ id: groupedTooltip }, $dfn({ _textResource: InfoIcon.Text, _dataMap: { tooltip: SC.resReportDownloadBuilder.GroupedReport.Tooltip } })) ) ) ), reportDefinitionContent $div({ id: reportDefinitionContent + reportName }, $div({ className: reportSection }, $div($label({ className: ReportBuilderHeader }, SC.resReportDownloadBuilder.ReportType.Label)), $div(reportTypeInput $select({ className: reportTypeInput, id: reportType + reportName }, inputs.map(function (reportType) { return $option({ label: reportType, value: reportType }, reportType); }))), $div({ className: ReportExplanation, id: reportExplanation + reportName }, SC.resReportDownloadBuilder.Session.Explanation) ), groupFieldSelection $div({ id: groupFields + reportName, className: reportSection }, $label({ className: ReportBuilderHeader }, SC.resReportDownloadBuilder.GroupFieldSet.Label) ), selectFieldsSelection $div({ id: selectFields + reportName, className: reportSection }, $label({ className: ReportBuilderHeader }, SC.resReportDownloadBuilder.SelectFieldSet.Label) ), $div({ className: reportSection }, $label({ className: ReportBuilderHeader }, SC.resReportDownloadBuilder.Filter.Label), $div(filterInput SC.ui.createElement(INPUT, { className: reportFilterInput, id: filter + reportName, type: text })), filterExample $label({ id: filterExample + reportName, className: filterExample }, SC.resReportDownloadBuilder.Session.Filter.Example) ), aggregateFilterContent $div({ id: aggregateFilterDiv + reportName, className: reportSection }, $label({ className: ReportBuilderHeader }, SC.resReportDownloadBuilder.AggregateFilter.Label), $div(aggregateFilterInput SC.ui.createElement(INPUT, { className: reportFilterInput, id: aggregateFilter + reportName, type: text })), aggregateFilterExample $label({ id: aggregateFilterExample + reportName, className: filterExample }, SC.resReportDownloadBuilder.Session.AggregateFilter.Example) ), $div({ className: reportSection }, $label({ className: ReportBuilderHeader }, SC.resReportDownloadBuilder.ItemLimit.Label), $div(itemLimitInput SC.ui.createElement(INPUT, { id: itemLimit + reportName, type: number, value: SC.resReportDownloadBuilder.ItemLimit.DefaultValue })) ) ), ) ) ) ) ) ); // initialize display reportDefinitionContent.style.display none; groupFieldSelection.style.display none; aggregateFilterContent.style.display none; // add handlers SC.event.addHandler(aggregateFilterInput, input, checkForReportInputChange(reportName)); SC.event.addHandler(filterInput, input, checkForReportInputChange(reportName)); SC.event.addHandler(itemLimitInput, input, checkForReportInputChange(reportName)); SC.event.addHandler(SC.ui.findDescendent(reportTypeSelection, function (e) { return e.type radio && e.value ungrouped }), click, function () { reportDefinitionContent.style.display block; groupFieldSelection.style.display none; aggregateFilterContent.style.display none; reportTypeSelection.title ; $(selectFields + reportName).childNodes.length 2 ? SC.ui.removeChildAt($(selectFields + reportName), 1) : null; SC.ui.insertChild($(selectFields + reportName), generateReportFieldPickListDiv(NotGroupedSelect, reportTypeInput, reportName), 1); }); SC.event.addHandler(SC.ui.findDescendent(reportTypeSelection, function (e) { return e.type radio && e.value grouped }), click, function () { reportDefinitionContent.style.display block; groupFieldSelection.style.display block; aggregateFilterContent.style.display block; reportTypeSelection.title ; $(groupFields + reportName).childNodes.length 2 ? SC.ui.removeChildAt($(groupFields + reportName), 1) : null; SC.ui.insertChild($(groupFields + reportName), generateReportFieldPickListDiv(GroupedGroup, reportTypeInput, reportName), 1); $(selectFields + reportName).childNodes.length 2 ? SC.ui.removeChildAt($(selectFields + reportName), 1) : null; SC.ui.insertChild($(selectFields + reportName), generateReportFieldPickListDiv(GroupedSelect, reportTypeInput, reportName), 1); }); SC.event.addHandler(SC.ui.findDescendent(reportTypeSelection, function (e) { return e.type radio && e.value ungrouped }), click, checkForReportInputChange(reportName)); SC.event.addHandler(SC.ui.findDescendent(reportTypeSelection, function (e) { return e.type radio && e.value grouped }), click, checkForReportInputChange(reportName)); var updateGroup function (callback) { $(groupFields + reportName).childNodes.length 2 ? SC.ui.removeChildAt($(groupFields + reportName), 1) : null; SC.ui.insertChild($(groupFields + reportName), generateReportFieldPickListDiv(GroupedGroup, reportTypeInput, reportName), 1); $(selectFields + reportName).childNodes.length 2 ? SC.ui.removeChildAt($(selectFields + reportName), 1) : null; SC.ui.insertChild($(selectFields + reportName), generateReportFieldPickListDiv(GroupedSelect, reportTypeInput, reportName), 1); callback(); }; var updateNotGroup function (callback) { $(selectFields + reportName).childNodes.length 2 ? SC.ui.removeChildAt($(selectFields + reportName), 1) : null; SC.ui.insertChild($(selectFields + reportName), generateReportFieldPickListDiv(NotGroupedSelect, reportTypeInput, reportName), 1); callback(); }; // update options in GroupFields and SelectFields dropdown if reportType changes SC.event.addHandler(reportTypeInput, change, function () { $(reportExplanation + reportName).innerHTML SC.resReportDownloadBuilder. + reportTypeInput.optionsreportTypeInput.selectedIndex.value + .Explanation; filterExample.innerHTML SC.resReportDownloadBuilder. + reportTypeInput.optionsreportTypeInput.selectedIndex.value + .Filter.Example; aggregateFilterExample.innerHTML SC.resReportDownloadBuilder. + reportTypeInput.optionsreportTypeInput.selectedIndex.value + .AggregateFilter.Example; reportTypeInput.optionsreportTypeInput.selectedIndex.value if (SC.ui.getSelectedRadioButtonValue(reportTypeSelection) grouped) { updateGroup(checkForReportInputChange(reportName)); } else { updateNotGroup(checkForReportInputChange(reportName)); } }); return reportEditPanel;};var createReportSelectionLinkFunc function (reportName) { return $a({ className: SelectionLink, _commandName: EditReport, _commandArgument: reportName });};var tryRemoveReportFileProc function (reportName) { var index getIndexOfReportFilePathFunc(reportName); if (index ! -1) { SC.ui.removeChildAt($(ReportDownloadBuilderSelectionPanel), index); SC.ui.removeChildAt($(ReportDownloadBuilderEditorPanel), index); if ($(ReportDownloadBuilderSelectionPanel).childNodes.length ! 0) { if (index $(ReportDownloadBuilderSelectionPanel).childNodes.length) { tryEditReportFileProc($(ReportDownloadBuilderSelectionPanel).childNodesindex - 1._commandArgument); } else { tryEditReportFileProc($(ReportDownloadBuilderSelectionPanel).childNodesindex._commandArgument); } } } updateReportViewProc();};var tryEditReportFileProc function (reportName) { var index getIndexOfReportFilePathFunc(reportName); Array.prototype.forEach.call($(ReportDownloadBuilderSelectionPanel).childNodes, function (l, i) { SC.ui.setSelected(l, i index); }); Array.prototype.forEach.call($(ReportDownloadBuilderEditorPanel).childNodes, function (p, i) { SC.ui.setVisible(p, i index); }); updateReportViewProc();};var getIndexOfReportFilePathFunc function (reportName) { return Array.prototype.findIndex.call($(ReportDownloadBuilderSelectionPanel).childNodes, function (sl) { return sl._commandArgument reportName; });};var getSelectedReportFileIndexFunc function () { return Array.prototype.findIndex.call($(ReportDownloadBuilderSelectionPanel).childNodes, function (sl) { return SC.ui.isSelected(sl); });};var updateReportViewProc function () { var commandPanel document.querySelector(.ModalDialog.ReportDownloadBuilder .CommandPanel); var index getSelectedReportFileIndexFunc(); //update Clone and Delete command button states if ($(ReportDownloadBuilderSelectionPanel).childNodes.length > 0) { commandPanel.childNodes1.className ; commandPanel.childNodes2.className ; } else { commandPanel.childNodes1.className Disabled; commandPanel.childNodes2.className Disabled; } //update Save command button state if ($(ReportDownloadBuilderEditorPanel).childNodesindex) { if ($(ReportDownloadBuilderEditorPanel).childNodesindex._isDirty) { commandPanel.childNodes3.className ; } else { commandPanel.childNodes3.className Disabled; } } else { commandPanel.childNodes3.className Disabled; } //update Save All command button state if ($(ReportDownloadBuilderEditorPanel).childNodesindex) { var enableSaveAll false; for (var i 0; i $(ReportDownloadBuilderEditorPanel).childNodes.length; i++) { if ($(ReportDownloadBuilderEditorPanel).childNodesi._isDirty) { enableSaveAll true; } else { enableSaveAll enableSaveAll | false; } } if (enableSaveAll) { commandPanel.childNodes4.className ; } else { commandPanel.childNodes4.className Disabled; } } else { commandPanel.childNodes4.className Disabled; } //update Download and Email command button states if ($(ReportDownloadBuilderEditorPanel).childNodesindex) { if ($(ReportDownloadBuilderEditorPanel).childNodesindex._validReport) { commandPanel.childNodes5.className ; commandPanel.childNodes6.className ; } else { commandPanel.childNodes5.className Disabled; commandPanel.childNodes6.className Disabled; } } else { commandPanel.childNodes5.className Disabled; commandPanel.childNodes6.className Disabled; } Array.prototype.forEach.call($(ReportDownloadBuilderSelectionPanel).childNodes, function (sl, i) { var linkContent sl._commandArgument; if ($(ReportDownloadBuilderEditorPanel).childNodesi._isDirty) linkContent + *; SC.ui.setInnerText(sl, linkContent); SC.css.ensureClass(sl, LoadError, sl._status SC.types.ExtensionRuntimeStatus.LoadError); sl.title (SC.util.isNullOrEmpty(sl._loadMessage) ? : sl._loadMessage); });};var getReportDefinitionString function (reportName) { var selectedGroupFields ; var selectedSelectFields ; var reportDefinition; if (SC.ui.getSelectedRadioButtonValue($(reportTypeSelection + reportName)) grouped) { var pListGroup SC.ui.findDescendent($(groupFields + reportName), function (e) { return e._listType pick }); for (i 0; i pListGroup.options.length; i++) { selectedGroupFields.push(pListGroupi.value); } var pListSelect SC.ui.findDescendent($(selectFields + reportName), function (e) { return e._listType pick }); for (i 0; i pListSelect.options.length; i++) { selectedSelectFields.push(pListSelecti.value); } if (pListGroup.options.length 0) { reportDefinition { InvalidGrouped: true, ReportType: $(reportType + reportName).options$(reportType + reportName).selectedIndex.value, GroupFields: , SelectFields: selectedSelectFields, Filter: $(filter + reportName).value.length > 0 ? $(filter + reportName).value : , AggregateFilter: $(aggregateFilter + reportName).value.length > 0 ? $(aggregateFilter + reportName).value : , ItemLimit: $(itemLimit + reportName).value.length > 0 ? $(itemLimit + reportName).value : 10000 }; } else { reportDefinition { ReportType: $(reportType + reportName).options$(reportType + reportName).selectedIndex.value, GroupFields: selectedGroupFields, SelectFields: selectedSelectFields, Filter: $(filter + reportName).value.length > 0 ? $(filter + reportName).value : , AggregateFilter: $(aggregateFilter + reportName).value.length > 0 ? $(aggregateFilter + reportName).value : , ItemLimit: $(itemLimit + reportName).value.length > 0 ? $(itemLimit + reportName).value : 10000 }; } } else if (SC.ui.getSelectedRadioButtonValue($(reportTypeSelection + reportName)) ungrouped) { var pListSelect SC.ui.findDescendent($(selectFields + reportName), function (e) { return e._listType pick }); for (i 0; i pListSelect.options.length; i++) { selectedSelectFields.push(pListSelecti.value); } reportDefinition { ReportType: $(reportType + reportName).options$(reportType + reportName).selectedIndex.value, GroupFields: , SelectFields: selectedSelectFields, Filter: $(filter + reportName).value.length > 0 ? $(filter + reportName).value : , AggregateFilter: , ItemLimit: $(itemLimit + reportName).value.length > 0 ? $(itemLimit + reportName).value : 10000 }; } else { reportDefinition { ReportType: , GroupFields: , SelectFields: , Filter: , AggregateFilter: , ItemLimit: }; } if (reportDefinition.ReportType SecurityEvent) { reportDefinition.Report Security; } return SC.util.getQueryString(reportDefinition);};var downloadReport function (reportName, fileFormat) { if (fileFormat csv) { SC.util.launchUrl(SC.context.scriptBaseUrl + Report.csv + getReportDefinitionString(reportName)); } else { window.open(SC.context.scriptBaseUrl + Report. + fileFormat + getReportDefinitionString(reportName)); }};var getUniqueReportName function (desiredReportName) { var duplicate false; for (var i 0; i $(ReportDownloadBuilderSelectionPanel).childNodes.length; i++) { if (desiredReportName $(ReportDownloadBuilderSelectionPanel).childNodesi._commandArgument) { duplicate true; } } if (duplicate) { var created false; var duplicateIndicator 1; var reportName desiredReportName + - + duplicateIndicator; while (!created) { duplicate false; for (var i 0; i $(ReportDownloadBuilderSelectionPanel).childNodes.length; i++) { if (reportName $(ReportDownloadBuilderSelectionPanel).childNodesi._commandArgument) { duplicate true; } } if (duplicate) { duplicateIndicator++; reportName desiredReportName + - + duplicateIndicator; } else { return reportName; } } } else { return desiredReportName; }};var updateReportDefinition function (reportName) { $(report + reportName)._reportDefinition getReportDefinitionString(reportName);};var makeReportClean function (reportName) { $(report + reportName)._isDirty false;};var startSaveReportFileProc function (reportName) { makeReportClean(reportName); updateReportDefinition(reportName); updateReportViewProc();};SC.event.addGlobalHandler(SC.event.QueryCommandButtons, function (eventArgs) { switch (eventArgs.area) { case ExtrasPopoutPanel: if (SC.context.pageType AdministrationPage) { eventArgs.buttonDefinitions.push( { commandName: ManageRawReports, text: SC.resReportDownloadBuilder.ButtonText } ); } break; case ReportDownloadBuilderEditorPanel: Array.prototype.push.apply(eventArgs.buttonDefinitions, { commandName: NewReport }, { commandName: CloneReport }, { commandName: DeleteReport }, { commandName: SaveReport }, { commandName: SaveAllReports }, { commandName: DownloadReport }, { commandName: EmailReport } ); break; }});SC.event.addGlobalHandler(SC.event.ExecuteCommand, function (eventArgs) { var dialog SC.dialog.getModalDialog(); switch (eventArgs.commandName) { case ManageRawReports: editReportProc(); break; case NewReport: if (eventArgs.clickedElement.tagName INPUT) { var unprocessedReportName (eventArgs.clickedElement.value ? SC.resReportDownloadBuilder.NewReportName.DefaultName : eventArgs.clickedElement.value); var reportFile { ReportName: unprocessedReportName, ReportContent: }; var reportName getUniqueReportName(reportFile.ReportName); addReportFileProc(reportName, null, true, false, null); tryEditReportFileProc(reportName); } else { SC.popout.togglePanel( SC.ui.findDescendent(dialog, function (e) { return e._commandName eventArgs.commandName; }), function (container) { SC.ui.setContents(container, $p(SC.ui.createTextBox({ _commandName: eventArgs.commandName }, false, false, SC.resReportDownloadBuilder.NewReportName.Placeholder)), ); }, function (container) { SC.ui.findDescendentByTag(container, INPUT).focus(); } ); } break; case EditReport: tryEditReportFileProc(eventArgs.commandArgument); break; case DeleteReport: if (eventArgs.commandArgument) { var currentSelectionLink Array.prototype.find.call($(ReportDownloadBuilderSelectionPanel).childNodes, function (l) { return SC.ui.isSelected(l); }); SC.service.TryDeleteReportDefinitionString(encodeURIComponent(currentSelectionLink._commandArgument), function () { tryRemoveReportFileProc(currentSelectionLink._commandArgument); }); } else { SC.popout.togglePanel( SC.ui.findDescendent(dialog, function (e) { return e._commandName eventArgs.commandName; }), function (container) { var currentSelectionLink Array.prototype.find.call($(ReportDownloadBuilderSelectionPanel).childNodes, function (l) { return SC.ui.isSelected(l); }); SC.ui.setContents(container, $p(SC.resReportDownloadBuilder.DeleteReport.ConfirmationText), $p($input({ type: button, value: SC.resReportDownloadBuilder.DeleteReport.ButtonText, _commandName: eventArgs.commandName, _commandArgument: true })) ); }, function (container) { if (SC.ui.findDescendentByTag(container, INPUT) ! null) { SC.ui.findDescendentByTag(container, INPUT).focus(); } } ); } break; case SaveReport: var currentSelectionLink Array.prototype.find.call($(ReportDownloadBuilderSelectionPanel).childNodes, function (l) { return SC.ui.isSelected(l); }); var definition getReportDefinitionString(currentSelectionLink._commandArgument); definition definition ! ? definition : ?; SC.service.SaveReportDefinitionString(encodeURIComponent(currentSelectionLink._commandArgument), definition, function () { startSaveReportFileProc(currentSelectionLink._commandArgument); }); break; case SaveAllReports: var selectionLinks $(ReportDownloadBuilderSelectionPanel).childNodes; var reportEditPanels $(ReportDownloadBuilderEditorPanel).childNodes; var reportNamesAndDefinitions ; for (var i 0; i selectionLinks.length; i++) { if (reportEditPanelsi._isDirty) { var definition getReportDefinitionString(selectionLinksi._commandArgument); definition definition ! ? definition : ?; startSaveReportFileProc(selectionLinksi._commandArgument); reportNamesAndDefinitions + encodeURIComponent(selectionLinksi._commandArgument) + definition + SC.resReportDownloadBuilder.Query.Delimiter; } } SC.service.SaveAllReportDefinitionStrings(reportNamesAndDefinitions); break; case CloneReport: if (eventArgs.clickedElement.tagName INPUT) { var currentSelectionLink Array.prototype.find.call($(ReportDownloadBuilderSelectionPanel).childNodes, function (l) { return SC.ui.isSelected(l); }); var unprocessedReportName (eventArgs.clickedElement.value ? SC.resReportDownloadBuilder.NewReportName.DefaultName : eventArgs.clickedElement.value); var reportFile { ReportName: unprocessedReportName, ReportContent: }; var reportName getUniqueReportName(reportFile.ReportName); var definition getReportDefinitionString(currentSelectionLink._commandArgument); var definitionForAddAndSave definition ! ? definition : ?; var definitionForLoad definitionForAddAndSave.charAt(0) ! ? ? definitionForAddAndSave : definitionForAddAndSave.substring(1); addReportFileProc(reportName, null, false, true, definitionForAddAndSave); loadReportFileProc(reportName, definitionForLoad); tryEditReportFileProc(reportName); SC.service.SaveReportDefinitionString(encodeURIComponent(reportName), definitionForAddAndSave, function () { startSaveReportFileProc(reportName); }); } else { SC.popout.togglePanel( SC.ui.findDescendent(dialog, function (e) { return e._commandName eventArgs.commandName; }), function (container) { SC.ui.setContents(container, $p(SC.ui.createTextBox({ _commandName: eventArgs.commandName }, false, false, SC.resReportDownloadBuilder.NewReportName.Placeholder)), ); }, function (container) { SC.ui.findDescendentByTag(container, INPUT).focus(); } ); } break; case DownloadReport: SC.popout.togglePanel( SC.ui.findDescendent(dialog, function (e) { return e._commandName eventArgs.commandName; }), function (container) { var currentSelectionLink Array.prototype.find.call($(ReportDownloadBuilderSelectionPanel).childNodes, function (l) { return SC.ui.isSelected(l); }); var downloadFormatSelection $select({ id: DownloadReportFormatSelector }, CSV, XML, JSON.map(function (downloadFormat) { return $option({ label: downloadFormat, value: downloadFormat.toLowerCase() }, downloadFormat); })); var downloadButton $input({ id: DownloadReportButton, type: button, value: SC.resReportDownloadBuilder.DownloadReport.Button.Text }); var downloadURL $input(); downloadURL.value SC.context.scriptBaseUrl + Report.csv + getReportDefinitionString(currentSelectionLink._commandArgument); SC.ui.addContent(container, $p(downloadFormatSelection, downloadButton), $p(downloadURL), $p( $input({ id: CopyReportDownloadLink, type: button, value: SC.resReportDownloadBuilder.CopyDownloadURL.Button.Text, _eventHandlerMap: { click: function (eventArgs) { downloadURL.select(); try { document.execCommand(copy); SC.ui.setVisible(eventArgs.target.parentNode.lastChild, true); } catch (ex) { // dont care } } } }), $span({ id: CopyReportDownloadLinkSuccess, className: Success, _visible: false, innerHTML: SC.resReportDownloadBuilder.CopySuccessMessage }) ) ); downloadURL.select(); SC.event.addHandler(downloadButton, click, function () { downloadReport(currentSelectionLink._commandArgument, downloadFormatSelection.value); downloadURL.select(); }); SC.event.addHandler(downloadFormatSelection, change, function () { downloadURL.value SC.context.scriptBaseUrl + Report. + downloadFormatSelection.value + getReportDefinitionString(currentSelectionLink._commandArgument); downloadURL.select(); SC.ui.setVisible($(CopyReportDownloadLinkSuccess), false); }); }, function (container) { } ); break; case EmailReport: SC.popout.togglePanel( SC.ui.findDescendent(dialog, function (e) { return e._commandName eventArgs.commandName; }), function (container) { var currentSelectionLink Array.prototype.find.call($(ReportDownloadBuilderSelectionPanel).childNodes, function (l) { return SC.ui.isSelected(l); }); var emailReportToAddress $input({ id: emailReportToAddressInput, type: text, placeholder: SC.resReportDownloadBuilder.EmailReport.Placeholder }); var emailReportButton $input({ id: EmailReportButton, type: button, value: SC.resReportDownloadBuilder.EmailReport.Button.Text }); var emailReportStatusMessage $span({ innerHTML: SC.resCommand.EmailReport.DefaultMessage }); var reportParameters getReportDefinitionString(currentSelectionLink._commandArgument); SC.service.GetReportEmailDefaultToAddress(function (emailToAddress) { emailReportToAddress.value emailToAddress; SC.ui.addContent(container, $p(emailReportToAddress, emailReportButton), $p(emailReportStatusMessage) ); }); SC.event.addHandler(emailReportButton, click, function () { emailReportToAddress.disabled true; emailReportButton.disabled true; SC.service.EmailReport(emailReportToAddress.value, currentSelectionLink.innerHTML, reportParameters, function (response) { emailReportStatusMessage.innerHTML response; emailReportToAddress.disabled false; emailReportButton.disabled false; } ); } ); }, function (container) { } ); break; }});});/script>script>SC.extension.addInitializeProc(358b7a5e-feb4-4713-99b7-91bdd97c1339, function (extensionContext) {/** Reset Host Join Method v1.1.1 **/var extensionId extensionContext.baseUrl.split(/).slice(-2)0;if (SC.context.pageType HostPage || ( SC.context.pageType GuestPage && extensionContext.settingValues.IncludeGuestPageReset.toLowerCase() true)) { var resetSettings function(choose){ if (choose) resetSettings(false); var tempSettings SC.util.loadSettings(); tempSettings.joinPath choose ? SC.launch.getInitialJoinPanelDefinitionPath(SC.launch.getJoinPanelDefinitionTreeRoot())1.key : null; SC.util.saveSettings(tempSettings); }; if (extensionContext.settingValues.ActionOnRightClickingJoin.toLowerCase() reset) { SC.event.addGlobalHandler(SC.event.QueryCommandButtonState, function(eventArgs){ switch(eventArgs.commandName) { case Join: eventArgs.srcElement.oncontextmenu function(e) { e.preventDefault(); SC.event.dispatchEvent(,executecommand,{commandName:ResetJoinMethod_ + extensionId}); return false; }; break; } }); } else if (extensionContext.settingValues.ActionOnRightClickingJoin.toLowerCase() choose) { SC.event.addGlobalHandler(SC.event.QueryCommandButtonState, function(eventArgs){ switch(eventArgs.commandName) { case Join: eventArgs.srcElement.oncontextmenu function(e) { e.preventDefault(); SC.event.dispatchEvent(,executecommand,{commandName:ChooseJoinMethod_ + extensionId}); return false; }; break; } }); } SC.event.addGlobalHandler(SC.event.QueryCommandButtons, function (eventArgs) { switch (eventArgs.area) { case ExtrasPopoutPanel: // HelpPopoutPanel doesnt show up starting in 6.0, show show it in the Extras menu on the guest page, if enabled. if (SC.context.isUserAuthenticated || SC.context.pageType ! GuestPage || SC.context.productVersion.substring(0,2) 5.) break; case HelpPopoutPanel: eventArgs.buttonDefinitions.push({ commandName: ResetJoinMethod_ + extensionId, text: SC.resExtension.ResetHostJoinMethod.ResetCommandText, },{ commandName: ChooseJoinMethod_ + extensionId, text: SC.resExtension.ResetHostJoinMethod.ChooseCommandText, }); break; } }); SC.event.addGlobalHandler(SC.event.ExecuteCommand, function(eventArgs){ switch (eventArgs.commandName) { case ResetJoinMethod_ + extensionId: resetSettings(false); break; case ChooseJoinMethod_ + extensionId: resetSettings(true); break; } });}/** Extend Extension Options **/var extendedExtensionOptions {};/* Option Settings Below */extendedExtensionOptions.helpUrl https://help.screenconnect.com/Joining_a_session_as_a_host;extendedExtensionOptions.extensionResourceID null; // Dont include option to run from extension options./* Option Settings Above */extendedExtensionOptions.extensionIdextensionContext.baseUrl.split(/).slice(-2)0;SC.resHelpPanel.Link+extendedExtensionOptions.extensionId+.UrlextendedExtensionOptions.helpUrl;SC.event.addGlobalHandler(SC.event.QueryCommandButtonState,function(eventArgs){ if(eventArgs.commandNameEditExtensionSettings&&eventArgs.commandContext.extensionInfo.ExtensionIDextendedExtensionOptions.extensionId&&eventArgs.commandElement._commandNameEditExtensionSettings){ if(extendedExtensionOptions.extensionResourceID&&extendedExtensionOptions.extensionResourceID.length) SC.ui.addElement(eventArgs.target.parentElement,A,{_commandName:command_+extensionId,_innerText:SC.resExtension.+extendedExtensionOptions.extensionResourceID+.CommandText}); SC.ui.addElement(eventArgs.target.parentElement,A,{_commandName:NavigateHelpLink,_commandArgument:extendedExtensionOptions.extensionId,_innerText:SC.resCommand.Help.Text.replace( ▽,)}); }});/******************************/});/script>script>SC.extension.addInitializeProc(850c08be-d904-48d4-977a-5c2fcb277fd4, function (extensionContext) {SC.event.addGlobalHandler(SC.event.QueryCommandButtons, function (eventArgs) { switch (eventArgs.area) { case ExtrasPopoutPanel: if (SC.context.pageType HostPage) eventArgs.buttonDefinitions.push( { commandName: DownloadScreenConnector } ); break; }});SC.event.addGlobalHandler(SC.event.ExecuteCommand, function (eventArgs) { switch (eventArgs.commandName) { case DownloadScreenConnector: SC.util.launchUrl(extensionContext.baseUrl + Download.ashx); break; }});});/script>script>SC.extension.addInitializeProc(6fadbbb8-9540-4612-8504-937c5083bca7, function (extensionContext) {var securityToolkitExtensionId extensionContext.baseUrl.split(/).slice(-2)0;var securityToolkitHelpLink https://docs.connectwise.com/ConnectWise_Control_Documentation/Supported_extensions/Administration/Security_Toolkit;SC.event.addGlobalHandler(SC.event.QueryCommandButtonState, function (eventArgs) { if (eventArgs.commandName EditExtensionSettings) if (eventArgs.commandContext.extensionInfo.ExtensionID securityToolkitExtensionId && eventArgs.commandElement._commandName EditExtensionSettings) eventArgs.target.parentElement.appendChild($a({ _commandName: ShowHelpLink_ + securityToolkitExtensionId, _textResource: SecurityToolkit.ShowHelpLink.ButtonText }));});SC.event.addGlobalHandler(SC.event.ExecuteCommand, function (eventArgs) { if (eventArgs.commandName ShowHelpLink_ + securityToolkitExtensionId) window.open(securityToolkitHelpLink, _blank);});SC.event.addGlobalHandler(SC.event.PreRender, function (eventArgs) { if (SC.context.pageType AdministrationPage || (SC.context.pageType HostPage && SC.context.canAdminister true)) SC.util.includeStyleSheet(extensionContext.baseUrl + SecurityToolkit.css);});SC.event.addGlobalHandler(SC.event.QueryCommandButtons, function (eventArgs) { switch (eventArgs.area) { case ExtrasPopoutPanel: if (SC.context.pageType AdministrationPage || (SC.context.pageType HostPage && SC.context.canAdminister true)) eventArgs.buttonDefinitions.push( { commandName: RemoveQueuedCommands, text: SC.resSecurityToolkit.ExtrasPanel.RemoveQueuedCommands.Text } ); break; }});SC.event.addGlobalHandler(SC.event.ExecuteCommand, function (eventArgs) { switch (eventArgs.commandName) { case RemoveQueuedCommands: removeQueuedCommands(); break; }});var removeQueuedCommands function () { SC.dialog.showConfirmationDialog( RemoveQueuedCommands, SC.resSecurityToolkit.RemoveCommandsActionPanel.Title, $p({ innerHTML: SC.resSecurityToolkit.RemoveCommandsActionPanel.Text }), SC.resSecurityToolkit.RemoveCommandsActionPanel.ButtonText, function (onSuccess, onFailure) { SC.service.RemoveAllQueuedCommands( function () { onSuccess(); SC.pagedata.notifyDirty(); }, onFailure ); } );}});/script>title> Servant 42 Remote Support Software/title>/head>body> div classHiddenPanel>/div> script> SC.ui.setVisible(document.body, false); /script> div classOuterPanel> div classHeaderPanel>/div> div classNavigationPanel ArrowNavigation tabindex10>/div> div classMainPanel> div classContentPanel> div> div classWelcomePanel>/div> div classActionPanel>/div> /div> div classInfoPanel>/div> /div> /div> /div> script> SC.context.scriptBaseUrl SC.util.getBaseUrl($(defaultScript).src); /script> script> SC.event.addGlobalHandler(SC.event.ExecuteCommand, function (eventArgs) { var session null; var hostAccessToken null; switch (eventArgs.commandName) { case JoinBySessionID: session window.getSessionInfo().Sessions.filter(function (s) { return s.SessionID eventArgs.commandArgument; })0; break; case JoinByTag: var taggedSessionInfo window.getTaggedSessionInfo(eventArgs.commandArgument); hostAccessToken taggedSessionInfo.HostAccessToken; session window.getSessionInfo().Sessions.filter(function (s) { return s.SessionID taggedSessionInfo.SessionID || (taggedSessionInfo.Code && s.Code.toLowerCase() taggedSessionInfo.Code.toLowerCase()); })0; break; } // older IE only allows launching urls on actual clicks and this could be sent by a keystroke if (session && (SC.command.doesClickDispatch(eventArgs.commandElement) || !SC.util.isCapable(SC.util.Caps.InternetExplorer, null, { major: 11 }))) { SC.launch.startJoinSession( { session: session, hostAccessToken: hostAccessToken, processType: hostAccessToken ? SC.types.ProcessType.Host : SC.types.ProcessType.Guest }, function (joinInfo, _, onSuccess, onFailure) { onSuccess( SC.util.getClientLaunchParameters( joinInfo.session.SessionID, joinInfo.session.SessionType, joinInfo.session.Name, joinInfo.fieldMap.participantName.value, null, joinInfo.hostAccessToken, joinInfo.processType ) ); } ); } }); SC.event.addGlobalHandler(SC.event.QueryJoinInfo, function (eventArgs) { if (eventArgs.session) { eventArgs.shouldShowPrompt SC.util.getSessionTypeBooleanResource(JoinPanel.{0}PromptVisible, eventArgs.session.SessionType); eventArgs.promptText SC.util.getSessionTypeResource(JoinPanel.{0}PromptMessage, eventArgs.session.SessionType); eventArgs.buttonText SC.util.getSessionTypeResource(JoinPanel.{0}PromptButtonText, eventArgs.session.SessionType); eventArgs.fieldMap.participantName { labelText: SC.util.getSessionTypeResource(JoinPanel.{0}ParticipantNameLabelText, eventArgs.session.SessionType), value: , visible: SC.util.getSessionTypeBooleanResource(JoinPanel.{0}PromptParticipantNameVisible, eventArgs.session.SessionType), }; } }); SC.event.addGlobalHandler(SC.event.QueryParticipantJoinedCount, function (eventArgs) { var sessionInfo window.getSessionInfo(); var session sessionInfo.Sessions.find(function (s) { return s.SessionID eventArgs.clientLaunchParameters.s; }); if (session ! undefined) eventArgs.participantJoinedCount session.ActiveConnections.filter(function (ac) { if (eventArgs.clientLaunchParameters.n) return ac.ProcessType SC.types.ProcessType.Host; return ac.ProcessType SC.types.ProcessType.Guest && ac.ParticipantName eventArgs.clientLaunchParameters.r; }).length; }); SC.event.addGlobalHandler(SC.event.QueryPanels, function (eventArgs) { switch (eventArgs.area) { case GuestActionPanel: eventArgs.panelDefinitions.push({ initProc: function (container) { SC.ui.setContents(container, $div({ className: Loading })); }, isVisibleProc: function (pass, previousPassVisibleCount, sessionInfo) { return pass 1 && sessionInfo null; } }); eventArgs.panelDefinitions.push({ initProc: function (container) { SC.ui.setContents(container, $a({ _commandName: JoinByTag, _commandArgument: DefaultSession, className: GoLink Large, _attributeMap: { aria-label: SC.resGuestActionPanel.ButtonDescription } }), $h2({ _htmlResource: GuestActionPanel.InvitationSession.Heading }), $p({ _htmlResource: GuestActionPanel.InvitationSession.Message }), ); }, isVisibleProc: function (pass, previousPassVisibleCount, sessionInfo) { return pass 3 && previousPassVisibleCount 0 && sessionInfo ! null && sessionInfo.Sessions.find(function (s) { return s.SessionID window.getTaggedSessionInfo(DefaultSession).SessionID; }); } }); eventArgs.panelDefinitions.push({ initProc: function (container) { SC.ui.setContents(container, $h2({ _htmlResource: GuestActionPanel.CodeSession.Heading }), $p({ _htmlResource: GuestActionPanel.CodeSession.Message }), $p({ className: GuestActionBar }, SC.ui.createSearchTextBox({ _commandName: JoinByTag, _commandArgument: DefaultCode, value: window.getTaggedSessionInfo(DefaultCode).Code || }, function (eventArgs) { var sessionCode SC.util.getTrimmedOrNull(SC.event.getElement(eventArgs).value); window.setTaggedSessionInfo(DefaultCode, { Code: sessionCode }); }), $a({ _commandName: JoinByTag, _commandArgument: DefaultCode, className: GoLink Medium, _attributeMap: { aria-label: SC.resGuestActionPanel.ButtonDescription } }), ), ); }, isVisibleProc: function (pass, previousPassVisibleCount, sessionInfo) { return pass 5 && previousPassVisibleCount 0 && sessionInfo ! null && sessionInfo.DoNonPublicCodeSessionsExist; }, refreshProc: function (container, sessionInfo, wasMadeVisible) { var taggedSessionInfo window.getTaggedSessionInfo(DefaultCode); SC.ui.setDisabled( SC.ui.findDescendentByTag(container, A), !sessionInfo.Sessions.find(function (s) { return taggedSessionInfo.Code && s.Code.toLowerCase() taggedSessionInfo.Code.toLowerCase(); }) ); if (wasMadeVisible) SC.ui.findDescendentByTag(container, INPUT).focus(); } }); eventArgs.panelDefinitions.push({ initProc: function (container) { SC.ui.setContents(container, $h2({ _htmlResource: GuestActionPanel.PublicSession.Heading }), $p({ _htmlResource: GuestActionPanel.PublicSession.Message }), $p({ className: GuestActionBar }, $select(), $a({ _commandName: JoinBySessionID, className: GoLink Medium, _attributeMap: { aria-label: SC.resGuestActionPanel.ButtonDescription } }), ), ); SC.event.addHandler(SC.ui.findDescendentByTag(container, SELECT), change, function (eventArgs) { var selectBox SC.event.getElement(eventArgs); SC.ui.findDescendentByTag(container, A)._commandArgument selectBox.optionsselectBox.selectedIndex.value; }); }, isVisibleProc: function (pass, previousPassVisibleCount, sessionInfo) { return pass 5 && previousPassVisibleCount 0 && sessionInfo ! null && sessionInfo.Sessions.filter(function (s) { return s.IsPublic; }).length > 0; }, refreshProc: function (container, sessionInfo, wasMadeVisible) { var selectBox SC.ui.findDescendentByTag(container, SELECT); var link SC.ui.findDescendentByTag(container, A); SC.ui.setContents(selectBox, sessionInfo.Sessions.filter(function (s) { return s.IsPublic; }).map(function (s) { return $option({ value: s.SessionID }, s.Name); }) ); var optionIndex Array.prototype.findIndex.call(selectBox.options, function (o) { return o.value link._commandArgument; }); if (optionIndex ! -1) selectBox.selectedIndex optionIndex; else link._commandArgument selectBox.optionsselectBox.selectedIndex.value; } }); eventArgs.panelDefinitions.push({ initProc: function (container) { SC.ui.setContents(container, $h2({ _htmlResource: GuestActionPanel.NoAvailableSessions.Heading }), $p({ _htmlResource: GuestActionPanel.NoAvailableSessions.Message }), ); }, isVisibleProc: function (pass, previousPassVisibleCount, sessionInfo) { return pass 8 && previousPassVisibleCount 0; } }); break; } }); SC.event.addGlobalHandler(SC.event.QueryLiveData, function (eventArgs) { var getTaggedValuesFunc function (propertyName) { return Object.keys(window._taggedSessionInfos) .map(function (key) { return window._taggedSessionInfoskey; }) .filter(function (_) { return _propertyName; }) .map(function (_) { return _propertyName; }); } eventArgs.requestInfoMapGuestSessionInfo { sessionCodes: getTaggedValuesFunc(Code), sessionIDs: getTaggedValuesFunc(SessionID), }; }); SC.event.addGlobalHandler(SC.event.PreRender, function () { window._taggedSessionInfos {}; SC.css.ensureClass(document.documentElement, ShowMenu, false); var queryStringMap SC.util.parseQueryString(window.location.search); window.setTaggedSessionInfo(DefaultCode, { Code: queryStringMap.Code }); window.setTaggedSessionInfo(DefaultSession, { SessionID: queryStringMap.Session, HostAccessToken: queryStringMap.HostAccessToken }); var welcomePanel $(.WelcomePanel); var actionPanel $(.ActionPanel); SC.ui.setVisible(welcomePanel, SC.util.getBooleanResource(GuestWelcomePanel.Visible)); SC.ui.setContents(welcomePanel, $h2({ _htmlResource: GuestWelcomePanel.Heading }), $p({ _htmlResource: GuestWelcomePanel.Message }), ); SC.panellist.queryAndInitializePanels(actionPanel); SC.panellist.refreshPanels(actionPanel, null); }); SC.event.addGlobalHandler(SC.event.LiveDataRefreshed, function () { SC.panellist.refreshPanels($(.ActionPanel), window.getSessionInfo()); if (!window._hasJoinedDefault && !SC.util.isCapable(SC.util.Caps.InternetExplorer, null, { major: 11 })) { SC.command.dispatchExecuteCommand(window.document.body, window.document.body, window.document.body, JoinByTag, DefaultSession); window._hasJoinedDefault true; } }); /script> script> SC.event.addGlobalHandler(SC.event.QueryCommandButtons, function (eventArgs) { switch (eventArgs.area) { case TrayIconPanel: eventArgs.buttonDefinitions.push( { commandName: ActionCenter, imageUrl: Images/ActionCenter.svg }, { commandName: Extras, imageUrl: Images/Extras.svg }, { commandName: Applications, imageUrl: Images/Applications.svg } ); break; case ExtrasNavigationPopoutPanel: eventArgs.buttonDefinitions.push( { commandName: NavigateExtensionBrowser } ); break; case ToolsPanel: eventArgs.buttonDefinitions.push( { commandName: Extras, imageUrl: Images/Extras.svg }, { commandName: Login } ); break; case UserPopoutPanel: eventArgs.buttonDefinitions.push( { commandName: NavigateControlPanel }, { commandName: ChangePassword }, { commandName: Logout } ); break; case UserHelpPopoutPanel: if (SC.context.pageType ! GuestPage && SC.context.pageType ! LoginPage) { eventArgs.buttonDefinitions.push({ commandName: GiveFeedback }); for (var i 1; ; i++) { var resourceValue SC.resHelpPanel.Link + i + .Text; if (resourceValue undefined || resourceValue ) break; var url SC.util.sanitizeUrl(SC.resHelpPanel.Link + i + .Url); eventArgs.buttonDefinitions.push({ commandName: NavigateHelpLink, commandArgument: url, text: resourceValue, title: url }); } } break; } }); SC.event.addGlobalHandler(SC.event.QueryCommandButtonState, function (eventArgs) { switch (eventArgs.commandName) { case User: case ActionCenter: eventArgs.isVisible SC.context.isUserAuthenticated; break; case Login: eventArgs.isVisible SC.context.pageType ! SetupWizardPage && !SC.context.isUserAuthenticated && !SC.util.isCapable(SC.util.Caps.InternetExplorer, null, { major: 12 }); // Login page doesnt support IE break; case NavigateControlPanel: eventArgs.isVisible !!SC.context.controlPanelUrl; break; case ChangePassword: eventArgs.isVisible SC.context.canChangePassword; break; case Extras: eventArgs.isVisible SC.popout.computePopoutCommandsVisible(eventArgs, , Navigation); break; case Applications: case Help: eventArgs.isVisible SC.popout.computePopoutCommandsVisible(eventArgs); break; case NavigateExtensionBrowser: eventArgs.isVisible SC.context.isUserAdministrator; break; } }); SC.event.addGlobalHandler(SC.event.ExecuteCommand, function (eventArgs) { switch (eventArgs.commandName) { case Extras: SC.popout.showPanelFromCommand(eventArgs, null, { subAreas: , Navigation }); break; case Applications: SC.popout.showPanelFromCommand(eventArgs); break; case ActionCenter: SC.popout.showPanelFromCommand(eventArgs, null, { buildProc: function (popoutPanel) { var actionCenterInfo SC.livedata.getResponseInfo(SC.livedata.ActionCenterInfo); SC.ui.setContents(popoutPanel, $div({ className: ActionCenterPanel }, $h2({ _textResource: ActionCenterPanel.Text }), $ul({ className: List, _visible: SC.util.any(actionCenterInfo.ActionItems) }, (actionCenterInfo.ActionItems || ) .map(function (it) { var parsedEventData SC.util.parseEventData(it.Data); return $li({ _eventHandlerMap: { click: function() { window.location.href SC.nav.getHostUrl({ sessionType: it.SessionType, sessionID: it.SessionID, tabName: SC.nav.getHostTabName(it.EventType), tabContext: it.EventID }); }, } }, $img({ src: Images/Notification + SC.util.getEnumValueName(SC.types.SessionEventType, it.EventType) + .svg }), $h3({ className: Type }, SC.resSessionEvent. + SC.util.getEnumValueName(SC.types.SessionEventType, it.EventType) + .Title), $p({ className: Name, title: it.Name }, it.Name), $p({ className: DataContent, title: parsedEventData.content }, parsedEventData.content), $p({ className: Time }, SC.util.formatDateTime(it.Time, { includeRelativeDate: true })), ) }) ), $div({ className: EmptyPanel, _visible: !SC.util.any(actionCenterInfo.ActionItems) }, $p($img({ src: images/EmptyActionCenter.svg })), $h4({ _textResource: ActionCenterPanel.EmptyHeader }), $p({ _textResource: ActionCenterPanel.EmptyText }), ), )); }}); break; case Login: SC.util.sendToLogin(SC.types.LoginReason.None, false); break; case Logout: SC.util.sendToLogin(SC.types.LoginReason.Logout, false); break; case User: SC.popout.showPanelFromCommand(eventArgs, null, { subAreas: Help, }); break; case NavigateControlPanel: window.open(SC.util.sanitizeUrl(SC.context.controlPanelUrl)); break; case ChangePassword: var params {}; paramsSC.context.loginUserNameParameterName eventArgs.commandArgument; window.location.href SC.context.changePasswordPageUrl + SC.util.getQueryString(params); break; case NavigateHelpLink: window.open(eventArgs.commandArgument); break; case ToggleMenu: SC.css.toggleClass(document.documentElement, ShowMenu); break; case GiveFeedback: SC.dialog.showModalButtonDialog( GiveFeedback, SC.resCommand.GiveFeedback.Text, SC.resCommand.GiveFeedback.ButtonText, Default, function (container) { SC.ui.setContents(container, $div({ _textResource: GiveFeedbackPanel.ReviewLabelText }), $div({ className: RatingSelectionPanel }, Good, Neutral, Bad.map(function (rating) { return $span( $label({ className: rating }, $input({ type: radio, name: rating, value: rating.toLowerCase() }), $div({ className: RadioImage }), $span({ _textResource: GiveFeedbackPanel. + rating + RatingLabelText }), ) ); }) ), $div( $label({ _textResource: GiveFeedbackPanel.EmailLabelText }, $input({ type: email, id: email }), ), ), $div( $label({ _textResource: GiveFeedbackPanel.CommentsLabelText }, SC.ui.createTextBox({ id: commentsBox }, true), ), ), ); }, function (eventArgs) { SC.service.SendFeedback( Array.prototype.map.call(document.querySelectorAll(inputnamerating:checked), function (e) { return e.value; })0, $(commentsBox).value, $(email).value, function () { SC.dialog.showModalMessageBox( SC.resGiveFeedbackPanel.SuccessHeading, SC.resGiveFeedbackPanel.SuccessMessage ); } ); } ); break; case ManageToolbox: SC.toolbox.showToolboxDialog(eventArgs.commandName, eventArgs.commandArgument); break; case Navigate: window.location.href eventArgs.commandArgument; break; case NavigateExtensionBrowser: window.location.href SC.context.administrationPageUrl + ?TabExtensions#ShowExtensionBrowser; break; } }); SC.event.addGlobalHandler(SC.event.QueryNavigationLinks, function (eventArgs) { Array.prototype.push.apply(eventArgs.navigationLinks, SC.context.sessionTypeInfos.map(function (_) { return { href: SC.context.scriptBaseUrl + SC.context.hostPageUrl + # + SC.util.getEnumValueName(SC.types.SessionType, _.sessionType), text: SC.util.getSessionTypeResource(NavigationPanel.{0}LinkText, _.sessionType), imageUrl: SC.util.formatString(Images/Navigation{0}.svg, SC.util.getEnumValueName(SC.types.SessionType, _.sessionType)), sessionType: _.sessionType, } })); if (SC.context.isUserAdministrator) eventArgs.navigationLinks.push({ href: SC.context.scriptBaseUrl + SC.context.administrationPageUrl, text: SC.resNavigationPanel.AdministrationLinkText, imageUrl: Images/NavigationAdministration.svg, }); }); SC.event.addGlobalHandler(SC.event.QueryLiveData, function (eventArgs) { if (SC.context.isUserAuthenticated) SC.livedata.setRequestInfo(eventArgs, SC.livedata.ActionCenterInfo); }); SC.event.addGlobalHandler(SC.event.LiveDataRefreshed, function () { SC.css.ensureClass($(.NavigationPanel .TrayIconPanel .ActionCenter), NonEmpty, SC.util.any(SC.livedata.getResponseInfo(SC.livedata.ActionCenterInfo).ActionItems)); }); SC.event.addGlobalHandler(keydown, function (eventArgs) { if (SC.event.doesKeyEventIndicateTextEntryOrArrowKeyNavigation(eventArgs) && (!document.activeElement || SC.ui.isDefinitelyNotTextEntryElement(document.activeElement))) { var arrowKeyInfo SC.event.getArrowKeyInfo(eventArgs); if (arrowKeyInfo && document.activeElement && SC.css.containsClass(document.activeElement, ArrowNavigation)) { eventArgs.preventDefault(); SC.ui.setHiddenFocusAndClearOthers(); var targetPreviousOrNext arrowKeyInfo.isLeft || arrowKeyInfo.isUp; SC.event.dispatchEvent(document.activeElement, SC.event.KeyNavigation, { currentActiveElement: document.activeElement, currentSelectedElement: SC.ui.findDescendantBreadthFirst(document.activeElement, function (_) { return SC.ui.isSelected(_); }, !targetPreviousOrNext), targetPreviousOrNext: targetPreviousOrNext, arrowKeyInfo: arrowKeyInfo, hasShift: eventArgs.shiftKey, }); } else { var queryTextEntryElementArgs SC.event.dispatchGlobalEvent(SC.event.QueryTextEntryElement, { textEntryElement: null, }); if (queryTextEntryElementArgs.textEntryElement) { if (!SC.event.doesKeyEventIndicateTextEntryNavigation(eventArgs)) queryTextEntryElementArgs.textEntryElement.value ; queryTextEntryElementArgs.textEntryElement.focus(); } } } }); SC.event.addGlobalHandler(SC.event.KeyNavigation, function (eventArgs) { // default handling for key navigation var elementToNavigateTo; if (eventArgs.currentSelectedElement) { elementToNavigateTo SC.ui.getPreviousOrNextElementSibling(eventArgs.currentSelectedElement, eventArgs.targetPreviousOrNext) || eventArgs.currentSelectedElement; while (SC.util.isNullOrEmpty(elementToNavigateTo._commandName) && SC.ui.getPreviousOrNextElementSibling(elementToNavigateTo, eventArgs.targetPreviousOrNext)) { elementToNavigateTo SC.ui.getPreviousOrNextElementSibling(elementToNavigateTo, eventArgs.targetPreviousOrNext); } } else { elementToNavigateTo SC.ui.findDescendantBreadthFirst(eventArgs.currentActiveElement, function (_) { return !SC.util.isNullOrEmpty(_._commandName); }); // this can still be empty } SC.util.tryNavigateToElementUsingCommand(elementToNavigateTo, eventArgs.targetPreviousOrNext, eventArgs.hasShift); }); SC.event.addGlobalHandler(SC.event.PreRender, function () { var resetInactivityProc function () { window._lastNotifyActivityTime new Date().getTime(); if (SC.context.isUserAuthenticated && SC.context.loginAfterInactivityMilliseconds ! 0) { if (window._loginAfterInactivityTimer) window.clearTimeout(window._loginAfterInactivityTimer); window._loginAfterInactivityTimer window.setTimeout(function () { SC.util.sendToLogin(SC.types.LoginReason.IdleTooLong, true); }, Math.min(SC.context.loginAfterInactivityMilliseconds, 2147483647)); //interval stored as 32-bit signed int } }; SC.context.prehandleServiceFailureProc function (error) { if (error.statusCode ! 403) return false; SC.util.sendToLogin(SC.types.LoginReason.PermissionsInsufficient, true); } SC.context.unhandledServiceFailureProc function (error) { SC.dialog.showModalErrorBox(error.detail || error.message); } resetInactivityProc(); SC.ui.initializeWindowActivityTracking(function () { if (new Date().getTime() - window._lastNotifyActivityTime > SC.context.notifyActivityFrequencyMilliseconds) { resetInactivityProc(); SC.service.NotifyActivity(); } }); var parameterlessUrl SC.util.getParameterlessUrl(window.location.href); var createNavigationLinkFunc function (_) { return $div({ _commandName: Navigate, _commandArgument: _.href, _selected: _.href parameterlessUrl }, $img({ src: _.imageUrl }), $span(_.text), ); }; SC.ui.setContents($(.HeaderPanel), $a({ href: SC.context.guestPageUrl, className: LogoIconLink }), $a({ _commandName: ToggleMenu, className: ShowMenuButton }, ), $h1({ className: LogoPanel }), $div({ className: CommandPanel }), ); SC.command.queryAndAddCommandButtons($(.HeaderPanel .CommandPanel), ToolsPanel); SC.command.updateCommandButtonsState($(.HeaderPanel .CommandPanel)); var queryNavigationLinksEventArgs SC.event.dispatchGlobalEvent(SC.event.QueryNavigationLinks, { navigationLinks: }) SC.ui.setContents($(.NavigationPanel), queryNavigationLinksEventArgs.navigationLinks.map(createNavigationLinkFunc), $div({ className: FlexSpacer }), $div({ className: TrayPanelContainer }, $div({ className: TrayIconPanel }), $div({ className: UserMenuButton, _commandName: User }, $span(SC.context.userDisplayName null ? : SC.context.userDisplayName.toUpperCase()0), $span(SC.context.userDisplayName) ), ), ); SC.command.queryAndAddCommandButtons($(.NavigationPanel .TrayIconPanel), TrayIconPanel, null, { descriptionRenderStyle: SC.command.DescriptionRenderStyle.Tooltip }); SC.command.updateCommandButtonsState($(.NavigationPanel .TrayIconPanel)); var setSelectedFunc function () { $$(.NavigationPanel > div) .filter(function (_) { return !SC.util.isNullOrEmpty(_._commandArgument); }) .forEach(function (_) { SC.ui.setSelected(_, window.location.href.startsWith(_._commandArgument)); }); }; SC.event.addHandler(window, hashchange, setSelectedFunc); setSelectedFunc(); SC.livedata.startLoop(); }); var isTouchEnabled (typeof document.documentElement.ontouchstart ! undefined); SC.css.ensureClass(document.documentElement, TouchEnabled, isTouchEnabled); SC.css.ensureClass(document.documentElement, TouchDisabled, !isTouchEnabled); SC.css.ensureClass(document.documentElement, UserAuthenticated, SC.context.isUserAuthenticated); SC.css.ensureClass(document.documentElement, NativeClient, SC.util.isCapable(SC.util.Caps.NativeClient)); SC.css.ensureClass(document.documentElement, HasMasterPanel, $(.MasterPanel)); SC.css.ensureClass(document.documentElement, LogoImageVisible, SC.util.getBooleanResource(LogoPanel.ImageVisible)); SC.css.ensureClass(document.documentElement, LogoIconVisible, SC.util.getBooleanResource(LogoPanel.IconVisible)); SC.css.ensureClass(document.documentElement, LogoHeadingVisible, SC.util.getBooleanResource(LogoPanel.HeadingVisible)); SC.css.ensureClass(document.documentElement, AnimationReduced, SC.util.getBooleanResource(Page.AnimationReduced)); SC.css.ensureClass(document.documentElement, SC.context.pageType, true); SC.extension.initializeExtensions(); SC.event.dispatchGlobalEvent(SC.event.PreRender); SC.util.recordLifeCycleEvent(SC.event.PreRender); SC.ui.setVisible(document.body, true); SC.event.dispatchGlobalEvent(SC.event.PostRender); SC.util.recordLifeCycleEvent(SC.event.PostRender); $$(*tabIndex).forEach(function (_) { SC.event.addHandler(_, mousedown, function () { SC.ui.setHiddenFocusAndClearOthers(_); }); }); if (SC.context.focusedControlID) $(SC.context.focusedControlID).focus(); else if (document.activeElement document.body) { $(.NavigationPanel).focus(); SC.ui.setHiddenFocusAndClearOthers($(.NavigationPanel)); } /script>/body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]