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