blob: 068f4e0a25e7e9c2e33e2ed9e9e650de003be222 [file]
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
export function findProfileMatches(text: string, search: string): number[] {
const needle = search.trim().toLocaleLowerCase();
if (!needle) return [];
const haystack = text.toLocaleLowerCase();
const matches: number[] = [];
let offset = 0;
while (offset <= haystack.length - needle.length) {
const index = haystack.indexOf(needle, offset);
if (index < 0) break;
matches.push(index);
offset = index + needle.length;
}
return matches;
}
export async function copyProfileText(text: string): Promise<void> {
if (navigator.clipboard?.writeText) {
await navigator.clipboard.writeText(text);
return;
}
const textarea = document.createElement('textarea');
textarea.value = text;
textarea.style.position = 'fixed';
textarea.style.opacity = '0';
document.body.appendChild(textarea);
textarea.select();
const copied = document.execCommand('copy');
textarea.remove();
if (!copied) throw new Error('The browser rejected the copy operation.');
}