Repository navigation
Expand file tree
/
Copy pathmain.js
More file actions
1 lines (1 loc) · 5.88 KB
/
Copy pathmain.js
File metadata and controls
1 lines (1 loc) · 5.88 KB
1
define(function(require,exports,module){const SystemConfigOverride=require("utils/SystemConfigOverride"),AppInit=require("utils/AppInit"),StatusBar=require("widgets/StatusBar"),CommandManager=require("command/CommandManager"),Dialogs=require("widgets/Dialogs"),Strings=require("strings"),Mustache=require("thirdparty/mustache/mustache"),PhoenixBuilderClient=require("./phoenix-builder-client"),BuilderConnectTemplate=require("text!./builder-connect-dialog.html"),PROD_OVERRIDE_DATE_KEY="prodMCPOverrideDate",STATUS_INDICATOR_ID="status-mcp-controlled",BUILDER_ENABLED_KEY="phoenixBuilderEnabled";function _refreshProdInstrumentationPermission(){const managesEnabledFlag="dev"!==AppConfig.config.environment;SystemConfigOverride.getOverrides().then(function(overrides){const date=overrides&&overrides[PROD_OVERRIDE_DATE_KEY];date?(localStorage.setItem(PROD_OVERRIDE_DATE_KEY,date),managesEnabledFlag&&localStorage.setItem(BUILDER_ENABLED_KEY,"true")):(localStorage.removeItem(PROD_OVERRIDE_DATE_KEY),managesEnabledFlag&&localStorage.removeItem(BUILDER_ENABLED_KEY))}).catch(function(err){localStorage.removeItem(PROD_OVERRIDE_DATE_KEY),managesEnabledFlag&&localStorage.removeItem(BUILDER_ENABLED_KEY),console.error("Could not read the system config override",err)})}function _watchInstrumentationState(){if("dev"===AppConfig.config.environment)return;const boot=window._phoenixBuilder;if(!boot||!boot.setConnectionListener)return;const $indicator=$("<div></div>").text(Strings.STATUSBAR_MCP_CONTROLLED);let shown=!1;boot.setConnectionListener(function(connected){connected&&!shown?(StatusBar.addIndicator(STATUS_INDICATOR_ID,$indicator,!0,"mcp-controlled-indicator",Strings.STATUSBAR_MCP_CONTROLLED_TOOLTIP),shown=!0):!connected&&shown&&(StatusBar.updateIndicator(STATUS_INDICATOR_ID,!1),shown=!1)})}if(AppInit.appReady(function(){_refreshProdInstrumentationPermission(),_watchInstrumentationState()}),!window.AppConfig||"dev"!==AppConfig.config.environment&&!window._phoenixBuilder)return;const COMMAND_ID="debug.phoenixBuilderConnect",DEFAULT_WS_URL="ws://localhost:38571",LEVEL_COLORS={error:"background:#f44336;color:white;",warn:"background:#ff9800;color:white;",info:"background:#2196f3;color:white;",log:"background:#9e9e9e;color:white;"};function _escapeHtml(str){return str.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function _renderLogs($dialog){const boot=window._phoenixBuilder,logs=boot?boot.getLogBuffer():[],$container=$dialog.find(".builder-log-container");if($container.empty(),$dialog.find(".builder-log-count").text(logs.length+" entries"),0===logs.length)return void $container.html('<span style="opacity:0.5;">No logs captured yet.</span>');let html="";for(let i=0;i<logs.length;i++){const entry=logs[i],level=entry.level||"log",ts=entry.timestamp?entry.timestamp.replace("T"," ").replace("Z",""):"",badgeStyle=LEVEL_COLORS[level]||LEVEL_COLORS.log;html+='<div style="padding:2px 4px;border-bottom:1px solid rgba(128,128,128,0.15);"><span style="opacity:0.5;margin-right:6px;">'+_escapeHtml(ts)+'</span><span style="'+badgeStyle+'padding:1px 5px;border-radius:3px;font-size:11px;margin-right:6px;display:inline-block;min-width:36px;text-align:center;">'+level.toUpperCase()+"</span><span>"+_escapeHtml(entry.message)+"</span></div>"}$container.html(html),$container.scrollTop($container[0].scrollHeight)}function _handlePhoenixBuilderConnect(){let url=localStorage.getItem("phoenixBuilderWsUrl")||DEFAULT_WS_URL,enabled="true"===localStorage.getItem("phoenixBuilderEnabled");const overrideFile=Phoenix.isNativeApp?Phoenix.fs.getTauriPlatformPath(SystemConfigOverride.OVERRIDE_FILE_PATH):null,overrideDir=overrideFile?overrideFile.replace(/[/\\][^/\\]+$/,""):"",now=new Date,today=now.getFullYear()+"-"+String(now.getMonth()+1).padStart(2,"0")+"-"+String(now.getDate()).padStart(2,"0"),isWin="win"===Phoenix.platform,grantCommand=isWin?'mkdir "'+overrideDir+'" & echo {"'+PROD_OVERRIDE_DATE_KEY+'": "'+today+'"} > "'+overrideFile+'"':'sudo mkdir -p "'+overrideDir+'" && echo \'{"'+PROD_OVERRIDE_DATE_KEY+'": "'+today+'"}\' | sudo tee "'+overrideFile+'"',revokeCommand=isWin?'del "'+overrideFile+'"':'sudo rm "'+overrideFile+'"',templateVars={url:url,enabled:enabled,connected:PhoenixBuilderClient.isConnected(),instanceName:PhoenixBuilderClient.getInstanceName(),mcpOverrideFile:overrideFile,mcpToday:today,mcpGrantCommand:grantCommand,mcpRevokeCommand:revokeCommand},template=Mustache.render(BuilderConnectTemplate,templateVars);Dialogs.showModalDialogUsingTemplate(template).done(function(id){id===Dialogs.DIALOG_BTN_OK&&(localStorage.setItem("phoenixBuilderWsUrl",url),localStorage.setItem("phoenixBuilderEnabled",enabled?"true":"false"),enabled?PhoenixBuilderClient.connect(url):(PhoenixBuilderClient.disconnect(),localStorage.removeItem("logToConsole")))});const $dialog=$(".phoenix-builder-connect.instance");$dialog.find(".builder-url").on("input",function(){url=$(this).val()}),$dialog.find(".builder-enable").on("change",function(){enabled=$(this).is(":checked")}),$dialog.find(".builder-config-code").on("click",function(){Phoenix.app.copyToClipboard($(this).text());const $pre=$(this),$copied=$('<span style="position:absolute;right:8px;top:8px;padding:2px 8px;border-radius:3px;font-size:12px;background:var(--accent-color);color:white;pointer-events:none;">Copied!</span>');$pre.css("position","relative").append($copied),setTimeout(function(){$copied.remove()},1e3)}),$dialog.find('.nav-tabs a[data-toggle="tab"]').on("click",function(e){e.preventDefault();const $this=$(this),target=$this.attr("href");$dialog.find(".nav-tabs li").removeClass("active"),$this.parent().addClass("active"),$dialog.find(".tab-pane").removeClass("active"),$dialog.find(target).addClass("active"),"#builder-logs"===target&&_renderLogs($dialog)}),$dialog.find(".builder-log-refresh").on("click",function(){_renderLogs($dialog)})}CommandManager.register(Strings.CMD_PHOENIX_BUILDER_CONNECT,COMMAND_ID,_handlePhoenixBuilderConnect,{supportsDesignMode:!0}),exports.COMMAND_ID=COMMAND_ID});