1fb726d48Sopenharmony_ci/* 2fb726d48Sopenharmony_ci * Copyright (C) 2022 Huawei Device Co., Ltd. 3fb726d48Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4fb726d48Sopenharmony_ci * you may not use this file except in compliance with the License. 5fb726d48Sopenharmony_ci * You may obtain a copy of the License at 6fb726d48Sopenharmony_ci * 7fb726d48Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8fb726d48Sopenharmony_ci * 9fb726d48Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10fb726d48Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11fb726d48Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12fb726d48Sopenharmony_ci * See the License for the specific language governing permissions and 13fb726d48Sopenharmony_ci * limitations under the License. 14fb726d48Sopenharmony_ci */ 15fb726d48Sopenharmony_ci 16fb726d48Sopenharmony_ciimport { BaseElement, element } from '../../base-ui/BaseElement'; 17fb726d48Sopenharmony_ciimport { LitMainMenuGroup } from '../../base-ui/menu/LitMainMenuGroup'; 18fb726d48Sopenharmony_ciimport { LitMainMenu, MenuGroup, MenuItem } from '../../base-ui/menu/LitMainMenu'; 19fb726d48Sopenharmony_ciimport { LitMainMenuItem } from '../../base-ui/menu/LitMainMenuItem'; 20fb726d48Sopenharmony_ciimport { SpStatisticsHttpUtil } from '../../statistics/util/SpStatisticsHttpUtil'; 21fb726d48Sopenharmony_ciimport { EventDefinition, eventDefinitions } from '../enums/helpDocEnums'; 22fb726d48Sopenharmony_ci 23fb726d48Sopenharmony_ci@element('sp-help') 24fb726d48Sopenharmony_ciexport class SpHelp extends BaseElement { 25fb726d48Sopenharmony_ci private appContent: HTMLElement | undefined | null; 26fb726d48Sopenharmony_ci private helpFile: HTMLElement | undefined | null; 27fb726d48Sopenharmony_ci private navbarContainer: HTMLElement | undefined | null; 28fb726d48Sopenharmony_ci private backToTop: HTMLElement | undefined | null; 29fb726d48Sopenharmony_ci 30fb726d48Sopenharmony_ci get dark(): boolean { 31fb726d48Sopenharmony_ci return this.hasAttribute('dark'); 32fb726d48Sopenharmony_ci } 33fb726d48Sopenharmony_ci 34fb726d48Sopenharmony_ci set dark(dark: boolean) { 35fb726d48Sopenharmony_ci if (dark) { 36fb726d48Sopenharmony_ci this.setAttribute('dark', `${dark}`); 37fb726d48Sopenharmony_ci } else { 38fb726d48Sopenharmony_ci this.removeAttribute('dark'); 39fb726d48Sopenharmony_ci } 40fb726d48Sopenharmony_ci this.helpFile!.innerHTML = 41fb726d48Sopenharmony_ci '<object type="text/html" data=' + 42fb726d48Sopenharmony_ci `/application/doc/quickstart_device_record.html?${dark} width="100%" height="100%"></object>`; 43fb726d48Sopenharmony_ci this.navbarInit('quickstart_device_record'); 44fb726d48Sopenharmony_ci } 45fb726d48Sopenharmony_ci 46fb726d48Sopenharmony_ci initElements(): void { 47fb726d48Sopenharmony_ci let parentElement = this.parentNode as HTMLElement; 48fb726d48Sopenharmony_ci parentElement.style.overflow = 'hidden'; 49fb726d48Sopenharmony_ci this.appContent = this.shadowRoot?.querySelector('#app-content') as HTMLElement; 50fb726d48Sopenharmony_ci this.helpFile = this.shadowRoot?.querySelector('#help-file') as HTMLElement; 51fb726d48Sopenharmony_ci this.navbarContainer = this.shadowRoot?.querySelector('#navbar-container') as HTMLElement; 52fb726d48Sopenharmony_ci this.backToTop = this.shadowRoot?.querySelector('.back') as HTMLElement; 53fb726d48Sopenharmony_ci let mainMenu = this.shadowRoot?.querySelector('#main-menu') as LitMainMenu; 54fb726d48Sopenharmony_ci let header = mainMenu.shadowRoot?.querySelector('.header') as HTMLDivElement; 55fb726d48Sopenharmony_ci let color = mainMenu.shadowRoot?.querySelector('.customColor') as HTMLDivElement; 56fb726d48Sopenharmony_ci let version = mainMenu.shadowRoot?.querySelector('.version') as HTMLDivElement; 57fb726d48Sopenharmony_ci color.style.display = 'none'; 58fb726d48Sopenharmony_ci header.style.display = 'none'; 59fb726d48Sopenharmony_ci version.style.display = 'none'; 60fb726d48Sopenharmony_ci this.setupMainMenu(mainMenu, this); 61fb726d48Sopenharmony_ci mainMenu.style.width = '330px'; 62fb726d48Sopenharmony_ci let body = mainMenu.shadowRoot?.querySelector('.menu-body') as HTMLDivElement; 63fb726d48Sopenharmony_ci let groups = body.querySelectorAll<LitMainMenuGroup>('lit-main-menu-group'); 64fb726d48Sopenharmony_ci groups.forEach((value) => { 65fb726d48Sopenharmony_ci let items = value.querySelectorAll<LitMainMenuItem>('lit-main-menu-item'); 66fb726d48Sopenharmony_ci items.forEach((item) => { 67fb726d48Sopenharmony_ci item.style.width = '330px'; 68fb726d48Sopenharmony_ci }); 69fb726d48Sopenharmony_ci if (value.title === 'TraceStreamer') { 70fb726d48Sopenharmony_ci let items = value.querySelectorAll<LitMainMenuItem>('lit-main-menu-item'); 71fb726d48Sopenharmony_ci items.forEach((i) => { 72fb726d48Sopenharmony_ci if (i.title !== 'TraceStreamer数据库说明') { 73fb726d48Sopenharmony_ci i.style.display = 'none'; 74fb726d48Sopenharmony_ci } 75fb726d48Sopenharmony_ci }); 76fb726d48Sopenharmony_ci } 77fb726d48Sopenharmony_ci if (value.title === 'SmartPerf') { 78fb726d48Sopenharmony_ci value.style.display = 'none'; 79fb726d48Sopenharmony_ci } 80fb726d48Sopenharmony_ci if (value.title === 'TS栈') { 81fb726d48Sopenharmony_ci value.style.display = 'none'; 82fb726d48Sopenharmony_ci } 83fb726d48Sopenharmony_ci if (value.title === '内存') { 84fb726d48Sopenharmony_ci let items = value.querySelectorAll<LitMainMenuItem>('lit-main-menu-item'); 85fb726d48Sopenharmony_ci items.forEach((i) => { 86fb726d48Sopenharmony_ci if (i.title === 'Js Memory抓取和展示说明') { 87fb726d48Sopenharmony_ci i.style.display = 'none'; 88fb726d48Sopenharmony_ci } 89fb726d48Sopenharmony_ci }); 90fb726d48Sopenharmony_ci } 91fb726d48Sopenharmony_ci }); 92fb726d48Sopenharmony_ci let urlParams = new URL(window.location.href).searchParams; 93fb726d48Sopenharmony_ci if (urlParams && urlParams.get('action') && urlParams.get('action')!.length > 4) { 94fb726d48Sopenharmony_ci this.itemHelpClick(urlParams, this); 95fb726d48Sopenharmony_ci } 96fb726d48Sopenharmony_ci } 97fb726d48Sopenharmony_ci 98fb726d48Sopenharmony_ci private itemHelpClick(urlParams: URLSearchParams, that: this): void { 99fb726d48Sopenharmony_ci if (urlParams.get('action')!.length > 4) { 100fb726d48Sopenharmony_ci let helpDocIndex = urlParams.get('action')!.substring(5); 101fb726d48Sopenharmony_ci let helpDocDetail = this.getEventDefinitionByIndex(Number(helpDocIndex)); 102fb726d48Sopenharmony_ci that.helpFile!.innerHTML = `<object type="text/html" data='/application/doc/${helpDocDetail!.name}.html?${that.dark 103fb726d48Sopenharmony_ci }' width="100%" height="100%"></object>`; 104fb726d48Sopenharmony_ci 105fb726d48Sopenharmony_ci this.navbarInit(helpDocDetail!.name); 106fb726d48Sopenharmony_ci } 107fb726d48Sopenharmony_ci } 108fb726d48Sopenharmony_ci 109fb726d48Sopenharmony_ci private getEventDefinitionByIndex(index: number): EventDefinition | null { 110fb726d48Sopenharmony_ci for (let key in eventDefinitions) { 111fb726d48Sopenharmony_ci if (eventDefinitions[key].index === index) { 112fb726d48Sopenharmony_ci return eventDefinitions[key]; 113fb726d48Sopenharmony_ci } 114fb726d48Sopenharmony_ci } 115fb726d48Sopenharmony_ci return null; 116fb726d48Sopenharmony_ci } 117fb726d48Sopenharmony_ci 118fb726d48Sopenharmony_ci private setupMainMenu(mainMenu: LitMainMenu, that: this): void { 119fb726d48Sopenharmony_ci mainMenu.menus = [ 120fb726d48Sopenharmony_ci { 121fb726d48Sopenharmony_ci collapsed: false, 122fb726d48Sopenharmony_ci title: 'QuickStart', 123fb726d48Sopenharmony_ci second: false, 124fb726d48Sopenharmony_ci icon: 'caret-down', 125fb726d48Sopenharmony_ci describe: '', 126fb726d48Sopenharmony_ci children: [ 127fb726d48Sopenharmony_ci this.setupCaptureAndImportMenu(that), 128fb726d48Sopenharmony_ci this.setupMemoryMenu(that), 129fb726d48Sopenharmony_ci this.setupNativeMenu(that), 130fb726d48Sopenharmony_ci this.setupTsMenu(that), 131fb726d48Sopenharmony_ci this.setupAnalysisTemplateMenu(that), 132fb726d48Sopenharmony_ci this.setupFileMenu(that), 133fb726d48Sopenharmony_ci this.setupOtherMenu(that), 134fb726d48Sopenharmony_ci ], 135fb726d48Sopenharmony_ci }, 136fb726d48Sopenharmony_ci { 137fb726d48Sopenharmony_ci collapsed: false, 138fb726d48Sopenharmony_ci title: 'TraceStreamer', 139fb726d48Sopenharmony_ci second: false, 140fb726d48Sopenharmony_ci icon: 'caret-down', 141fb726d48Sopenharmony_ci describe: '', 142fb726d48Sopenharmony_ci children: [ 143fb726d48Sopenharmony_ci this.setupDatabaseMenu(that), 144fb726d48Sopenharmony_ci this.setupCompileMenu(that), 145fb726d48Sopenharmony_ci this.setupAnalysisMenu(that), 146fb726d48Sopenharmony_ci this.setupEventListMenu(that), 147fb726d48Sopenharmony_ci this.setupToolDescriptionMenu(that), 148fb726d48Sopenharmony_ci this.setupBinderMenu(that), 149fb726d48Sopenharmony_ci this.setupWakeUpMenu(that), 150fb726d48Sopenharmony_ci ], 151fb726d48Sopenharmony_ci }, 152fb726d48Sopenharmony_ci { 153fb726d48Sopenharmony_ci collapsed: false, 154fb726d48Sopenharmony_ci title: 'SmartPerf', 155fb726d48Sopenharmony_ci second: false, 156fb726d48Sopenharmony_ci icon: 'caret-down', 157fb726d48Sopenharmony_ci describe: '', 158fb726d48Sopenharmony_ci children: [this.setupSmartPerfMenu(that)], 159fb726d48Sopenharmony_ci }, 160fb726d48Sopenharmony_ci ]; 161fb726d48Sopenharmony_ci } 162fb726d48Sopenharmony_ci 163fb726d48Sopenharmony_ci private setupCaptureAndImportMenu(that: this): MenuGroup { 164fb726d48Sopenharmony_ci return { 165fb726d48Sopenharmony_ci collapsed: false, 166fb726d48Sopenharmony_ci title: '抓取和导入', 167fb726d48Sopenharmony_ci describe: '', 168fb726d48Sopenharmony_ci second: true, 169fb726d48Sopenharmony_ci icon: 'caret-down', 170fb726d48Sopenharmony_ci children: [ 171fb726d48Sopenharmony_ci { 172fb726d48Sopenharmony_ci title: '设备端抓取trace说明', 173fb726d48Sopenharmony_ci icon: '', 174fb726d48Sopenharmony_ci clickHandler: function (item: MenuItem): void { 175fb726d48Sopenharmony_ci that.handleMemoryMenuItemClick(that, 'record', 'quickstart_device_record', '1'); 176fb726d48Sopenharmony_ci }, 177fb726d48Sopenharmony_ci }, 178fb726d48Sopenharmony_ci { 179fb726d48Sopenharmony_ci title: 'web端抓取trace说明', 180fb726d48Sopenharmony_ci icon: '', 181fb726d48Sopenharmony_ci clickHandler: function (item: MenuItem): void { 182fb726d48Sopenharmony_ci that.handleMemoryMenuItemClick(that, 'online_record', 'quickstart_web_record', '2'); 183fb726d48Sopenharmony_ci }, 184fb726d48Sopenharmony_ci }, 185fb726d48Sopenharmony_ci { 186fb726d48Sopenharmony_ci title: 'web端加载trace说明', 187fb726d48Sopenharmony_ci icon: '', 188fb726d48Sopenharmony_ci clickHandler: function (item: MenuItem): void { 189fb726d48Sopenharmony_ci that.handleMemoryMenuItemClick(that, 'load', 'quickstart_systemtrace', '3'); 190fb726d48Sopenharmony_ci }, 191fb726d48Sopenharmony_ci }, 192fb726d48Sopenharmony_ci ], 193fb726d48Sopenharmony_ci }; 194fb726d48Sopenharmony_ci } 195fb726d48Sopenharmony_ci 196fb726d48Sopenharmony_ci private setupOtherMenu(that: this): MenuGroup { 197fb726d48Sopenharmony_ci return { 198fb726d48Sopenharmony_ci collapsed: false, 199fb726d48Sopenharmony_ci title: '其他', 200fb726d48Sopenharmony_ci describe: '', 201fb726d48Sopenharmony_ci icon: 'caret-down', 202fb726d48Sopenharmony_ci second: true, 203fb726d48Sopenharmony_ci children: this.setupOtherMenuItems(that), 204fb726d48Sopenharmony_ci }; 205fb726d48Sopenharmony_ci } 206fb726d48Sopenharmony_ci private setupOtherMenuItems(that: this): MenuItem[] { 207fb726d48Sopenharmony_ci return [ 208fb726d48Sopenharmony_ci this.createSubMenuItem('Sql分析和Metrics说明', 'sql', 'quickstart_sql_metrics', that, '17'), 209fb726d48Sopenharmony_ci this.createSubMenuItem('HiSystemEvent抓取和展示说明', 'hisys', 'quickstart_hisystemevent', that, '18'), 210fb726d48Sopenharmony_ci this.createSubMenuItem('sdk抓取和展示说明', 'sdk_record', 'quickstart_sdk', that, '19'), 211fb726d48Sopenharmony_ci this.createSubMenuItem('调用栈可视化和不同库函数调用占比说明', 'import_so', 'quickstart_Import_so', that, '20'), 212fb726d48Sopenharmony_ci this.createSubMenuItem('Hilog抓取和展示说明', 'hilog', 'quickstart_hilog', that, '21'), 213fb726d48Sopenharmony_ci this.createSubMenuItem('Ability Monitor抓取和展示说明', 'ability', 'quickstart_ability_monitor', that, '22'), 214fb726d48Sopenharmony_ci this.createSubMenuItem('Trace解析能力增强', 'trace_parsing', 'quickstart_parsing_ability', that, '23'), 215fb726d48Sopenharmony_ci this.createSubMenuItem('应用操作技巧', 'operation_skills', 'quickstart_Application_operation_skills', that, '24'), 216fb726d48Sopenharmony_ci this.createSubMenuItem('快捷键说明', 'keywords_shortcuts', 'quickstart_keywords_shortcuts', that, '25'), 217fb726d48Sopenharmony_ci ]; 218fb726d48Sopenharmony_ci } 219fb726d48Sopenharmony_ci 220fb726d48Sopenharmony_ci private createSubMenuItem(title: string, event: string, docName: string, that: this, index: string): MenuItem { 221fb726d48Sopenharmony_ci return { 222fb726d48Sopenharmony_ci title: title, 223fb726d48Sopenharmony_ci icon: '', 224fb726d48Sopenharmony_ci clickHandler: (item: MenuItem): void => { 225fb726d48Sopenharmony_ci that.handleMemoryMenuItemClick(that, event, docName, index); 226fb726d48Sopenharmony_ci }, 227fb726d48Sopenharmony_ci }; 228fb726d48Sopenharmony_ci } 229fb726d48Sopenharmony_ci 230fb726d48Sopenharmony_ci private setupMemoryMenu(that: this): MenuGroup { 231fb726d48Sopenharmony_ci return { 232fb726d48Sopenharmony_ci collapsed: false, 233fb726d48Sopenharmony_ci title: '内存', 234fb726d48Sopenharmony_ci describe: '', 235fb726d48Sopenharmony_ci icon: 'caret-down', 236fb726d48Sopenharmony_ci second: true, 237fb726d48Sopenharmony_ci children: [ 238fb726d48Sopenharmony_ci { 239fb726d48Sopenharmony_ci title: 'Js Memory抓取和展示说明', 240fb726d48Sopenharmony_ci icon: '', 241fb726d48Sopenharmony_ci clickHandler: function (item: MenuItem): void { 242fb726d48Sopenharmony_ci that.handleMemoryMenuItemClick(that, 'js_memory', 'quickstart_Js_memory', '4'); 243fb726d48Sopenharmony_ci }, 244fb726d48Sopenharmony_ci }, 245fb726d48Sopenharmony_ci { 246fb726d48Sopenharmony_ci title: 'Native Memory抓取和展示说明', 247fb726d48Sopenharmony_ci icon: '', 248fb726d48Sopenharmony_ci clickHandler: function (item: MenuItem): void { 249fb726d48Sopenharmony_ci that.handleMemoryMenuItemClick(that, 'native', 'quickstart_native_memory', '5'); 250fb726d48Sopenharmony_ci }, 251fb726d48Sopenharmony_ci }, 252fb726d48Sopenharmony_ci { 253fb726d48Sopenharmony_ci title: '页内存抓取和展示说明', 254fb726d48Sopenharmony_ci icon: '', 255fb726d48Sopenharmony_ci clickHandler: function (item: MenuItem): void { 256fb726d48Sopenharmony_ci that.handleMemoryMenuItemClick(that, 'virtual_memory', 'quickstart_page_fault', '6'); 257fb726d48Sopenharmony_ci }, 258fb726d48Sopenharmony_ci }, 259fb726d48Sopenharmony_ci { 260fb726d48Sopenharmony_ci title: '系统内存抓取和展示说明', 261fb726d48Sopenharmony_ci icon: '', 262fb726d48Sopenharmony_ci clickHandler: function (item: MenuItem): void { 263fb726d48Sopenharmony_ci that.handleMemoryMenuItemClick(that, 'memory_template', 'quickstart_memory_template', '7'); 264fb726d48Sopenharmony_ci }, 265fb726d48Sopenharmony_ci }, 266fb726d48Sopenharmony_ci ], 267fb726d48Sopenharmony_ci }; 268fb726d48Sopenharmony_ci } 269fb726d48Sopenharmony_ci 270fb726d48Sopenharmony_ci private handleMemoryMenuItemClick(that: this, event: string, docName: string, index?: string): void { 271fb726d48Sopenharmony_ci SpStatisticsHttpUtil.addOrdinaryVisitAction({ 272fb726d48Sopenharmony_ci event: event, 273fb726d48Sopenharmony_ci action: 'help_doc', 274fb726d48Sopenharmony_ci }); 275fb726d48Sopenharmony_ci that.helpFile!.innerHTML = `<object type="text/html" data='/application/doc/${docName}.html?${that.dark}' width="100%" height="100%"></object>`; 276fb726d48Sopenharmony_ci this.navbarInit(docName); 277fb726d48Sopenharmony_ci this.changeItemURL(index!); 278fb726d48Sopenharmony_ci } 279fb726d48Sopenharmony_ci 280fb726d48Sopenharmony_ci private navbarInit(docName: string): void { 281fb726d48Sopenharmony_ci fetch(`/application/doc/${docName}.html`) 282fb726d48Sopenharmony_ci .then(response => response.text()) 283fb726d48Sopenharmony_ci .then(htmlString => { 284fb726d48Sopenharmony_ci const parser = new DOMParser(); 285fb726d48Sopenharmony_ci const doc = parser.parseFromString(htmlString, 'text/html'); 286fb726d48Sopenharmony_ci 287fb726d48Sopenharmony_ci const hTags = Array.from(doc.body.querySelectorAll('h1, h2, h3, h4, h5, h6')).map((header) => ({ 288fb726d48Sopenharmony_ci id: header.id, 289fb726d48Sopenharmony_ci text: header.textContent!.trim() 290fb726d48Sopenharmony_ci })); 291fb726d48Sopenharmony_ci this.navbarContainer!.innerHTML = `<ul id="nav-links">${hTags.map(hTag => { 292fb726d48Sopenharmony_ci let backData: string = ''; 293fb726d48Sopenharmony_ci if (hTag.id) { 294fb726d48Sopenharmony_ci backData = `<li class="tooltip"><a id="${hTag.id}" data-full-text="${hTag.text}">${hTag.text}</a><span class="tooltiptext" id="tooltip-${hTag.id}">${hTag.text}</span> 295fb726d48Sopenharmony_ci </li>`; 296fb726d48Sopenharmony_ci } 297fb726d48Sopenharmony_ci return backData; 298fb726d48Sopenharmony_ci }).join('') 299fb726d48Sopenharmony_ci }</ul>`; 300fb726d48Sopenharmony_ci 301fb726d48Sopenharmony_ci let navLinks = this.navbarContainer!.querySelectorAll('#nav-links a'); 302fb726d48Sopenharmony_ci navLinks.forEach((navLink) => { 303fb726d48Sopenharmony_ci navLink.addEventListener('click', (e) => { 304fb726d48Sopenharmony_ci let lis = this.navbarContainer!.querySelectorAll('#nav-links li'); 305fb726d48Sopenharmony_ci lis.forEach(li => li.classList.remove('active')); 306fb726d48Sopenharmony_ci navLink.closest('li')!.classList.add('active'); 307fb726d48Sopenharmony_ci let targetId = navLink.id; 308fb726d48Sopenharmony_ci e.preventDefault(); 309fb726d48Sopenharmony_ci this.helpFile!.innerHTML = `<object type="text/html" data='/application/doc/${docName}.html?dark=${this.dark}&targetId=${targetId}' width="100%" height="100%"></object>`; 310fb726d48Sopenharmony_ci }); 311fb726d48Sopenharmony_ci }); 312fb726d48Sopenharmony_ci 313fb726d48Sopenharmony_ci this.backToTop!.querySelector('#back-to-top')!.addEventListener('click', (e) => { 314fb726d48Sopenharmony_ci e.preventDefault(); 315fb726d48Sopenharmony_ci navLinks.forEach((navLink) => { 316fb726d48Sopenharmony_ci navLink.closest('li')?.classList.remove('active'); 317fb726d48Sopenharmony_ci }); 318fb726d48Sopenharmony_ci this.helpFile!.innerHTML = `<object type="text/html" data='/application/doc/${docName}.html?dark=${this.dark}' width="100%" height="100%"></object>`; 319fb726d48Sopenharmony_ci }); 320fb726d48Sopenharmony_ci 321fb726d48Sopenharmony_ci }) 322fb726d48Sopenharmony_ci .catch(error => { 323fb726d48Sopenharmony_ci console.error('Error fetching and modifying HTML:', error); 324fb726d48Sopenharmony_ci }); 325fb726d48Sopenharmony_ci } 326fb726d48Sopenharmony_ci 327fb726d48Sopenharmony_ci private changeItemURL(index: string): void { 328fb726d48Sopenharmony_ci let url = new URL(window.location.href); 329fb726d48Sopenharmony_ci let actionParam = url.searchParams.get('action'); 330fb726d48Sopenharmony_ci let newActionValue = `help_${index}`; 331fb726d48Sopenharmony_ci if (actionParam) { 332fb726d48Sopenharmony_ci url.searchParams.set('action', newActionValue); 333fb726d48Sopenharmony_ci let newURL = url.href; 334fb726d48Sopenharmony_ci history.pushState({}, '', newURL); 335fb726d48Sopenharmony_ci } else { 336fb726d48Sopenharmony_ci history.pushState({}, '', window.location.origin + window.location.pathname); 337fb726d48Sopenharmony_ci } 338fb726d48Sopenharmony_ci } 339fb726d48Sopenharmony_ci 340fb726d48Sopenharmony_ci private setupNativeMenu(that: this): MenuGroup { 341fb726d48Sopenharmony_ci return { 342fb726d48Sopenharmony_ci collapsed: false, 343fb726d48Sopenharmony_ci title: 'Native栈', 344fb726d48Sopenharmony_ci describe: '', 345fb726d48Sopenharmony_ci second: true, 346fb726d48Sopenharmony_ci icon: 'caret-down', 347fb726d48Sopenharmony_ci children: [ 348fb726d48Sopenharmony_ci { 349fb726d48Sopenharmony_ci title: 'HiPerf的抓取和展示说明', 350fb726d48Sopenharmony_ci icon: '', 351fb726d48Sopenharmony_ci clickHandler: function (item: MenuItem): void { 352fb726d48Sopenharmony_ci that.handleMemoryMenuItemClick(that, 'perf', 'quickstart_hiperf', '8'); 353fb726d48Sopenharmony_ci }, 354fb726d48Sopenharmony_ci }, 355fb726d48Sopenharmony_ci ], 356fb726d48Sopenharmony_ci }; 357fb726d48Sopenharmony_ci } 358fb726d48Sopenharmony_ci 359fb726d48Sopenharmony_ci private setupTsMenu(that: this): MenuGroup { 360fb726d48Sopenharmony_ci return { 361fb726d48Sopenharmony_ci collapsed: false, 362fb726d48Sopenharmony_ci title: 'TS栈', 363fb726d48Sopenharmony_ci describe: '', 364fb726d48Sopenharmony_ci second: true, 365fb726d48Sopenharmony_ci icon: 'caret-down', 366fb726d48Sopenharmony_ci children: [ 367fb726d48Sopenharmony_ci { 368fb726d48Sopenharmony_ci title: 'Cpuprofiler抓取和展示说明', 369fb726d48Sopenharmony_ci icon: '', 370fb726d48Sopenharmony_ci clickHandler: function (item: MenuItem): void { 371fb726d48Sopenharmony_ci that.handleMemoryMenuItemClick(that, 'arkts', 'quickstart_arkts', '9'); 372fb726d48Sopenharmony_ci }, 373fb726d48Sopenharmony_ci }, 374fb726d48Sopenharmony_ci ], 375fb726d48Sopenharmony_ci }; 376fb726d48Sopenharmony_ci } 377fb726d48Sopenharmony_ci 378fb726d48Sopenharmony_ci private setupAnalysisTemplateMenu(that: this): MenuGroup { 379fb726d48Sopenharmony_ci return { 380fb726d48Sopenharmony_ci collapsed: false, 381fb726d48Sopenharmony_ci title: '分析模板', 382fb726d48Sopenharmony_ci describe: '', 383fb726d48Sopenharmony_ci second: true, 384fb726d48Sopenharmony_ci icon: 'caret-down', 385fb726d48Sopenharmony_ci children: [ 386fb726d48Sopenharmony_ci { 387fb726d48Sopenharmony_ci title: 'Frame timeline抓取和展示说明', 388fb726d48Sopenharmony_ci icon: '', 389fb726d48Sopenharmony_ci clickHandler: function (item: MenuItem): void { 390fb726d48Sopenharmony_ci that.handleMemoryMenuItemClick(that, 'frame_record', 'quickstart_Frametimeline', '10'); 391fb726d48Sopenharmony_ci }, 392fb726d48Sopenharmony_ci }, 393fb726d48Sopenharmony_ci { 394fb726d48Sopenharmony_ci title: 'Animation的抓取和展示说明', 395fb726d48Sopenharmony_ci icon: '', 396fb726d48Sopenharmony_ci clickHandler: function (item: MenuItem): void { 397fb726d48Sopenharmony_ci that.handleMemoryMenuItemClick(that, 'animation', 'quickstart_animation', '11'); 398fb726d48Sopenharmony_ci }, 399fb726d48Sopenharmony_ci }, 400fb726d48Sopenharmony_ci { 401fb726d48Sopenharmony_ci title: 'TaskPool抓取和展示说明', 402fb726d48Sopenharmony_ci icon: '', 403fb726d48Sopenharmony_ci clickHandler: function (item: MenuItem): void { 404fb726d48Sopenharmony_ci that.handleMemoryMenuItemClick(that, 'taskpool', 'quickstart_taskpool', '12'); 405fb726d48Sopenharmony_ci }, 406fb726d48Sopenharmony_ci }, 407fb726d48Sopenharmony_ci { 408fb726d48Sopenharmony_ci title: 'App startup的抓取和展示说明', 409fb726d48Sopenharmony_ci icon: '', 410fb726d48Sopenharmony_ci clickHandler: function (item: MenuItem): void { 411fb726d48Sopenharmony_ci that.handleMemoryMenuItemClick(that, 'app_startup', 'quickstart_app_startup', '13'); 412fb726d48Sopenharmony_ci }, 413fb726d48Sopenharmony_ci }, 414fb726d48Sopenharmony_ci { 415fb726d48Sopenharmony_ci title: 'Scheduling analysis抓取和展示说明', 416fb726d48Sopenharmony_ci icon: '', 417fb726d48Sopenharmony_ci clickHandler: function (item: MenuItem): void { 418fb726d48Sopenharmony_ci that.handleMemoryMenuItemClick(that, 'scheduling_record', 'quickstart_schedulinganalysis', '14'); 419fb726d48Sopenharmony_ci }, 420fb726d48Sopenharmony_ci }, 421fb726d48Sopenharmony_ci ], 422fb726d48Sopenharmony_ci }; 423fb726d48Sopenharmony_ci } 424fb726d48Sopenharmony_ci 425fb726d48Sopenharmony_ci private setupFileMenu(that: this): MenuGroup { 426fb726d48Sopenharmony_ci return { 427fb726d48Sopenharmony_ci collapsed: false, 428fb726d48Sopenharmony_ci title: '文件', 429fb726d48Sopenharmony_ci describe: '', 430fb726d48Sopenharmony_ci second: true, 431fb726d48Sopenharmony_ci icon: 'caret-down', 432fb726d48Sopenharmony_ci children: [ 433fb726d48Sopenharmony_ci { 434fb726d48Sopenharmony_ci title: 'FileSystem抓取和展示说明', 435fb726d48Sopenharmony_ci icon: '', 436fb726d48Sopenharmony_ci clickHandler: function (item: MenuItem): void { 437fb726d48Sopenharmony_ci that.handleMemoryMenuItemClick(that, 'file_system', 'quickstart_filesystem', '15'); 438fb726d48Sopenharmony_ci }, 439fb726d48Sopenharmony_ci }, 440fb726d48Sopenharmony_ci { 441fb726d48Sopenharmony_ci title: 'Bio抓取和展示说明', 442fb726d48Sopenharmony_ci icon: '', 443fb726d48Sopenharmony_ci clickHandler: function (item: MenuItem): void { 444fb726d48Sopenharmony_ci that.handleMemoryMenuItemClick(that, 'bio', 'quickstart_bio', '16'); 445fb726d48Sopenharmony_ci }, 446fb726d48Sopenharmony_ci }, 447fb726d48Sopenharmony_ci ], 448fb726d48Sopenharmony_ci }; 449fb726d48Sopenharmony_ci } 450fb726d48Sopenharmony_ci 451fb726d48Sopenharmony_ci private setupDatabaseMenu(that: this): MenuItem { 452fb726d48Sopenharmony_ci return { 453fb726d48Sopenharmony_ci title: 'TraceStreamer数据库说明', 454fb726d48Sopenharmony_ci icon: '', 455fb726d48Sopenharmony_ci clickHandler: function (item: MenuItem): void { 456fb726d48Sopenharmony_ci that.handleMemoryMenuItemClick(that, 'trace_streamer_explain', 'des_tables', '26'); 457fb726d48Sopenharmony_ci }, 458fb726d48Sopenharmony_ci }; 459fb726d48Sopenharmony_ci } 460fb726d48Sopenharmony_ci 461fb726d48Sopenharmony_ci private setupCompileMenu(that: this): MenuItem { 462fb726d48Sopenharmony_ci return { 463fb726d48Sopenharmony_ci title: '编译Trace_streamer', 464fb726d48Sopenharmony_ci icon: '', 465fb726d48Sopenharmony_ci clickHandler: function (item: MenuItem): void { 466fb726d48Sopenharmony_ci that.handleMemoryMenuItemClick(that, 'trace_streamer_compile', 'compile_trace_streamer'); 467fb726d48Sopenharmony_ci }, 468fb726d48Sopenharmony_ci }; 469fb726d48Sopenharmony_ci } 470fb726d48Sopenharmony_ci 471fb726d48Sopenharmony_ci private setupAnalysisMenu(that: this): MenuItem { 472fb726d48Sopenharmony_ci return { 473fb726d48Sopenharmony_ci title: 'TraceStreamer 解析数据状态表', 474fb726d48Sopenharmony_ci icon: '', 475fb726d48Sopenharmony_ci clickHandler: function (item: MenuItem): void { 476fb726d48Sopenharmony_ci that.handleMemoryMenuItemClick(that, 'trace_streamer_des', 'des_stat'); 477fb726d48Sopenharmony_ci }, 478fb726d48Sopenharmony_ci }; 479fb726d48Sopenharmony_ci } 480fb726d48Sopenharmony_ci 481fb726d48Sopenharmony_ci private setupSmartPerfMenu(that: this): MenuItem { 482fb726d48Sopenharmony_ci return { 483fb726d48Sopenharmony_ci title: 'SmartPerf 编译指导', 484fb726d48Sopenharmony_ci icon: '', 485fb726d48Sopenharmony_ci clickHandler: function (item: MenuItem): void { 486fb726d48Sopenharmony_ci that.handleMemoryMenuItemClick(that, 'smartperf_guide', 'quickstart_smartperflinux_compile_guide'); 487fb726d48Sopenharmony_ci }, 488fb726d48Sopenharmony_ci }; 489fb726d48Sopenharmony_ci } 490fb726d48Sopenharmony_ci 491fb726d48Sopenharmony_ci private setupEventListMenu(that: this): MenuItem { 492fb726d48Sopenharmony_ci return { 493fb726d48Sopenharmony_ci title: 'TraceStreamer支持解析事件列表', 494fb726d48Sopenharmony_ci icon: '', 495fb726d48Sopenharmony_ci clickHandler: function (item: MenuItem): void { 496fb726d48Sopenharmony_ci that.handleMemoryMenuItemClick(that, 'support_event', 'des_support_event'); 497fb726d48Sopenharmony_ci }, 498fb726d48Sopenharmony_ci }; 499fb726d48Sopenharmony_ci } 500fb726d48Sopenharmony_ci 501fb726d48Sopenharmony_ci private setupToolDescriptionMenu(that: this): MenuItem { 502fb726d48Sopenharmony_ci return { 503fb726d48Sopenharmony_ci title: 'trace_streamer工具说明', 504fb726d48Sopenharmony_ci icon: '', 505fb726d48Sopenharmony_ci clickHandler: function (item: MenuItem): void { 506fb726d48Sopenharmony_ci that.handleMemoryMenuItemClick(that, 'quickstart_trace_streamer', 'quickstart_trace_streamer'); 507fb726d48Sopenharmony_ci }, 508fb726d48Sopenharmony_ci }; 509fb726d48Sopenharmony_ci } 510fb726d48Sopenharmony_ci 511fb726d48Sopenharmony_ci private setupBinderMenu(that: this): MenuItem { 512fb726d48Sopenharmony_ci return { 513fb726d48Sopenharmony_ci title: 'binder事件上下文如何关联', 514fb726d48Sopenharmony_ci icon: '', 515fb726d48Sopenharmony_ci clickHandler: function (item: MenuItem): void { 516fb726d48Sopenharmony_ci that.handleMemoryMenuItemClick(that, 'binder', 'des_binder'); 517fb726d48Sopenharmony_ci }, 518fb726d48Sopenharmony_ci }; 519fb726d48Sopenharmony_ci } 520fb726d48Sopenharmony_ci 521fb726d48Sopenharmony_ci private setupWakeUpMenu(that: this): MenuItem { 522fb726d48Sopenharmony_ci return { 523fb726d48Sopenharmony_ci title: 'wakeup唤醒说明', 524fb726d48Sopenharmony_ci icon: '', 525fb726d48Sopenharmony_ci clickHandler: function (item: MenuItem): void { 526fb726d48Sopenharmony_ci that.handleMemoryMenuItemClick(that, 'wakeup', 'des_wakup'); 527fb726d48Sopenharmony_ci }, 528fb726d48Sopenharmony_ci }; 529fb726d48Sopenharmony_ci } 530fb726d48Sopenharmony_ci 531fb726d48Sopenharmony_ci initHtml(): string { 532fb726d48Sopenharmony_ci return ` 533fb726d48Sopenharmony_ci <style> 534fb726d48Sopenharmony_ci .sp-help-vessel { 535fb726d48Sopenharmony_ci min-height: 100%; 536fb726d48Sopenharmony_ci display: grid; 537fb726d48Sopenharmony_ci grid-template-columns: 1fr; 538fb726d48Sopenharmony_ci grid-template-rows:1fr; 539fb726d48Sopenharmony_ci background-color: var(--dark-background5,#F6F6F6); 540fb726d48Sopenharmony_ci } 541fb726d48Sopenharmony_ci :host{ 542fb726d48Sopenharmony_ci width: 100%; 543fb726d48Sopenharmony_ci display: block; 544fb726d48Sopenharmony_ci height: 100%; 545fb726d48Sopenharmony_ci background-color: var(--dark-background5,#F6F6F6); 546fb726d48Sopenharmony_ci } 547fb726d48Sopenharmony_ci .body{ 548fb726d48Sopenharmony_ci width: 99%; 549fb726d48Sopenharmony_ci margin-left: 15px; 550fb726d48Sopenharmony_ci display: grid; 551fb726d48Sopenharmony_ci grid-template-columns: min-content 1fr; 552fb726d48Sopenharmony_ci border-radius: 16px 16px 16px 16px; 553fb726d48Sopenharmony_ci } 554fb726d48Sopenharmony_ci 555fb726d48Sopenharmony_ci .content{ 556fb726d48Sopenharmony_ci border-style: none none none solid; 557fb726d48Sopenharmony_ci border-width: 1px; 558fb726d48Sopenharmony_ci border-color: rgba(166,164,164,0.2); 559fb726d48Sopenharmony_ci border-radius: 0px 16px 16px 0px; 560fb726d48Sopenharmony_ci padding-left:15px; 561fb726d48Sopenharmony_ci display: flex; 562fb726d48Sopenharmony_ci overflow-y: hidden; 563fb726d48Sopenharmony_ci box-sizing: border-box; 564fb726d48Sopenharmony_ci } 565fb726d48Sopenharmony_ci #navbar-container { 566fb726d48Sopenharmony_ci border-left: 5px solid #ecb829; 567fb726d48Sopenharmony_ci } 568fb726d48Sopenharmony_ci #navbar-container ul { 569fb726d48Sopenharmony_ci list-style-type: none; 570fb726d48Sopenharmony_ci width:100%; 571fb726d48Sopenharmony_ci margin: 0; 572fb726d48Sopenharmony_ci padding: 0; 573fb726d48Sopenharmony_ci } 574fb726d48Sopenharmony_ci #navbar-container ul li { 575fb726d48Sopenharmony_ci position: relative; 576fb726d48Sopenharmony_ci width:100%; 577fb726d48Sopenharmony_ci height:30px; 578fb726d48Sopenharmony_ci line-height:30px; 579fb726d48Sopenharmony_ci text-align: left; 580fb726d48Sopenharmony_ci padding: 0 10px; 581fb726d48Sopenharmony_ci box-sizing: border-box; 582fb726d48Sopenharmony_ci border: none; 583fb726d48Sopenharmony_ci margin: 0; 584fb726d48Sopenharmony_ci } 585fb726d48Sopenharmony_ci #navbar-container ul li a { 586fb726d48Sopenharmony_ci width:100%; 587fb726d48Sopenharmony_ci height:100%; 588fb726d48Sopenharmony_ci color: black; 589fb726d48Sopenharmony_ci font-family: Helvetica; 590fb726d48Sopenharmony_ci font-size: 14px; 591fb726d48Sopenharmony_ci text-decoration: none; 592fb726d48Sopenharmony_ci display: block; 593fb726d48Sopenharmony_ci padding: 0; 594fb726d48Sopenharmony_ci border: none; 595fb726d48Sopenharmony_ci white-space: nowrap; 596fb726d48Sopenharmony_ci overflow: hidden; 597fb726d48Sopenharmony_ci text-overflow: ellipsis; 598fb726d48Sopenharmony_ci } 599fb726d48Sopenharmony_ci #navbar-container ul li:hover, 600fb726d48Sopenharmony_ci #navbar-container ul li:focus { 601fb726d48Sopenharmony_ci color: #ecb829; 602fb726d48Sopenharmony_ci cursor: pointer; 603fb726d48Sopenharmony_ci } 604fb726d48Sopenharmony_ci #navbar-container ul li:hover a, 605fb726d48Sopenharmony_ci #navbar-container ul li:focus a { 606fb726d48Sopenharmony_ci color: #ecb829; 607fb726d48Sopenharmony_ci } 608fb726d48Sopenharmony_ci #navbar-container ul li .tooltiptext { 609fb726d48Sopenharmony_ci position: absolute; 610fb726d48Sopenharmony_ci bottom: 0; 611fb726d48Sopenharmony_ci left: 50%; 612fb726d48Sopenharmony_ci transform: translateX(-50%); 613fb726d48Sopenharmony_ci visibility: hidden; 614fb726d48Sopenharmony_ci width: 100%; 615fb726d48Sopenharmony_ci background-color: #ecb829; 616fb726d48Sopenharmony_ci color: #fff; 617fb726d48Sopenharmony_ci font-family: Helvetica; 618fb726d48Sopenharmony_ci font-size: 14px; 619fb726d48Sopenharmony_ci text-align: center; 620fb726d48Sopenharmony_ci border-radius: 6px; 621fb726d48Sopenharmony_ci padding: 5px 5px; 622fb726d48Sopenharmony_ci margin-left:5px; 623fb726d48Sopenharmony_ci position: absolute; 624fb726d48Sopenharmony_ci z-index: 1; 625fb726d48Sopenharmony_ci opacity: 0; 626fb726d48Sopenharmony_ci transition: opacity 0.3s; 627fb726d48Sopenharmony_ci margin-bottom: 40px; 628fb726d48Sopenharmony_ci &::after { 629fb726d48Sopenharmony_ci content: ''; 630fb726d48Sopenharmony_ci position: absolute; 631fb726d48Sopenharmony_ci bottom: -10px; 632fb726d48Sopenharmony_ci left: 50%; 633fb726d48Sopenharmony_ci margin-left: -10px; 634fb726d48Sopenharmony_ci width: 0; 635fb726d48Sopenharmony_ci height: 0; 636fb726d48Sopenharmony_ci border-style: solid; 637fb726d48Sopenharmony_ci border-width: 10px 10px 0 10px; 638fb726d48Sopenharmony_ci border-color: #ecb829 transparent transparent transparent; 639fb726d48Sopenharmony_ci } 640fb726d48Sopenharmony_ci } 641fb726d48Sopenharmony_ci #navbar-container ul li.tooltip:hover .tooltiptext { 642fb726d48Sopenharmony_ci visibility: visible; 643fb726d48Sopenharmony_ci opacity: 1; 644fb726d48Sopenharmony_ci } 645fb726d48Sopenharmony_ci #navbar-container ul li.active, #navbar-container ul li.active a { 646fb726d48Sopenharmony_ci color: #ecb829; 647fb726d48Sopenharmony_ci } 648fb726d48Sopenharmony_ci 649fb726d48Sopenharmony_ci </style> 650fb726d48Sopenharmony_ci <div class="sp-help-vessel"> 651fb726d48Sopenharmony_ci <div class="body"> 652fb726d48Sopenharmony_ci <lit-main-menu id="main-menu" class="menugroup" data=''></lit-main-menu> 653fb726d48Sopenharmony_ci <div id="app-content" class="content"> 654fb726d48Sopenharmony_ci <div id="help-file" style="width:100%;overflow-y: hidden;"></div> 655fb726d48Sopenharmony_ci <nav id="navbar-container" style="position:fixed;top:80px;left:79%;width:18%;"></nav> 656fb726d48Sopenharmony_ci <div class="back" style="position:fixed;top:80px;left:98%;width:2%;"> 657fb726d48Sopenharmony_ci <lit-icon id="back-to-top" name="vertical-align-top" style="font-weight: bold;cursor: pointer;" size="20"> 658fb726d48Sopenharmony_ci </lit-icon> 659fb726d48Sopenharmony_ci </div> 660fb726d48Sopenharmony_ci </div> 661fb726d48Sopenharmony_ci </div> 662fb726d48Sopenharmony_ci </div> 663fb726d48Sopenharmony_ci </div> 664fb726d48Sopenharmony_ci `; 665fb726d48Sopenharmony_ci } 666fb726d48Sopenharmony_ci} 667