Warning, /graphics/arianna/src/content/ui/SearchModel.qml is written in an unsupported language. File is not indexed.
0001 // SPDX-FileCopyrightText: 2022 Carl Schwan <carl@carlschwan.eu> 0002 // SPDX-License-Identifier: LGPL-2.1-only or LGPL-3.0-only or LicenseRef-KDE-Accepted-LGPL 0003 0004 import QtQuick 2.15 0005 0006 ListModel { 0007 id: root 0008 0009 property bool loading: false 0010 0011 signal searchTriggered(text: string) 0012 0013 function search(text) { 0014 loading = false; 0015 searchTriggered(text); 0016 } 0017 0018 function resultFound(query, results) { 0019 clear(); 0020 loading = false; 0021 0022 const markupEscape = text => text ? text.replace(/&/g, "&") 0023 .replace(/</g, "<") 0024 .replace(/>/g, ">") : ''; 0025 const regexEscape = str => str ? str.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&') : ''; 0026 const regex = new RegExp(regexEscape(query), 'ig'); 0027 results.forEach(({ cfi, excerpt, section }) => { 0028 const text = markupEscape(excerpt.trim().replace(/\n/g, ' ')); 0029 const markup = text.replace(regex, `<strong>${regex.exec(text)[0]}</strong>`); 0030 const sectionMarkup = `<span alpha="50%" size="smaller">${ 0031 markupEscape(section)}</span>` 0032 0033 root.append({ 0034 cfi: cfi, 0035 markup: markup, 0036 sectionMarkup: sectionMarkup 0037 }); 0038 }); 0039 } 0040 }