') { try{ var xmlDoc = xmlParser.parseFromString(xmlString,'text/xml'); var xmlSettings = xmlDoc.getElementsByTagName('setting'); for (var i = 0; i < xmlSettings.length; i++) { settings[xmlSettings[i].getAttribute('name').trim()] = xmlSettings[i].textContent.trim(); } } catch (err) { alertModal(SC.res['Extension.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.res['Extension.EditAppConfig.InvalidDefaultsCode'] + '\n\n' + err); }; // This semicolon is NOT un-necessary... Javascript Try/Catch won't run the catch code in some browsers without it. for (var key in newDefaults) { if (key=='DEFAULTS') continue; defaults[key] = newDefaults[key]; } if ('DEFAULTS' in newDefaults) { for (var mask in newDefaults.DEFAULTS.SCBitmaskDefaults) { masks[mask] = newDefaults.DEFAULTS.SCBitmaskDefaults[mask]; } } if (Object.keys(newDefaults).length) usingCustomDefaults = true; } var enableAdvancedBitmaskEditor = extensionContext.settingValues.UseEasyBitmaskEditor == 'true'; var enableCommandsSelector = extensionContext.settingValues.UseCommandsSelector == 'true'; var instructions = SC.res['Extension.EditAppConfig.DialogInstructions'] + (usingCustomDefaults ? '\n' + SC.res['Extension.EditAppConfig.CustomDefaultsInstructionNote'] : ''); SC.dialog.showModalButtonDialog( 'EditAppConfigSettings', SC.res['Extension.EditAppConfig.DialogTitle'], SC.res['Extension.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.res['Extension.EditAppConfig.AppConfigSettingsLinkHref'],target:'_blank', _innerText:SC.res['Extension.EditAppConfig.AppConfigSettingsLinkText']}); var AppConfigMacHelpLink = SC.ui.createElement('A',{href:SC.res['Extension.EditAppConfig.AppConfigSettingsLinkHrefForMac'],target:'_blank', _innerText:SC.res['Extension.EditAppConfig.AppConfigSettingsLinkTextMacLinux']}); var AppConfigDownloadLink = SC.ui.createElement('A',{download:'app.config',href:dataUri,_innerText:SC.res['Extension.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.res['Extension.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.res['Extension.EditAppConfig.KeyColumnTitle']}); SC.ui.addElement(settingsHeaderRow,'th',{_innerText:SC.res['Extension.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.res['Extension.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(defaults[key].ver,serverVersion)) { continue; } if (defaults[key].removed && checkVersion(defaults[key].removed,serverVersion)) { continue; } var keyDV = getValueSetForMaxVersion(defaults[key].dv,serverVersion); var keyValue = (key in settings && !eventArgs.loadDefaults) ? settings[key] : keyDV; var keyType = defaults[key].type; var keyValueEditor = ''; var valueTip = SC.util.formatString(SC.res['Extension.EditAppConfig.CurrentValueString'],keyValue) + '\n' + SC.util.formatString(SC.res['Extension.EditAppConfig.DefaultValueString'],keyDV); var keySide = defaults[key].side; var keySideText = ''; switch(keySide){ case 'Guest': keySideText = SC.util.formatString(SC.res['Extension.EditAppConfig.AppliesTo.Format'], SC.res['Extension.EditAppConfig.AppliesTo.GuestText']) + '\n'; break; case 'Host': keySideText = SC.util.formatString(SC.res['Extension.EditAppConfig.AppliesTo.Format'], SC.res['Extension.EditAppConfig.AppliesTo.HostText']) + '\n'; break; case 'Host and Guest': keySideText = SC.util.formatString(SC.res['Extension.EditAppConfig.AppliesTo.Format'], SC.res['Extension.EditAppConfig.AppliesTo.BothText']) + '\n'; break; } var keyTip = defaults[key].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 defaults[key].commands){ if (!checkVersion(defaults[key].commands[each].ver,serverVersion)) { continue; } if (defaults[key].commands[each].removed && checkVersion(defaults[key].commands[each].removed,serverVersion)) { continue; } var commandOption = SC.ui.createElement('OPTION',{value:each,text:each,title:defaults[key].commands[each].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(masks[mask].ver,serverVersion)) { continue; } if (masks[mask].removed && checkVersion(masks[mask].removed,serverVersion)) { continue; } var varCheck = SC.ui.createElement('INPUT',{type:'checkbox',id:key + mask,mask:mask,initChecked:false,keyType:'bitmask',className:'appConfigBitmaskValue',title:masks[mask].tip}); var bitMaskChecked = false; if (checkLongBitmask(keyValue,masks[mask].mask)){ varCheck.checked = true; varCheck.initChecked = true; bitMaskChecked = true; } var bitmaskLabel = SC.ui.createElement('LABEL',{_innerText:mask,className:'appConfigBitmaskValue',title:masks[mask].tip}); if (checkLongBitmask(keyDV,masks[mask].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 defaults[key].options){ if (checkVersion(oset,serverVersion) && checkVersion(maxOptVer,oset)) { maxOptVer = oset; } } if (maxOptVer == '0') { continue; } for (var opt in defaults[key].options[maxOptVer]){ var selectionOption = SC.ui.createElement('OPTION',{id:key+'-'+opt,value:defaults[key].options[maxOptVer][opt],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 defaults[key].constraints) { if (!checkVersion(cset,serverVersion)) { continue; } for (var constraint in defaults[key].constraints[cset]) { keyValueEditor[constraint] = defaults[key].constraints[cset][constraint]; } } 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(/(^0x[0-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(defaults[key].ver,serverVersion)) { continue; } var newValue = $(key).value; var defaultValue = getValueSetForMaxVersion(defaults[key].dv,serverVersion);; var oldValue = (key in settings) ? settings[key] : 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).options[i].selected) { if (saveValue !== ''){ saveValue = saveValue + ','; } saveValue = saveValue + $(key).options[i].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 x=0; x -1;}),{message:SC.res['Extension.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.extensionId=extensionContext.baseUrl.split('/').slice(-2)[0]; SC.res['HelpPanel.Link'+extendedExtensionOptions.extensionId+'.Url']=extendedExtensionOptions.helpUrl; SC.event.addGlobalHandler(SC.event.QueryCommandButtonState,function(eventArgs){ if(eventArgs.commandName=='EditExtensionSettings'&&eventArgs.commandContext.extensionInfo.ExtensionID==extendedExtensionOptions.extensionId&&eventArgs.commandElement._commandName=='EditExtensionSettings'){ if(extendedExtensionOptions.extensionResourceID&&extendedExtensionOptions.extensionResourceID.length) SC.ui.addElement(eventArgs.target.parentElement,'A',{_commandName:'command_'+extensionId,_innerText:SC.res['Extension.'+extendedExtensionOptions.extensionResourceID+'.CommandText']}); SC.ui.addElement(eventArgs.target.parentElement,'A',{_commandName:'NavigateHelpLink',_commandArgument:extendedExtensionOptions.extensionId,_innerText:SC.res['Command.Help.Text'].replace(' ▽','')}); } }); /******************************/ });--> elitech IT services