@profoundlogic/coderflow-server 0.5.4 → 0.5.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/coder-server.js +1 -1
- package/dist/config.js +1 -1
- package/dist/lib/agent-keepalive.js +1 -1
- package/dist/lib/agent-models.js +1 -1
- package/dist/lib/api-keys.js +1 -1
- package/dist/lib/apiKeys.js +1 -1
- package/dist/lib/app-server-ports.js +1 -1
- package/dist/lib/auto-judge.js +1 -1
- package/dist/lib/automation-service.js +1 -1
- package/dist/lib/basic-auth.js +1 -1
- package/dist/lib/bindings.js +1 -1
- package/dist/lib/build-history.js +1 -1
- package/dist/lib/build-output-service.js +1 -1
- package/dist/lib/build-scheduler.js +1 -1
- package/dist/lib/build-service.js +1 -1
- package/dist/lib/ca-certificates.js +1 -1
- package/dist/lib/claude-oauth-refresh.js +1 -1
- package/dist/lib/cli/build.js +1 -1
- package/dist/lib/cli/cleanup-users.js +1 -1
- package/dist/lib/cli/config-command.js +1 -1
- package/dist/lib/cli/config.js +1 -1
- package/dist/lib/cli/create-user.js +1 -1
- package/dist/lib/cli/grant-admin.js +1 -1
- package/dist/lib/cli/init.js +1 -1
- package/dist/lib/cli/jira.js +1 -1
- package/dist/lib/cli/license.js +1 -1
- package/dist/lib/cli/list-roles.js +1 -1
- package/dist/lib/cli/list-users.js +1 -1
- package/dist/lib/cli/server-manager.js +1 -1
- package/dist/lib/cli/set-password.js +1 -1
- package/dist/lib/config-migration.js +1 -1
- package/dist/lib/container-credential-sync.js +1 -1
- package/dist/lib/container-tokens.js +1 -1
- package/dist/lib/data-dir.js +1 -1
- package/dist/lib/deployment-history.js +1 -1
- package/dist/lib/deployment-service.js +1 -1
- package/dist/lib/docker-utils.js +1 -1
- package/dist/lib/email.js +1 -1
- package/dist/lib/emailTemplates.js +1 -1
- package/dist/lib/entitlement.js +1 -1
- package/dist/lib/external-connections.js +1 -1
- package/dist/lib/fetch-utils.js +1 -1
- package/dist/lib/git-commit-details-route.js +1 -1
- package/dist/lib/git-history-diff-guardrails.js +1 -1
- package/dist/lib/git-provider-service.js +1 -1
- package/dist/lib/git-provider-setup/github-setup-handler.js +1 -1
- package/dist/lib/git-provider-setup/index.js +1 -1
- package/dist/lib/git-provider-setup/setup-factory.js +1 -1
- package/dist/lib/git-provider-setup/setup-interface.js +1 -1
- package/dist/lib/git-providers/azure-devops-provider.js +1 -1
- package/dist/lib/git-providers/github-app-provider.js +1 -1
- package/dist/lib/git-providers/index.js +1 -1
- package/dist/lib/git-providers/provider-factory.js +1 -1
- package/dist/lib/git-providers/provider-interface.js +1 -1
- package/dist/lib/github-urls.js +1 -1
- package/dist/lib/group-objective-linking.js +1 -1
- package/dist/lib/ibmi-sync.js +1 -1
- package/dist/lib/jira-client.js +1 -1
- package/dist/lib/judge-blinding.js +1 -1
- package/dist/lib/logger.js +1 -1
- package/dist/lib/migration-to-scoped-rbac.js +1 -1
- package/dist/lib/model-fetcher.js +1 -1
- package/dist/lib/notifications.js +1 -1
- package/dist/lib/objective-context.js +1 -1
- package/dist/lib/oidc-auth.js +1 -1
- package/dist/lib/oidc-device-flow.js +1 -1
- package/dist/lib/passwordTokens.js +1 -1
- package/dist/lib/permission-resolver.js +1 -1
- package/dist/lib/pin-cascade.js +1 -1
- package/dist/lib/provider-accounts.js +1 -1
- package/dist/lib/provider-oauth.js +1 -1
- package/dist/lib/provider-profile.js +1 -1
- package/dist/lib/provider-token-refresh.js +1 -1
- package/dist/lib/rbac-user-state.js +1 -1
- package/dist/lib/request-url.js +1 -1
- package/dist/lib/rewind.js +1 -1
- package/dist/lib/role-definitions.js +1 -1
- package/dist/lib/roles.js +1 -1
- package/dist/lib/secrets.js +1 -1
- package/dist/lib/setup-repo-git-auth.js +1 -1
- package/dist/lib/state-capture.js +1 -1
- package/dist/lib/static-files.js +1 -1
- package/dist/lib/task-name-format.js +1 -1
- package/dist/lib/task-name-generator.js +1 -1
- package/dist/lib/task-source-metadata.js +1 -1
- package/dist/lib/teams.js +1 -1
- package/dist/lib/user-git-oauth.js +1 -1
- package/dist/lib/user-git-tokens.js +1 -1
- package/dist/lib/users.js +1 -1
- package/dist/middleware/requireAuth.js +1 -1
- package/dist/middleware/requireInit.js +1 -1
- package/dist/middleware/requirePermission.js +1 -1
- package/dist/package.json +1 -1
- package/dist/playwright.config.js +1 -1
- package/dist/routes/apiKeys.js +1 -1
- package/dist/routes/auth-oidc.js +1 -1
- package/dist/routes/auth.js +1 -1
- package/dist/routes/automations.js +1 -1
- package/dist/routes/bindings.js +1 -1
- package/dist/routes/build.js +1 -1
- package/dist/routes/containers.js +1 -1
- package/dist/routes/deploy-task.js +1 -1
- package/dist/routes/environment-management.js +1 -1
- package/dist/routes/environments.js +1 -1
- package/dist/routes/external-skills.js +1 -1
- package/dist/routes/git-credentials.js +1 -1
- package/dist/routes/git-oauth.js +1 -1
- package/dist/routes/git-provider-setup.js +1 -1
- package/dist/routes/health.js +1 -1
- package/dist/routes/jira.js +1 -1
- package/dist/routes/objective-management.js +1 -1
- package/dist/routes/password.js +1 -1
- package/dist/routes/prompt.js +1 -1
- package/dist/routes/provider-auth.js +1 -1
- package/dist/routes/qa.js +1 -1
- package/dist/routes/roles.js +1 -1
- package/dist/routes/settings.js +1 -1
- package/dist/routes/skill-management.js +1 -1
- package/dist/routes/skills.js +1 -1
- package/dist/routes/tasks.js +1 -1
- package/dist/routes/teams.js +1 -1
- package/dist/routes/templates.js +1 -1
- package/dist/routes/test-task.js +1 -1
- package/dist/routes/test.js +1 -1
- package/dist/routes/users.js +1 -1
- package/dist/routes/visualizations.js +1 -1
- package/dist/scripts/create-user.js +1 -1
- package/dist/scripts/migrate-config-to-data-dir.js +1 -1
- package/dist/start.js +1 -1
- package/dist/web-ui/public/activity-detail-modal.js +1 -1
- package/dist/web-ui/public/activity-feed.js +1 -1
- package/dist/web-ui/public/activity-formatters.js +1 -1
- package/dist/web-ui/public/agent-event-parser.js +1 -1
- package/dist/web-ui/public/app.js +1 -1
- package/dist/web-ui/public/approve-dialog.js +1 -1
- package/dist/web-ui/public/automation-links.js +1 -1
- package/dist/web-ui/public/automation-schedule.js +1 -1
- package/dist/web-ui/public/comments-widget.js +1 -1
- package/dist/web-ui/public/diff-utils.js +1 -1
- package/dist/web-ui/public/environments.js +1 -1
- package/dist/web-ui/public/feedback-widget.css +409 -0
- package/dist/web-ui/public/feedback-widget.js +1 -1
- package/dist/web-ui/public/git-history-lazy-utils.js +1 -1
- package/dist/web-ui/public/git-history.js +1 -1
- package/dist/web-ui/public/git-status.js +1 -1
- package/dist/web-ui/public/index.js +1 -1
- package/dist/web-ui/public/login.js +1 -1
- package/dist/web-ui/public/markdown-editor.js +1 -1
- package/dist/web-ui/public/markdown-file-editor.js +1 -1
- package/dist/web-ui/public/modal-maximize.js +1 -1
- package/dist/web-ui/public/notifications.js +1 -1
- package/dist/web-ui/public/pr-dialog.js +1 -1
- package/dist/web-ui/public/roles.js +1 -1
- package/dist/web-ui/public/server-health.js +1 -1
- package/dist/web-ui/public/settings.js +1 -1
- package/dist/web-ui/public/setup-password.js +1 -1
- package/dist/web-ui/public/skills.js +1 -1
- package/dist/web-ui/public/sse-client.js +1 -1
- package/dist/web-ui/public/sse-shared-worker.js +1 -1
- package/dist/web-ui/public/styles.css +2975 -2022
- package/dist/web-ui/public/task.html +98 -2
- package/dist/web-ui/public/task.js +1 -1
- package/dist/web-ui/public/teams.js +1 -1
- package/dist/web-ui/public/terminal.js +1 -1
- package/dist/web-ui/public/theme.js +1 -1
- package/dist/web-ui/public/users.js +1 -1
- package/dist/web-ui/public/variant-grouping.js +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
export const DEFAULT_LAZY_RENDER_MIN_FILES=0xc8;export const DEFAULT_LAZY_RENDER_MAX_FILES=0x3e7;export const DEFAULT_LAZY_RENDER_CHUNK_SIZE=0x28;export const DEFAULT_AUTO_COLLAPSE_MIN_FILES=0xc8;export function getLazyRenderUpperBound({maxFiles:maxFiles=DEFAULT_LAZY_RENDER_MAX_FILES,serverMaxFiles:serverMaxFiles=null}={}){if(!Number['isFinite'](serverMaxFiles))return maxFiles;return Math['min'](maxFiles,serverMaxFiles);}export function shouldUseLazyRendering(
|
|
1
|
+
export const DEFAULT_LAZY_RENDER_MIN_FILES=0xc8;export const DEFAULT_LAZY_RENDER_MAX_FILES=0x3e7;export const DEFAULT_LAZY_RENDER_CHUNK_SIZE=0x28;export const DEFAULT_AUTO_COLLAPSE_MIN_FILES=0xc8;export function getLazyRenderUpperBound({maxFiles:maxFiles=DEFAULT_LAZY_RENDER_MAX_FILES,serverMaxFiles:serverMaxFiles=null}={}){if(!Number['isFinite'](serverMaxFiles))return maxFiles;return Math['min'](maxFiles,serverMaxFiles);}export function shouldUseLazyRendering(_0x3f146f,{minFiles:minFiles=DEFAULT_LAZY_RENDER_MIN_FILES,maxFiles:maxFiles=DEFAULT_LAZY_RENDER_MAX_FILES,serverMaxFiles:serverMaxFiles=null}={}){const _0xf6dcf1=getLazyRenderUpperBound({'maxFiles':maxFiles,'serverMaxFiles':serverMaxFiles});return _0x3f146f>=minFiles&&_0x3f146f<=_0xf6dcf1;}export function shouldAutoCollapseDiff(_0x85c584,{threshold:threshold=DEFAULT_AUTO_COLLAPSE_MIN_FILES}={}){return _0x85c584>=threshold;}export function getNextRenderedCount({renderedCount:_0x5e7077,totalFiles:_0x12f129,chunkSize:chunkSize=DEFAULT_LAZY_RENDER_CHUNK_SIZE}){return Math['min'](_0x5e7077+chunkSize,_0x12f129);}export function renderedCountForTarget({renderedCount:_0x4c15e9,targetIndex:_0x2c5b1e,totalFiles:_0x56c88d,chunkSize:chunkSize=DEFAULT_LAZY_RENDER_CHUNK_SIZE}){let _0x4a01e1=_0x4c15e9;while(_0x4a01e1<=_0x2c5b1e&&_0x4a01e1<_0x56c88d){_0x4a01e1=getNextRenderedCount({'renderedCount':_0x4a01e1,'totalFiles':_0x56c88d,'chunkSize':chunkSize});}return _0x4a01e1;}export function getLazyLoadMoreText({filesLength:_0x1423a3,renderedCount:_0x47db42,chunkSize:_0x4017dd}){const _0x12c38b=Math['max'](0x0,_0x1423a3-_0x47db42),_0x197738=Math['min'](_0x4017dd,_0x12c38b);return'Load\x20'+_0x197738['toLocaleString']()+'\x20more\x20files\x20('+_0x47db42['toLocaleString']()+'\x20/\x20'+_0x1423a3['toLocaleString']()+')';}export function getFileNameFromDiffFile(_0x15789c){return _0x15789c?.['newPath']||_0x15789c?.['oldPath']||'';}export function buildCollapsedStateUpdates({files:_0x2a317e,collapsed:_0x3086b0,storageKeyPrefix:_0x2f5454,getStorageKey:_0x45d250}){const _0x2f9cdd=[];for(const _0x5c9dbf of _0x2a317e||[]){const _0x57abc1=getFileNameFromDiffFile(_0x5c9dbf);if(!_0x57abc1)continue;_0x2f9cdd['push']({'key':_0x45d250(_0x2f5454,_0x57abc1),'value':String(_0x3086b0),'fileName':_0x57abc1});}return _0x2f9cdd;}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{API,Utils,CustomSelect,ConfirmDialog,initializeAdminMenu}from'./app.js';import{initTheme,mountThemeToggle}from'./theme.js';import{DEFAULT_LAZY_RENDER_MIN_FILES,DEFAULT_LAZY_RENDER_MAX_FILES,DEFAULT_LAZY_RENDER_CHUNK_SIZE,DEFAULT_AUTO_COLLAPSE_MIN_FILES,shouldUseLazyRendering as _0x326cfe,shouldAutoCollapseDiff as _0x44e5b4,getNextRenderedCount,renderedCountForTarget,getLazyLoadMoreText as _0x2cc6c5,buildCollapsedStateUpdates}from'./git-history-lazy-utils.js';const state={'environments':[],'repos':[],'branches':[],'selectedEnvironment':'','selectedRepo':'','selectedBranch':'','commits':[],'selectedCommit':null,'commitDetail':null,'activeBranch':'','diffView':localStorage['getItem']('git-history-diff-view')||'unified','pagination':{'limit':0x19,'offset':0x0,'hasMore':![],'search':''},'loadingHistory':![],'loadingCommit':![],'loadingBranches':![],'dataSource':'local','diffRender':null},elements={},SEARCH_DEBOUNCE_MS=0x12c,LAZY_RENDER_MIN_FILES=DEFAULT_LAZY_RENDER_MIN_FILES,LAZY_RENDER_MAX_FILES=DEFAULT_LAZY_RENDER_MAX_FILES,LAZY_RENDER_CHUNK_SIZE=DEFAULT_LAZY_RENDER_CHUNK_SIZE,AUTO_COLLAPSE_MIN_FILES=DEFAULT_AUTO_COLLAPSE_MIN_FILES;let searchTimer=null;const OPEN_NEW_TAB_STORAGE_KEY='open-tasks-in-new-tab',branchCache=new Map(),BRANCH_CACHE_TTL_MS=0x5*0x3c*0x3e8;document['addEventListener']('DOMContentLoaded',initialize);async function initialize(){try{initTheme(),mountThemeToggle(),ConfirmDialog['init'](),Object['assign'](elements,{'loading':document['getElementById']('git-history-loading'),'error':document['getElementById']('git-history-error'),'errorMessage':document['getElementById']('git-history-error-message'),'retryBtn':document['getElementById']('retry-git-history-btn'),'content':document['getElementById']('git-history-content'),'envSelect':document['getElementById']('env-select'),'repoSelect':document['getElementById']('repo-select'),'branchSelect':document['getElementById']('branch-select'),'commitList':document['getElementById']('commit-list'),'commitCount':document['getElementById']('commit-count'),'prevBtn':document['getElementById']('prev-page-btn'),'nextBtn':document['getElementById']('next-page-btn'),'searchInput':document['getElementById']('commit-search'),'clearSearchBtn':document['getElementById']('clear-search-btn'),'branchPill':document['getElementById']('repo-branch-pill'),'branchName':document['getElementById']('repo-branch-name'),'placeholder':document['getElementById']('commit-placeholder'),'detailPanel':document['getElementById']('commit-detail'),'commitMessage':document['getElementById']('commit-message'),'commitAuthor':document['getElementById']('commit-author'),'commitDate':document['getElementById']('commit-date'),'commitHash':document['getElementById']('commit-hash'),'copyHashBtn':document['getElementById']('copy-hash-btn'),'viewOnProviderBtn':document['getElementById']('view-on-provider-btn'),'revertBtn':document['getElementById']('revert-btn'),'diffStats':document['getElementById']('diff-stats'),'diffContainer':document['getElementById']('commit-diff'),'expandAllBtn':document['getElementById']('expand-all-btn'),'collapseAllBtn':document['getElementById']('collapse-all-btn'),'mergeControls':document['getElementById']('merge-controls'),'mainlineSelect':document['getElementById']('mainline-select'),'fileNavToggle':document['getElementById']('file-nav-toggle'),'fileNavSidebar':document['getElementById']('file-nav-sidebar'),'fileNavList':document['getElementById']('file-nav-list'),'fileNavClose':document['getElementById']('file-nav-close'),'fileNavCount':document['getElementById']('file-nav-count'),'maximizeBtn':document['getElementById']('maximize-diff-btn'),'gitHistoryBody':document['querySelector']('.git-history-body')});const _0x8120c9=await checkAccess();await initializeAdminMenu(_0x8120c9),setupEventListeners(),initializeDiffViewToggle(),await loadEnvironments(),elements['loading']['hidden']=!![],elements['content']['hidden']=![];}catch(_0x5428d8){console['error']('Git\x20history\x20initialization\x20error:',_0x5428d8),elements['loading']['hidden']=!![],elements['error']['hidden']=![],elements['errorMessage']['textContent']=_0x5428d8['message']||'Unknown\x20error';}}async function checkAccess(){try{const _0x92028c=await API['getCurrentUser'](),_0x2946c6=_0x92028c['hasEnvironmentGit']===!![];if(!_0x2946c6){Utils['showToast']('Access\x20denied:\x20Git\x20permissions\x20required','error'),setTimeout(()=>{window['location']['href']='index.html';},0x708);throw new Error('Access\x20denied');}return _0x92028c;}catch(_0x2395ec){_0x2395ec['message']!=='Access\x20denied'&&(window['location']['href']='login.html');throw _0x2395ec;}}function setupEventListeners(){elements['retryBtn']?.['addEventListener']('click',()=>window['location']['reload']()),elements['envSelect']?.['addEventListener']('change',handleEnvironmentChange),elements['repoSelect']?.['addEventListener']('change',handleRepoChange),elements['branchSelect']?.['addEventListener']('change',handleBranchChange),elements['prevBtn']?.['addEventListener']('click',()=>changePage(-0x1)),elements['nextBtn']?.['addEventListener']('click',()=>changePage(0x1)),elements['searchInput']?.['addEventListener']('input',handleSearchInput),elements['clearSearchBtn']?.['addEventListener']('click',clearSearch),elements['commitList']?.['addEventListener']('click',_0xe02974=>{const _0x1f916d=_0xe02974['target']['closest']('.commit-item');if(!_0x1f916d)return;selectCommit(_0x1f916d['dataset']['hash']);}),elements['copyHashBtn']?.['addEventListener']('click',handleCopyHash),elements['revertBtn']?.['addEventListener']('click',handleRevertCommit),elements['expandAllBtn']?.['addEventListener']('click',()=>setAllDiffCollapsed(![])),elements['collapseAllBtn']?.['addEventListener']('click',()=>setAllDiffCollapsed(!![])),elements['fileNavToggle']?.['addEventListener']('click',toggleFileNav),elements['fileNavClose']?.['addEventListener']('click',closeFileNav),document['addEventListener']('click',_0x2fe0cc=>{!_0x2fe0cc['target']['closest']('.file-nav-container')&&closeFileNav();}),elements['maximizeBtn']?.['addEventListener']('click',toggleMaximize),document['addEventListener']('keydown',handleKeyboardNavigation);}function handleKeyboardNavigation(_0x513c0b){if(_0x513c0b['target']['matches']('input,\x20select,\x20textarea'))return;const _0x5128e0=Array['from'](elements['commitList']?.['querySelectorAll']('.commit-item')||[]);if(_0x5128e0['length']===0x0)return;const _0x538729=_0x5128e0['findIndex'](_0x15e30c=>_0x15e30c['classList']['contains']('selected'));switch(_0x513c0b['key']){case'j':case'ArrowDown':{_0x513c0b['preventDefault']();const _0x3c4459=_0x538729<_0x5128e0['length']-0x1?_0x538729+0x1:_0x538729,_0x25c4d2=_0x5128e0[_0x3c4459]?.['dataset']['hash'];_0x25c4d2&&(selectCommit(_0x25c4d2),_0x5128e0[_0x3c4459]['scrollIntoView']({'block':'nearest','behavior':'smooth'}));break;}case'k':case'ArrowUp':{_0x513c0b['preventDefault']();const _0x3688b2=_0x538729>0x0?_0x538729-0x1:0x0,_0x2e1c10=_0x5128e0[_0x3688b2]?.['dataset']['hash'];_0x2e1c10&&(selectCommit(_0x2e1c10),_0x5128e0[_0x3688b2]['scrollIntoView']({'block':'nearest','behavior':'smooth'}));break;}case'Enter':{state['selectedCommit']&&elements['diffContainer']?.['focus']();break;}case'c':{state['commitDetail']?.['commit']?.['hash']&&handleCopyHash();break;}case'e':{setAllDiffCollapsed(![]);break;}case'w':{setAllDiffCollapsed(!![]);break;}case'/':{_0x513c0b['preventDefault'](),elements['searchInput']?.['focus']();break;}case'Escape':{if(elements['gitHistoryBody']?.['classList']['contains']('maximized'))toggleMaximize();else document['activeElement']===elements['searchInput']&&elements['searchInput']['blur']();break;}case'm':{state['commitDetail']&&toggleMaximize();break;}}}function initializeDiffViewToggle(){const _0x440874=Array['from'](document['querySelectorAll']('.segmented-btn'));_0x440874['forEach'](_0x3a2048=>{_0x3a2048['classList']['toggle']('active',_0x3a2048['dataset']['view']===state['diffView']),_0x3a2048['addEventListener']('click',()=>{if(_0x3a2048['dataset']['view']===state['diffView'])return;state['diffView']=_0x3a2048['dataset']['view'],localStorage['setItem']('git-history-diff-view',state['diffView']),_0x440874['forEach'](_0x2e20e9=>_0x2e20e9['classList']['toggle']('active',_0x2e20e9===_0x3a2048)),renderCommitDiff();});});}async function loadEnvironments(){const _0x282b86=await API['getEnvironments']();state['environments']=_0x282b86['environments']||[],elements['envSelect']['innerHTML']='<option\x20value=\x22\x22>Select\x20environment</option>',state['environments']['forEach'](_0xcc97b2=>{const _0x30684d=document['createElement']('option');_0x30684d['value']=_0xcc97b2['name'],_0x30684d['textContent']=_0xcc97b2['name'],elements['envSelect']['appendChild'](_0x30684d);}),new CustomSelect(elements['envSelect'],{'searchable':!![]}),new CustomSelect(elements['repoSelect'],{'searchable':!![]}),new CustomSelect(elements['branchSelect'],{'searchable':!![]});const _0x3421ef=_0x282b86['default_environment']||state['environments'][0x0]?.['name']||'';_0x3421ef&&(elements['envSelect']['value']=_0x3421ef,elements['envSelect']['dispatchEvent'](new Event('change')));}async function handleEnvironmentChange(){state['selectedEnvironment']=elements['envSelect']['value'],state['selectedRepo']='',state['selectedBranch']='',state['activeBranch']='',state['repos']=[],state['branches']=[],elements['repoSelect']['innerHTML']='<option\x20value=\x22\x22>Select\x20repository</option>',elements['repoSelect']['disabled']=!![],elements['branchSelect']['innerHTML']='<option\x20value=\x22\x22>Select\x20branch</option>',elements['branchSelect']['disabled']=!![],elements['branchPill']['hidden']=!![],elements['commitList']['innerHTML']='',elements['commitCount']['textContent']='Select\x20a\x20repository\x20to\x20load\x20history.',resetCommitDetail();if(!state['selectedEnvironment'])return;try{const _0x153f00=await API['getEnvironment'](state['selectedEnvironment']);state['repos']=_0x153f00['repos']||[],elements['repoSelect']['innerHTML']='<option\x20value=\x22\x22>Select\x20repository</option>',state['repos']['forEach'](_0x3f1735=>{const _0x4eb7b8=document['createElement']('option');_0x4eb7b8['value']=_0x3f1735['name'],_0x4eb7b8['textContent']=_0x3f1735['name'],elements['repoSelect']['appendChild'](_0x4eb7b8);}),elements['repoSelect']['disabled']=state['repos']['length']===0x0;const _0x6c978d=state['repos'][0x0]?.['name'];_0x6c978d&&(elements['repoSelect']['value']=_0x6c978d,elements['repoSelect']['dispatchEvent'](new Event('change')));}catch(_0x1d0676){Utils['showError'](_0x1d0676['message']||'Failed\x20to\x20load\x20repositories');}}async function handleRepoChange(){state['selectedRepo']=elements['repoSelect']['value'],state['selectedBranch']='',state['activeBranch']='',state['branches']=[],state['pagination']['offset']=0x0,state['pagination']['search']='',elements['searchInput']['value']='',elements['clearSearchBtn']['hidden']=!![],elements['branchSelect']['innerHTML']='<option\x20value=\x22\x22>Loading\x20branches...</option>',elements['branchSelect']['disabled']=!![],resetCommitDetail();if(!state['selectedRepo']){elements['commitList']['innerHTML']='',elements['commitCount']['textContent']='Select\x20a\x20repository\x20to\x20load\x20history.',elements['branchPill']['hidden']=!![],elements['branchSelect']['innerHTML']='<option\x20value=\x22\x22>Select\x20branch</option>';return;}await loadBranches(),loadHistory();}async function loadBranches(){if(!state['selectedEnvironment']||!state['selectedRepo'])return;if(state['loadingBranches'])return;state['loadingBranches']=!![];try{const _0x5ac8a9=state['selectedEnvironment']+':'+state['selectedRepo'],_0x3ed2d6=branchCache['get'](_0x5ac8a9),_0x4cc6c5=Date['now']();let _0x13cac3;_0x3ed2d6&&_0x4cc6c5-_0x3ed2d6['timestamp']<BRANCH_CACHE_TTL_MS?_0x13cac3=_0x3ed2d6:(_0x13cac3=await API['getEnvironmentRepoBranches'](state['selectedEnvironment'],state['selectedRepo']),branchCache['set'](_0x5ac8a9,{..._0x13cac3,'timestamp':_0x4cc6c5}));state['branches']=_0x13cac3['branches']||[],elements['branchSelect']['innerHTML']='';const _0x46642f=document['createElement']('option');_0x46642f['value']='',_0x46642f['textContent']=_0x13cac3['defaultBranch']?_0x13cac3['defaultBranch']+'\x20(default)':_0x13cac3['currentBranch']?_0x13cac3['currentBranch']+'\x20(current)':'Select\x20branch',elements['branchSelect']['appendChild'](_0x46642f);const _0x3b5858=_0x13cac3['defaultBranch']||_0x13cac3['currentBranch'];state['branches']['forEach'](_0x12ff13=>{if(_0x12ff13['name']===_0x3b5858)return;const _0x32c700=document['createElement']('option');_0x32c700['value']=_0x12ff13['name'];let _0x39d885=_0x12ff13['name'];if(_0x12ff13['isDefault'])_0x39d885+='\x20(default)';if(_0x12ff13['isCurrent'])_0x39d885+='\x20(current)';_0x32c700['textContent']=_0x39d885,elements['branchSelect']['appendChild'](_0x32c700);}),elements['branchSelect']['disabled']=state['branches']['length']===0x0,_0x13cac3['currentBranch']&&(state['selectedBranch']=''),elements['branchSelect']['value']=state['selectedBranch'],queueMicrotask(()=>{elements['branchSelect']['dispatchEvent'](new Event('change'));});}catch(_0x2abac8){console['error']('Failed\x20to\x20load\x20branches:',_0x2abac8),elements['branchSelect']['innerHTML']='<option\x20value=\x22\x22>Branch\x20loading\x20failed</option>',elements['branchSelect']['disabled']=!![];}finally{state['loadingBranches']=![];}}function handleBranchChange(){state['selectedBranch']=elements['branchSelect']['value'],state['pagination']['offset']=0x0,resetCommitDetail(),loadHistory();}async function loadHistory(_0x3f94e8={}){if(!state['selectedEnvironment']||!state['selectedRepo'])return;if(state['loadingHistory'])return;state['loadingHistory']=!![],elements['commitList']['innerHTML']=renderLoadingSkeletons(0x5),elements['commitCount']['textContent']='Loading\x20history...';try{const _0x461be7={'limit':state['pagination']['limit'],'offset':state['pagination']['offset'],'search':state['pagination']['search']};state['selectedBranch']&&(_0x461be7['branch']=state['selectedBranch']);const _0x6a513b=await API['getEnvironmentRepoHistory'](state['selectedEnvironment'],state['selectedRepo'],_0x461be7);state['commits']=_0x6a513b['commits']||[],state['pagination']['hasMore']=_0x6a513b['pagination']?.['hasMore']||![],state['dataSource']=_0x6a513b['source']||'local',state['activeBranch']=_0x6a513b['repo']?.['branch']||state['selectedBranch']||'';_0x6a513b['repo']?.['branch']?(elements['branchName']['textContent']=_0x6a513b['repo']['branch'],elements['branchPill']['hidden']=![]):elements['branchPill']['hidden']=!![];updateSourceIndicator(),renderCommitList();const _0x52753c=_0x3f94e8['keepSelection']&&state['selectedCommit'],_0x38d05a=state['commits']['some'](_0x1cb0d2=>_0x1cb0d2['hash']===state['selectedCommit']?.['hash']);if(_0x52753c&&_0x38d05a)highlightSelectedCommit();else state['commits']['length']>0x0?selectCommit(state['commits'][0x0]['hash'],{'silent':!![]}):resetCommitDetail();}catch(_0xcedcd0){Utils['showError'](_0xcedcd0['message']||'Failed\x20to\x20load\x20commit\x20history'),elements['commitList']['innerHTML']='',elements['commitCount']['textContent']='Unable\x20to\x20load\x20history.';}finally{state['loadingHistory']=![];}}function updateSourceIndicator(){let _0x333994=document['getElementById']('data-source-indicator');!_0x333994&&(_0x333994=document['createElement']('span'),_0x333994['id']='data-source-indicator',_0x333994['className']='source-indicator',elements['branchPill']?.['parentNode']?.['insertBefore'](_0x333994,elements['branchPill']['nextSibling'])),state['dataSource']==='remote'?(_0x333994['innerHTML']='\x0a\x20\x20\x20\x20\x20\x20<svg\x20class=\x22source-icon\x22\x20width=\x2214\x22\x20height=\x2214\x22\x20viewBox=\x220\x200\x2024\x2024\x22\x20fill=\x22none\x22\x20stroke=\x22currentColor\x22\x20stroke-width=\x222\x22\x20stroke-linecap=\x22round\x22\x20stroke-linejoin=\x22round\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<circle\x20cx=\x2212\x22\x20cy=\x2212\x22\x20r=\x2210\x22></circle>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<line\x20x1=\x222\x22\x20y1=\x2212\x22\x20x2=\x2222\x22\x20y2=\x2212\x22></line>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<path\x20d=\x22M12\x202a15.3\x2015.3\x200\x200\x201\x204\x2010\x2015.3\x2015.3\x200\x200\x201-4\x2010\x2015.3\x2015.3\x200\x200\x201-4-10\x2015.3\x2015.3\x200\x200\x201\x204-10z\x22></path>\x0a\x20\x20\x20\x20\x20\x20</svg>\x0a\x20\x20\x20\x20\x20\x20Remote\x0a\x20\x20\x20\x20',_0x333994['title']='Data\x20fetched\x20from\x20remote\x20Git\x20provider\x20(repository\x20not\x20cloned\x20locally)',_0x333994['hidden']=![]):_0x333994['hidden']=!![];}async function selectCommit(_0x3ddcf5,_0x58fbd3={}){if(!_0x3ddcf5)return;if(state['loadingCommit'])return;const _0x46ea61=state['commits']['find'](_0x9f9079=>_0x9f9079['hash']===_0x3ddcf5);if(!_0x46ea61)return;state['selectedCommit']=_0x46ea61,highlightSelectedCommit();if(_0x58fbd3['silent']){await loadCommitDetail(_0x3ddcf5);return;}await loadCommitDetail(_0x3ddcf5);}function highlightSelectedCommit(){const _0x3d654c=elements['commitList']['querySelectorAll']('.commit-item');_0x3d654c['forEach'](_0x300488=>{_0x300488['classList']['toggle']('selected',_0x300488['dataset']['hash']===state['selectedCommit']?.['hash']);});}async function loadCommitDetail(_0x170ee9){state['loadingCommit']=!![],elements['placeholder']['hidden']=!![],elements['detailPanel']['hidden']=![],elements['diffContainer']['innerHTML']='<div\x20class=\x22empty-state-card\x22>Loading\x20diff...</div>';try{const _0x2608b0=await API['getEnvironmentRepoCommit'](state['selectedEnvironment'],state['selectedRepo'],_0x170ee9);state['commitDetail']=_0x2608b0,renderCommitDetail();}catch(_0x36923e){Utils['showError'](_0x36923e['message']||'Failed\x20to\x20load\x20commit\x20details'),elements['diffContainer']['innerHTML']='<div\x20class=\x22empty-state-card\x22>Unable\x20to\x20load\x20diff.</div>';}finally{state['loadingCommit']=![];}}function renderCommitList(){elements['commitList']['innerHTML']='';if(state['commits']['length']===0x0){const _0x977678=state['pagination']['search']?'No\x20commits\x20match\x20\x22'+state['pagination']['search']+'\x22.':'No\x20commits\x20found.';elements['commitCount']['textContent']=_0x977678,elements['commitList']['innerHTML']='\x0a\x20\x20\x20\x20\x20\x20<li\x20class=\x22commit-list-empty\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22empty-state-icon\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<svg\x20width=\x2224\x22\x20height=\x2224\x22\x20viewBox=\x220\x200\x2024\x2024\x22\x20fill=\x22none\x22\x20stroke=\x22currentColor\x22\x20stroke-width=\x222\x22\x20stroke-linecap=\x22round\x22\x20stroke-linejoin=\x22round\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<circle\x20cx=\x2212\x22\x20cy=\x2212\x22\x20r=\x2210\x22></circle>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<line\x20x1=\x2212\x22\x20y1=\x228\x22\x20x2=\x2212\x22\x20y2=\x2212\x22></line>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<line\x20x1=\x2212\x22\x20y1=\x2216\x22\x20x2=\x2212.01\x22\x20y2=\x2216\x22></line>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</svg>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>'+Utils['escapeHtml'](_0x977678)+'</p>\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20',elements['prevBtn']['disabled']=!![],elements['nextBtn']['disabled']=!![];return;}const _0x38cc5f=state['pagination']['offset']+0x1,_0x4bc669=state['pagination']['offset']+state['commits']['length'],_0x2111ff=state['pagination']['search']?_0x38cc5f+'-'+_0x4bc669+'\x20matching\x20\x22'+state['pagination']['search']+'\x22':_0x38cc5f+'-'+_0x4bc669;elements['commitCount']['textContent']=_0x2111ff,state['commits']['forEach']((_0x21d864,_0x52f3d6)=>{const _0x15ba86=document['createElement']('li');_0x15ba86['className']='commit-item',_0x15ba86['dataset']['hash']=_0x21d864['hash'],_0x15ba86['tabIndex']=0x0,_0x15ba86['setAttribute']('role','button'),_0x15ba86['setAttribute']('aria-label','Commit:\x20'+(_0x21d864['message']||'No\x20message')+'\x20by\x20'+(_0x21d864['author']||'Unknown')),_0x15ba86['style']['animationDelay']=_0x52f3d6*0x19+'ms';const _0x35e34d=getAuthorInitials(_0x21d864['author']),_0x547941=getAvatarColor(_0x21d864['author']||'Unknown'),_0x1e82a7=detectCommitType(_0x21d864['message']),_0x29ad80=_0x1e82a7?'<span\x20class=\x22commit-type-indicator\x20'+_0x1e82a7+'\x22>'+_0x1e82a7+'</span>':'';_0x15ba86['innerHTML']='\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22commit-message\x22>'+Utils['escapeHtml'](truncateMessage(_0x21d864['message']||'No\x20message',0x50))+'</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22commit-meta-row\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22commit-author-chip\x22\x20style=\x22--avatar-color:\x20'+_0x547941+'\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22author-avatar\x22>'+_0x35e34d+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+Utils['escapeHtml'](_0x21d864['author']||'Unknown')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22commit-time\x22>'+Utils['formatRelativeTime'](_0x21d864['date'])+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22commit-short-hash\x22>'+_0x21d864['shortHash']+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20'+(_0x21d864['isMerge']?'<span\x20class=\x22commit-tag\x22>Merge</span>':'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20'+_0x29ad80+'\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20',_0x15ba86['addEventListener']('keydown',_0x4ab720=>{(_0x4ab720['key']==='Enter'||_0x4ab720['key']==='\x20')&&(_0x4ab720['preventDefault'](),selectCommit(_0x21d864['hash']));}),elements['commitList']['appendChild'](_0x15ba86);}),elements['prevBtn']['disabled']=state['pagination']['offset']===0x0,elements['nextBtn']['disabled']=!state['pagination']['hasMore'],highlightSelectedCommit();}function getAuthorInitials(_0x2bb92b){if(!_0x2bb92b)return'?';const _0x10482e=_0x2bb92b['trim']()['split'](/\s+/);if(_0x10482e['length']===0x1)return _0x10482e[0x0]['charAt'](0x0)['toUpperCase']();return(_0x10482e[0x0]['charAt'](0x0)+_0x10482e[_0x10482e['length']-0x1]['charAt'](0x0))['toUpperCase']();}function getAvatarColor(_0x2af5ff){let _0xb26158=0x0;for(let _0x21c485=0x0;_0x21c485<_0x2af5ff['length'];_0x21c485++){_0xb26158=_0x2af5ff['charCodeAt'](_0x21c485)+((_0xb26158<<0x5)-_0xb26158);}const _0x2be55b=Math['abs'](_0xb26158%0x168);return'hsl('+_0x2be55b+',\x2065%,\x2055%)';}function truncateMessage(_0x38cd3a,_0x405106){if(!_0x38cd3a)return'';const _0x562a6b=_0x38cd3a['split']('\x0a')[0x0];if(_0x562a6b['length']<=_0x405106)return _0x562a6b;return _0x562a6b['substring'](0x0,_0x405106-0x3)+'...';}function asFiniteNumber(_0x5a2b7c){return Number['isFinite'](_0x5a2b7c)?_0x5a2b7c:null;}function formatFileCountLabel(_0x4745f0,_0x29d557={}){const _0x3ea352=Boolean(_0x29d557['lowerBound']),_0x17b9ba=_0x3ea352?'at\x20least\x20':'';return''+_0x17b9ba+_0x4745f0+'\x20file'+(_0x4745f0===0x1?'':'s');}function formatBytes(_0x4599c7){if(!Number['isFinite'](_0x4599c7)||_0x4599c7<=0x0)return'';const _0x5ed3e7=_0x4599c7/(0x400*0x400);if(_0x5ed3e7>=0x1)return _0x5ed3e7['toFixed'](0x1)+'MB';const _0x11530e=_0x4599c7/0x400;return Math['max'](0x1,Math['round'](_0x11530e))+'KB';}function getEffectiveDiffStats(_0x14a59b,_0x3ad5e3){const _0x1043bc=asFiniteNumber(_0x3ad5e3?.['changedFiles']),_0x5312d7=asFiniteNumber(_0x3ad5e3?.['changedFilesLowerBound']),_0x5eb123=asFiniteNumber(_0x3ad5e3?.['additions']),_0x1bb220=asFiniteNumber(_0x3ad5e3?.['deletions']);return{'files':_0x1043bc??_0x5312d7??_0x14a59b['files'],'filesIsLowerBound':_0x1043bc===null&&_0x5312d7!==null,'additions':_0x5eb123??_0x14a59b['additions'],'deletions':_0x1bb220??_0x14a59b['deletions']};}function getDiffNoticeText(_0x598fa6){if(!_0x598fa6?.['truncated'])return'';if(_0x598fa6['omitted']){const _0xab201c=asFiniteNumber(_0x598fa6['changedFiles']),_0x514258=asFiniteNumber(_0x598fa6['changedFilesLowerBound']),_0x190179=asFiniteNumber(_0x598fa6['maxFiles']);if(_0xab201c!==null&&_0x190179!==null)return'Diff\x20omitted\x20because\x20this\x20commit\x20changes\x20'+_0xab201c['toLocaleString']()+'\x20files\x20(limit\x20'+_0x190179['toLocaleString']()+').';if(_0x514258!==null&&_0x190179!==null)return'Diff\x20omitted\x20because\x20this\x20commit\x20changes\x20at\x20least\x20'+_0x514258['toLocaleString']()+'\x20files\x20(limit\x20'+_0x190179['toLocaleString']()+').';if(_0x514258!==null)return'Diff\x20omitted\x20because\x20this\x20commit\x20changes\x20at\x20least\x20'+_0x514258['toLocaleString']()+'\x20files.';return'Diff\x20omitted\x20for\x20this\x20large\x20commit\x20to\x20keep\x20Git\x20History\x20responsive.';}const _0x1c93d5=asFiniteNumber(_0x598fa6['maxBytes']);if(_0x1c93d5!==null)return'Showing\x20a\x20truncated\x20diff\x20preview\x20('+formatBytes(_0x1c93d5)+'\x20max)\x20to\x20keep\x20Git\x20History\x20responsive.';return'Showing\x20a\x20truncated\x20diff\x20preview\x20to\x20keep\x20Git\x20History\x20responsive.';}function shouldUseLazyRendering(_0x24b4c6,_0x34a24b=null){const _0x43e54d=asFiniteNumber(_0x34a24b?.['maxFiles']);return _0x326cfe(_0x24b4c6,{'minFiles':LAZY_RENDER_MIN_FILES,'maxFiles':LAZY_RENDER_MAX_FILES,'serverMaxFiles':_0x43e54d});}function shouldAutoCollapseDiff(_0x53abf1){return _0x44e5b4(_0x53abf1,{'threshold':AUTO_COLLAPSE_MIN_FILES});}function getLazyLoadMoreText(_0x5c631a){if(!_0x5c631a)return'Load\x20more\x20files';return _0x2cc6c5({'filesLength':_0x5c631a['files']['length'],'renderedCount':_0x5c631a['renderedCount'],'chunkSize':_0x5c631a['chunkSize']});}function ensureLazyDiffFileRendered(_0x137757){if(!state['diffRender']?.['lazy'])return;const _0x92b568=renderedCountForTarget({'renderedCount':state['diffRender']['renderedCount'],'targetIndex':_0x137757,'totalFiles':state['diffRender']['files']['length'],'chunkSize':state['diffRender']['chunkSize']});while(state['diffRender']['renderedCount']<_0x92b568){renderNextDiffChunk();}}function updateLazyLoadMoreControl(){const _0x3388df=state['diffRender'];if(!_0x3388df?.['lazy']||!elements['diffContainer'])return;const _0x2d355e=elements['diffContainer']['querySelector']('.diff-load-more-control');if(!_0x2d355e)return;if(_0x3388df['renderedCount']>=_0x3388df['files']['length']){_0x2d355e['innerHTML']='<span\x20class=\x22diff-load-complete\x22>All\x20'+formatFileCountLabel(_0x3388df['files']['length'])+'\x20loaded</span>';return;}_0x2d355e['innerHTML']='<button\x20class=\x22btn-ghost\x20btn-small\x20diff-load-more-btn\x22\x20type=\x22button\x22>'+getLazyLoadMoreText(_0x3388df)+'</button>';const _0x2ccda2=_0x2d355e['querySelector']('.diff-load-more-btn');_0x2ccda2?.['addEventListener']('click',()=>{renderNextDiffChunk();});}function renderNextDiffChunk(){const _0x55cb56=state['diffRender'];if(!_0x55cb56?.['lazy']||!elements['diffContainer'])return;if(_0x55cb56['renderedCount']>=_0x55cb56['files']['length'])return;const _0x4629b5=elements['diffContainer']['querySelector']('.diff-files-host');if(!_0x4629b5)return;const _0x1c5f06=_0x55cb56['renderedCount'],_0x51f388=getNextRenderedCount({'renderedCount':_0x1c5f06,'totalFiles':_0x55cb56['files']['length'],'chunkSize':_0x55cb56['chunkSize']}),_0x465a2e=_0x55cb56['files']['slice'](_0x1c5f06,_0x51f388),_0x257cfa=state['diffView']==='split'?renderSplitDiff(_0x465a2e,_0x55cb56['storageKeyPrefix'],_0x1c5f06,{'defaultCollapsed':_0x55cb56['defaultCollapsed']}):renderUnifiedDiff(_0x465a2e,_0x55cb56['storageKeyPrefix'],_0x1c5f06,{'defaultCollapsed':_0x55cb56['defaultCollapsed']});_0x4629b5['insertAdjacentHTML']('beforeend',_0x257cfa),_0x55cb56['renderedCount']=_0x51f388,bindDiffToggleHandlers(_0x55cb56['storageKeyPrefix']),updateLazyLoadMoreControl();}function renderCommitDetail(){if(!state['commitDetail']||!state['commitDetail']['commit']){resetCommitDetail();return;}const _0x28ef3d=state['commitDetail']['commit'];elements['commitMessage']['textContent']=_0x28ef3d['message']||'No\x20message',elements['commitAuthor']['textContent']=''+(_0x28ef3d['author']||'Unknown')+(_0x28ef3d['email']?'\x20('+_0x28ef3d['email']+')':''),elements['commitDate']['textContent']=formatDate(_0x28ef3d['date']),elements['commitHash']['textContent']=_0x28ef3d['hash'];const _0x341a2f=isSelectedCommitRemoteSource();elements['revertBtn']&&(elements['revertBtn']['hidden']=![],elements['revertBtn']['textContent']=_0x341a2f?'Revert\x20via\x20task':'Revert\x20commit',elements['revertBtn']['title']=_0x341a2f?'Create\x20a\x20task\x20that\x20applies\x20this\x20revert\x20and\x20stages\x20the\x20changes\x20for\x20approval':'');if(elements['viewOnProviderBtn']){const _0x536a43=getProviderCommitUrl(_0x28ef3d['hash']);_0x536a43&&_0x341a2f?(elements['viewOnProviderBtn']['hidden']=![],elements['viewOnProviderBtn']['href']=_0x536a43,elements['viewOnProviderBtn']['textContent']='View\x20on\x20'+getProviderDisplayName()):elements['viewOnProviderBtn']['hidden']=!![];}const _0x4a5ef3=_0x28ef3d['parents']||[];_0x4a5ef3['length']>0x1?(elements['mergeControls']['hidden']=![],elements['mainlineSelect']['innerHTML']='',_0x4a5ef3['forEach']((_0x5113f3,_0x6b46f1)=>{const _0x5b1504=document['createElement']('option');_0x5b1504['value']=String(_0x6b46f1+0x1),_0x5b1504['textContent']='Parent\x20'+(_0x6b46f1+0x1)+'\x20-\x20'+_0x5113f3['slice'](0x0,0x7),elements['mainlineSelect']['appendChild'](_0x5b1504);})):elements['mergeControls']['hidden']=!![];const _0x4a3fdf=state['commitDetail']['diffMeta']||null,_0x113cf2=_0x4a3fdf?.['omitted']?[]:parsePatchContent(state['commitDetail']['diff']||'');state['commitDetail']['files']=_0x113cf2;const _0x3d0328=calculateDiffStats(_0x113cf2),_0x3b5918=getEffectiveDiffStats(_0x3d0328,_0x4a3fdf);elements['diffStats']['innerHTML']='\x0a\x20\x20\x20\x20<span\x20class=\x22diff-stat-files\x22>'+formatFileCountLabel(_0x3b5918['files'],{'lowerBound':_0x3b5918['filesIsLowerBound']})+'</span>\x0a\x20\x20\x20\x20<span\x20class=\x22diff-stat-separator\x22>|</span>\x0a\x20\x20\x20\x20<span\x20class=\x22diff-stat-add\x22>+'+_0x3b5918['additions']['toLocaleString']()+'</span>\x0a\x20\x20\x20\x20<span\x20class=\x22diff-stat-del\x22>-'+_0x3b5918['deletions']['toLocaleString']()+'</span>\x0a\x20\x20';elements['fileNavCount']&&(elements['fileNavCount']['textContent']=formatFileCountLabel(_0x3b5918['files'],{'lowerBound':_0x3b5918['filesIsLowerBound']}));if(elements['fileNavToggle']){const _0x1c9491=_0x113cf2['length']>0x0;elements['fileNavToggle']['disabled']=!_0x1c9491,elements['fileNavToggle']['setAttribute']('aria-disabled',String(!_0x1c9491)),elements['fileNavToggle']['title']=_0x1c9491?'Browse\x20changed\x20files':_0x4a3fdf?.['omitted']?'Diff\x20omitted\x20for\x20this\x20large\x20commit':'No\x20file\x20diff\x20to\x20browse',!_0x1c9491&&closeFileNav();}renderCommitDiff();}function renderCommitDiff(){if(!state['commitDetail']||!elements['diffContainer'])return;const _0x2a74ba=state['commitDetail']['diffMeta']||null,_0x260abf=getDiffNoticeText(_0x2a74ba);state['diffRender']=null;if(_0x2a74ba?.['omitted']){elements['diffContainer']['innerHTML']='\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22empty-state-card\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<h2>Diff\x20Omitted</h2>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p\x20class=\x22text-muted\x22>'+Utils['escapeHtml'](_0x260abf||'Diff\x20omitted\x20for\x20this\x20large\x20commit.')+'</p>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20';return;}const _0x435789=state['commitDetail']['files']||parsePatchContent(state['commitDetail']['diff']||'');if(_0x435789['length']===0x0){if(_0x2a74ba?.['truncated']){elements['diffContainer']['innerHTML']='\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22empty-state-card\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<h2>Diff\x20Truncated</h2>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<p\x20class=\x22text-muted\x22>'+Utils['escapeHtml'](_0x260abf||'Diff\x20output\x20is\x20truncated.')+'</p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20';return;}elements['diffContainer']['innerHTML']='<div\x20class=\x22empty-state-card\x22>No\x20changes\x20in\x20this\x20commit.</div>';return;}const _0x513e04='git-history-'+state['commitDetail']['commit']['hash'],_0x3db909=_0x2a74ba?.['truncated']?'<div\x20class=\x22diff-truncated-banner\x22>'+Utils['escapeHtml'](_0x260abf)+'</div>':'',_0x4cd580=shouldUseLazyRendering(_0x435789['length'],_0x2a74ba),_0x3bc3d5=shouldAutoCollapseDiff(_0x435789['length']);if(_0x4cd580){state['diffRender']={'lazy':!![],'files':_0x435789,'storageKeyPrefix':_0x513e04,'renderedCount':0x0,'chunkSize':LAZY_RENDER_CHUNK_SIZE,'defaultCollapsed':_0x3bc3d5};const _0x326f3b=_0x3bc3d5?'Large\x20commit\x20detected\x20('+_0x435789['length']['toLocaleString']()+'\x20files).\x20Files\x20are\x20collapsed\x20by\x20default\x20and\x20rendered\x20in\x20chunks.':'Large\x20commit\x20detected\x20('+_0x435789['length']['toLocaleString']()+'\x20files).\x20Rendering\x20files\x20in\x20chunks\x20for\x20better\x20responsiveness.';elements['diffContainer']['innerHTML']='\x0a\x20\x20\x20\x20\x20\x20'+_0x3db909+'\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22diff-large-commit-banner\x22>'+Utils['escapeHtml'](_0x326f3b)+'</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22diff-files-host\x22></div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22diff-load-more-control\x22></div>\x0a\x20\x20\x20\x20',renderNextDiffChunk();return;}const _0x158bc4=state['diffView']==='split'?renderSplitDiff(_0x435789,_0x513e04,0x0,{'defaultCollapsed':_0x3bc3d5}):renderUnifiedDiff(_0x435789,_0x513e04,0x0,{'defaultCollapsed':_0x3bc3d5});elements['diffContainer']['innerHTML']=''+_0x3db909+_0x158bc4,bindDiffToggleHandlers(_0x513e04);}function resetCommitDetail(){state['selectedCommit']=null,state['commitDetail']=null,state['diffRender']=null,closeFileNav(),elements['placeholder']['hidden']=![],elements['detailPanel']['hidden']=!![];}function getSelectedRepoObject(){return state['repos']['find'](_0x40bd19=>_0x40bd19['name']===state['selectedRepo'])||null;}function getProviderDisplayName(){const _0x30692c=getSelectedRepoObject(),_0x73ad4c=_0x30692c?.['url']?.['toLowerCase']()||'';if(_0x73ad4c['includes']('github.com')||_0x73ad4c['includes']('github.'))return'GitHub';else{if(_0x73ad4c['includes']('gitlab.com')||_0x73ad4c['includes']('gitlab.'))return'GitLab';else{if(_0x73ad4c['includes']('bitbucket.org')||_0x73ad4c['includes']('bitbucket.'))return'Bitbucket';else{if(_0x73ad4c['includes']('dev.azure.com')||_0x73ad4c['includes']('visualstudio.com'))return'Azure\x20DevOps';}}}return'Provider';}function getProviderCommitUrl(_0x1338fe){const _0xea4287=getSelectedRepoObject();if(!_0xea4287?.['url'])return null;let _0x35e153=_0xea4287['url']['replace'](/\.git$/,'');_0x35e153=_0x35e153['replace'](/^(https?:\/\/)[^@]+@/,'$1');const _0x31a5dc=_0x35e153['toLowerCase']();if(_0x31a5dc['includes']('gitlab.com')||_0x31a5dc['includes']('gitlab.'))return _0x35e153+'/-/commit/'+_0x1338fe;else{if(_0x31a5dc['includes']('bitbucket.org')||_0x31a5dc['includes']('bitbucket.'))return _0x35e153+'/commits/'+_0x1338fe;}return _0x35e153+'/commit/'+_0x1338fe;}function isSelectedCommitRemoteSource(){return state['commitDetail']?.['source']==='remote'||state['dataSource']==='remote';}function getSelectedBranchForRevertTask(){const _0xda6350=(state['selectedBranch']||'')['trim']();if(_0xda6350)return _0xda6350;const _0x188cd2=(state['activeBranch']||'')['trim']();if(_0x188cd2)return _0x188cd2;const _0x3f2834=(elements['branchName']?.['textContent']||'')['trim']();return _0x3f2834||null;}function buildRemoteRevertTaskInstructions(_0x20a0b6,_0x7a0ac3={}){const _0x223ef7=getSelectedBranchForRevertTask(),_0x39b9cc=_0x7a0ac3['mainline']||null,_0x19e503=Array['isArray'](_0x20a0b6['parents'])&&_0x20a0b6['parents']['length']>0x1,_0x510cc6=_0x19e503?'git\x20revert\x20--no-commit\x20-m\x20'+(_0x39b9cc||'1')+'\x20'+_0x20a0b6['hash']:'git\x20revert\x20--no-commit\x20'+_0x20a0b6['hash'],_0x4480c8=['Please\x20revert\x20commit\x20'+_0x20a0b6['hash']+'\x20in\x20repository\x20\x22'+state['selectedRepo']+'\x22\x20for\x20environment\x20\x22'+state['selectedEnvironment']+'\x22.','','Requirements:','1.\x20Open\x20repository\x20\x22'+state['selectedRepo']+'\x22\x20(typically\x20under\x20/workspace).',_0x223ef7?'2.\x20Ensure\x20branch\x20\x22'+_0x223ef7+'\x22\x20is\x20checked\x20out\x20(fetch\x20first\x20if\x20needed).':'2.\x20Use\x20the\x20repository\x20branch\x20configured\x20for\x20this\x20environment.','3.\x20Run\x20`'+_0x510cc6+'`.','4.\x20If\x20there\x20are\x20conflicts,\x20resolve\x20them\x20and\x20stage\x20the\x20resolved\x20files.','5.\x20Ensure\x20all\x20revert\x20changes\x20are\x20staged\x20(`git\x20add\x20-A`\x20as\x20needed).','6.\x20Do\x20NOT\x20run\x20`git\x20commit`\x20and\x20do\x20NOT\x20push.','7.\x20In\x20your\x20final\x20response,\x20report\x20success/failure\x20and\x20summarize\x20changed\x20files\x20and\x20conflicts.'];return _0x4480c8['join']('\x0a');}function navigateToTask(_0x1a9a38){const _0x4f5ced='task.html?id='+encodeURIComponent(_0x1a9a38),_0x4ca945=localStorage['getItem'](OPEN_NEW_TAB_STORAGE_KEY)==='true';if(_0x4ca945){const _0x1f3a11=window['open'](_0x4f5ced,'_blank');!_0x1f3a11&&(window['location']['href']=_0x4f5ced);return;}window['location']['href']=_0x4f5ced;}async function createRemoteRevertTask(_0x4bd993,_0x3efe85={}){const _0x111dae=_0x4bd993['shortHash']||_0x4bd993['hash']['slice'](0x0,0x7),_0x2609dc=buildRemoteRevertTaskInstructions(_0x4bd993,_0x3efe85),_0x54ed16={'name':'Revert\x20'+_0x111dae+'\x20in\x20'+state['selectedRepo'],'environment':state['selectedEnvironment'],'task_type':'manual','parameters':{'instructions':_0x2609dc}},_0x302fff=elements['revertBtn']?.['textContent']||'Revert\x20via\x20task';elements['revertBtn']&&(elements['revertBtn']['disabled']=!![],elements['revertBtn']['textContent']='Creating\x20task...');try{const _0xe2feda=await API['createTask'](_0x54ed16),_0x4ae5f0=_0xe2feda?.['taskId'];if(!_0x4ae5f0)throw new Error('Task\x20created\x20but\x20no\x20task\x20ID\x20was\x20returned');Utils['showSuccess']('Revert\x20task\x20created'),navigateToTask(_0x4ae5f0);}catch(_0x54ca1b){if(_0x54ca1b?.['error']==='git_connections_required'&&Array['isArray'](_0x54ca1b['providers'])&&_0x54ca1b['providers']['length']>0x0){const _0x2ba844=_0x54ca1b['providers']['map'](_0x40da08=>_0x40da08['displayName']||_0x40da08['provider']||_0x40da08['name']||'provider')['join'](',\x20');throw new Error('Git\x20connection\x20required:\x20'+_0x2ba844+'.\x20Connect\x20account(s)\x20in\x20Settings\x20and\x20retry.');}throw _0x54ca1b;}finally{elements['revertBtn']&&(elements['revertBtn']['disabled']=![],elements['revertBtn']['textContent']=_0x302fff);}}function handleSearchInput(_0x4ea195){const _0x1cf960=_0x4ea195['target']['value']['trim']();elements['clearSearchBtn']['hidden']=!_0x1cf960,searchTimer&&clearTimeout(searchTimer),searchTimer=setTimeout(()=>{state['pagination']['search']=_0x1cf960,state['pagination']['offset']=0x0,loadHistory();},SEARCH_DEBOUNCE_MS);}function clearSearch(){elements['searchInput']['value']='',elements['clearSearchBtn']['hidden']=!![],state['pagination']['search']='',state['pagination']['offset']=0x0,loadHistory();}function changePage(_0xb03b9){const _0x1839a9=state['pagination']['offset']+_0xb03b9*state['pagination']['limit'];if(_0x1839a9<0x0)return;state['pagination']['offset']=_0x1839a9,loadHistory({'keepSelection':![]});}async function handleCopyHash(){if(!state['commitDetail']?.['commit']?.['hash'])return;const _0x1d48d5=await Utils['copyToClipboard'](state['commitDetail']['commit']['hash']);if(_0x1d48d5)Utils['showSuccess']('Commit\x20hash\x20copied');}async function handleRevertCommit(){if(!state['commitDetail']?.['commit']?.['hash'])return;const _0x27d522=state['commitDetail']['commit'],_0x3517cb=_0x27d522['shortHash']||_0x27d522['hash']['slice'](0x0,0x7),_0x3eaae6={};_0x27d522['parents']&&_0x27d522['parents']['length']>0x1&&(_0x3eaae6['mainline']=elements['mainlineSelect']['value']||'1');if(isSelectedCommitRemoteSource()){const _0x9bf227=getSelectedBranchForRevertTask(),_0x695733=_0x3eaae6['mainline']?'\x20using\x20mainline\x20parent\x20'+_0x3eaae6['mainline']:'',_0x4c4ca1=_0x9bf227?'\x20on\x20branch\x20\x22'+_0x9bf227+'\x22':'',_0xab104c='Create\x20a\x20revert\x20task\x20for\x20commit\x20'+_0x3517cb+_0x4c4ca1+_0x695733+'?\x20The\x20task\x20will\x20apply\x20the\x20revert\x20without\x20committing\x20so\x20it\x20can\x20be\x20approved\x20and\x20pushed\x20later.',_0x481aa1=await ConfirmDialog['show']({'title':'Create\x20Revert\x20Task','message':_0xab104c,'confirmText':'Create\x20Task','cancelText':'Cancel','danger':!![]});if(!_0x481aa1)return;try{await createRemoteRevertTask(_0x27d522,_0x3eaae6);}catch(_0x4c8e37){Utils['showError'](_0x4c8e37['message']||'Failed\x20to\x20create\x20revert\x20task');}return;}const _0x26c960='Revert\x20commit\x20'+_0x3517cb+'?\x20This\x20will\x20create\x20a\x20new\x20commit\x20that\x20undoes\x20these\x20changes.',_0x21d5be=await ConfirmDialog['show']({'title':'Revert\x20Commit','message':_0x26c960,'confirmText':'Revert','cancelText':'Cancel','danger':!![]});if(!_0x21d5be)return;try{await API['revertEnvironmentRepoCommit'](state['selectedEnvironment'],state['selectedRepo'],_0x27d522['hash'],_0x3eaae6),Utils['showSuccess']('Commit\x20reverted'),state['pagination']['offset']=0x0,await loadHistory({'keepSelection':![]});}catch(_0x540510){Utils['showError'](_0x540510['message']||'Failed\x20to\x20revert\x20commit');}}function parsePatchContent(_0x59ea2e){const _0x14f48f=[],_0xff79e=_0x59ea2e['split']('\x0a');let _0x5c9af4=null,_0x5c7bde=null;for(const _0x42aca9 of _0xff79e){if(_0x42aca9['startsWith']('diff\x20--git')){_0x5c9af4&&_0x5c7bde&&_0x5c9af4['hunks']['push'](_0x5c7bde);_0x5c9af4&&_0x14f48f['push'](_0x5c9af4);const _0x4f82ea=_0x42aca9['match'](/diff --git a\/(.+?) b\/(.+)/);_0x5c9af4={'oldPath':_0x4f82ea?_0x4f82ea[0x1]:'','newPath':_0x4f82ea?_0x4f82ea[0x2]:'','hunks':[],'isDeleted':![]},_0x5c7bde=null;}else{if(_0x42aca9['startsWith']('deleted\x20file\x20mode')&&_0x5c9af4)_0x5c9af4['isDeleted']=!![];else{if(_0x42aca9['startsWith']('@@'))_0x5c7bde&&_0x5c9af4&&_0x5c9af4['hunks']['push'](_0x5c7bde),_0x5c7bde={'header':_0x42aca9,'lines':[]};else _0x5c7bde&&_0x5c7bde['lines']['push'](_0x42aca9);}}}return _0x5c9af4&&_0x5c7bde&&_0x5c9af4['hunks']['push'](_0x5c7bde),_0x5c9af4&&_0x14f48f['push'](_0x5c9af4),_0x14f48f;}function parseHunkHeader(_0x5d0b64){const _0x2f28f9=_0x5d0b64['match'](/@@ -(\d+),?\d* \+(\d+),?\d* @@/);if(_0x2f28f9)return{'oldStart':parseInt(_0x2f28f9[0x1],0xa),'newStart':parseInt(_0x2f28f9[0x2],0xa)};return{'oldStart':0x1,'newStart':0x1};}function highlightDiffLine(_0x14701d,_0x4e3811){const _0x4a0c67=window['hljs']||(typeof hljs!=='undefined'?hljs:null);if(_0x4a0c67&&_0x4e3811)try{const _0x31e200=_0x4a0c67['getLanguage'](_0x4e3811)?_0x4e3811:null;if(_0x31e200)return _0x4a0c67['highlight'](_0x14701d,{'language':_0x31e200})['value'];}catch(_0x1250f4){console['error']('Diff\x20syntax\x20highlighting\x20error:',_0x1250f4);}return Utils['escapeHtml'](_0x14701d);}function computeWordDiff(_0x2d0432,_0x5963a1){const _0x577e44=_0x43eb89=>{const _0x1f0f5c=[];let _0xf5fe54='',_0x260454=![];for(let _0x49ce5a=0x0;_0x49ce5a<_0x43eb89['length'];_0x49ce5a++){const _0xa5f0da=_0x43eb89[_0x49ce5a],_0x460a4c=/\s/['test'](_0xa5f0da);if(_0xf5fe54==='')_0xf5fe54=_0xa5f0da,_0x260454=_0x460a4c;else _0x460a4c===_0x260454?_0xf5fe54+=_0xa5f0da:(_0x1f0f5c['push'](_0xf5fe54),_0xf5fe54=_0xa5f0da,_0x260454=_0x460a4c);}return _0xf5fe54&&_0x1f0f5c['push'](_0xf5fe54),_0x1f0f5c;},_0x510398=_0x577e44(_0x2d0432),_0x5481f9=_0x577e44(_0x5963a1),_0x266c36=_0x510398['length'],_0x24eb76=_0x5481f9['length'],_0x266dd7=Array(_0x266c36+0x1)['fill'](null)['map'](()=>Array(_0x24eb76+0x1)['fill'](0x0));for(let _0x541751=0x1;_0x541751<=_0x266c36;_0x541751++){for(let _0x27d914=0x1;_0x27d914<=_0x24eb76;_0x27d914++){_0x510398[_0x541751-0x1]===_0x5481f9[_0x27d914-0x1]?_0x266dd7[_0x541751][_0x27d914]=_0x266dd7[_0x541751-0x1][_0x27d914-0x1]+0x1:_0x266dd7[_0x541751][_0x27d914]=Math['max'](_0x266dd7[_0x541751-0x1][_0x27d914],_0x266dd7[_0x541751][_0x27d914-0x1]);}}const _0x5cd91d={'old':[],'new':[]};let _0x2f9e34=_0x266c36,_0x22fb90=_0x24eb76;const _0x5f2f8c=[],_0x81a6e2=[];while(_0x2f9e34>0x0||_0x22fb90>0x0){if(_0x2f9e34>0x0&&_0x22fb90>0x0&&_0x510398[_0x2f9e34-0x1]===_0x5481f9[_0x22fb90-0x1])_0x5f2f8c['unshift']({'type':'equal','text':_0x510398[_0x2f9e34-0x1]}),_0x81a6e2['unshift']({'type':'equal','text':_0x5481f9[_0x22fb90-0x1]}),_0x2f9e34--,_0x22fb90--;else{if(_0x22fb90>0x0&&(_0x2f9e34===0x0||_0x266dd7[_0x2f9e34][_0x22fb90-0x1]>=_0x266dd7[_0x2f9e34-0x1][_0x22fb90]))_0x81a6e2['unshift']({'type':'insert','text':_0x5481f9[_0x22fb90-0x1]}),_0x22fb90--;else _0x2f9e34>0x0&&(_0x5f2f8c['unshift']({'type':'delete','text':_0x510398[_0x2f9e34-0x1]}),_0x2f9e34--);}}return _0x5cd91d['old']=_0x5f2f8c,_0x5cd91d['new']=_0x81a6e2,_0x5cd91d;}function renderDiffLineWithWordHighlight(_0x20c4c8,_0x389018,_0x5c0184,_0x4880d5){if(!_0x389018||_0x389018['length']===0x0)return highlightDiffLine(_0x20c4c8,_0x4880d5);let _0x12c478='';const _0x1f158d=_0x5c0184==='add'?'diff-word-add':'diff-word-remove',_0x3f72aa=_0x5c0184==='add'?'insert':'delete';for(const _0x4d113b of _0x389018){const _0x26853d=Utils['escapeHtml'](_0x4d113b['text']);_0x4d113b['type']===_0x3f72aa?_0x12c478+='<span\x20class=\x22'+_0x1f158d+'\x22>'+_0x26853d+'</span>':_0x12c478+=_0x26853d;}return _0x12c478;}function getFileLanguage(_0x111d0b){const _0x5233f9=_0x111d0b['split']('.')['pop']()['toLowerCase'](),_0x52b9fd={'js':'javascript','jsx':'javascript','ts':'typescript','tsx':'typescript','py':'python','java':'java','c':'c','cpp':'cpp','cs':'csharp','go':'go','rs':'rust','php':'php','rb':'ruby','html':'xml','css':'css','json':'json','yml':'yaml','yaml':'yaml','md':'markdown','sh':'bash','bash':'bash'};return _0x52b9fd[_0x5233f9]||null;}function calculateDiffStats(_0xa79ec1){let _0x3ba524=0x0,_0x452cda=0x0,_0x40e278=0x0;return _0xa79ec1['forEach'](_0x3539f2=>{let _0x29d78b=0x0,_0x5590c5=0x0;_0x3539f2['hunks']['forEach'](_0xa0b5bf=>{_0xa0b5bf['lines']['forEach'](_0x519c8a=>{if(_0x519c8a['startsWith']('+'))_0x29d78b+=0x1;else{if(_0x519c8a['startsWith']('-'))_0x5590c5+=0x1;}});}),(_0x29d78b+_0x5590c5>0x0||_0x3539f2['isDeleted'])&&(_0x40e278+=0x1),_0x3ba524+=_0x29d78b,_0x452cda+=_0x5590c5;}),{'additions':_0x3ba524,'deletions':_0x452cda,'files':_0x40e278};}function renderUnifiedDiff(_0x4019f8,_0x4d74ba,_0x32c96a=0x0,_0xc52adf={}){return _0x4019f8['map']((_0x78f6f5,_0x459881)=>{const _0x2fba47=_0x32c96a+_0x459881,_0x2a3b90=_0x78f6f5['newPath']||_0x78f6f5['oldPath']||'unknown',_0x537d34='diff-'+_0x4d74ba+'-'+_0x2fba47,_0x3c387a=getFileLanguage(_0x2a3b90),{additions:_0x2537ba,deletions:_0x3261e2}=calculateDiffStats([_0x78f6f5]),_0x207d45=getCollapsedState(_0x4d74ba,_0x2a3b90,_0xc52adf['defaultCollapsed']),_0x412db2=getFileStatus(_0x78f6f5,_0x2537ba,_0x3261e2),_0x247b1b=_0x412db2==='added'?'A':_0x412db2==='deleted'?'D':'M',_0x3458d0=_0x78f6f5['hunks']['map'](_0x114e4b=>{const {oldStart:_0x4c2422,newStart:_0x1936c7}=parseHunkHeader(_0x114e4b['header']);let _0x2f47ac=_0x4c2422,_0x5c87bb=_0x1936c7;const _0x4ca7d2=_0x114e4b['lines']['map'](_0x84b45e=>({'line':_0x84b45e,'type':_0x84b45e['startsWith']('+')?'add':_0x84b45e['startsWith']('-')?'remove':_0x84b45e['startsWith']('\x5c')?'meta':'context'}));let _0x4e8de1=0x0;while(_0x4e8de1<_0x4ca7d2['length']){if(_0x4ca7d2[_0x4e8de1]['type']==='remove'){let _0x548f69=_0x4e8de1,_0x5f0d2d=_0x4e8de1;while(_0x5f0d2d<_0x4ca7d2['length']&&_0x4ca7d2[_0x5f0d2d]['type']==='remove')_0x5f0d2d++;let _0xf3792e=_0x5f0d2d,_0x318da1=_0xf3792e;while(_0x318da1<_0x4ca7d2['length']&&_0x4ca7d2[_0x318da1]['type']==='add')_0x318da1++;const _0x2fbfc3=_0x5f0d2d-_0x548f69,_0x52238e=_0x318da1-_0xf3792e,_0x31bc74=Math['min'](_0x2fbfc3,_0x52238e);for(let _0x35464a=0x0;_0x35464a<_0x31bc74;_0x35464a++){const _0x1b8b82=_0x4ca7d2[_0x548f69+_0x35464a]['line']['substring'](0x1),_0x5d2147=_0x4ca7d2[_0xf3792e+_0x35464a]['line']['substring'](0x1),_0x4b4e1c=computeWordDiff(_0x1b8b82,_0x5d2147);_0x4ca7d2[_0x548f69+_0x35464a]['wordDiff']=_0x4b4e1c['old'],_0x4ca7d2[_0xf3792e+_0x35464a]['wordDiff']=_0x4b4e1c['new'];}_0x4e8de1=_0x318da1;}else _0x4e8de1++;}const _0x243d80=_0x4ca7d2['map'](_0x58dd32=>{const _0x3b5d05=_0x58dd32['line'];if(_0x3b5d05['startsWith']('+')){const _0x5ee39a=_0x3b5d05['substring'](0x1),_0x528d3e=_0x58dd32['wordDiff']?renderDiffLineWithWordHighlight(_0x5ee39a,_0x58dd32['wordDiff'],'add',_0x3c387a):highlightDiffLine(_0x5ee39a,_0x3c387a),_0x1584ab='<div\x20class=\x22diff-line\x20diff-add\x22><span\x20class=\x22diff-line-num\x20diff-line-num-old\x22></span><span\x20class=\x22diff-line-num\x20diff-line-num-new\x22>'+_0x5c87bb+'</span><span\x20class=\x22diff-line-content\x22><span\x20class=\x22diff-prefix\x22>+</span>'+_0x528d3e+'</span></div>';return _0x5c87bb+=0x1,_0x1584ab;}if(_0x3b5d05['startsWith']('-')){const _0x565e35=_0x3b5d05['substring'](0x1),_0x31c5a2=_0x58dd32['wordDiff']?renderDiffLineWithWordHighlight(_0x565e35,_0x58dd32['wordDiff'],'remove',_0x3c387a):highlightDiffLine(_0x565e35,_0x3c387a),_0x548b7c='<div\x20class=\x22diff-line\x20diff-remove\x22><span\x20class=\x22diff-line-num\x20diff-line-num-old\x22>'+_0x2f47ac+'</span><span\x20class=\x22diff-line-num\x20diff-line-num-new\x22></span><span\x20class=\x22diff-line-content\x22><span\x20class=\x22diff-prefix\x22>-</span>'+_0x31c5a2+'</span></div>';return _0x2f47ac+=0x1,_0x548b7c;}if(_0x3b5d05['startsWith']('\x5c'))return'<div\x20class=\x22diff-line\x20diff-meta\x22><span\x20class=\x22diff-line-num\x20diff-line-num-old\x22></span><span\x20class=\x22diff-line-num\x20diff-line-num-new\x22></span><span\x20class=\x22diff-line-content\x22>'+Utils['escapeHtml'](_0x3b5d05)+'</span></div>';const _0x28a8ce=_0x3b5d05['startsWith']('\x20')?_0x3b5d05['substring'](0x1):_0x3b5d05,_0x2bacdf=highlightDiffLine(_0x28a8ce,_0x3c387a),_0x87d86b='<div\x20class=\x22diff-line\x20diff-context\x22><span\x20class=\x22diff-line-num\x20diff-line-num-old\x22>'+_0x2f47ac+'</span><span\x20class=\x22diff-line-num\x20diff-line-num-new\x22>'+_0x5c87bb+'</span><span\x20class=\x22diff-line-content\x22>\x20'+_0x2bacdf+'</span></div>';return _0x2f47ac+=0x1,_0x5c87bb+=0x1,_0x87d86b;})['join']('');return'<div\x20class=\x22diff-hunk\x22><div\x20class=\x22diff-hunk-header\x22>'+Utils['escapeHtml'](_0x114e4b['header'])+'</div>'+_0x243d80+'</div>';})['join'](''),_0x96d872=_0x3458d0||'<div\x20class=\x22diff-hunk\x22><div\x20class=\x22diff-hunk-header\x22>No\x20textual\x20diff\x20available</div></div>';return'\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22file-diff\x22\x20id=\x22file-'+_0x537d34+'\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22file-diff-header\x22\x20data-diff-id=\x22'+_0x537d34+'\x22\x20data-file-name=\x22'+Utils['escapeHtml'](_0x2a3b90)+'\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22file-diff-title\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-status-badge\x20'+_0x412db2+'\x22>'+_0x247b1b+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-diff-name\x22>'+Utils['escapeHtml'](_0x2a3b90)+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-diff-stat\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22diff-add\x22>+'+_0x2537ba+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22diff-del\x22>-'+_0x3261e2+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22file-diff-toggle-btn\x22\x20data-diff-id=\x22'+_0x537d34+'\x22\x20data-collapsed=\x22'+_0x207d45+'\x22\x20type=\x22button\x22\x20aria-label=\x22'+(_0x207d45?'Expand':'Collapse')+'\x22></button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22file-diff-content\x20'+(_0x207d45?'collapsed':'')+'\x22\x20id=\x22'+_0x537d34+'\x22>'+_0x96d872+'</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20';})['join']('');}function renderSplitDiff(_0xcaccc5,_0x4a2cfd,_0x5320d1=0x0,_0x128a12={}){return _0xcaccc5['map']((_0xf81d0c,_0x52328b)=>{const _0x1ce543=_0x5320d1+_0x52328b,_0x3ce7f0=_0xf81d0c['newPath']||_0xf81d0c['oldPath']||'unknown',_0x5a5a7b='diff-'+_0x4a2cfd+'-'+_0x1ce543,_0x3280bf=getFileLanguage(_0x3ce7f0),{additions:_0x18d961,deletions:_0x140851}=calculateDiffStats([_0xf81d0c]),_0x3dcb52=getCollapsedState(_0x4a2cfd,_0x3ce7f0,_0x128a12['defaultCollapsed']),_0xa6845e=getFileStatus(_0xf81d0c,_0x18d961,_0x140851),_0xaf3c91=_0xa6845e==='added'?'A':_0xa6845e==='deleted'?'D':'M',_0x232d99=_0xf81d0c['hunks']['map'](_0x14100b=>{const {oldStart:_0x16d8e6,newStart:_0x7ce65f}=parseHunkHeader(_0x14100b['header']);let _0x156ec8=_0x16d8e6,_0x4bfcb4=_0x7ce65f;const _0x513213=[],_0x41c81d=_0x14100b['lines'];let _0x10ca34=0x0;while(_0x10ca34<_0x41c81d['length']){const _0x4905bf=_0x41c81d[_0x10ca34];if(_0x4905bf['startsWith']('\x20')){const _0x5c9bed=_0x4905bf['substring'](0x1);_0x513213['push'](renderSplitRow({'type':'context','lineNum':_0x156ec8,'content':_0x5c9bed},{'type':'context','lineNum':_0x4bfcb4,'content':_0x5c9bed},_0x3280bf)),_0x156ec8+=0x1,_0x4bfcb4+=0x1,_0x10ca34+=0x1;continue;}if(_0x4905bf['startsWith']('-')){const _0x3ac607=[];while(_0x10ca34<_0x41c81d['length']&&_0x41c81d[_0x10ca34]['startsWith']('-')){_0x3ac607['push'](_0x41c81d[_0x10ca34]['substring'](0x1)),_0x10ca34+=0x1;}const _0x391763=[];let _0x54da5a=_0x10ca34;while(_0x54da5a<_0x41c81d['length']&&_0x41c81d[_0x54da5a]['startsWith']('+')){_0x391763['push'](_0x41c81d[_0x54da5a]['substring'](0x1)),_0x54da5a+=0x1;}const _0x3189d9=Math['max'](_0x3ac607['length'],_0x391763['length']);for(let _0x4ca1d9=0x0;_0x4ca1d9<_0x3189d9;_0x4ca1d9++){const _0x470979=_0x3ac607[_0x4ca1d9]?{'type':'remove','lineNum':_0x156ec8++,'content':_0x3ac607[_0x4ca1d9]}:{'type':'empty','lineNum':'','content':''},_0x30174d=_0x391763[_0x4ca1d9]?{'type':'add','lineNum':_0x4bfcb4++,'content':_0x391763[_0x4ca1d9]}:{'type':'empty','lineNum':'','content':''};_0x513213['push'](renderSplitRow(_0x470979,_0x30174d,_0x3280bf));}_0x10ca34=_0x54da5a;continue;}if(_0x4905bf['startsWith']('+')){const _0x4e5d29=[];while(_0x10ca34<_0x41c81d['length']&&_0x41c81d[_0x10ca34]['startsWith']('+')){_0x4e5d29['push'](_0x41c81d[_0x10ca34]['substring'](0x1)),_0x10ca34+=0x1;}_0x4e5d29['forEach'](_0x49e36c=>{_0x513213['push'](renderSplitRow({'type':'empty','lineNum':'','content':''},{'type':'add','lineNum':_0x4bfcb4++,'content':_0x49e36c},_0x3280bf));});continue;}if(_0x4905bf['startsWith']('\x5c')){_0x513213['push'](renderSplitRow({'type':'meta','lineNum':'','content':_0x4905bf},{'type':'meta','lineNum':'','content':_0x4905bf},_0x3280bf)),_0x10ca34+=0x1;continue;}_0x10ca34+=0x1;}const _0x5526ae=_0x513213['join']('')||'<div\x20class=\x22diff-hunk\x22>No\x20textual\x20diff\x20available</div>';return'\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22diff-hunk\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22diff-hunk-header\x22>'+Utils['escapeHtml'](_0x14100b['header'])+'</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22split-diff-table\x22>'+_0x5526ae+'</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20';})['join'](''),_0x2380e7=_0x232d99||'<div\x20class=\x22diff-hunk\x22><div\x20class=\x22diff-hunk-header\x22>No\x20textual\x20diff\x20available</div></div>';return'\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22file-diff\x22\x20id=\x22file-'+_0x5a5a7b+'\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22file-diff-header\x22\x20data-diff-id=\x22'+_0x5a5a7b+'\x22\x20data-file-name=\x22'+Utils['escapeHtml'](_0x3ce7f0)+'\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22file-diff-title\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-status-badge\x20'+_0xa6845e+'\x22>'+_0xaf3c91+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-diff-name\x22>'+Utils['escapeHtml'](_0x3ce7f0)+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-diff-stat\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22diff-add\x22>+'+_0x18d961+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22diff-del\x22>-'+_0x140851+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22file-diff-toggle-btn\x22\x20data-diff-id=\x22'+_0x5a5a7b+'\x22\x20data-collapsed=\x22'+_0x3dcb52+'\x22\x20type=\x22button\x22\x20aria-label=\x22'+(_0x3dcb52?'Expand':'Collapse')+'\x22></button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22file-diff-content\x20'+(_0x3dcb52?'collapsed':'')+'\x22\x20id=\x22'+_0x5a5a7b+'\x22>'+_0x2380e7+'</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20';})['join']('');}function renderSplitRow(_0x37ae09,_0x3c3803,_0x2de6a7){return'\x0a\x20\x20\x20\x20<div\x20class=\x22split-diff-row\x22>\x0a\x20\x20\x20\x20\x20\x20'+renderSplitCell(_0x37ae09,_0x2de6a7)+'\x0a\x20\x20\x20\x20\x20\x20'+renderSplitCell(_0x3c3803,_0x2de6a7)+'\x0a\x20\x20\x20\x20</div>\x0a\x20\x20';}function renderSplitCell(_0x58cae4,_0x573895){const _0x489d10='split-'+_0x58cae4['type'],_0x44f931=_0x58cae4['lineNum']===0x0?'':_0x58cae4['lineNum'];let _0x2bc553=' ';if(_0x58cae4['type']==='meta')_0x2bc553=Utils['escapeHtml'](_0x58cae4['content']);else _0x58cae4['type']!=='empty'&&(_0x2bc553=highlightDiffLine(_0x58cae4['content'],_0x573895));return'\x0a\x20\x20\x20\x20<div\x20class=\x22split-diff-cell\x20'+_0x489d10+'\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20class=\x22split-line-num\x22>'+_0x44f931+'</span>\x0a\x20\x20\x20\x20\x20\x20<span\x20class=\x22split-line-content\x22>'+_0x2bc553+'</span>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20';}function bindDiffToggleHandlers(_0x10a47f){const _0x28d81a=elements['diffContainer']['querySelectorAll']('.file-diff-header');_0x28d81a['forEach'](_0x55efc6=>{if(_0x55efc6['dataset']['bound']==='true')return;_0x55efc6['dataset']['bound']='true',_0x55efc6['addEventListener']('click',_0x1f706a=>{if(_0x1f706a['target']['closest']('.file-diff-toggle-btn'))return;const _0x1f0782=_0x55efc6['dataset']['diffId'];toggleDiff(_0x1f0782,_0x55efc6['dataset']['fileName'],_0x10a47f);});});const _0x254438=elements['diffContainer']['querySelectorAll']('.file-diff-toggle-btn');_0x254438['forEach'](_0x32756e=>{if(_0x32756e['dataset']['bound']==='true')return;_0x32756e['dataset']['bound']='true',_0x32756e['addEventListener']('click',_0x280a2e=>{_0x280a2e['stopPropagation']();const _0x47c3c9=elements['diffContainer']['querySelector']('.file-diff-header[data-diff-id=\x22'+_0x32756e['dataset']['diffId']+'\x22]'),_0x3bc45d=_0x47c3c9?.['dataset']['fileName']||'';toggleDiff(_0x32756e['dataset']['diffId'],_0x3bc45d,_0x10a47f);});});}function toggleDiff(_0x7f3e1b,_0x5e4b49,_0x146f23){const _0x330258=document['getElementById'](_0x7f3e1b),_0x46c008=elements['diffContainer']['querySelector']('.file-diff-header[data-diff-id=\x22'+_0x7f3e1b+'\x22]'),_0x38efa9=_0x46c008?.['querySelector']('.file-diff-toggle-btn');if(!_0x330258)return;const _0x1568c5=_0x330258['classList']['toggle']('collapsed');_0x38efa9&&(_0x38efa9['dataset']['collapsed']=String(_0x1568c5),_0x38efa9['setAttribute']('aria-label',_0x1568c5?'Expand':'Collapse'));const _0x2d6a97=getStorageKey(_0x146f23,_0x5e4b49);localStorage['setItem'](_0x2d6a97,String(_0x1568c5));}function setAllDiffCollapsed(_0x3758df){if(!state['commitDetail']?.['commit']?.['hash'])return;const _0x42afbe='git-history-'+state['commitDetail']['commit']['hash'];if(state['diffRender']?.['files']?.['length']){const _0x3c6b01=buildCollapsedStateUpdates({'files':state['diffRender']['files'],'collapsed':_0x3758df,'storageKeyPrefix':_0x42afbe,'getStorageKey':getStorageKey});_0x3c6b01['forEach'](({key:_0x2f4051,value:_0x2561e9})=>{localStorage['setItem'](_0x2f4051,_0x2561e9);});}const _0x1f418e=elements['diffContainer']['querySelectorAll']('.file-diff-content');_0x1f418e['forEach'](_0x48ef81=>{_0x48ef81['classList']['toggle']('collapsed',_0x3758df);const _0x27727=elements['diffContainer']['querySelector']('.file-diff-header[data-diff-id=\x22'+_0x48ef81['id']+'\x22]'),_0x32a270=_0x27727?.['querySelector']('.file-diff-toggle-btn'),_0x5440a7=_0x27727?.['dataset']['fileName']||'';_0x32a270&&(_0x32a270['dataset']['collapsed']=String(_0x3758df),_0x32a270['setAttribute']('aria-label',_0x3758df?'Expand':'Collapse')),_0x5440a7&&localStorage['setItem'](getStorageKey(_0x42afbe,_0x5440a7),String(_0x3758df));});}function getStorageKey(_0x30c5b5,_0x442779){return _0x30c5b5+'-'+safeBase64(_0x442779);}function getCollapsedState(_0x3c3cc4,_0x5b2135,_0x8e2a9d=![]){const _0xb81313=localStorage['getItem'](getStorageKey(_0x3c3cc4,_0x5b2135));if(_0xb81313===null)return Boolean(_0x8e2a9d);return _0xb81313==='true';}function safeBase64(_0x38cdbf){try{return btoa(unescape(encodeURIComponent(_0x38cdbf)));}catch(_0x31752c){return btoa(_0x38cdbf);}}function formatDate(_0x3dc97c){if(!_0x3dc97c)return'';const _0x2f168d=new Date(_0x3dc97c);if(Number['isNaN'](_0x2f168d['getTime']()))return _0x3dc97c;return _0x2f168d['toLocaleString']('en-US',{'month':'short','day':'numeric','year':'numeric','hour':'2-digit','minute':'2-digit'});}function renderLoadingSkeletons(_0x1b5b0e){return Array(_0x1b5b0e)['fill'](0x0)['map'](()=>'\x0a\x20\x20\x20\x20<li\x20class=\x22commit-item\x20commit-item-skeleton\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22skeleton\x20skeleton-message\x22></div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22skeleton-meta\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22skeleton\x20skeleton-avatar\x22></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22skeleton\x20skeleton-text\x22></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22skeleton\x20skeleton-text-short\x22></div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</li>\x0a\x20\x20')['join']('');}function toggleFileNav(_0xce3688){if(elements['fileNavToggle']?.['disabled'])return;_0xce3688['stopPropagation']();const _0x31faad=elements['fileNavSidebar']?.['classList']['toggle']('open');_0x31faad&&renderFileNavList();}function closeFileNav(){elements['fileNavSidebar']?.['classList']['remove']('open');}function toggleMaximize(){if(!elements['gitHistoryBody'])return;const _0x3a9a75=elements['gitHistoryBody']['classList']['toggle']('maximized'),_0x167023=elements['maximizeBtn']?.['querySelector']('.maximize-icon'),_0x19500e=elements['maximizeBtn']?.['querySelector']('.restore-icon');_0x167023&&_0x19500e&&(_0x167023['hidden']=_0x3a9a75,_0x19500e['hidden']=!_0x3a9a75),elements['maximizeBtn']&&(elements['maximizeBtn']['title']=_0x3a9a75?'Restore\x20diff\x20panel\x20(Esc\x20or\x20m)':'Maximize\x20diff\x20panel\x20(m)'),localStorage['setItem']('git-history-maximized',String(_0x3a9a75));}function renderFileNavList(){if(!state['commitDetail']?.['files']||!elements['fileNavList'])return;const _0x79089b=state['commitDetail']['files'];elements['fileNavList']['innerHTML']=_0x79089b['map']((_0x268326,_0x580a44)=>{const _0x5dc929=_0x268326['newPath']||_0x268326['oldPath']||'unknown',_0x50995f=_0x5dc929['split']('/')['pop'](),{additions:_0x479e37,deletions:_0x31840d}=calculateDiffStats([_0x268326]),_0x4e0023=getFileStatus(_0x268326,_0x479e37,_0x31840d),_0x173156=getStatusIcon(_0x4e0023);return'\x0a\x20\x20\x20\x20\x20\x20<li\x20class=\x22file-nav-item\x22\x20data-file-idx=\x22'+_0x580a44+'\x22\x20data-file-name=\x22'+Utils['escapeHtml'](_0x5dc929)+'\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-nav-icon\x20'+_0x4e0023+'\x22>'+_0x173156+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-nav-name\x22\x20title=\x22'+Utils['escapeHtml'](_0x5dc929)+'\x22>'+Utils['escapeHtml'](_0x50995f)+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-nav-stats\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(_0x479e37>0x0?'<span\x20class=\x22add\x22>+'+_0x479e37+'</span>':'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(_0x31840d>0x0?'<span\x20class=\x22del\x22>-'+_0x31840d+'</span>':'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20';})['join'](''),elements['fileNavList']['querySelectorAll']('.file-nav-item')['forEach'](_0x4dbb2c=>{_0x4dbb2c['addEventListener']('click',()=>{const _0x1cfd07=parseInt(_0x4dbb2c['dataset']['fileIdx']||'0',0xa),_0x4e771d='git-history-'+state['commitDetail']['commit']['hash'],_0x4e65ff='diff-'+_0x4e771d+'-'+_0x1cfd07;ensureLazyDiffFileRendered(_0x1cfd07);const _0x142ea5=document['getElementById'](_0x4e65ff);if(_0x142ea5){if(_0x142ea5['classList']['contains']('collapsed')){const _0x374861=elements['diffContainer']['querySelector']('.file-diff-header[data-diff-id=\x22'+_0x4e65ff+'\x22]'),_0x272aad=_0x374861?.['dataset']['fileName']||'';toggleDiff(_0x4e65ff,_0x272aad,_0x4e771d);}const _0x430fba=_0x142ea5['closest']('.file-diff');_0x430fba&&(_0x430fba['scrollIntoView']({'behavior':'smooth','block':'start'}),_0x430fba['classList']['add']('highlighted'),setTimeout(()=>_0x430fba['classList']['remove']('highlighted'),0x5dc));}closeFileNav();});});}function getFileStatus(_0x50d9f8,_0x2d06d3,_0x19e20e){if(_0x50d9f8['isDeleted'])return'deleted';if(_0x2d06d3>0x0&&_0x19e20e===0x0)return'added';return'modified';}function getStatusIcon(_0x4e45f1){switch(_0x4e45f1){case'added':return'<svg\x20viewBox=\x220\x200\x2024\x2024\x22\x20fill=\x22none\x22\x20stroke=\x22currentColor\x22\x20stroke-width=\x222\x22><line\x20x1=\x2212\x22\x20y1=\x225\x22\x20x2=\x2212\x22\x20y2=\x2219\x22/><line\x20x1=\x225\x22\x20y1=\x2212\x22\x20x2=\x2219\x22\x20y2=\x2212\x22/></svg>';case'deleted':return'<svg\x20viewBox=\x220\x200\x2024\x2024\x22\x20fill=\x22none\x22\x20stroke=\x22currentColor\x22\x20stroke-width=\x222\x22><line\x20x1=\x225\x22\x20y1=\x2212\x22\x20x2=\x2219\x22\x20y2=\x2212\x22/></svg>';default:return'<svg\x20viewBox=\x220\x200\x2024\x2024\x22\x20fill=\x22none\x22\x20stroke=\x22currentColor\x22\x20stroke-width=\x222\x22><path\x20d=\x22M11\x204H4a2\x202\x200\x200\x200-2\x202v14a2\x202\x200\x200\x200\x202\x202h14a2\x202\x200\x200\x200\x202-2v-7\x22/><path\x20d=\x22M18.5\x202.5a2.121\x202.121\x200\x200\x201\x203\x203L12\x2015l-4\x201\x201-4\x209.5-9.5z\x22/></svg>';}}function detectCommitType(_0x463942){if(!_0x463942)return null;const _0x103dce=_0x463942['toLowerCase']();if(/^feat(\(|:|\s)/['test'](_0x103dce)||_0x103dce['includes']('add\x20')||_0x103dce['includes']('implement'))return'feat';if(/^fix(\(|:|\s)/['test'](_0x103dce)||_0x103dce['includes']('bug')||_0x103dce['includes']('patch'))return'fix';if(/^refactor(\(|:|\s)/['test'](_0x103dce)||_0x103dce['includes']('refactor')||_0x103dce['includes']('restructure'))return'refactor';if(/^docs?(\(|:|\s)/['test'](_0x103dce)||_0x103dce['includes']('readme')||_0x103dce['includes']('documentation'))return'docs';if(/^test(\(|:|\s)/['test'](_0x103dce)||_0x103dce['includes']('test'))return'test';if(/^chore(\(|:|\s)/['test'](_0x103dce)||_0x103dce['includes']('chore')||_0x103dce['includes']('update\x20dep'))return'chore';return null;}
|
|
1
|
+
import{API,Utils,CustomSelect,ConfirmDialog,initializeAdminMenu}from'./app.js';import{initTheme,mountThemeToggle}from'./theme.js';import{DEFAULT_LAZY_RENDER_MIN_FILES,DEFAULT_LAZY_RENDER_MAX_FILES,DEFAULT_LAZY_RENDER_CHUNK_SIZE,DEFAULT_AUTO_COLLAPSE_MIN_FILES,shouldUseLazyRendering as _0x2921e8,shouldAutoCollapseDiff as _0x597e70,getNextRenderedCount,renderedCountForTarget,getLazyLoadMoreText as _0x25d3ec,buildCollapsedStateUpdates}from'./git-history-lazy-utils.js';const state={'environments':[],'repos':[],'branches':[],'selectedEnvironment':'','selectedRepo':'','selectedBranch':'','commits':[],'selectedCommit':null,'commitDetail':null,'activeBranch':'','diffView':localStorage['getItem']('git-history-diff-view')||'unified','pagination':{'limit':0x19,'offset':0x0,'hasMore':![],'search':''},'loadingHistory':![],'loadingCommit':![],'loadingBranches':![],'dataSource':'local','diffRender':null},elements={},SEARCH_DEBOUNCE_MS=0x12c,LAZY_RENDER_MIN_FILES=DEFAULT_LAZY_RENDER_MIN_FILES,LAZY_RENDER_MAX_FILES=DEFAULT_LAZY_RENDER_MAX_FILES,LAZY_RENDER_CHUNK_SIZE=DEFAULT_LAZY_RENDER_CHUNK_SIZE,AUTO_COLLAPSE_MIN_FILES=DEFAULT_AUTO_COLLAPSE_MIN_FILES;let searchTimer=null;const OPEN_NEW_TAB_STORAGE_KEY='open-tasks-in-new-tab',branchCache=new Map(),BRANCH_CACHE_TTL_MS=0x5*0x3c*0x3e8;document['addEventListener']('DOMContentLoaded',initialize);async function initialize(){try{initTheme(),mountThemeToggle(),ConfirmDialog['init'](),Object['assign'](elements,{'loading':document['getElementById']('git-history-loading'),'error':document['getElementById']('git-history-error'),'errorMessage':document['getElementById']('git-history-error-message'),'retryBtn':document['getElementById']('retry-git-history-btn'),'content':document['getElementById']('git-history-content'),'envSelect':document['getElementById']('env-select'),'repoSelect':document['getElementById']('repo-select'),'branchSelect':document['getElementById']('branch-select'),'commitList':document['getElementById']('commit-list'),'commitCount':document['getElementById']('commit-count'),'prevBtn':document['getElementById']('prev-page-btn'),'nextBtn':document['getElementById']('next-page-btn'),'searchInput':document['getElementById']('commit-search'),'clearSearchBtn':document['getElementById']('clear-search-btn'),'branchPill':document['getElementById']('repo-branch-pill'),'branchName':document['getElementById']('repo-branch-name'),'placeholder':document['getElementById']('commit-placeholder'),'detailPanel':document['getElementById']('commit-detail'),'commitMessage':document['getElementById']('commit-message'),'commitAuthor':document['getElementById']('commit-author'),'commitDate':document['getElementById']('commit-date'),'commitHash':document['getElementById']('commit-hash'),'copyHashBtn':document['getElementById']('copy-hash-btn'),'viewOnProviderBtn':document['getElementById']('view-on-provider-btn'),'revertBtn':document['getElementById']('revert-btn'),'diffStats':document['getElementById']('diff-stats'),'diffContainer':document['getElementById']('commit-diff'),'expandAllBtn':document['getElementById']('expand-all-btn'),'collapseAllBtn':document['getElementById']('collapse-all-btn'),'mergeControls':document['getElementById']('merge-controls'),'mainlineSelect':document['getElementById']('mainline-select'),'fileNavToggle':document['getElementById']('file-nav-toggle'),'fileNavSidebar':document['getElementById']('file-nav-sidebar'),'fileNavList':document['getElementById']('file-nav-list'),'fileNavClose':document['getElementById']('file-nav-close'),'fileNavCount':document['getElementById']('file-nav-count'),'maximizeBtn':document['getElementById']('maximize-diff-btn'),'gitHistoryBody':document['querySelector']('.git-history-body')});const _0x2c0b93=await checkAccess();await initializeAdminMenu(_0x2c0b93),setupEventListeners(),initializeDiffViewToggle(),await loadEnvironments(),elements['loading']['hidden']=!![],elements['content']['hidden']=![];}catch(_0x253cc1){console['error']('Git\x20history\x20initialization\x20error:',_0x253cc1),elements['loading']['hidden']=!![],elements['error']['hidden']=![],elements['errorMessage']['textContent']=_0x253cc1['message']||'Unknown\x20error';}}async function checkAccess(){try{const _0x4e1cf1=await API['getCurrentUser'](),_0x36596b=_0x4e1cf1['hasEnvironmentGit']===!![];if(!_0x36596b){Utils['showToast']('Access\x20denied:\x20Git\x20permissions\x20required','error'),setTimeout(()=>{window['location']['href']='index.html';},0x708);throw new Error('Access\x20denied');}return _0x4e1cf1;}catch(_0x5602af){_0x5602af['message']!=='Access\x20denied'&&(window['location']['href']='login.html');throw _0x5602af;}}function setupEventListeners(){elements['retryBtn']?.['addEventListener']('click',()=>window['location']['reload']()),elements['envSelect']?.['addEventListener']('change',handleEnvironmentChange),elements['repoSelect']?.['addEventListener']('change',handleRepoChange),elements['branchSelect']?.['addEventListener']('change',handleBranchChange),elements['prevBtn']?.['addEventListener']('click',()=>changePage(-0x1)),elements['nextBtn']?.['addEventListener']('click',()=>changePage(0x1)),elements['searchInput']?.['addEventListener']('input',handleSearchInput),elements['clearSearchBtn']?.['addEventListener']('click',clearSearch),elements['commitList']?.['addEventListener']('click',_0xc9be6a=>{const _0x27ac92=_0xc9be6a['target']['closest']('.commit-item');if(!_0x27ac92)return;selectCommit(_0x27ac92['dataset']['hash']);}),elements['copyHashBtn']?.['addEventListener']('click',handleCopyHash),elements['revertBtn']?.['addEventListener']('click',handleRevertCommit),elements['expandAllBtn']?.['addEventListener']('click',()=>setAllDiffCollapsed(![])),elements['collapseAllBtn']?.['addEventListener']('click',()=>setAllDiffCollapsed(!![])),elements['fileNavToggle']?.['addEventListener']('click',toggleFileNav),elements['fileNavClose']?.['addEventListener']('click',closeFileNav),document['addEventListener']('click',_0x22cee9=>{!_0x22cee9['target']['closest']('.file-nav-container')&&closeFileNav();}),elements['maximizeBtn']?.['addEventListener']('click',toggleMaximize),document['addEventListener']('keydown',handleKeyboardNavigation);}function handleKeyboardNavigation(_0x2553a3){if(_0x2553a3['target']['matches']('input,\x20select,\x20textarea'))return;const _0x1eeb67=Array['from'](elements['commitList']?.['querySelectorAll']('.commit-item')||[]);if(_0x1eeb67['length']===0x0)return;const _0x4f0937=_0x1eeb67['findIndex'](_0x1c9bfd=>_0x1c9bfd['classList']['contains']('selected'));switch(_0x2553a3['key']){case'j':case'ArrowDown':{_0x2553a3['preventDefault']();const _0x4e1dce=_0x4f0937<_0x1eeb67['length']-0x1?_0x4f0937+0x1:_0x4f0937,_0x1380b8=_0x1eeb67[_0x4e1dce]?.['dataset']['hash'];_0x1380b8&&(selectCommit(_0x1380b8),_0x1eeb67[_0x4e1dce]['scrollIntoView']({'block':'nearest','behavior':'smooth'}));break;}case'k':case'ArrowUp':{_0x2553a3['preventDefault']();const _0x17290d=_0x4f0937>0x0?_0x4f0937-0x1:0x0,_0x12bd93=_0x1eeb67[_0x17290d]?.['dataset']['hash'];_0x12bd93&&(selectCommit(_0x12bd93),_0x1eeb67[_0x17290d]['scrollIntoView']({'block':'nearest','behavior':'smooth'}));break;}case'Enter':{state['selectedCommit']&&elements['diffContainer']?.['focus']();break;}case'c':{state['commitDetail']?.['commit']?.['hash']&&handleCopyHash();break;}case'e':{setAllDiffCollapsed(![]);break;}case'w':{setAllDiffCollapsed(!![]);break;}case'/':{_0x2553a3['preventDefault'](),elements['searchInput']?.['focus']();break;}case'Escape':{if(elements['gitHistoryBody']?.['classList']['contains']('maximized'))toggleMaximize();else document['activeElement']===elements['searchInput']&&elements['searchInput']['blur']();break;}case'm':{state['commitDetail']&&toggleMaximize();break;}}}function initializeDiffViewToggle(){const _0x4f6778=Array['from'](document['querySelectorAll']('.segmented-btn'));_0x4f6778['forEach'](_0x47c08b=>{_0x47c08b['classList']['toggle']('active',_0x47c08b['dataset']['view']===state['diffView']),_0x47c08b['addEventListener']('click',()=>{if(_0x47c08b['dataset']['view']===state['diffView'])return;state['diffView']=_0x47c08b['dataset']['view'],localStorage['setItem']('git-history-diff-view',state['diffView']),_0x4f6778['forEach'](_0x5dd38c=>_0x5dd38c['classList']['toggle']('active',_0x5dd38c===_0x47c08b)),renderCommitDiff();});});}async function loadEnvironments(){const _0x31f6c7=await API['getEnvironments']();state['environments']=_0x31f6c7['environments']||[],elements['envSelect']['innerHTML']='<option\x20value=\x22\x22>Select\x20environment</option>',state['environments']['forEach'](_0x24a34b=>{const _0x17fc43=document['createElement']('option');_0x17fc43['value']=_0x24a34b['name'],_0x17fc43['textContent']=_0x24a34b['name'],elements['envSelect']['appendChild'](_0x17fc43);}),new CustomSelect(elements['envSelect'],{'searchable':!![]}),new CustomSelect(elements['repoSelect'],{'searchable':!![]}),new CustomSelect(elements['branchSelect'],{'searchable':!![]});const _0x5a38a4=_0x31f6c7['default_environment']||state['environments'][0x0]?.['name']||'';_0x5a38a4&&(elements['envSelect']['value']=_0x5a38a4,elements['envSelect']['dispatchEvent'](new Event('change')));}async function handleEnvironmentChange(){state['selectedEnvironment']=elements['envSelect']['value'],state['selectedRepo']='',state['selectedBranch']='',state['activeBranch']='',state['repos']=[],state['branches']=[],elements['repoSelect']['innerHTML']='<option\x20value=\x22\x22>Select\x20repository</option>',elements['repoSelect']['disabled']=!![],elements['branchSelect']['innerHTML']='<option\x20value=\x22\x22>Select\x20branch</option>',elements['branchSelect']['disabled']=!![],elements['branchPill']['hidden']=!![],elements['commitList']['innerHTML']='',elements['commitCount']['textContent']='Select\x20a\x20repository\x20to\x20load\x20history.',resetCommitDetail();if(!state['selectedEnvironment'])return;try{const _0x39a3aa=await API['getEnvironment'](state['selectedEnvironment']);state['repos']=_0x39a3aa['repos']||[],elements['repoSelect']['innerHTML']='<option\x20value=\x22\x22>Select\x20repository</option>',state['repos']['forEach'](_0x3eea5a=>{const _0x249878=document['createElement']('option');_0x249878['value']=_0x3eea5a['name'],_0x249878['textContent']=_0x3eea5a['name'],elements['repoSelect']['appendChild'](_0x249878);}),elements['repoSelect']['disabled']=state['repos']['length']===0x0;const _0x1fc229=state['repos'][0x0]?.['name'];_0x1fc229&&(elements['repoSelect']['value']=_0x1fc229,elements['repoSelect']['dispatchEvent'](new Event('change')));}catch(_0x3ca303){Utils['showError'](_0x3ca303['message']||'Failed\x20to\x20load\x20repositories');}}async function handleRepoChange(){state['selectedRepo']=elements['repoSelect']['value'],state['selectedBranch']='',state['activeBranch']='',state['branches']=[],state['pagination']['offset']=0x0,state['pagination']['search']='',elements['searchInput']['value']='',elements['clearSearchBtn']['hidden']=!![],elements['branchSelect']['innerHTML']='<option\x20value=\x22\x22>Loading\x20branches...</option>',elements['branchSelect']['disabled']=!![],resetCommitDetail();if(!state['selectedRepo']){elements['commitList']['innerHTML']='',elements['commitCount']['textContent']='Select\x20a\x20repository\x20to\x20load\x20history.',elements['branchPill']['hidden']=!![],elements['branchSelect']['innerHTML']='<option\x20value=\x22\x22>Select\x20branch</option>';return;}await loadBranches(),loadHistory();}async function loadBranches(){if(!state['selectedEnvironment']||!state['selectedRepo'])return;if(state['loadingBranches'])return;state['loadingBranches']=!![];try{const _0x9229a7=state['selectedEnvironment']+':'+state['selectedRepo'],_0x30fc4b=branchCache['get'](_0x9229a7),_0x3ba015=Date['now']();let _0x2a20e7;_0x30fc4b&&_0x3ba015-_0x30fc4b['timestamp']<BRANCH_CACHE_TTL_MS?_0x2a20e7=_0x30fc4b:(_0x2a20e7=await API['getEnvironmentRepoBranches'](state['selectedEnvironment'],state['selectedRepo']),branchCache['set'](_0x9229a7,{..._0x2a20e7,'timestamp':_0x3ba015}));state['branches']=_0x2a20e7['branches']||[],elements['branchSelect']['innerHTML']='';const _0x561a86=document['createElement']('option');_0x561a86['value']='',_0x561a86['textContent']=_0x2a20e7['defaultBranch']?_0x2a20e7['defaultBranch']+'\x20(default)':_0x2a20e7['currentBranch']?_0x2a20e7['currentBranch']+'\x20(current)':'Select\x20branch',elements['branchSelect']['appendChild'](_0x561a86);const _0x1f51c1=_0x2a20e7['defaultBranch']||_0x2a20e7['currentBranch'];state['branches']['forEach'](_0xcf38c4=>{if(_0xcf38c4['name']===_0x1f51c1)return;const _0x5bf96c=document['createElement']('option');_0x5bf96c['value']=_0xcf38c4['name'];let _0x3dc20c=_0xcf38c4['name'];if(_0xcf38c4['isDefault'])_0x3dc20c+='\x20(default)';if(_0xcf38c4['isCurrent'])_0x3dc20c+='\x20(current)';_0x5bf96c['textContent']=_0x3dc20c,elements['branchSelect']['appendChild'](_0x5bf96c);}),elements['branchSelect']['disabled']=state['branches']['length']===0x0,_0x2a20e7['currentBranch']&&(state['selectedBranch']=''),elements['branchSelect']['value']=state['selectedBranch'],queueMicrotask(()=>{elements['branchSelect']['dispatchEvent'](new Event('change'));});}catch(_0x250993){console['error']('Failed\x20to\x20load\x20branches:',_0x250993),elements['branchSelect']['innerHTML']='<option\x20value=\x22\x22>Branch\x20loading\x20failed</option>',elements['branchSelect']['disabled']=!![];}finally{state['loadingBranches']=![];}}function handleBranchChange(){state['selectedBranch']=elements['branchSelect']['value'],state['pagination']['offset']=0x0,resetCommitDetail(),loadHistory();}async function loadHistory(_0x54aafd={}){if(!state['selectedEnvironment']||!state['selectedRepo'])return;if(state['loadingHistory'])return;state['loadingHistory']=!![],elements['commitList']['innerHTML']=renderLoadingSkeletons(0x5),elements['commitCount']['textContent']='Loading\x20history...';try{const _0x54a4ea={'limit':state['pagination']['limit'],'offset':state['pagination']['offset'],'search':state['pagination']['search']};state['selectedBranch']&&(_0x54a4ea['branch']=state['selectedBranch']);const _0x4f935b=await API['getEnvironmentRepoHistory'](state['selectedEnvironment'],state['selectedRepo'],_0x54a4ea);state['commits']=_0x4f935b['commits']||[],state['pagination']['hasMore']=_0x4f935b['pagination']?.['hasMore']||![],state['dataSource']=_0x4f935b['source']||'local',state['activeBranch']=_0x4f935b['repo']?.['branch']||state['selectedBranch']||'';_0x4f935b['repo']?.['branch']?(elements['branchName']['textContent']=_0x4f935b['repo']['branch'],elements['branchPill']['hidden']=![]):elements['branchPill']['hidden']=!![];updateSourceIndicator(),renderCommitList();const _0x2b96b4=_0x54aafd['keepSelection']&&state['selectedCommit'],_0x32ade8=state['commits']['some'](_0x4d9ca7=>_0x4d9ca7['hash']===state['selectedCommit']?.['hash']);if(_0x2b96b4&&_0x32ade8)highlightSelectedCommit();else state['commits']['length']>0x0?selectCommit(state['commits'][0x0]['hash'],{'silent':!![]}):resetCommitDetail();}catch(_0x2c0216){Utils['showError'](_0x2c0216['message']||'Failed\x20to\x20load\x20commit\x20history'),elements['commitList']['innerHTML']='',elements['commitCount']['textContent']='Unable\x20to\x20load\x20history.';}finally{state['loadingHistory']=![];}}function updateSourceIndicator(){let _0x1638e3=document['getElementById']('data-source-indicator');!_0x1638e3&&(_0x1638e3=document['createElement']('span'),_0x1638e3['id']='data-source-indicator',_0x1638e3['className']='source-indicator',elements['branchPill']?.['parentNode']?.['insertBefore'](_0x1638e3,elements['branchPill']['nextSibling'])),state['dataSource']==='remote'?(_0x1638e3['innerHTML']='\x0a\x20\x20\x20\x20\x20\x20<svg\x20class=\x22source-icon\x22\x20width=\x2214\x22\x20height=\x2214\x22\x20viewBox=\x220\x200\x2024\x2024\x22\x20fill=\x22none\x22\x20stroke=\x22currentColor\x22\x20stroke-width=\x222\x22\x20stroke-linecap=\x22round\x22\x20stroke-linejoin=\x22round\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<circle\x20cx=\x2212\x22\x20cy=\x2212\x22\x20r=\x2210\x22></circle>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<line\x20x1=\x222\x22\x20y1=\x2212\x22\x20x2=\x2222\x22\x20y2=\x2212\x22></line>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<path\x20d=\x22M12\x202a15.3\x2015.3\x200\x200\x201\x204\x2010\x2015.3\x2015.3\x200\x200\x201-4\x2010\x2015.3\x2015.3\x200\x200\x201-4-10\x2015.3\x2015.3\x200\x200\x201\x204-10z\x22></path>\x0a\x20\x20\x20\x20\x20\x20</svg>\x0a\x20\x20\x20\x20\x20\x20Remote\x0a\x20\x20\x20\x20',_0x1638e3['title']='Data\x20fetched\x20from\x20remote\x20Git\x20provider\x20(repository\x20not\x20cloned\x20locally)',_0x1638e3['hidden']=![]):_0x1638e3['hidden']=!![];}async function selectCommit(_0x407896,_0x1780a3={}){if(!_0x407896)return;if(state['loadingCommit'])return;const _0x362ac8=state['commits']['find'](_0x5354ef=>_0x5354ef['hash']===_0x407896);if(!_0x362ac8)return;state['selectedCommit']=_0x362ac8,highlightSelectedCommit();if(_0x1780a3['silent']){await loadCommitDetail(_0x407896);return;}await loadCommitDetail(_0x407896);}function highlightSelectedCommit(){const _0x33f003=elements['commitList']['querySelectorAll']('.commit-item');_0x33f003['forEach'](_0x13507e=>{_0x13507e['classList']['toggle']('selected',_0x13507e['dataset']['hash']===state['selectedCommit']?.['hash']);});}async function loadCommitDetail(_0x39c154){state['loadingCommit']=!![],elements['placeholder']['hidden']=!![],elements['detailPanel']['hidden']=![],elements['diffContainer']['innerHTML']='<div\x20class=\x22empty-state-card\x22>Loading\x20diff...</div>';try{const _0x5e0a8d=await API['getEnvironmentRepoCommit'](state['selectedEnvironment'],state['selectedRepo'],_0x39c154);state['commitDetail']=_0x5e0a8d,renderCommitDetail();}catch(_0x32f528){Utils['showError'](_0x32f528['message']||'Failed\x20to\x20load\x20commit\x20details'),elements['diffContainer']['innerHTML']='<div\x20class=\x22empty-state-card\x22>Unable\x20to\x20load\x20diff.</div>';}finally{state['loadingCommit']=![];}}function renderCommitList(){elements['commitList']['innerHTML']='';if(state['commits']['length']===0x0){const _0x5be09f=state['pagination']['search']?'No\x20commits\x20match\x20\x22'+state['pagination']['search']+'\x22.':'No\x20commits\x20found.';elements['commitCount']['textContent']=_0x5be09f,elements['commitList']['innerHTML']='\x0a\x20\x20\x20\x20\x20\x20<li\x20class=\x22commit-list-empty\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22empty-state-icon\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<svg\x20width=\x2224\x22\x20height=\x2224\x22\x20viewBox=\x220\x200\x2024\x2024\x22\x20fill=\x22none\x22\x20stroke=\x22currentColor\x22\x20stroke-width=\x222\x22\x20stroke-linecap=\x22round\x22\x20stroke-linejoin=\x22round\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<circle\x20cx=\x2212\x22\x20cy=\x2212\x22\x20r=\x2210\x22></circle>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<line\x20x1=\x2212\x22\x20y1=\x228\x22\x20x2=\x2212\x22\x20y2=\x2212\x22></line>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<line\x20x1=\x2212\x22\x20y1=\x2216\x22\x20x2=\x2212.01\x22\x20y2=\x2216\x22></line>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</svg>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p>'+Utils['escapeHtml'](_0x5be09f)+'</p>\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20',elements['prevBtn']['disabled']=!![],elements['nextBtn']['disabled']=!![];return;}const _0x50d67c=state['pagination']['offset']+0x1,_0xb9f216=state['pagination']['offset']+state['commits']['length'],_0x3e533b=state['pagination']['search']?_0x50d67c+'-'+_0xb9f216+'\x20matching\x20\x22'+state['pagination']['search']+'\x22':_0x50d67c+'-'+_0xb9f216;elements['commitCount']['textContent']=_0x3e533b,state['commits']['forEach']((_0x6de920,_0x5e35f4)=>{const _0x58d6f6=document['createElement']('li');_0x58d6f6['className']='commit-item',_0x58d6f6['dataset']['hash']=_0x6de920['hash'],_0x58d6f6['tabIndex']=0x0,_0x58d6f6['setAttribute']('role','button'),_0x58d6f6['setAttribute']('aria-label','Commit:\x20'+(_0x6de920['message']||'No\x20message')+'\x20by\x20'+(_0x6de920['author']||'Unknown')),_0x58d6f6['style']['animationDelay']=_0x5e35f4*0x19+'ms';const _0x514a30=getAuthorInitials(_0x6de920['author']),_0x1e123b=getAvatarColor(_0x6de920['author']||'Unknown'),_0x4d8c9a=detectCommitType(_0x6de920['message']),_0x121fed=_0x4d8c9a?'<span\x20class=\x22commit-type-indicator\x20'+_0x4d8c9a+'\x22>'+_0x4d8c9a+'</span>':'';_0x58d6f6['innerHTML']='\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22commit-message\x22>'+Utils['escapeHtml'](truncateMessage(_0x6de920['message']||'No\x20message',0x50))+'</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22commit-meta-row\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22commit-author-chip\x22\x20style=\x22--avatar-color:\x20'+_0x1e123b+'\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22author-avatar\x22>'+_0x514a30+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+Utils['escapeHtml'](_0x6de920['author']||'Unknown')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22commit-time\x22>'+Utils['formatRelativeTime'](_0x6de920['date'])+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22commit-short-hash\x22>'+_0x6de920['shortHash']+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20'+(_0x6de920['isMerge']?'<span\x20class=\x22commit-tag\x22>Merge</span>':'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20'+_0x121fed+'\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20',_0x58d6f6['addEventListener']('keydown',_0x441e1b=>{(_0x441e1b['key']==='Enter'||_0x441e1b['key']==='\x20')&&(_0x441e1b['preventDefault'](),selectCommit(_0x6de920['hash']));}),elements['commitList']['appendChild'](_0x58d6f6);}),elements['prevBtn']['disabled']=state['pagination']['offset']===0x0,elements['nextBtn']['disabled']=!state['pagination']['hasMore'],highlightSelectedCommit();}function getAuthorInitials(_0x1d3853){if(!_0x1d3853)return'?';const _0x423347=_0x1d3853['trim']()['split'](/\s+/);if(_0x423347['length']===0x1)return _0x423347[0x0]['charAt'](0x0)['toUpperCase']();return(_0x423347[0x0]['charAt'](0x0)+_0x423347[_0x423347['length']-0x1]['charAt'](0x0))['toUpperCase']();}function getAvatarColor(_0x153b53){let _0x3db7fd=0x0;for(let _0x463dc1=0x0;_0x463dc1<_0x153b53['length'];_0x463dc1++){_0x3db7fd=_0x153b53['charCodeAt'](_0x463dc1)+((_0x3db7fd<<0x5)-_0x3db7fd);}const _0x549103=Math['abs'](_0x3db7fd%0x168);return'hsl('+_0x549103+',\x2065%,\x2055%)';}function truncateMessage(_0x428c81,_0x2e538f){if(!_0x428c81)return'';const _0x2ff38f=_0x428c81['split']('\x0a')[0x0];if(_0x2ff38f['length']<=_0x2e538f)return _0x2ff38f;return _0x2ff38f['substring'](0x0,_0x2e538f-0x3)+'...';}function asFiniteNumber(_0x34fbb8){return Number['isFinite'](_0x34fbb8)?_0x34fbb8:null;}function formatFileCountLabel(_0x3980f9,_0x47cff6={}){const _0x388d4d=Boolean(_0x47cff6['lowerBound']),_0x1efe2a=_0x388d4d?'at\x20least\x20':'';return''+_0x1efe2a+_0x3980f9+'\x20file'+(_0x3980f9===0x1?'':'s');}function formatBytes(_0x536695){if(!Number['isFinite'](_0x536695)||_0x536695<=0x0)return'';const _0xc22b0c=_0x536695/(0x400*0x400);if(_0xc22b0c>=0x1)return _0xc22b0c['toFixed'](0x1)+'MB';const _0x2bb515=_0x536695/0x400;return Math['max'](0x1,Math['round'](_0x2bb515))+'KB';}function getEffectiveDiffStats(_0x5628d6,_0x3dda28){const _0x11e81d=asFiniteNumber(_0x3dda28?.['changedFiles']),_0x3acb15=asFiniteNumber(_0x3dda28?.['changedFilesLowerBound']),_0x4835df=asFiniteNumber(_0x3dda28?.['additions']),_0x41fa56=asFiniteNumber(_0x3dda28?.['deletions']);return{'files':_0x11e81d??_0x3acb15??_0x5628d6['files'],'filesIsLowerBound':_0x11e81d===null&&_0x3acb15!==null,'additions':_0x4835df??_0x5628d6['additions'],'deletions':_0x41fa56??_0x5628d6['deletions']};}function getDiffNoticeText(_0x26f9f5){if(!_0x26f9f5?.['truncated'])return'';if(_0x26f9f5['omitted']){const _0x20fa5d=asFiniteNumber(_0x26f9f5['changedFiles']),_0xe5508f=asFiniteNumber(_0x26f9f5['changedFilesLowerBound']),_0x1ba990=asFiniteNumber(_0x26f9f5['maxFiles']);if(_0x20fa5d!==null&&_0x1ba990!==null)return'Diff\x20omitted\x20because\x20this\x20commit\x20changes\x20'+_0x20fa5d['toLocaleString']()+'\x20files\x20(limit\x20'+_0x1ba990['toLocaleString']()+').';if(_0xe5508f!==null&&_0x1ba990!==null)return'Diff\x20omitted\x20because\x20this\x20commit\x20changes\x20at\x20least\x20'+_0xe5508f['toLocaleString']()+'\x20files\x20(limit\x20'+_0x1ba990['toLocaleString']()+').';if(_0xe5508f!==null)return'Diff\x20omitted\x20because\x20this\x20commit\x20changes\x20at\x20least\x20'+_0xe5508f['toLocaleString']()+'\x20files.';return'Diff\x20omitted\x20for\x20this\x20large\x20commit\x20to\x20keep\x20Git\x20History\x20responsive.';}const _0x1ef89b=asFiniteNumber(_0x26f9f5['maxBytes']);if(_0x1ef89b!==null)return'Showing\x20a\x20truncated\x20diff\x20preview\x20('+formatBytes(_0x1ef89b)+'\x20max)\x20to\x20keep\x20Git\x20History\x20responsive.';return'Showing\x20a\x20truncated\x20diff\x20preview\x20to\x20keep\x20Git\x20History\x20responsive.';}function shouldUseLazyRendering(_0x38d280,_0x2f5be1=null){const _0x5e833c=asFiniteNumber(_0x2f5be1?.['maxFiles']);return _0x2921e8(_0x38d280,{'minFiles':LAZY_RENDER_MIN_FILES,'maxFiles':LAZY_RENDER_MAX_FILES,'serverMaxFiles':_0x5e833c});}function shouldAutoCollapseDiff(_0x4bf960){return _0x597e70(_0x4bf960,{'threshold':AUTO_COLLAPSE_MIN_FILES});}function getLazyLoadMoreText(_0x320bef){if(!_0x320bef)return'Load\x20more\x20files';return _0x25d3ec({'filesLength':_0x320bef['files']['length'],'renderedCount':_0x320bef['renderedCount'],'chunkSize':_0x320bef['chunkSize']});}function ensureLazyDiffFileRendered(_0x1d3a43){if(!state['diffRender']?.['lazy'])return;const _0x298b57=renderedCountForTarget({'renderedCount':state['diffRender']['renderedCount'],'targetIndex':_0x1d3a43,'totalFiles':state['diffRender']['files']['length'],'chunkSize':state['diffRender']['chunkSize']});while(state['diffRender']['renderedCount']<_0x298b57){renderNextDiffChunk();}}function updateLazyLoadMoreControl(){const _0x1c033d=state['diffRender'];if(!_0x1c033d?.['lazy']||!elements['diffContainer'])return;const _0x2a19a0=elements['diffContainer']['querySelector']('.diff-load-more-control');if(!_0x2a19a0)return;if(_0x1c033d['renderedCount']>=_0x1c033d['files']['length']){_0x2a19a0['innerHTML']='<span\x20class=\x22diff-load-complete\x22>All\x20'+formatFileCountLabel(_0x1c033d['files']['length'])+'\x20loaded</span>';return;}_0x2a19a0['innerHTML']='<button\x20class=\x22btn-ghost\x20btn-small\x20diff-load-more-btn\x22\x20type=\x22button\x22>'+getLazyLoadMoreText(_0x1c033d)+'</button>';const _0x4f7c93=_0x2a19a0['querySelector']('.diff-load-more-btn');_0x4f7c93?.['addEventListener']('click',()=>{renderNextDiffChunk();});}function renderNextDiffChunk(){const _0xcb8f4=state['diffRender'];if(!_0xcb8f4?.['lazy']||!elements['diffContainer'])return;if(_0xcb8f4['renderedCount']>=_0xcb8f4['files']['length'])return;const _0x2660a2=elements['diffContainer']['querySelector']('.diff-files-host');if(!_0x2660a2)return;const _0x3da3d0=_0xcb8f4['renderedCount'],_0x49cd7d=getNextRenderedCount({'renderedCount':_0x3da3d0,'totalFiles':_0xcb8f4['files']['length'],'chunkSize':_0xcb8f4['chunkSize']}),_0x19b7a7=_0xcb8f4['files']['slice'](_0x3da3d0,_0x49cd7d),_0x21462f=state['diffView']==='split'?renderSplitDiff(_0x19b7a7,_0xcb8f4['storageKeyPrefix'],_0x3da3d0,{'defaultCollapsed':_0xcb8f4['defaultCollapsed']}):renderUnifiedDiff(_0x19b7a7,_0xcb8f4['storageKeyPrefix'],_0x3da3d0,{'defaultCollapsed':_0xcb8f4['defaultCollapsed']});_0x2660a2['insertAdjacentHTML']('beforeend',_0x21462f),_0xcb8f4['renderedCount']=_0x49cd7d,bindDiffToggleHandlers(_0xcb8f4['storageKeyPrefix']),updateLazyLoadMoreControl();}function renderCommitDetail(){if(!state['commitDetail']||!state['commitDetail']['commit']){resetCommitDetail();return;}const _0x5ed8ff=state['commitDetail']['commit'];elements['commitMessage']['textContent']=_0x5ed8ff['message']||'No\x20message',elements['commitAuthor']['textContent']=''+(_0x5ed8ff['author']||'Unknown')+(_0x5ed8ff['email']?'\x20('+_0x5ed8ff['email']+')':''),elements['commitDate']['textContent']=formatDate(_0x5ed8ff['date']),elements['commitHash']['textContent']=_0x5ed8ff['hash'];const _0x17fc3c=isSelectedCommitRemoteSource();elements['revertBtn']&&(elements['revertBtn']['hidden']=![],elements['revertBtn']['textContent']=_0x17fc3c?'Revert\x20via\x20task':'Revert\x20commit',elements['revertBtn']['title']=_0x17fc3c?'Create\x20a\x20task\x20that\x20applies\x20this\x20revert\x20and\x20stages\x20the\x20changes\x20for\x20approval':'');if(elements['viewOnProviderBtn']){const _0x223c43=getProviderCommitUrl(_0x5ed8ff['hash']);_0x223c43&&_0x17fc3c?(elements['viewOnProviderBtn']['hidden']=![],elements['viewOnProviderBtn']['href']=_0x223c43,elements['viewOnProviderBtn']['textContent']='View\x20on\x20'+getProviderDisplayName()):elements['viewOnProviderBtn']['hidden']=!![];}const _0x493836=_0x5ed8ff['parents']||[];_0x493836['length']>0x1?(elements['mergeControls']['hidden']=![],elements['mainlineSelect']['innerHTML']='',_0x493836['forEach']((_0x460bc7,_0x24eef4)=>{const _0x3b32f5=document['createElement']('option');_0x3b32f5['value']=String(_0x24eef4+0x1),_0x3b32f5['textContent']='Parent\x20'+(_0x24eef4+0x1)+'\x20-\x20'+_0x460bc7['slice'](0x0,0x7),elements['mainlineSelect']['appendChild'](_0x3b32f5);})):elements['mergeControls']['hidden']=!![];const _0x21112b=state['commitDetail']['diffMeta']||null,_0x88bf07=_0x21112b?.['omitted']?[]:parsePatchContent(state['commitDetail']['diff']||'');state['commitDetail']['files']=_0x88bf07;const _0x426476=calculateDiffStats(_0x88bf07),_0x447dd3=getEffectiveDiffStats(_0x426476,_0x21112b);elements['diffStats']['innerHTML']='\x0a\x20\x20\x20\x20<span\x20class=\x22diff-stat-files\x22>'+formatFileCountLabel(_0x447dd3['files'],{'lowerBound':_0x447dd3['filesIsLowerBound']})+'</span>\x0a\x20\x20\x20\x20<span\x20class=\x22diff-stat-separator\x22>|</span>\x0a\x20\x20\x20\x20<span\x20class=\x22diff-stat-add\x22>+'+_0x447dd3['additions']['toLocaleString']()+'</span>\x0a\x20\x20\x20\x20<span\x20class=\x22diff-stat-del\x22>-'+_0x447dd3['deletions']['toLocaleString']()+'</span>\x0a\x20\x20';elements['fileNavCount']&&(elements['fileNavCount']['textContent']=formatFileCountLabel(_0x447dd3['files'],{'lowerBound':_0x447dd3['filesIsLowerBound']}));if(elements['fileNavToggle']){const _0x579701=_0x88bf07['length']>0x0;elements['fileNavToggle']['disabled']=!_0x579701,elements['fileNavToggle']['setAttribute']('aria-disabled',String(!_0x579701)),elements['fileNavToggle']['title']=_0x579701?'Browse\x20changed\x20files':_0x21112b?.['omitted']?'Diff\x20omitted\x20for\x20this\x20large\x20commit':'No\x20file\x20diff\x20to\x20browse',!_0x579701&&closeFileNav();}renderCommitDiff();}function renderCommitDiff(){if(!state['commitDetail']||!elements['diffContainer'])return;const _0x8a3ec6=state['commitDetail']['diffMeta']||null,_0x3bba50=getDiffNoticeText(_0x8a3ec6);state['diffRender']=null;if(_0x8a3ec6?.['omitted']){elements['diffContainer']['innerHTML']='\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22empty-state-card\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<h2>Diff\x20Omitted</h2>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<p\x20class=\x22text-muted\x22>'+Utils['escapeHtml'](_0x3bba50||'Diff\x20omitted\x20for\x20this\x20large\x20commit.')+'</p>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20';return;}const _0x4228b8=state['commitDetail']['files']||parsePatchContent(state['commitDetail']['diff']||'');if(_0x4228b8['length']===0x0){if(_0x8a3ec6?.['truncated']){elements['diffContainer']['innerHTML']='\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22empty-state-card\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<h2>Diff\x20Truncated</h2>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<p\x20class=\x22text-muted\x22>'+Utils['escapeHtml'](_0x3bba50||'Diff\x20output\x20is\x20truncated.')+'</p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20';return;}elements['diffContainer']['innerHTML']='<div\x20class=\x22empty-state-card\x22>No\x20changes\x20in\x20this\x20commit.</div>';return;}const _0x146200='git-history-'+state['commitDetail']['commit']['hash'],_0x8221cc=_0x8a3ec6?.['truncated']?'<div\x20class=\x22diff-truncated-banner\x22>'+Utils['escapeHtml'](_0x3bba50)+'</div>':'',_0x265613=shouldUseLazyRendering(_0x4228b8['length'],_0x8a3ec6),_0x47e1ce=shouldAutoCollapseDiff(_0x4228b8['length']);if(_0x265613){state['diffRender']={'lazy':!![],'files':_0x4228b8,'storageKeyPrefix':_0x146200,'renderedCount':0x0,'chunkSize':LAZY_RENDER_CHUNK_SIZE,'defaultCollapsed':_0x47e1ce};const _0x47618d=_0x47e1ce?'Large\x20commit\x20detected\x20('+_0x4228b8['length']['toLocaleString']()+'\x20files).\x20Files\x20are\x20collapsed\x20by\x20default\x20and\x20rendered\x20in\x20chunks.':'Large\x20commit\x20detected\x20('+_0x4228b8['length']['toLocaleString']()+'\x20files).\x20Rendering\x20files\x20in\x20chunks\x20for\x20better\x20responsiveness.';elements['diffContainer']['innerHTML']='\x0a\x20\x20\x20\x20\x20\x20'+_0x8221cc+'\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22diff-large-commit-banner\x22>'+Utils['escapeHtml'](_0x47618d)+'</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22diff-files-host\x22></div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22diff-load-more-control\x22></div>\x0a\x20\x20\x20\x20',renderNextDiffChunk();return;}const _0x3df9ea=state['diffView']==='split'?renderSplitDiff(_0x4228b8,_0x146200,0x0,{'defaultCollapsed':_0x47e1ce}):renderUnifiedDiff(_0x4228b8,_0x146200,0x0,{'defaultCollapsed':_0x47e1ce});elements['diffContainer']['innerHTML']=''+_0x8221cc+_0x3df9ea,bindDiffToggleHandlers(_0x146200);}function resetCommitDetail(){state['selectedCommit']=null,state['commitDetail']=null,state['diffRender']=null,closeFileNav(),elements['placeholder']['hidden']=![],elements['detailPanel']['hidden']=!![];}function getSelectedRepoObject(){return state['repos']['find'](_0x27ac2c=>_0x27ac2c['name']===state['selectedRepo'])||null;}function getProviderDisplayName(){const _0x17b5f9=getSelectedRepoObject(),_0x26f5c5=_0x17b5f9?.['url']?.['toLowerCase']()||'';if(_0x26f5c5['includes']('github.com')||_0x26f5c5['includes']('github.'))return'GitHub';else{if(_0x26f5c5['includes']('gitlab.com')||_0x26f5c5['includes']('gitlab.'))return'GitLab';else{if(_0x26f5c5['includes']('bitbucket.org')||_0x26f5c5['includes']('bitbucket.'))return'Bitbucket';else{if(_0x26f5c5['includes']('dev.azure.com')||_0x26f5c5['includes']('visualstudio.com'))return'Azure\x20DevOps';}}}return'Provider';}function getProviderCommitUrl(_0x579c8d){const _0xc573cc=getSelectedRepoObject();if(!_0xc573cc?.['url'])return null;let _0x17e0be=_0xc573cc['url']['replace'](/\.git$/,'');_0x17e0be=_0x17e0be['replace'](/^(https?:\/\/)[^@]+@/,'$1');const _0x310e17=_0x17e0be['toLowerCase']();if(_0x310e17['includes']('gitlab.com')||_0x310e17['includes']('gitlab.'))return _0x17e0be+'/-/commit/'+_0x579c8d;else{if(_0x310e17['includes']('bitbucket.org')||_0x310e17['includes']('bitbucket.'))return _0x17e0be+'/commits/'+_0x579c8d;}return _0x17e0be+'/commit/'+_0x579c8d;}function isSelectedCommitRemoteSource(){return state['commitDetail']?.['source']==='remote'||state['dataSource']==='remote';}function getSelectedBranchForRevertTask(){const _0x4028bc=(state['selectedBranch']||'')['trim']();if(_0x4028bc)return _0x4028bc;const _0x49e8db=(state['activeBranch']||'')['trim']();if(_0x49e8db)return _0x49e8db;const _0x13f30c=(elements['branchName']?.['textContent']||'')['trim']();return _0x13f30c||null;}function buildRemoteRevertTaskInstructions(_0x59334e,_0x37a2fc={}){const _0x57b2da=getSelectedBranchForRevertTask(),_0x1c008a=_0x37a2fc['mainline']||null,_0x309955=Array['isArray'](_0x59334e['parents'])&&_0x59334e['parents']['length']>0x1,_0xd752ec=_0x309955?'git\x20revert\x20--no-commit\x20-m\x20'+(_0x1c008a||'1')+'\x20'+_0x59334e['hash']:'git\x20revert\x20--no-commit\x20'+_0x59334e['hash'],_0x5cec73=['Please\x20revert\x20commit\x20'+_0x59334e['hash']+'\x20in\x20repository\x20\x22'+state['selectedRepo']+'\x22\x20for\x20environment\x20\x22'+state['selectedEnvironment']+'\x22.','','Requirements:','1.\x20Open\x20repository\x20\x22'+state['selectedRepo']+'\x22\x20(typically\x20under\x20/workspace).',_0x57b2da?'2.\x20Ensure\x20branch\x20\x22'+_0x57b2da+'\x22\x20is\x20checked\x20out\x20(fetch\x20first\x20if\x20needed).':'2.\x20Use\x20the\x20repository\x20branch\x20configured\x20for\x20this\x20environment.','3.\x20Run\x20`'+_0xd752ec+'`.','4.\x20If\x20there\x20are\x20conflicts,\x20resolve\x20them\x20and\x20stage\x20the\x20resolved\x20files.','5.\x20Ensure\x20all\x20revert\x20changes\x20are\x20staged\x20(`git\x20add\x20-A`\x20as\x20needed).','6.\x20Do\x20NOT\x20run\x20`git\x20commit`\x20and\x20do\x20NOT\x20push.','7.\x20In\x20your\x20final\x20response,\x20report\x20success/failure\x20and\x20summarize\x20changed\x20files\x20and\x20conflicts.'];return _0x5cec73['join']('\x0a');}function navigateToTask(_0x3a961d){const _0x5c80d3='task.html?id='+encodeURIComponent(_0x3a961d),_0x20b343=localStorage['getItem'](OPEN_NEW_TAB_STORAGE_KEY)==='true';if(_0x20b343){const _0x1674df=window['open'](_0x5c80d3,'_blank');!_0x1674df&&(window['location']['href']=_0x5c80d3);return;}window['location']['href']=_0x5c80d3;}async function createRemoteRevertTask(_0x399695,_0x44ab29={}){const _0x321ae3=_0x399695['shortHash']||_0x399695['hash']['slice'](0x0,0x7),_0x1f002e=buildRemoteRevertTaskInstructions(_0x399695,_0x44ab29),_0x19f804={'name':'Revert\x20'+_0x321ae3+'\x20in\x20'+state['selectedRepo'],'environment':state['selectedEnvironment'],'task_type':'manual','parameters':{'instructions':_0x1f002e}},_0x28968a=elements['revertBtn']?.['textContent']||'Revert\x20via\x20task';elements['revertBtn']&&(elements['revertBtn']['disabled']=!![],elements['revertBtn']['textContent']='Creating\x20task...');try{const _0x49eba1=await API['createTask'](_0x19f804),_0x3e7830=_0x49eba1?.['taskId'];if(!_0x3e7830)throw new Error('Task\x20created\x20but\x20no\x20task\x20ID\x20was\x20returned');Utils['showSuccess']('Revert\x20task\x20created'),navigateToTask(_0x3e7830);}catch(_0x3f1e4c){if(_0x3f1e4c?.['error']==='git_connections_required'&&Array['isArray'](_0x3f1e4c['providers'])&&_0x3f1e4c['providers']['length']>0x0){const _0x293f77=_0x3f1e4c['providers']['map'](_0x385d38=>_0x385d38['displayName']||_0x385d38['provider']||_0x385d38['name']||'provider')['join'](',\x20');throw new Error('Git\x20connection\x20required:\x20'+_0x293f77+'.\x20Connect\x20account(s)\x20in\x20Settings\x20and\x20retry.');}throw _0x3f1e4c;}finally{elements['revertBtn']&&(elements['revertBtn']['disabled']=![],elements['revertBtn']['textContent']=_0x28968a);}}function handleSearchInput(_0x10e2cb){const _0x4f46b0=_0x10e2cb['target']['value']['trim']();elements['clearSearchBtn']['hidden']=!_0x4f46b0,searchTimer&&clearTimeout(searchTimer),searchTimer=setTimeout(()=>{state['pagination']['search']=_0x4f46b0,state['pagination']['offset']=0x0,loadHistory();},SEARCH_DEBOUNCE_MS);}function clearSearch(){elements['searchInput']['value']='',elements['clearSearchBtn']['hidden']=!![],state['pagination']['search']='',state['pagination']['offset']=0x0,loadHistory();}function changePage(_0x425949){const _0x20ca7b=state['pagination']['offset']+_0x425949*state['pagination']['limit'];if(_0x20ca7b<0x0)return;state['pagination']['offset']=_0x20ca7b,loadHistory({'keepSelection':![]});}async function handleCopyHash(){if(!state['commitDetail']?.['commit']?.['hash'])return;const _0x33ad99=await Utils['copyToClipboard'](state['commitDetail']['commit']['hash']);if(_0x33ad99)Utils['showSuccess']('Commit\x20hash\x20copied');}async function handleRevertCommit(){if(!state['commitDetail']?.['commit']?.['hash'])return;const _0x468eeb=state['commitDetail']['commit'],_0xe3308e=_0x468eeb['shortHash']||_0x468eeb['hash']['slice'](0x0,0x7),_0x2fa3c4={};_0x468eeb['parents']&&_0x468eeb['parents']['length']>0x1&&(_0x2fa3c4['mainline']=elements['mainlineSelect']['value']||'1');if(isSelectedCommitRemoteSource()){const _0x4380dc=getSelectedBranchForRevertTask(),_0x4d9593=_0x2fa3c4['mainline']?'\x20using\x20mainline\x20parent\x20'+_0x2fa3c4['mainline']:'',_0x5cd302=_0x4380dc?'\x20on\x20branch\x20\x22'+_0x4380dc+'\x22':'',_0x117f19='Create\x20a\x20revert\x20task\x20for\x20commit\x20'+_0xe3308e+_0x5cd302+_0x4d9593+'?\x20The\x20task\x20will\x20apply\x20the\x20revert\x20without\x20committing\x20so\x20it\x20can\x20be\x20approved\x20and\x20pushed\x20later.',_0x181b05=await ConfirmDialog['show']({'title':'Create\x20Revert\x20Task','message':_0x117f19,'confirmText':'Create\x20Task','cancelText':'Cancel','danger':!![]});if(!_0x181b05)return;try{await createRemoteRevertTask(_0x468eeb,_0x2fa3c4);}catch(_0x20287a){Utils['showError'](_0x20287a['message']||'Failed\x20to\x20create\x20revert\x20task');}return;}const _0x3bf3b4='Revert\x20commit\x20'+_0xe3308e+'?\x20This\x20will\x20create\x20a\x20new\x20commit\x20that\x20undoes\x20these\x20changes.',_0x12c32d=await ConfirmDialog['show']({'title':'Revert\x20Commit','message':_0x3bf3b4,'confirmText':'Revert','cancelText':'Cancel','danger':!![]});if(!_0x12c32d)return;try{await API['revertEnvironmentRepoCommit'](state['selectedEnvironment'],state['selectedRepo'],_0x468eeb['hash'],_0x2fa3c4),Utils['showSuccess']('Commit\x20reverted'),state['pagination']['offset']=0x0,await loadHistory({'keepSelection':![]});}catch(_0x133b82){Utils['showError'](_0x133b82['message']||'Failed\x20to\x20revert\x20commit');}}function parsePatchContent(_0x48975e){const _0x10b060=[],_0x3683f1=_0x48975e['split']('\x0a');let _0x2a3932=null,_0x1b8304=null;for(const _0x15b02f of _0x3683f1){if(_0x15b02f['startsWith']('diff\x20--git')){_0x2a3932&&_0x1b8304&&_0x2a3932['hunks']['push'](_0x1b8304);_0x2a3932&&_0x10b060['push'](_0x2a3932);const _0x4f88ce=_0x15b02f['match'](/diff --git a\/(.+?) b\/(.+)/);_0x2a3932={'oldPath':_0x4f88ce?_0x4f88ce[0x1]:'','newPath':_0x4f88ce?_0x4f88ce[0x2]:'','hunks':[],'isDeleted':![]},_0x1b8304=null;}else{if(_0x15b02f['startsWith']('deleted\x20file\x20mode')&&_0x2a3932)_0x2a3932['isDeleted']=!![];else{if(_0x15b02f['startsWith']('@@'))_0x1b8304&&_0x2a3932&&_0x2a3932['hunks']['push'](_0x1b8304),_0x1b8304={'header':_0x15b02f,'lines':[]};else _0x1b8304&&_0x1b8304['lines']['push'](_0x15b02f);}}}return _0x2a3932&&_0x1b8304&&_0x2a3932['hunks']['push'](_0x1b8304),_0x2a3932&&_0x10b060['push'](_0x2a3932),_0x10b060;}function parseHunkHeader(_0x3fb3a5){const _0x381e48=_0x3fb3a5['match'](/@@ -(\d+),?\d* \+(\d+),?\d* @@/);if(_0x381e48)return{'oldStart':parseInt(_0x381e48[0x1],0xa),'newStart':parseInt(_0x381e48[0x2],0xa)};return{'oldStart':0x1,'newStart':0x1};}function highlightDiffLine(_0x764151,_0x40b997){const _0x4fa82a=window['hljs']||(typeof hljs!=='undefined'?hljs:null);if(_0x4fa82a&&_0x40b997)try{const _0x15b5dc=_0x4fa82a['getLanguage'](_0x40b997)?_0x40b997:null;if(_0x15b5dc)return _0x4fa82a['highlight'](_0x764151,{'language':_0x15b5dc})['value'];}catch(_0x3c9656){console['error']('Diff\x20syntax\x20highlighting\x20error:',_0x3c9656);}return Utils['escapeHtml'](_0x764151);}function computeWordDiff(_0x16c381,_0x2cb80d){const _0x24d117=_0x52d16a=>{const _0x18b3f2=[];let _0x142345='',_0x3ea719=![];for(let _0x3df90a=0x0;_0x3df90a<_0x52d16a['length'];_0x3df90a++){const _0xfafa41=_0x52d16a[_0x3df90a],_0x128128=/\s/['test'](_0xfafa41);if(_0x142345==='')_0x142345=_0xfafa41,_0x3ea719=_0x128128;else _0x128128===_0x3ea719?_0x142345+=_0xfafa41:(_0x18b3f2['push'](_0x142345),_0x142345=_0xfafa41,_0x3ea719=_0x128128);}return _0x142345&&_0x18b3f2['push'](_0x142345),_0x18b3f2;},_0x16491d=_0x24d117(_0x16c381),_0x4bd5cc=_0x24d117(_0x2cb80d),_0x1e400d=_0x16491d['length'],_0x524d7f=_0x4bd5cc['length'],_0x250214=Array(_0x1e400d+0x1)['fill'](null)['map'](()=>Array(_0x524d7f+0x1)['fill'](0x0));for(let _0x16a299=0x1;_0x16a299<=_0x1e400d;_0x16a299++){for(let _0x1dea8f=0x1;_0x1dea8f<=_0x524d7f;_0x1dea8f++){_0x16491d[_0x16a299-0x1]===_0x4bd5cc[_0x1dea8f-0x1]?_0x250214[_0x16a299][_0x1dea8f]=_0x250214[_0x16a299-0x1][_0x1dea8f-0x1]+0x1:_0x250214[_0x16a299][_0x1dea8f]=Math['max'](_0x250214[_0x16a299-0x1][_0x1dea8f],_0x250214[_0x16a299][_0x1dea8f-0x1]);}}const _0x1c3d52={'old':[],'new':[]};let _0x1b9e5b=_0x1e400d,_0x2b20e3=_0x524d7f;const _0x162f3f=[],_0x365823=[];while(_0x1b9e5b>0x0||_0x2b20e3>0x0){if(_0x1b9e5b>0x0&&_0x2b20e3>0x0&&_0x16491d[_0x1b9e5b-0x1]===_0x4bd5cc[_0x2b20e3-0x1])_0x162f3f['unshift']({'type':'equal','text':_0x16491d[_0x1b9e5b-0x1]}),_0x365823['unshift']({'type':'equal','text':_0x4bd5cc[_0x2b20e3-0x1]}),_0x1b9e5b--,_0x2b20e3--;else{if(_0x2b20e3>0x0&&(_0x1b9e5b===0x0||_0x250214[_0x1b9e5b][_0x2b20e3-0x1]>=_0x250214[_0x1b9e5b-0x1][_0x2b20e3]))_0x365823['unshift']({'type':'insert','text':_0x4bd5cc[_0x2b20e3-0x1]}),_0x2b20e3--;else _0x1b9e5b>0x0&&(_0x162f3f['unshift']({'type':'delete','text':_0x16491d[_0x1b9e5b-0x1]}),_0x1b9e5b--);}}return _0x1c3d52['old']=_0x162f3f,_0x1c3d52['new']=_0x365823,_0x1c3d52;}function renderDiffLineWithWordHighlight(_0x10a9b3,_0x10f03e,_0x1d9894,_0x41ac2f){if(!_0x10f03e||_0x10f03e['length']===0x0)return highlightDiffLine(_0x10a9b3,_0x41ac2f);let _0x2086c8='';const _0x4a3941=_0x1d9894==='add'?'diff-word-add':'diff-word-remove',_0x1bb028=_0x1d9894==='add'?'insert':'delete';for(const _0x2a4ec0 of _0x10f03e){const _0x207b07=Utils['escapeHtml'](_0x2a4ec0['text']);_0x2a4ec0['type']===_0x1bb028?_0x2086c8+='<span\x20class=\x22'+_0x4a3941+'\x22>'+_0x207b07+'</span>':_0x2086c8+=_0x207b07;}return _0x2086c8;}function getFileLanguage(_0x367d7b){const _0x299254=_0x367d7b['split']('.')['pop']()['toLowerCase'](),_0xbf83cc={'js':'javascript','jsx':'javascript','ts':'typescript','tsx':'typescript','py':'python','java':'java','c':'c','cpp':'cpp','cs':'csharp','go':'go','rs':'rust','php':'php','rb':'ruby','html':'xml','css':'css','json':'json','yml':'yaml','yaml':'yaml','md':'markdown','sh':'bash','bash':'bash'};return _0xbf83cc[_0x299254]||null;}function calculateDiffStats(_0x15a419){let _0x3262c8=0x0,_0x4c479e=0x0,_0x5081d6=0x0;return _0x15a419['forEach'](_0xcd0013=>{let _0x308ae8=0x0,_0x12065d=0x0;_0xcd0013['hunks']['forEach'](_0x3d9348=>{_0x3d9348['lines']['forEach'](_0x202036=>{if(_0x202036['startsWith']('+'))_0x308ae8+=0x1;else{if(_0x202036['startsWith']('-'))_0x12065d+=0x1;}});}),(_0x308ae8+_0x12065d>0x0||_0xcd0013['isDeleted'])&&(_0x5081d6+=0x1),_0x3262c8+=_0x308ae8,_0x4c479e+=_0x12065d;}),{'additions':_0x3262c8,'deletions':_0x4c479e,'files':_0x5081d6};}function renderUnifiedDiff(_0x898c93,_0x35b052,_0x54cb85=0x0,_0x92bdef={}){return _0x898c93['map']((_0x407143,_0x4ce6bc)=>{const _0x29b2c9=_0x54cb85+_0x4ce6bc,_0x4fa316=_0x407143['newPath']||_0x407143['oldPath']||'unknown',_0x2b9bef='diff-'+_0x35b052+'-'+_0x29b2c9,_0xd577b=getFileLanguage(_0x4fa316),{additions:_0x1714d2,deletions:_0x4c98c9}=calculateDiffStats([_0x407143]),_0x8a921a=getCollapsedState(_0x35b052,_0x4fa316,_0x92bdef['defaultCollapsed']),_0x14b4d9=getFileStatus(_0x407143,_0x1714d2,_0x4c98c9),_0x479ad6=_0x14b4d9==='added'?'A':_0x14b4d9==='deleted'?'D':'M',_0x253cb0=_0x407143['hunks']['map'](_0x2a21ac=>{const {oldStart:_0x345314,newStart:_0xaa39dd}=parseHunkHeader(_0x2a21ac['header']);let _0x5d2021=_0x345314,_0x41915e=_0xaa39dd;const _0x8e5079=_0x2a21ac['lines']['map'](_0x4b455a=>({'line':_0x4b455a,'type':_0x4b455a['startsWith']('+')?'add':_0x4b455a['startsWith']('-')?'remove':_0x4b455a['startsWith']('\x5c')?'meta':'context'}));let _0x2ea0a0=0x0;while(_0x2ea0a0<_0x8e5079['length']){if(_0x8e5079[_0x2ea0a0]['type']==='remove'){let _0x2d16a4=_0x2ea0a0,_0x313dc1=_0x2ea0a0;while(_0x313dc1<_0x8e5079['length']&&_0x8e5079[_0x313dc1]['type']==='remove')_0x313dc1++;let _0x417fe4=_0x313dc1,_0x523b27=_0x417fe4;while(_0x523b27<_0x8e5079['length']&&_0x8e5079[_0x523b27]['type']==='add')_0x523b27++;const _0x291e13=_0x313dc1-_0x2d16a4,_0x4e136f=_0x523b27-_0x417fe4,_0x3c5039=Math['min'](_0x291e13,_0x4e136f);for(let _0x4ce099=0x0;_0x4ce099<_0x3c5039;_0x4ce099++){const _0x474f24=_0x8e5079[_0x2d16a4+_0x4ce099]['line']['substring'](0x1),_0x422f8e=_0x8e5079[_0x417fe4+_0x4ce099]['line']['substring'](0x1),_0x2dd930=computeWordDiff(_0x474f24,_0x422f8e);_0x8e5079[_0x2d16a4+_0x4ce099]['wordDiff']=_0x2dd930['old'],_0x8e5079[_0x417fe4+_0x4ce099]['wordDiff']=_0x2dd930['new'];}_0x2ea0a0=_0x523b27;}else _0x2ea0a0++;}const _0x373f3b=_0x8e5079['map'](_0x37c6f3=>{const _0x3920c8=_0x37c6f3['line'];if(_0x3920c8['startsWith']('+')){const _0x163143=_0x3920c8['substring'](0x1),_0x20a986=_0x37c6f3['wordDiff']?renderDiffLineWithWordHighlight(_0x163143,_0x37c6f3['wordDiff'],'add',_0xd577b):highlightDiffLine(_0x163143,_0xd577b),_0xe71d1e='<div\x20class=\x22diff-line\x20diff-add\x22><span\x20class=\x22diff-line-num\x20diff-line-num-old\x22></span><span\x20class=\x22diff-line-num\x20diff-line-num-new\x22>'+_0x41915e+'</span><span\x20class=\x22diff-line-content\x22><span\x20class=\x22diff-prefix\x22>+</span>'+_0x20a986+'</span></div>';return _0x41915e+=0x1,_0xe71d1e;}if(_0x3920c8['startsWith']('-')){const _0x5dce89=_0x3920c8['substring'](0x1),_0x251db0=_0x37c6f3['wordDiff']?renderDiffLineWithWordHighlight(_0x5dce89,_0x37c6f3['wordDiff'],'remove',_0xd577b):highlightDiffLine(_0x5dce89,_0xd577b),_0x382915='<div\x20class=\x22diff-line\x20diff-remove\x22><span\x20class=\x22diff-line-num\x20diff-line-num-old\x22>'+_0x5d2021+'</span><span\x20class=\x22diff-line-num\x20diff-line-num-new\x22></span><span\x20class=\x22diff-line-content\x22><span\x20class=\x22diff-prefix\x22>-</span>'+_0x251db0+'</span></div>';return _0x5d2021+=0x1,_0x382915;}if(_0x3920c8['startsWith']('\x5c'))return'<div\x20class=\x22diff-line\x20diff-meta\x22><span\x20class=\x22diff-line-num\x20diff-line-num-old\x22></span><span\x20class=\x22diff-line-num\x20diff-line-num-new\x22></span><span\x20class=\x22diff-line-content\x22>'+Utils['escapeHtml'](_0x3920c8)+'</span></div>';const _0x5793a4=_0x3920c8['startsWith']('\x20')?_0x3920c8['substring'](0x1):_0x3920c8,_0x1531e4=highlightDiffLine(_0x5793a4,_0xd577b),_0x46f902='<div\x20class=\x22diff-line\x20diff-context\x22><span\x20class=\x22diff-line-num\x20diff-line-num-old\x22>'+_0x5d2021+'</span><span\x20class=\x22diff-line-num\x20diff-line-num-new\x22>'+_0x41915e+'</span><span\x20class=\x22diff-line-content\x22>\x20'+_0x1531e4+'</span></div>';return _0x5d2021+=0x1,_0x41915e+=0x1,_0x46f902;})['join']('');return'<div\x20class=\x22diff-hunk\x22><div\x20class=\x22diff-hunk-header\x22>'+Utils['escapeHtml'](_0x2a21ac['header'])+'</div>'+_0x373f3b+'</div>';})['join'](''),_0x12c011=_0x253cb0||'<div\x20class=\x22diff-hunk\x22><div\x20class=\x22diff-hunk-header\x22>No\x20textual\x20diff\x20available</div></div>';return'\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22file-diff\x22\x20id=\x22file-'+_0x2b9bef+'\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22file-diff-header\x22\x20data-diff-id=\x22'+_0x2b9bef+'\x22\x20data-file-name=\x22'+Utils['escapeHtml'](_0x4fa316)+'\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22file-diff-title\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-status-badge\x20'+_0x14b4d9+'\x22>'+_0x479ad6+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-diff-name\x22>'+Utils['escapeHtml'](_0x4fa316)+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-diff-stat\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22diff-add\x22>+'+_0x1714d2+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22diff-del\x22>-'+_0x4c98c9+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22file-diff-toggle-btn\x22\x20data-diff-id=\x22'+_0x2b9bef+'\x22\x20data-collapsed=\x22'+_0x8a921a+'\x22\x20type=\x22button\x22\x20aria-label=\x22'+(_0x8a921a?'Expand':'Collapse')+'\x22></button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22file-diff-content\x20'+(_0x8a921a?'collapsed':'')+'\x22\x20id=\x22'+_0x2b9bef+'\x22>'+_0x12c011+'</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20';})['join']('');}function renderSplitDiff(_0x27e448,_0x1c18c1,_0x1562f3=0x0,_0x392281={}){return _0x27e448['map']((_0x476c06,_0xd57d1a)=>{const _0x12b45a=_0x1562f3+_0xd57d1a,_0x13161e=_0x476c06['newPath']||_0x476c06['oldPath']||'unknown',_0x193a85='diff-'+_0x1c18c1+'-'+_0x12b45a,_0xdacba0=getFileLanguage(_0x13161e),{additions:_0x1a9ba2,deletions:_0x442784}=calculateDiffStats([_0x476c06]),_0x1584e9=getCollapsedState(_0x1c18c1,_0x13161e,_0x392281['defaultCollapsed']),_0x41466b=getFileStatus(_0x476c06,_0x1a9ba2,_0x442784),_0x26d3b2=_0x41466b==='added'?'A':_0x41466b==='deleted'?'D':'M',_0x4b46eb=_0x476c06['hunks']['map'](_0x3c1320=>{const {oldStart:_0x16a3d2,newStart:_0x4e7936}=parseHunkHeader(_0x3c1320['header']);let _0xd995ae=_0x16a3d2,_0x54f924=_0x4e7936;const _0x172949=[],_0x1e9f9a=_0x3c1320['lines'];let _0x1b96c5=0x0;while(_0x1b96c5<_0x1e9f9a['length']){const _0x2c0ec9=_0x1e9f9a[_0x1b96c5];if(_0x2c0ec9['startsWith']('\x20')){const _0x485fb3=_0x2c0ec9['substring'](0x1);_0x172949['push'](renderSplitRow({'type':'context','lineNum':_0xd995ae,'content':_0x485fb3},{'type':'context','lineNum':_0x54f924,'content':_0x485fb3},_0xdacba0)),_0xd995ae+=0x1,_0x54f924+=0x1,_0x1b96c5+=0x1;continue;}if(_0x2c0ec9['startsWith']('-')){const _0x28cacc=[];while(_0x1b96c5<_0x1e9f9a['length']&&_0x1e9f9a[_0x1b96c5]['startsWith']('-')){_0x28cacc['push'](_0x1e9f9a[_0x1b96c5]['substring'](0x1)),_0x1b96c5+=0x1;}const _0x315df0=[];let _0x238bd6=_0x1b96c5;while(_0x238bd6<_0x1e9f9a['length']&&_0x1e9f9a[_0x238bd6]['startsWith']('+')){_0x315df0['push'](_0x1e9f9a[_0x238bd6]['substring'](0x1)),_0x238bd6+=0x1;}const _0x202f89=Math['max'](_0x28cacc['length'],_0x315df0['length']);for(let _0x328389=0x0;_0x328389<_0x202f89;_0x328389++){const _0x4f0c87=_0x28cacc[_0x328389]?{'type':'remove','lineNum':_0xd995ae++,'content':_0x28cacc[_0x328389]}:{'type':'empty','lineNum':'','content':''},_0x19f3ca=_0x315df0[_0x328389]?{'type':'add','lineNum':_0x54f924++,'content':_0x315df0[_0x328389]}:{'type':'empty','lineNum':'','content':''};_0x172949['push'](renderSplitRow(_0x4f0c87,_0x19f3ca,_0xdacba0));}_0x1b96c5=_0x238bd6;continue;}if(_0x2c0ec9['startsWith']('+')){const _0x54afd3=[];while(_0x1b96c5<_0x1e9f9a['length']&&_0x1e9f9a[_0x1b96c5]['startsWith']('+')){_0x54afd3['push'](_0x1e9f9a[_0x1b96c5]['substring'](0x1)),_0x1b96c5+=0x1;}_0x54afd3['forEach'](_0x229f17=>{_0x172949['push'](renderSplitRow({'type':'empty','lineNum':'','content':''},{'type':'add','lineNum':_0x54f924++,'content':_0x229f17},_0xdacba0));});continue;}if(_0x2c0ec9['startsWith']('\x5c')){_0x172949['push'](renderSplitRow({'type':'meta','lineNum':'','content':_0x2c0ec9},{'type':'meta','lineNum':'','content':_0x2c0ec9},_0xdacba0)),_0x1b96c5+=0x1;continue;}_0x1b96c5+=0x1;}const _0x5181a4=_0x172949['join']('')||'<div\x20class=\x22diff-hunk\x22>No\x20textual\x20diff\x20available</div>';return'\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22diff-hunk\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22diff-hunk-header\x22>'+Utils['escapeHtml'](_0x3c1320['header'])+'</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22split-diff-table\x22>'+_0x5181a4+'</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20';})['join'](''),_0x1d0f8f=_0x4b46eb||'<div\x20class=\x22diff-hunk\x22><div\x20class=\x22diff-hunk-header\x22>No\x20textual\x20diff\x20available</div></div>';return'\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22file-diff\x22\x20id=\x22file-'+_0x193a85+'\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22file-diff-header\x22\x20data-diff-id=\x22'+_0x193a85+'\x22\x20data-file-name=\x22'+Utils['escapeHtml'](_0x13161e)+'\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22file-diff-title\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-status-badge\x20'+_0x41466b+'\x22>'+_0x26d3b2+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-diff-name\x22>'+Utils['escapeHtml'](_0x13161e)+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-diff-stat\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22diff-add\x22>+'+_0x1a9ba2+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22diff-del\x22>-'+_0x442784+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22file-diff-toggle-btn\x22\x20data-diff-id=\x22'+_0x193a85+'\x22\x20data-collapsed=\x22'+_0x1584e9+'\x22\x20type=\x22button\x22\x20aria-label=\x22'+(_0x1584e9?'Expand':'Collapse')+'\x22></button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22file-diff-content\x20'+(_0x1584e9?'collapsed':'')+'\x22\x20id=\x22'+_0x193a85+'\x22>'+_0x1d0f8f+'</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20';})['join']('');}function renderSplitRow(_0x53b4a6,_0x573319,_0x295124){return'\x0a\x20\x20\x20\x20<div\x20class=\x22split-diff-row\x22>\x0a\x20\x20\x20\x20\x20\x20'+renderSplitCell(_0x53b4a6,_0x295124)+'\x0a\x20\x20\x20\x20\x20\x20'+renderSplitCell(_0x573319,_0x295124)+'\x0a\x20\x20\x20\x20</div>\x0a\x20\x20';}function renderSplitCell(_0x2976d3,_0x21f354){const _0x1577f0='split-'+_0x2976d3['type'],_0x2cf54e=_0x2976d3['lineNum']===0x0?'':_0x2976d3['lineNum'];let _0x1f53f8=' ';if(_0x2976d3['type']==='meta')_0x1f53f8=Utils['escapeHtml'](_0x2976d3['content']);else _0x2976d3['type']!=='empty'&&(_0x1f53f8=highlightDiffLine(_0x2976d3['content'],_0x21f354));return'\x0a\x20\x20\x20\x20<div\x20class=\x22split-diff-cell\x20'+_0x1577f0+'\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20class=\x22split-line-num\x22>'+_0x2cf54e+'</span>\x0a\x20\x20\x20\x20\x20\x20<span\x20class=\x22split-line-content\x22>'+_0x1f53f8+'</span>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20';}function bindDiffToggleHandlers(_0x285bde){const _0x1c5c52=elements['diffContainer']['querySelectorAll']('.file-diff-header');_0x1c5c52['forEach'](_0xa8c1f5=>{if(_0xa8c1f5['dataset']['bound']==='true')return;_0xa8c1f5['dataset']['bound']='true',_0xa8c1f5['addEventListener']('click',_0x443158=>{if(_0x443158['target']['closest']('.file-diff-toggle-btn'))return;const _0x2902e1=_0xa8c1f5['dataset']['diffId'];toggleDiff(_0x2902e1,_0xa8c1f5['dataset']['fileName'],_0x285bde);});});const _0x5bc4a7=elements['diffContainer']['querySelectorAll']('.file-diff-toggle-btn');_0x5bc4a7['forEach'](_0x11693f=>{if(_0x11693f['dataset']['bound']==='true')return;_0x11693f['dataset']['bound']='true',_0x11693f['addEventListener']('click',_0x46ab49=>{_0x46ab49['stopPropagation']();const _0xb15a9b=elements['diffContainer']['querySelector']('.file-diff-header[data-diff-id=\x22'+_0x11693f['dataset']['diffId']+'\x22]'),_0x7b225a=_0xb15a9b?.['dataset']['fileName']||'';toggleDiff(_0x11693f['dataset']['diffId'],_0x7b225a,_0x285bde);});});}function toggleDiff(_0x5170ed,_0x4c4a1b,_0x4ec512){const _0x319e07=document['getElementById'](_0x5170ed),_0x1c8026=elements['diffContainer']['querySelector']('.file-diff-header[data-diff-id=\x22'+_0x5170ed+'\x22]'),_0x44fd27=_0x1c8026?.['querySelector']('.file-diff-toggle-btn');if(!_0x319e07)return;const _0x25cea6=_0x319e07['classList']['toggle']('collapsed');_0x44fd27&&(_0x44fd27['dataset']['collapsed']=String(_0x25cea6),_0x44fd27['setAttribute']('aria-label',_0x25cea6?'Expand':'Collapse'));const _0x3f76da=getStorageKey(_0x4ec512,_0x4c4a1b);localStorage['setItem'](_0x3f76da,String(_0x25cea6));}function setAllDiffCollapsed(_0x2b962b){if(!state['commitDetail']?.['commit']?.['hash'])return;const _0x34af03='git-history-'+state['commitDetail']['commit']['hash'];if(state['diffRender']?.['files']?.['length']){const _0x1e8aea=buildCollapsedStateUpdates({'files':state['diffRender']['files'],'collapsed':_0x2b962b,'storageKeyPrefix':_0x34af03,'getStorageKey':getStorageKey});_0x1e8aea['forEach'](({key:_0x3d0163,value:_0xceb0fd})=>{localStorage['setItem'](_0x3d0163,_0xceb0fd);});}const _0x4a7bfb=elements['diffContainer']['querySelectorAll']('.file-diff-content');_0x4a7bfb['forEach'](_0x477e16=>{_0x477e16['classList']['toggle']('collapsed',_0x2b962b);const _0x5c3eb6=elements['diffContainer']['querySelector']('.file-diff-header[data-diff-id=\x22'+_0x477e16['id']+'\x22]'),_0xabaaeb=_0x5c3eb6?.['querySelector']('.file-diff-toggle-btn'),_0x951885=_0x5c3eb6?.['dataset']['fileName']||'';_0xabaaeb&&(_0xabaaeb['dataset']['collapsed']=String(_0x2b962b),_0xabaaeb['setAttribute']('aria-label',_0x2b962b?'Expand':'Collapse')),_0x951885&&localStorage['setItem'](getStorageKey(_0x34af03,_0x951885),String(_0x2b962b));});}function getStorageKey(_0x51b11d,_0x1895bf){return _0x51b11d+'-'+safeBase64(_0x1895bf);}function getCollapsedState(_0x31774d,_0x3014db,_0x43777d=![]){const _0x44cfea=localStorage['getItem'](getStorageKey(_0x31774d,_0x3014db));if(_0x44cfea===null)return Boolean(_0x43777d);return _0x44cfea==='true';}function safeBase64(_0x5a81a1){try{return btoa(unescape(encodeURIComponent(_0x5a81a1)));}catch(_0x554a7d){return btoa(_0x5a81a1);}}function formatDate(_0x6012b1){if(!_0x6012b1)return'';const _0x3ae26a=new Date(_0x6012b1);if(Number['isNaN'](_0x3ae26a['getTime']()))return _0x6012b1;return _0x3ae26a['toLocaleString']('en-US',{'month':'short','day':'numeric','year':'numeric','hour':'2-digit','minute':'2-digit'});}function renderLoadingSkeletons(_0x2191e5){return Array(_0x2191e5)['fill'](0x0)['map'](()=>'\x0a\x20\x20\x20\x20<li\x20class=\x22commit-item\x20commit-item-skeleton\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22skeleton\x20skeleton-message\x22></div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22skeleton-meta\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22skeleton\x20skeleton-avatar\x22></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22skeleton\x20skeleton-text\x22></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22skeleton\x20skeleton-text-short\x22></div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</li>\x0a\x20\x20')['join']('');}function toggleFileNav(_0x4dd7ca){if(elements['fileNavToggle']?.['disabled'])return;_0x4dd7ca['stopPropagation']();const _0x125531=elements['fileNavSidebar']?.['classList']['toggle']('open');_0x125531&&renderFileNavList();}function closeFileNav(){elements['fileNavSidebar']?.['classList']['remove']('open');}function toggleMaximize(){if(!elements['gitHistoryBody'])return;const _0x2024b1=elements['gitHistoryBody']['classList']['toggle']('maximized'),_0x1cb76f=elements['maximizeBtn']?.['querySelector']('.maximize-icon'),_0x18b135=elements['maximizeBtn']?.['querySelector']('.restore-icon');_0x1cb76f&&_0x18b135&&(_0x1cb76f['hidden']=_0x2024b1,_0x18b135['hidden']=!_0x2024b1),elements['maximizeBtn']&&(elements['maximizeBtn']['title']=_0x2024b1?'Restore\x20diff\x20panel\x20(Esc\x20or\x20m)':'Maximize\x20diff\x20panel\x20(m)'),localStorage['setItem']('git-history-maximized',String(_0x2024b1));}function renderFileNavList(){if(!state['commitDetail']?.['files']||!elements['fileNavList'])return;const _0x2bb4f5=state['commitDetail']['files'];elements['fileNavList']['innerHTML']=_0x2bb4f5['map']((_0x5c0ec2,_0x15a9ae)=>{const _0x5b3199=_0x5c0ec2['newPath']||_0x5c0ec2['oldPath']||'unknown',_0x40b88d=_0x5b3199['split']('/')['pop'](),{additions:_0x242b62,deletions:_0x57e3f4}=calculateDiffStats([_0x5c0ec2]),_0x290104=getFileStatus(_0x5c0ec2,_0x242b62,_0x57e3f4),_0x2c3602=getStatusIcon(_0x290104);return'\x0a\x20\x20\x20\x20\x20\x20<li\x20class=\x22file-nav-item\x22\x20data-file-idx=\x22'+_0x15a9ae+'\x22\x20data-file-name=\x22'+Utils['escapeHtml'](_0x5b3199)+'\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-nav-icon\x20'+_0x290104+'\x22>'+_0x2c3602+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-nav-name\x22\x20title=\x22'+Utils['escapeHtml'](_0x5b3199)+'\x22>'+Utils['escapeHtml'](_0x40b88d)+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22file-nav-stats\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(_0x242b62>0x0?'<span\x20class=\x22add\x22>+'+_0x242b62+'</span>':'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(_0x57e3f4>0x0?'<span\x20class=\x22del\x22>-'+_0x57e3f4+'</span>':'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20</li>\x0a\x20\x20\x20\x20';})['join'](''),elements['fileNavList']['querySelectorAll']('.file-nav-item')['forEach'](_0x32abcb=>{_0x32abcb['addEventListener']('click',()=>{const _0x470164=parseInt(_0x32abcb['dataset']['fileIdx']||'0',0xa),_0x1ce0b5='git-history-'+state['commitDetail']['commit']['hash'],_0x2371f6='diff-'+_0x1ce0b5+'-'+_0x470164;ensureLazyDiffFileRendered(_0x470164);const _0x146a9c=document['getElementById'](_0x2371f6);if(_0x146a9c){if(_0x146a9c['classList']['contains']('collapsed')){const _0xe3eece=elements['diffContainer']['querySelector']('.file-diff-header[data-diff-id=\x22'+_0x2371f6+'\x22]'),_0x44c600=_0xe3eece?.['dataset']['fileName']||'';toggleDiff(_0x2371f6,_0x44c600,_0x1ce0b5);}const _0x45f523=_0x146a9c['closest']('.file-diff');_0x45f523&&(_0x45f523['scrollIntoView']({'behavior':'smooth','block':'start'}),_0x45f523['classList']['add']('highlighted'),setTimeout(()=>_0x45f523['classList']['remove']('highlighted'),0x5dc));}closeFileNav();});});}function getFileStatus(_0x185081,_0x15d512,_0x42a8c7){if(_0x185081['isDeleted'])return'deleted';if(_0x15d512>0x0&&_0x42a8c7===0x0)return'added';return'modified';}function getStatusIcon(_0x57c41a){switch(_0x57c41a){case'added':return'<svg\x20viewBox=\x220\x200\x2024\x2024\x22\x20fill=\x22none\x22\x20stroke=\x22currentColor\x22\x20stroke-width=\x222\x22><line\x20x1=\x2212\x22\x20y1=\x225\x22\x20x2=\x2212\x22\x20y2=\x2219\x22/><line\x20x1=\x225\x22\x20y1=\x2212\x22\x20x2=\x2219\x22\x20y2=\x2212\x22/></svg>';case'deleted':return'<svg\x20viewBox=\x220\x200\x2024\x2024\x22\x20fill=\x22none\x22\x20stroke=\x22currentColor\x22\x20stroke-width=\x222\x22><line\x20x1=\x225\x22\x20y1=\x2212\x22\x20x2=\x2219\x22\x20y2=\x2212\x22/></svg>';default:return'<svg\x20viewBox=\x220\x200\x2024\x2024\x22\x20fill=\x22none\x22\x20stroke=\x22currentColor\x22\x20stroke-width=\x222\x22><path\x20d=\x22M11\x204H4a2\x202\x200\x200\x200-2\x202v14a2\x202\x200\x200\x200\x202\x202h14a2\x202\x200\x200\x200\x202-2v-7\x22/><path\x20d=\x22M18.5\x202.5a2.121\x202.121\x200\x200\x201\x203\x203L12\x2015l-4\x201\x201-4\x209.5-9.5z\x22/></svg>';}}function detectCommitType(_0x3a9c9e){if(!_0x3a9c9e)return null;const _0x568256=_0x3a9c9e['toLowerCase']();if(/^feat(\(|:|\s)/['test'](_0x568256)||_0x568256['includes']('add\x20')||_0x568256['includes']('implement'))return'feat';if(/^fix(\(|:|\s)/['test'](_0x568256)||_0x568256['includes']('bug')||_0x568256['includes']('patch'))return'fix';if(/^refactor(\(|:|\s)/['test'](_0x568256)||_0x568256['includes']('refactor')||_0x568256['includes']('restructure'))return'refactor';if(/^docs?(\(|:|\s)/['test'](_0x568256)||_0x568256['includes']('readme')||_0x568256['includes']('documentation'))return'docs';if(/^test(\(|:|\s)/['test'](_0x568256)||_0x568256['includes']('test'))return'test';if(/^chore(\(|:|\s)/['test'](_0x568256)||_0x568256['includes']('chore')||_0x568256['includes']('update\x20dep'))return'chore';return null;}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{API,Utils}from'./app.js';export function updateGitStatusIndicator(
|
|
1
|
+
import{API,Utils}from'./app.js';export function updateGitStatusIndicator(_0x2487f6,_0x1f7fde){const {statusIcon:_0x45f121,statusText:_0x37b6b4,branchText:_0x545b6f,authBadge:_0x33b1b9,container:_0x15da09,commitBtn:_0x739b6c,discardBtn:_0x54a66f}=_0x2487f6;if(_0x1f7fde['hasUncommittedChanges']){_0x45f121['textContent']='⚠️',_0x37b6b4['textContent']='Uncommitted\x20changes';_0x15da09&&(_0x15da09['style']['cursor']='pointer',_0x15da09['title']='Click\x20to\x20view\x20uncommitted\x20changes');if(_0x739b6c)_0x739b6c['disabled']=![];if(_0x54a66f)_0x54a66f['disabled']=![];}else{if(_0x1f7fde['ahead']>0x0){_0x45f121['textContent']='📤',_0x37b6b4['textContent']=_0x1f7fde['ahead']+'\x20ahead';_0x15da09&&(_0x15da09['style']['cursor']='default',_0x15da09['title']='Repository\x20git\x20status');if(_0x739b6c)_0x739b6c['disabled']=!![];if(_0x54a66f)_0x54a66f['disabled']=!![];}else{if(_0x1f7fde['behind']>0x0){_0x45f121['textContent']='📥',_0x37b6b4['textContent']=_0x1f7fde['behind']+'\x20behind';_0x15da09&&(_0x15da09['style']['cursor']='default',_0x15da09['title']='Repository\x20git\x20status');if(_0x739b6c)_0x739b6c['disabled']=!![];if(_0x54a66f)_0x54a66f['disabled']=!![];}else{_0x45f121['textContent']='✓',_0x37b6b4['textContent']='Synced';_0x15da09&&(_0x15da09['style']['cursor']='default',_0x15da09['title']='Repository\x20git\x20status');if(_0x739b6c)_0x739b6c['disabled']=!![];if(_0x54a66f)_0x54a66f['disabled']=!![];}}}_0x545b6f&&(_0x545b6f['textContent']=_0x1f7fde['branch']||'');if(_0x33b1b9){const _0x5b0e06=_0x1f7fde['setupRepoAuth']?.['mode'];_0x33b1b9['classList']['remove']('auth-provider','auth-local','auth-user');if(_0x5b0e06==='provider')_0x33b1b9['textContent']='App\x20Auth',_0x33b1b9['classList']['add']('auth-provider'),_0x33b1b9['title']=_0x1f7fde['setupRepoAuth']?.['provider']?'Setup\x20repository\x20auth:\x20Git\x20Provider\x20app\x20('+_0x1f7fde['setupRepoAuth']['provider']+')':'Setup\x20repository\x20auth:\x20Git\x20Provider\x20app';else _0x5b0e06==='user'?(_0x33b1b9['textContent']='User\x20Auth',_0x33b1b9['classList']['add']('auth-user'),_0x33b1b9['title']=_0x1f7fde['setupRepoAuth']?.['provider']?'Setup\x20repository\x20auth:\x20User\x20OAuth\x20('+_0x1f7fde['setupRepoAuth']['provider']+')':'Setup\x20repository\x20auth:\x20User\x20OAuth'):(_0x33b1b9['textContent']='Local\x20Auth',_0x33b1b9['classList']['add']('auth-local'),_0x33b1b9['title']='Setup\x20repository\x20auth:\x20Local\x20host\x20git\x20credentials');_0x33b1b9['hidden']=![];}}export function showGitStatusError(_0x2030dd){const {statusIcon:_0x5f0033,statusText:_0x4ffe52,authBadge:_0x91dacf}=_0x2030dd;_0x5f0033['textContent']='❌',_0x4ffe52['textContent']='Error',_0x91dacf&&(_0x91dacf['hidden']=!![]);}export function getFileStatusSymbol(_0x4e3da0){if(_0x4e3da0['includes']('M'))return'📝';if(_0x4e3da0['includes']('A'))return'➕';if(_0x4e3da0['includes']('D'))return'➖';return'📄';}export function renderChangedFilesList(_0x1adc3d,_0x4be464,_0x1422ba='No\x20changes',_0x3f536e=![],_0x100abe=null){if(!_0x4be464||_0x4be464['length']===0x0){_0x1adc3d['innerHTML']='<li\x20class=\x22text-muted\x22>'+Utils['escapeHtml'](_0x1422ba)+'</li>';return;}const _0x79a0b6=_0x100abe?'\x20changed-file-clickable':'';_0x1adc3d['innerHTML']=_0x4be464['map'](_0x5b231a=>{const _0x54c43a=getFileStatusSymbol(_0x5b231a['status']);let _0x28a879=_0x5b231a['filename'];return _0x3f536e&&_0x5b231a['filename']['endsWith']('/')&&(_0x28a879=_0x5b231a['filename']+'\x20(new\x20directory\x20with\x20contents)'),'<li\x20class=\x22changed-file-item'+_0x79a0b6+'\x22\x20data-filename=\x22'+Utils['escapeHtml'](_0x5b231a['filename'])+'\x22>'+_0x54c43a+'\x20'+Utils['escapeHtml'](_0x28a879)+'</li>';})['join'](''),_0x100abe&&_0x1adc3d['querySelectorAll']('.changed-file-clickable')['forEach'](_0x5aef76=>{_0x5aef76['addEventListener']('click',()=>{_0x100abe(_0x5aef76['dataset']['filename'],_0x5aef76);});});}export function showUncommittedChangesModal(_0x98fac6,_0xe38d20,_0x38fac7,_0x22506a=null){renderChangedFilesList(_0xe38d20,_0x38fac7,'No\x20uncommitted\x20changes',!![],_0x22506a),_0x98fac6['hidden']=![];}export function showCommitModal(_0x35abb2,_0x34ea12){const {userNameEl:_0x2db6e4,userEmailEl:_0x535848,filesListEl:_0x8562d1,messageEl:_0xf3f59c,pushCheckboxEl:_0x30d09f,errorEl:_0x38ba61,user:_0x38cccb,changedFiles:_0x2de615}=_0x34ea12;if(_0x38ba61)_0x38ba61['hidden']=!![];_0x38cccb&&_0x2db6e4&&(_0x2db6e4['textContent']=_0x38cccb['name']||_0x38cccb['username']);_0x38cccb&&_0x535848&&(_0x535848['textContent']=_0x38cccb['email']||'');renderChangedFilesList(_0x8562d1,_0x2de615,'No\x20changes\x20to\x20commit',![],_0x34ea12['onFileClick']||null);if(_0xf3f59c)_0xf3f59c['value']='';if(_0x30d09f)_0x30d09f['checked']=!![];_0x35abb2['hidden']=![];if(_0xf3f59c)_0xf3f59c['focus']();}export function showDiscardModal(_0x3d7eb7,_0x47eb97,_0xe16eb6,_0x3c4548=null){renderChangedFilesList(_0x47eb97,_0xe16eb6,'No\x20changes\x20to\x20discard',![],_0x3c4548),_0x3d7eb7['hidden']=![];}export async function fetchGitStatus(){return await API['get']('/environments/git/status');}export async function fetchGitDiff(){return await API['get']('/environments/git/diff');}
|