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 { info } from '../../../log/Log';
18fb726d48Sopenharmony_ciimport { SpStatisticsHttpUtil } from '../../../statistics/util/SpStatisticsHttpUtil';
19fb726d48Sopenharmony_ciimport { PluginConvertUtils } from './utils/PluginConvertUtils';
20fb726d48Sopenharmony_ciimport { SpTraceCommandHtml } from './SpTraceCommand.html';
21fb726d48Sopenharmony_ci
22fb726d48Sopenharmony_ci@element('trace-command')
23fb726d48Sopenharmony_ciexport class SpTraceCommand extends BaseElement {
24fb726d48Sopenharmony_ci  private codeHl: HTMLTextAreaElement | undefined | null;
25fb726d48Sopenharmony_ci  private copyEl: HTMLElement | undefined | null;
26fb726d48Sopenharmony_ci
27fb726d48Sopenharmony_ci  get hdcCommon(): string {
28fb726d48Sopenharmony_ci    return `${this.codeHl!.textContent}`;
29fb726d48Sopenharmony_ci  }
30fb726d48Sopenharmony_ci
31fb726d48Sopenharmony_ci  set hdcCommon(value: string) {
32fb726d48Sopenharmony_ci    info('hdc Common is:', value);
33fb726d48Sopenharmony_ci    this.codeHl!.textContent = value;
34fb726d48Sopenharmony_ci  }
35fb726d48Sopenharmony_ci
36fb726d48Sopenharmony_ci  //当 custom element首次被插入文档DOM时,被调用。
37fb726d48Sopenharmony_ci  public connectedCallback(): void {
38fb726d48Sopenharmony_ci    this.codeHl!.textContent = '';
39fb726d48Sopenharmony_ci    this.copyEl?.addEventListener('click', this.codeCopyEvent);
40fb726d48Sopenharmony_ci    this.codeHl?.addEventListener('selectionchange', this.textSelectEvent);
41fb726d48Sopenharmony_ci  }
42fb726d48Sopenharmony_ci
43fb726d48Sopenharmony_ci  public disconnectedCallback(): void {
44fb726d48Sopenharmony_ci    this.copyEl?.removeEventListener('click', this.codeCopyEvent);
45fb726d48Sopenharmony_ci  }
46fb726d48Sopenharmony_ci
47fb726d48Sopenharmony_ci  codeCopyEvent = (): void => {
48fb726d48Sopenharmony_ci    this.codeHl?.select();
49fb726d48Sopenharmony_ci    document.execCommand('copy');
50fb726d48Sopenharmony_ci    let allPlugin: Array<string> = [];
51fb726d48Sopenharmony_ci    PluginConvertUtils.pluginConfig.forEach((plugin) => {
52fb726d48Sopenharmony_ci      //@ts-ignore
53fb726d48Sopenharmony_ci      allPlugin.push(plugin.pluginName);
54fb726d48Sopenharmony_ci    });
55fb726d48Sopenharmony_ci    SpStatisticsHttpUtil.addOrdinaryVisitAction({
56fb726d48Sopenharmony_ci      action: 'config_page',
57fb726d48Sopenharmony_ci      event: 'offline_record',
58fb726d48Sopenharmony_ci      eventData: {
59fb726d48Sopenharmony_ci        plugin: allPlugin,
60fb726d48Sopenharmony_ci      },
61fb726d48Sopenharmony_ci    });
62fb726d48Sopenharmony_ci  };
63fb726d48Sopenharmony_ci
64fb726d48Sopenharmony_ci  textSelectEvent = (): void => {
65fb726d48Sopenharmony_ci    this.copyEl!.style.backgroundColor = '#FFFFFF';
66fb726d48Sopenharmony_ci  };
67fb726d48Sopenharmony_ci
68fb726d48Sopenharmony_ci  initElements(): void {
69fb726d48Sopenharmony_ci    this.codeHl = this.shadowRoot?.querySelector('#code-text') as HTMLTextAreaElement;
70fb726d48Sopenharmony_ci    this.copyEl = this.shadowRoot?.querySelector('#copy-image') as HTMLElement;
71fb726d48Sopenharmony_ci  }
72fb726d48Sopenharmony_ci
73fb726d48Sopenharmony_ci  initHtml(): string {
74fb726d48Sopenharmony_ci    return SpTraceCommandHtml;
75fb726d48Sopenharmony_ci  }
76fb726d48Sopenharmony_ci}
77